返回正文目录

第二十七章备课发现的派生接口边界

后续状态(2026-10-25): 已用下载的 Launcher 0.1.42 实测验收。#164 的基础 / JOIN 计划入口通过;#163 的非空派生参数改为明确拒绝并提供参数路径与替代建议,没有新增派生 calculatedFields 支持。第 26、27 章回归通过,详见复测记录。以下保留 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,SQLite,匿名本地开发测试。模型与源数据没有修改。以下失败都发生在 compose.validate,均未执行。

教材最终采用通过验证的 joined.query({columns: ['ROUND(bill_amount - line_amount, 2) as amount_difference', ...]}) 列内表达式,不依赖下面两种失败写法。

1. 派生查询中的 calculatedFields 未形成输出字段

实际请求快照在已有 JOIN 输出上声明:

const compared = joined.query({
    columns: ['bill_customer_id', 'line_customer_id', 'bill_amount', 'line_amount', 'amount_difference'],
    calculatedFields: [{name: 'amount_difference', expression: 'ROUND(bill_amount - line_amount, 2)'}],
    orderBy: ['bill_customer_id'], limit: 100
});

实际响应:success=false,error.code=COMPOSE_SCRIPT_INVALID、phase=compose.validate、field=amount_difference,提示 derived query references unknown field 'amount_difference' not present in source output schema。诊断为 compose-schema-error/derived-query/unknown-field,safeToAutoRepair=true。

同样的字段依赖与计算,用列内表达式通过 validate、preview 和 execute,返回 47 行,差异均为 0。因此这不是基础字段缺失或金额表达式整体不能使用。

分类待确认: 当前公开 Skill 只明确列出基础 dsl 的 calculatedFields,没有明确承诺派生层等价支持,不能只凭这次失败断言实现违反该 Skill 合同。若派生层设计上不支持,应明确拒绝该参数并提示可用写法;若期望支持,则需补齐计算字段解析。当前“未知字段”没有直接解释入口差异。

实际校验响应。

2. 文档的 dsl({model: prevPlan}) 与 Runtime 不一致

本机文档 DSL 手册第五节将 dsl({model: prevPlan, ...}) 列为公开派生形态。

分别把一个账单基础计划、一个 JOIN 计划作为 model,均校验失败:

两次都返回 COMPOSE_SCRIPT_INVALID、phase=compose.validate、safeToAutoRepair=false;没有使用私有接口、手写 SQL或执行被拒绝计划。

需要对齐的合同: 若 Runtime 的受限 Compose 只支持 prevPlan.query({...}),公开文档应明确宿主/入口区别,并以可操作的参数错误代替 Java 类型转换细节;若承诺 dsl 的 model 接受计划,则需修复该桥接路径。本轮只确认文档形态在此发行包失败,不推断其他宿主也失败。

基础计划响应 · JOIN 计划响应 · 相关运行日志行。

复现方法

在资料项目根目录,以项目固定 CLI 运行上述快照:

$cli = '.\lab\tools\cli\Scripts\foggy-runtime.exe'
& $cli --base-url http://127.0.0.1:18067 --namespace chinook-composition compose validate --script <上述快照路径>

保留校验错误,不执行失败请求。模型清单与环境准备见实操目录,接口探索失败不计入本章 10 项成功执行。

已按用户授权提交

2026-10-24:当前 0.1.39 再次复核后,分别提交 #163(calculatedFields 支持范围及诊断改进,enhancement)与 #164(文档派生入口触发 ClassCastException,bug/documentation),标题、正文与标签均已远端回读核对。

新复核进一步缩小到单 QM 请求,并为 JOIN 计划移除了 calculatedFields 干扰。完整提交正文、请求、响应及关键日志见反馈记录。正文主线继续采用已验证写法。