Layer/Group 扁平声明在 View 定义下,精灵只写 id、所属关系写在注释里; 一个 View 对应一个 UI 组件,拿到 View 即拿到它的全部精灵与图层群组。 SpriteIndex 的展平逻辑随之调整:保留键 Layer*/Group* 跳过,其余键即精灵; 新增「值非数字即报错」——两者结构上同级、只靠键名区分,写错前缀会静默变成假精灵。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
实际是 17 个 test_*.js(624 checks),原文写的 20 把 _assert/_rpc/_shim 也数进去了。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
14 个任务,每个自带 TDD 循环与提交:shared 抽取与同步(1-2)、 单测框架与漂移守卫(3)、core 四个纯逻辑模块(4-7)、布局求解器(8)、 常量层三批(9/10/12)、精灵索引(11)、常量机械守卫(13)、接入骨架(14)。 顺带修订设计文档两处:shared 抽取函数数量 7→8(原文列了 8 个名字), CardMark.markOf 签名与计划对齐(拖拉机判定需整手牌作上下文)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>