2026-10-25 补验:独立服务复测后,实际教学 18067 也已升级 0.1.42,本章 10 项请求再次复跑通过。当前验收 · 升级记录。派生接口 #163 / #164 的修复合同见原请求复测。以下为 0.1.39 原始实操记录。
2026-10-24。Launcher 0.1.39、项目 CLI 0.1.25,Runtime http://127.0.0.1:18067、Namespace chinook-composition、命名数据源 chinook-composition-sqlite。沿用独立的 data/Chinook.sqlite,匿名本地开发测试,Console/FAP 未启用。
原始账单 TM / QM、明细 TM / QM已在本系列首次准备中校验加载。本轮模型不改,重新检查能力、数据源绑定和两个 QM 的实时 JSON / Markdown。查询只使用公开的客户、业务日期和金额字段。
原始账单一行一张,明细一行一条;两个输入均先按客户 ID 汇总。账单侧 LEFT JOIN 明细侧后保留两个客户标识,差额用 ROUND(bill_amount - line_amount, 2) 按本样例两位小数核对。计算表达式只引用前一阶段的公开列。
正常请求均按 validate → preview → execute,未以手写物理 SQL 代替语义查询。当前写法的 10 项执行全部通过,详见下表。
| 文件 | 预期与实际 |
|---|---|
| 01-bill-aggregates | 年度账单按客户汇总,47 位,477.53 |
| 02-line-aggregates | 年度明细按客户汇总,47 位,477.53 |
| 03-reconcile-customers | 正文完整请求,47 位,每位差额均为 0 |
| 04-amount-differences | 在计算后的阶段筛选差额不为 0,返回空 |
| 05-bills-without-lines | 账单为左侧,按明细客户键为空查未匹配,返回空 |
| 06-lines-without-bills | 明细为左侧,按账单客户键为空查未匹配,返回空 |
| 07-mismatched-period-all | 故意让账单取全年、明细只取十一月;保留账单侧 47 位,7 位匹配、40 位未匹配 |
| 08-mismatched-period-differences | 同一期间错配变体,仅返回 5 位已匹配且差额不为 0 的客户 |
| 09-mismatched-period-missing | 同一变体,返回 40 位明细未匹配客户;差额和明细金额保持空,不补零 |
| 10-reverse-period-missing | 反向边界:账单取十一月、明细取全年,以明细为左侧,返回 40 位账单未匹配客户 |
期间错配只改变查询参数,没有增加、删除或修改原始记录。它用来验证 NULL、差异筛选与左右方向,也说明请求合法不等于两侧业务口径已经一致;不能把这些结果说成 Chinook 原数据出现了金额问题。
只读取得 Invoice 原始行与 InvoiceLine 原始行,在 Python 中通过 InvoiceId 获取明细所属客户和账单日期,用 Decimal 分别累计,再构造预期的匹配、缺失和差异结果。没有把引擎生成的 JOIN SQL 当作独立答案。
每个客户的输入键唯一,两侧原始字段、金额、空值、顺序和差额均逐项核对;原库、基础篇模型、本系列模型与数据库摘要不变。主请求返回 47 行,小于显式 limit 100,未截断本例范围。
本轮另保留派生接口发现:派生层 calculatedFields 未形成可选字段,文档的 dsl({model: prevPlan}) 在受限 Runtime 入口出现类型转换错误。它们与上方通过的列内表达式写法分开记录;失败请求只校验,没有执行。用户后续授权提交,已分别登记 #163 与 #164,详见提交与复核记录。
在资料项目根目录运行:
python lab/checks/verify-chapter27-reconciliation.py
阶段和边界请求由正文主脚本构造,每轮另存原始响应、预览 SQL/参数、命令与退出码、结果及脚本摘要。
最新执行目录 · 验收。本次由当前 Codex 会话通过公开 CLI 执行,没有另开干净 AI 会话只凭正文提示词验收;未测试其他数据库、生产权限或本章以外的组合。