Skip to content

迁移到 Calcit 0.30.0,收紧真实输入边界并保留布局协议 - #3

Merged
tiye merged 4 commits into
mainfrom
migrate/edn-renderer-option-0300
Oct 15, 2026
Merged

tiye merged 4 commits into
mainfrom
migrate/edn-renderer-option-0300

Conversation

@tiye

@tiye tiye commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

用户需要注意的影响

  • 前端构建要求正式版 Calcit / @calcit/procs 0.30.0 配对,以及 Node 24 / Yarn 4.18.0。0.30.1 正式 release 当前仍未发布,不使用 alpha 或提交 hash 替代。
  • relay 协议、布局 DSL、浏览器缓存表示及原有后端/报告存储路径不变;旧 Map 查询的 nil、false、默认值行为保留。非法字段类型会在实际输入边界更早失败;card 标题非 String/nil 时明确拒绝。
  • 暂缓合并发布:完整 calcit fix --workflow strict --verify 仍失败。当前报告只有正式 Reel 0.6.36 的 reel.core/reel-updater / reel.comp.records/comp-records List 输入证明诊断,项目 source-fix 建议为空;这并不证明所有被上游阻断的路径都已通过,须待上游修复后完整重跑。
  • PR 只安装、检查、构建,不上传 COS、不 rsync、不触发生产部署。

修改内容

  • 211 处旧 Map 底层读取迁移到公开 get / get-in 的 Option 返回;更新 Ref、watcher、non-nil?、nil->option 和显示转换写法,逐处保留原求值与缺失语义。
  • 将 LayoutNode 定义规范为顶层 defenum,校正 EnumDef / StructDef 元数据;图表构建器使用一个私有 ChartDatum,序列化数据不引入该 Struct。
  • 在 WebSocket 帧、请求 ID、存储回包、布局 DSL、开放状态字段等真实边界使用受检解码;在已有字符串/List 分支利用实际缩窄,减少重复 getter 与无证明断言。没有全量替换 assert-type,没有新增 compiler fix 规则。
  • 使用现有 Respo update-state-tree,由应用 assoc 保留已知 store Map 类型;不修改依赖公共契约,不包一层只为通过门禁的返回断言。
  • DOM/effect 参数在实际宿主边界处理;获取挂载元素仍在初始化时执行一次,不给真实 DOM 伪造 Respo 内部字段。
  • 依赖改为已发布正式 tag;不提交 js-out,不引入 concurrently 或新的常驻验证脚本。COS 仅使用 action 自带 public-base-url 校验,原服务器目录和 Actions SHA pin 保持不变。
  • CI 使用当前公开 namespace 检查命令,并运行仓库已有 channel-cache 测试。

已执行的验证

  • 基线:从原项目固定的官方 0.27.0 tag 本地构建 macOS CLI,配对原 procs 和原模块 tag。原入口、五个公开 namespace 106/106、JS 生成、已有 channel-cache、Vite 构建通过。附带测试数量为 0,不称作“测试套件通过”。
  • 当前 0.30.0 配对:入口 291/291,五个公开 namespace 107/107 complete;immutable 安装、格式无变动、diff check、JS 生成、Vite 生产构建通过。入口计数减少一项源于改用 state-tree API 后旧 update-states 不再可达,公开定义新增 ChartDatum。
  • 以原结果比较:54 组图表参数、24 组布局成功/错误结果、14 步状态快照一致;已有 channel-cache 测试通过。探针只保存在本地忽略目录,没有加入仓库或 CI。
  • 真实隔离浏览器 + 本机 relay:最新代码的原有四步 snapshot-smoke 通过(混合布局、根/子树快照、MathML);刷新后缓存 MathML 正常恢复,无 error 级控制台日志。未验证 Save 写入实际报告存储。
  • 保留原 ECharts 初始尺寸 warning 和 Vite 大 chunk warning,不将它们描述成已修复。

风险与未完成项

  • program-diff 判定为 semantic-change,涉及可执行表达式、类型契约和 namespace 配置,不是纯格式 PR。
  • 实验曾发现直接用名义 LayoutNode 解码器替换缓存枚举断言会拒绝 Cirru EDN 恢复值,已撤回该实验并保留缓存兼容;没有把这项实验计为通过。
  • formatter 仍报告开放 Dynamic/type-slot 债务;普通检查和 green CI 都不能替代完整严格门禁,也不构成合并/发版授权。
  • 本地使用已核验正式 tag 的只读依赖来源;干净依赖解析和 toolchain 配对由本 PR Actions 再验证。

当前 Actions 结果

  • 运行 38764229858 已在提交 ac84b2d7d009c4e270eb09eeb724b47eb8de6ae1 成功完成:干净 Caps 安装、immutable、CLI/procs 0.30.0 配对、格式、公开定义 107/107、构建及已有 channel-cache 测试均通过。
  • COS 上传、rsync 和生产步骤全部 skipped;本次没有上传/校验生产资源的证据,不把 skipped 称作验证通过。
  • 最新浏览器回归还确认关闭 Library 后可打开 History 并显示真实消息详情;抽屉遮罩打开时不把被遮挡的页面按钮点击当作功能失败。
  • 绿色 CI 仍不撤销上文的完整严格门禁阻断,不合并、不发版。

@tiye
tiye merged commit ec33028 into main Oct 15, 2026
1 check passed
@tiye
tiye deleted the migrate/edn-renderer-option-0300 branch October 15, 2026 17:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant