日期: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 发行版本。
迁移步骤:
wait-ready 后检查 capabilities、绑定、连接、Bundle、三个 QM 的实时说明。核对新 PID 的命令行确实指向 0.1.25 JAR,且监听 PID 相同。迁移入口 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。
1E-12,只在展示时舍入。服务已启动时,在 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 多次生成对比。当前第十一章更新后待用户审阅,第十二章未开始。