返回正文目录

Launcher 0.1.36 预发布版:#155 复测

2026-10-22。结论:#155 的原始模型在 0.1.36 上复测通过。 普通属性的显式时间角色与用途不再丢失;日期自维度的 JSON/Markdown 也一致。本次为下载发行包的独立实测,不是引用发布说明作为通过依据。

安装与实际进程

项目 实际值
Release Launcher 0.1.36(prerelease)
Source commit 09e8ac85d7ed31c1df5a6c8ed2066e84818c3059
JAR SHA256 de54f48ce6164fb557a4a667607d84da4c0898e2cb822c30abe98c0763205dc3
资源目录 lab/releases/launcher-0.1.36,6 个附件均按 GitHub digest 校验,其中 5 个同时核对 SHA256SUMS;JAR 与 manifest 一致
启动 阅读包内 README,原样调用发行脚本,-Port 18136 -WorkDir <独立目录>
实际监听 PID 103580,核对与脚本返回一致,进程命令确实使用上述 0.1.36 JAR
Runtime / CLI http://127.0.0.1:18136 / 已安装正式 CLI 0.1.25
API / 安全模式 Java,foggy-runtime-api/v1,schema 2026-06-06,none-dev-test-only
默认功能 lite,Console/FAP 未启用

启动时就绪检查在约 9 秒后成功;之前两次为服务尚未监听时的连接拒绝,未改启动脚本或重启重试。随后再次 wait-ready 与 capabilities 成功,响应保存在证据目录。

原始复现步骤

  1. 从 #155 本地保存的原始 TM/QM 复制,逐段核对与已发布 issue 的 JavaScript 代码一致;一行 SQLite 文件也按字节复制、核对摘要,未改原件。
  2. 在独立 Runtime 注册 SQLite 并绑定原 namespace 名 time-role-repro-035;这里只改变 Runtime 端口,保留原模型、字段名和显式注解。
  3. tables inspect 确认表,再 models validate,登记 Bundle、刷新、实时读取 JSON 和 Markdown。
  4. 再刷新一次,重复读取,核对角色、用途及完整字段元数据保持一致。

公开 CLI 命令顺序、完整响应和模型副本由复测脚本保存;不会运行旧 0.1.35 脚本中“断言错误仍然存在”的逻辑。

预期与实际

下表的角色和 recommendedUse 均在 JSON 与 Markdown 中逐项断言一致:

字段 配置与 0.1.36 实际角色 0.1.36 实际用途 0.1.35 原现象
businessAt business_date business_axis_control 角色碰巧正确,但用途丢失
loadedAt system_time technical_ingestion_only 错误推断为 business_date,用途丢失
createdAt business_date explicit_business_axis 错误推断为 system_time,用途丢失
loadedTime$id system_time technical_ingestion_dimension_only Markdown 正确,JSON 缺少角色与用途

未再次复现 #155。 修复不依赖表中存在数据,空表也返回相同的显式时间元数据。

补充验证

共 6 组元数据场景、4 项预期校验拒绝、5 项日期查询:

非法注解的公开响应为 MODEL_VALIDATE_FAILED / models.validate。具体诊断在 diagnostics.attributes.validation.errors[].message,例如:

INVALID_TIME_METADATA: TimeRoleProbeModel.properties[2](../notes/a9bf46bf6928.md).timeRole must be a string or null; use a semantic role label for timeRole and explanatory text for recommendedUse (received Integer)

自维度错误也定位到 TimeRoleProbeModel.dimensions[0](../notes/e6f35675a606.md)。这里验证的是 models validate 的候选校验入口,没有绕过失败校验强行加载或执行无效模型。

文件、日志与复跑

复跑时先确认 18136 空闲,按发行脚本选择新的独立工作目录启动,并重新记录本轮 PID/JAR 身份到 runtime-identity.json,再运行 python lab/checks/retest-time-role-0.1.36.py。脚本每次创建独立时间戳证据,但数据源名与 Bundle 名固定;若复用已有测试进程,需要先确认其注册状态,不能直接反复添加同名对象。旧复现和旧验收证据全部保留。

收尾与范围

临时 PID 103580 经进程身份核对后已停止,18136 释放,见收尾记录。原教学服务仍为 18067 / PID 150796 / Launcher 0.1.35,capabilities 正常;未切换默认启动入口。原 issue 模型、数据库、Chinook 和第十八章模型文件摘要均未改变。

本次没有执行跨数据库、完整时间分析、生产权限或 Console 的整包验收,也没有向 GitHub 追加评论或关闭 issue。第十八章仍保留其 0.1.35 的实际模型与验证语境;如后续采用 0.1.36,可再决定是否改回普通属性写法。