返回正文目录

第十一章更新:0.1.25 教学环境与验证

日期:2026-10-20。正文:按时间分析。本记录接续初轮实操和#139–#142 发行包复测,旧记录与原始失败证据保留。

教学环境已切换

项目 当前值
服务 / PID http://127.0.0.1:18067 / 92156,本轮结束时保持运行
Launcher / CLI 0.1.25 / 0.1.24,公开发行文件,无源码构建
Java / Python 17.0.12 / 3.11.5
引擎 / API / schema Java,foggy-runtime-api/v1,2026-06-06
安全 / Console / FAP loopback,none-dev-test-only,匿名查询;Console/FAP 未启用
Namespace / 数据源 chinook / chinook-sqlite
练习数据 lab/data/Chinook_Sqlite.sqlite,未改动
工作 / 模型目录 lab/runtime/work / lab/models,沿用原绑定和 chinook-teaching Bundle
当前启动入口 start-runtime.ps1,调用发行包原始脚本

安装文件在 lab/releases/launcher-0.1.25,来自官方 Release。安装时已核对 README、启动脚本、SHA256SUMS 与 GitHub asset digests,本轮再次核对 JAR 哈希:b3fe4b6a3189132363b59ba16c143ef6ddab2fd7886ef0d7e7c0838fef1c350a。源码标识为 db5db39aa36dc30b51d9db7d941e333c8d39e0d2;内部 Java 版本 9.3.0-SNAPSHOT 不能代替 Launcher 发行版本。

迁移步骤:

  1. 核对 18067 的监听 PID、0.1.24 JAR 路径与教学工作目录,确认是本项目进程后停止 PID 86344。
  2. 归档旧运行日志和两个注册文件,记录六个模型、数据库、注册文件的哈希。
  3. 按发行包原脚本启动 0.1.25,仍使用 18067 和原工作目录。没有重复注册数据源或 Bundle,也没有重新生成模型。
  4. wait-ready 后检查 capabilities、绑定、连接、Bundle、三个 QM 的实时说明。核对新 PID 的命令行确实指向 0.1.25 JAR,且监听 PID 相同。
  5. 用公开 CLI 对每个查询的同一 payload 先校验再执行;错误用例校验拒绝后不执行。最后独立核对结果和受保护文件哈希。

迁移入口 upgrade-teaching-launcher-0.1.25.ps1为本次一次性操作,已有记录时拒绝再次迁移。日常恢复只用 lab/start-runtime.ps1;端口占用时脚本会停止,不接管其他进程。停止当前教学服务前也需核对最新启动记录和实际进程。

原 lab/runtime 下的 0.1.24 发行文件保留作历史复跑依据;当前入口使用 lab/releases/launcher-0.1.25。第六章准备脚本仍固定下载旧组合,不能将其输出当作当前服务版本。新机器需先按上述 Release 下载六个资产到此目录并校验,再运行当前启动入口。

本轮检查

用例 预期与实际结果
月度汇总 十二个月金额、张数逐项一致,合计 477.53、83 张
十月、十一月环比 十月读取九月 46.71;十一月 37.62 对比十月 42.62,差额 −5.00、比例约 −0.1173158142
跨年环比 展示 2011-12 与 2012-01;一月上期为十二月,两期均 37.62,差额和比例为 0
两个月同比 展示 2012-10、11,与 2011 年同月比较;十一月上期 23.76、差额 13.86、比例约 0.5833333333
无上年记录 2009 年各月有本期金额,缺少 2008 年上期;上期、差额、比例字段为空或省略,不能解释为 0
空期间 1990 年返回 [],未凭空补月份
LAG 汇总别名 lag(totalAmount, 1) 对十二个月逐项正确;第一行为空,不额外读取 2011 年十二月
LAG 后续计算 上一行、差额、比例逐月一致;十一月差额 −5.00、比例约 −0.1173158142
错误嵌套聚合 lag(sum(invoiceAmount), 1) 校验拒绝,未执行
原账单查询回归 477.53、83 张,固定均额为 477.53 ÷ 83,与第十章一致
原明细查询回归 447 条、数量 447、金额 477.53,与第八章一致

合计 11 项检查:10 项正确执行、1 项预期校验拒绝。比较查询的编译结果也确认包含当前期与上期的日期条件、四个参数。当前模型、数据与注册文件哈希未变。

错误诊断包含 WINDOW_NESTED_AGGREGATE_UNSUPPORTED、phase=query.validate、field=previousAmount、path=calculatedFields[0].expression,建议先给汇总列起别名再传给 LAG。建议的别名写法已在另一用例中验证。没有绕过校验执行错误请求。

首次 explain 未启用物理名称展示,因此没有 finalPhysicalSql,独立验证脚本在此停止。随后仅补跑带 --include-physical-names 的 explain,取得 SQL 后核对通过;没有为此重复执行数据查询。原响应仍保留。这是证据采集选项问题,没有新增引擎缺陷。

证据与复跑

本轮证据:evidence/chapter-11-0.1.25。

服务已启动时,在 lab 目录执行:

python -X utf8 .\checks\collect-chapter-11-0.1.25.py
python -X utf8 .\checks\verify-chapter-11-0.1.25.py

采集脚本时间戳保存响应,当前清单指向最近一轮;只读核对可单独运行第二条。旧五项验收仍在 evidence/chapter-11,不要用其摘要判断当前窗口能力。

本章正文将期间计算交给引擎,Decimal 仅作独立核对。模型创建与查询分步,实时 Markdown 由引擎从加载的代码生成。本轮没有修改 TM/QM,所以不重复进行模型目录校验或卸载注册。

验证范围为 SQLite/Chinook。没有人工构造缺月或零上期样例,没有重跑前面各章全部题库、其他数据库、生产权限或 Console/FAP;没有另开干净 Codex 会话只发送短提示词,也没有执行用户暂缓的 Text-to-SQL 多次生成对比。当前第十一章更新后待用户审阅,第十二章未开始。