返回正文目录

派生接口复测:Launcher 0.1.42

2026-10-25,当前 Codex 会话使用公开 CLI 0.1.25 实测。发行版的五项 SHA256SUMS 全部匹配;按原始 README 和 PowerShell 启动脚本运行,实际 PID 60932 的命令行指向下载的 0.1.42 JAR。源码提交 a35722565a36a1aec18d3dbba32ef8faa87dbe31,JAR SHA256 51937008ec05283631ff4c88222e5489fa4ce960c7ff270370110b84495cce44。

本次独立测试地址 http://127.0.0.1:18068,Namespace chinook-composition,数据源 chinook-composition-sqlite。通过公开 CLI 注册现有教学模型和 Chinook SQLite 数据;匿名开发测试,Console/FAP 关闭。旧 18067 教学服务与 0.1.39 证据保留,默认启动脚本没有切换版本。本次临时服务验收后停止。

结果

范围 实际结果
#164 原始基础计划请求 dsl({model: bills}) 校验、预览、执行通过,47 位客户、477.53;与 bills.query(...) 逐字段一致
#164 原始 JOIN 计划请求 dsl({model: joined}) 三步通过,47 行、每位客户金额差额为 0;不再出现 ClassCastException
#164 派生计划与新别名 先计算 double_amount,再通过 dsl({model: doubled}) 筛选大于 20,得到 20 位客户,与原始行 Decimal 核对一致
#163 原始单 QM / JOIN 请求 非空派生 calculatedFields 明确拒绝,指向具体参数路径;不再误报新计算列是来源缺失字段
#163 三种派生入口 .query()、dsl({model: plan})、旧 source 中,非空 calculatedFields / having 均拒绝,null / [] 均通过
第 26 章回归 5 项通过,47 → 20 → 20 位;LEFT JOIN 保留 59 位客户,空结果仍为空
第 27 章回归 10 项通过,正常两侧均 47 位、477.53;期间错配仍为 5 位金额差异、40 位未匹配,反向未匹配同为 40 位

合计 26 项成功执行、8 项预期校验拒绝。正常请求均先 validate、再 preview、再 execute;被拒绝的请求均未执行。原始模型、数据副本及基础篇文件摘要不变。原始问题请求逐字复用,不以改写后的正常请求冒充修复验证。

错误合同

本次 #163 是明确支持边界与改进诊断,没有新增派生 calculatedFields 能力。实际顶层 error.code 仍为 COMPOSE_SCRIPT_INVALID,细分诊断 diagnostics.attributes.composeErrorCode=DERIVED_PARAMETER_UNSUPPORTED,内部阶段 plan-build。同时返回 error.path(例如 query.calculatedFields)、参数名、safeToAutoRepair=false 及替代建议:在 columns 使用表达式与 AS,筛选新别名时再增加一层 .query()。

基础 QM 的 calculatedFields 与派生层不同,本次没有将派生层限制扩展为基础层限制。第 27 章原有列内表达式写法继续适用。

服务日志中的 ComposeParameterException 对应主动提交的不支持参数校验,不是成功查询失败;本轮未出现 ClassCastException。首次自动断言误将细分诊断当成顶层错误码,已按实际双层合同修正后复跑,未改引擎或请求语义。

证据与复跑

验收汇总 · 进程核验 · 发行包摘要 · 实际命令及退出码 · 请求目录 · 运行日志。各请求的 validate / preview / execute 原始 JSON 同存证据目录,旧版证据没有覆盖。

复跑脚本为 recheck-derived-interfaces-0.1.42.py,需先按本次发行包启动脚本在 18068 启动独立服务,再于资料项目根目录执行 python -X utf8 lab/checks/recheck-derived-interfaces-0.1.42.py。仅在该临时服务中注册教学资源;未另开干净 AI 会话、未验证其他数据库或生产权限,也未向 GitHub 追加评论。