2026-10-25 补验:实际教学端口已升级 0.1.42,本章 5 项执行及 1 项预期拒绝全部复跑通过。当前验收 · 升级记录。以下保留 0.1.39 原始实操与证据。
2026-10-24。Launcher 0.1.39、项目内 CLI 0.1.25,运行于 http://127.0.0.1:18067,Namespace chinook-composition,数据源 chinook-composition-sqlite,SQLite 文件 data/Chinook.sqlite。匿名本地开发测试;Console/FAP 未启用,未修改或重启 Runtime。
本章沿用系列首次准备的独立 Bundle,未新增 TM/QM。实际监听 PID 133260 仍为已核对的 0.1.39 JAR。版本与实际进程记录在接入目录指向的 identity.json、actual-process-and-environment.json。
本轮重新读取 capabilities、数据源绑定、账单与客户目录 QM 的实时 JSON / Markdown,确认使用的字段存在。元数据来自运行代码,不是教材提前生成的模型说明。
脚本保存在 queries/chapter-26。各正常请求均先 validate、再 preview、最后 execute;阶段探针是为了独立核对每一步,不要求真实分析每次都把所有阶段执行一遍。
| 文件 | 预期 | 实际 |
|---|---|---|
| 01-invoice-totals | 2012 年按客户汇总 | 47 位有账单客户,83 张账单,合计 477.53 |
| 02-qualified-customers | 对汇总金额筛选至少为 10 | 20 位客户,合计 344.84 |
| 03-qualified-with-names | 入选客户关联目录姓名 | 20 位客户,逐 ID、姓名及金额一致;正文使用本文件完整源码 |
| 04-all-customers-left | 以目录为左侧保留全部客户,不加金额门槛 | 59 位,其中 47 位有账单、12 位未匹配;未匹配字段省略 |
| 05-empty-selection | 完整链路把金额门槛改为 1000 | 正常返回空列表,不修改请求以凑出结果 |
| invalid-stage-field | 后续选择未输出的 invoiceDate,应拒绝 | compose.validate 返回 COMPOSE_SCRIPT_INVALID,field=invoiceDate;诊断为 derived-query/unknown-field,未执行 |
主请求预览 SQL 包含客户汇总与金额筛选的派生查询、目录 CTE、INNER JOIN 和最终投影;日期与门槛为绑定参数。脚本变量是逻辑计划,未通过 AI 手抄客户 ID 组织关联。没有据此断言数据库一定物化中间结果。
核对脚本只读原始 Customer / Invoice 行,在 Python 中按业务日期筛选,以 Decimal 累计金额,再比较阶段客户集合、顺序、名称和金额;不使用同一段生成 SQL 作为标准答案。
共 5 项执行、1 项预期拒绝通过。原始数据库、基础篇模型及本系列模型/数据库摘要核对未变。本轮未发现新的引擎 BUG,没有提交 GitHub issue。
在资料项目根目录运行:
python lab/checks/verify-chapter26-compose.py
使用固定 CLI 及 UTF-8 子进程环境,另存每轮证据,不覆盖旧版验收。主脚本需保持正文与文件一致;其他阶段探针由核对脚本从主脚本构造,故意无效用例只校验。
最新目录 · 本章验收。轮次目录保留命令、退出码、原始响应、预览 SQL 与参数、查询结果和脚本摘要。
本次实际由当前 Codex 会话通过公开 CLI 执行,并非另开干净 AI 会话仅凭教材提示词验收。未扩展到其他数据库、生产身份、UNION、多源或未使用的 Compose 组合。