返回正文目录

Compose / CTE 系列备课实测

2026-10-25 更新:教学服务现为 Launcher 0.1.42 / CLI 0.1.25、18067,实际 PID 93792;七个原绑定保留。升级与回归已完成,第 26 章 5 项执行 / 1 项拒绝、第 27 章 10 项执行通过,第 28 章新增 10 项执行通过。当前结果位于 ../evidence/composition-0.1.42/。以下先保留 0.1.39 首次备课过程与计数。

2026-10-24。Launcher 0.1.39、项目内 CLI 0.1.25,Windows、Java 17、SQLite。当前复用 http://127.0.0.1:18067,Namespace chinook-composition、命名数据源 chinook-composition-sqlite、Bundle chinook-composition-teaching;匿名本地开发测试,Console/FAP 未启用。

进程 PID 133260 的命令行已核对指向 lab/releases/launcher-0.1.39/foggy-runtime-launcher-0.1.39.jar;JAR SHA256 为 8228d31c104d58b1b2f1d1c5bc856a25531e4d5af06e1e9eefed2be576f20bf9。不以 API schemaVersion 代替发行版本识别。

原 Chinook 通过 SQLite backup 复制为 data/Chinook.sqlite,不增加人工事实。三个 TM、三个 QM 复用已确认语义定义,字典文件另用独立字典 ID,避免覆盖原注册。完整来源摘要在 fixture.json。原模型和数据库摘要核对未变。

本轮步骤

  1. 核对能力与发行身份,注册独立数据源并绑定新 Namespace。
  2. inspect Customer、Invoice、InvoiceLine、Track、Genre、Album、Artist;复制已有模型,校验、注册 Bundle、逐模型刷新。
  3. 获取三个 QM 的实时 JSON 与 Markdown,确认源字段;未手工生成查询元数据。
  4. 逐脚本 validate → preview → execute;无效关联键只校验,不执行。
  5. 用原始客户、账单和明细行及 Decimal 独立核对,不用旧版响应代替当前实际执行。

CLI 使用 lab/tools/cli/Scripts/foggy-runtime.exe。本机全局命令当前为 0.1.23,本轮未用它做验收;子进程显式固定 PYTHONUTF8=1 与 PYTHONIOENCODING=utf-8,避免管道输出编码影响中文元数据。

预期与实际

请求 预期 0.1.39 实际
阶段结果再筛选 按客户汇总,再保留金额至少为 10 的客户 20 位,与原始账单一致
客户 LEFT JOIN 账单 保留当期无账单客户 95 行:83 张账单+12 位未匹配客户
账单先汇总再关联客户 一行一客户 59 行,账单总额 477.53
两侧分别汇总再关联 按客户核对账单与明细金额 47 行,各客户一致,明细数量合计 447
无效右侧关联键 校验拒绝,指出缺失列 COMPOSE_SCRIPT_INVALID,compose.validate;包含字段、路径和 availableFields,未执行
客户输入 limit 5 仅客户 1—5 实际 5 行,预览中输入 CTE 保留 LIMIT 5
基础输入 Top3 后关联账单 先选三位客户,再返回其全部当期账单 客户 26、34、13,共 7 张账单
派生阶段 Top3 后关联账单 与上一形状一致 同为三位客户、7 张账单,派生 CTE 保留 LIMIT 3

共 7 项实际执行和 1 项预期校验拒绝,本轮无新增失败。#150、#151 的旧复现未再出现;原 0.1.30 失败记录不改写。没有提交新 GitHub issue,也没有代替维护者关闭或评论旧 issue。

复跑与证据

首次准备(已有教学副本时仅允许与登记源码一致,不覆盖自定义模型):

python lab/checks/prepare-composition-0.1.39.py

已有环境只读复跑:

python lab/checks/verify-composition-0.1.39.py

接入证据 · 查询证据 · 当前验收。各轮目录保留命令、退出码、实际请求脚本、实时元数据、校验响应、预览 SQL/参数和执行响应。

边界

这里只是系列开写前的最小实测,不代表 UNION、多源、生产权限、多结果计划及所有 Compose 组合已通过。未另开干净 AI 会话仅凭教材提示词验收。阶段计划不等于把所有中间数据下载到 AI,也不承诺 CTE 必然物化。

当前没有修改或重启 Runtime;独立 Bundle 与数据源保留给后续章节。第二十六章现已补齐筛选后带客户名称的完整组合,见下节;后续差异列或内容分类仍需在各章最终选例时验证。

第二十六章完整请求与阶段核对

已完成Compose 与 CTE 入门实操:5 项执行和 1 项预期校验拒绝通过,正文实际使用的“年度汇总 → 金额筛选 → 关联姓名”得到 20 位客户 / 344.84。完整目录保留 59 位、无当期账单 12 位,空结果与阶段字段边界也已核对。

复跑为 python lab/checks/verify-chapter26-compose.py;计数与上方开写前最小验证分开保存,不将两轮计数相加当作新增能力。

第二十七章聚合后关联

本章实操已完成 10 项执行:两个 QM 分别按客户汇总,再关联计算差额、筛选差异与检查双向未匹配;另通过故意改变一个输入期间验证非空的差异与缺失结果。主例两侧均为 47 位客户 / 477.53,数据和模型不变。

复跑为 python lab/checks/verify-chapter27-reconciliation.py。0.1.39 的派生接口失败只校验,没有执行,不混入本章计数。后续已在 0.1.42 复测:计划对象 model 入口可用,不支持的派生参数明确拒绝。

第二十八章先圈选,再分析

本章实操已完成 10 项执行:先按 2012 年金额选前三客户,再返回其 7 张账单、75.36;改查 2013 年时保留圈选依据,返回 1 张账单、8.91。最终截断、LEFT JOIN、空集与基础输入 TopN 另验。复跑为 python -X utf8 lab/checks/verify-chapter28-selection.py。

首次准备与备课验证的脚本文件名仍保留 0.1.39,运行时已改为读取当前 composition_support.py 的版本及对应发行 manifest,证据按版本分目录;不将新的运行结果写回旧版验收。