2026-10-23。两个原问题在本轮均未复现:原请求现可执行且结果正确,无效连接键和日期函数参数在校验阶段拒绝。共 53 项执行结果核对通过、8 项预期校验拒绝,没有执行被拒绝的输入。
d90563e1ea2f056f5836519f21c1b58d618275fc。ae45d53ec3930f1229aaf0b963c3e750f0cade8c7901ceb88befd48c41068722。六个资产均比对 GitHub asset digest,SHA256SUMS 的五项也通过。start-foggy-runtime.ps1 启动于 http://127.0.0.1:18137,PID 72616。监听进程命令行核实实际加载 0.1.37 JAR,不仅检查下载文件名。engine=java,runtimeApiVersion=foggy-runtime-api/v1,schemaVersion=2026-06-06,securityMode=none-dev-test-only;Console/FAP 保持关闭。lab/releases/launcher-0.1.37/work-issues156-157,复制教学注册信息,沿用同一组 SQLite 数据及 TM/QM,不修改样例或模型去适应新版本。主要 Namespace 为 time-business,回归另用 chinook;chinook-calendar 校验及实时元数据也已检查。本轮只是独立发行包复测。原 18067 日常启动入口仍指向 0.1.36;其启动记录、注册文件、三个教学数据库及原模型哈希均未改变。临时服务复测后已停止,18137 已释放。
原脚本逐字复用,仍是“按对象求 MAX 日期 → 关联对应记录并投影 → 作为目录 LEFT JOIN 右侧”。每次 validate 后再 preview、execute:
| 原场景 | 0.1.36 | 0.1.37 实际结果 |
|---|---|---|
| 截至 1 月 4 日日末 | 校验成功,执行缺 last_date |
A=80、B=40、C=30,D 保留空;实际记录日正确 |
| 截至 1 月 5 日日末 | 同类缺列 | A=120、B=40、C=30,D 保留空 |
| 截止前完全没有历史 | 同类缺列 | 四个目录对象均保留,日期与库存均为空 |
三个结果与 SQLite 原始行按对象逐一核对。预览 SQL 现在包含嵌套右侧实际输出列,不再仅保留目录列。原先可用的基础右侧、派生右侧、内层独立执行及两个命名输出方案也回归通过。
另有 3 项拒绝:左连接键不存在、右连接键不存在、键未从右侧前阶段投影。均在 compose.validate 返回 COMPOSE_SCRIPT_INVALID,明确指出 JoinPlan.on[0].left/right 和该侧实际输出列,未进入执行。
原工单 1/2/3 的输入不变:
| 原表达式 | 0.1.36 | 0.1.37 实际结果 |
|---|---|---|
DATEDIFF(finishedAt, startedAt) |
校验成功,SQLite 报函数不存在 | 0、1、1 天 |
TIMESTAMPDIFF('HOUR', startedAt, finishedAt) |
校验成功,SQLite 报函数不存在 | 2、12、24 小时 |
本版的语义需分清:DATEDIFF(end,start) 是日历日期差;TIMESTAMPDIFF(unit,start,end) 是有符号的完整单位,向零截断,不等于保留小数的自然小时。
补测通过:
HOUR 和字符串 'HOUR' 均取得 2/12/24。datetime 独立核对,包含 NULL 和结束早于开始的负差。4 项日期函数错误在 query.validate 被拒绝:
| 输入问题 | 错误码 |
|---|---|
非法单位 FORTNIGHT |
DATE_FUNCTION_UNIT_INVALID |
SQLite 不支持的 MICROSECOND |
DATE_FUNCTION_UNIT_UNSUPPORTED |
| DATEDIFF 参数数量不对 | DATE_FUNCTION_ARITY_INVALID |
| 用字段表达式代替字面量单位 | DATE_FUNCTION_UNIT_INVALID |
均有 path=calculatedFields[0].expression、field=badDate、phase=query.validate 和建议签名/方言说明。日期错误的 safeToAutoRepair=false,因此保留诊断、不自动执行修复猜测。没有把这些预期拒绝计为运行失败。
| 范围 | 执行通过 |
|---|---|
| 0.1.36 已验证的库存、耗时、同期群及滚动聚合器原输入,结果逐项比对 | 42 |
| #156 原失败场景 | 3 |
| #157 原失败请求 | 2 |
| 新增日期查询:全工单、裸单位、单位边界 | 3 |
| 原环比、YTD、LAG 代表回归 | 3 |
| 合计 | 53 |
8 项校验拒绝 = 3 项 JOIN + 4 项日期参数 + 1 项旧的不存在字段请求,均未执行。42 项旧值沿用已独立验收基线比对;原失败的 5 项另外按原始快照行 / datetime 重新核对,不只检查 success=true。
没有更改教学模型、数据、默认启动版本或引擎源码,也没有操作远端 issue。结论仅覆盖此批 SQLite 场景,不代替多数据库或全部组合路径验收。第十九、二十章正文尚未改成新版本教程,0.1.36 失败记录保留历史语境。
运行目录 20261023-002851-771608 保留:release 与两个关闭 issue 的读回、六资产校验、启动与 PID 身份、capabilities、模型校验/实时 JSON/Markdown、复制的原始输入、validate/preview/execute 响应、commands.jsonl、原数据/模型/教学入口前后哈希,以及独立运行日志与清理记录。
已下载并准备独立工作目录后,复测脚本为:
python lab/checks/retest-launcher-0.1.37.py
重跑前需按发行启动脚本在同一独立端口启动 0.1.37;服务当前已停止。prepare-launcher-0.1.37-retest.py 为首次准备入口,已有测试工作目录时明确拒绝覆盖。原 0.1.36 脚本仍按旧版期望断言失败,不应用来验收新版本。