Repository navigation
修复嵌套 group 的 GroupModel 与 Model 类型兼容报错 #111
Description
普通 group 作为另一个 group 的成员时,编辑器报错:
Type 'ModelCapabilities<{}, "group">' is not assignable to type 'ModelCapabilities<{}, "model">'.
Type '"group"' is not assignable to type '"model"'.
已在主线 686dc94 的 Host Chrome 实际 Monaco Worker 中复现。相同声明和输入使用 Monaco 内置 TypeScript 5.9.3 报错,当前 TypeScript 6.x 和项目 CLI 7.0.2 通过,因此仅用 CLI 类型检查无法覆盖。运行时已有嵌套 group、组合层级和装配语义;.expose({body: ...}) 改变类型结构后可绕过旧编译器的诊断,但不应要求作者如此使用。
用户已认可修复公共模型类型的可赋值性。方案:通用 Model 使用真实 ModelKind 集合,不再使用额外的 model 分类;ModelCapabilities、几何能力及链式返回统一按实际 Kind 表达,ModelForKind 负责分发具体返回类型。删除冗余 ModelFamily / ModelFamilyElementKind,迁移 ModelForFamily 的相关导出和类型测试。group 继续接受 readonly Model[],无需为单个入口扩展特例。类型重构不改变运行时对象、嵌套层级或装配行为。
验收:普通 GroupModel<{}>、空 group、多层嵌套以及与实体/面/边/点混合的 Model[] 无需断言或 expose;通用模型消费者与链式调用保持类型正确,几何能力仍按模型种类限定。补充公开 API 类型测试以及使用 Monaco 实际语言服务的浏览器回归,并复验现有 group 装配测试。
用户于 2026-09-11 明确交接本需求并要求完成提交合并。原 model 会话的 8 文件实现已原样保存为 c2c093a03f4b024d4a0743da9219cef7ea9179bf,原工作区 code3d-issue-111-nested-group-root-0910 clean,原协调身份不变。复用接续会话当前活跃工作区 code3d-issue-62-audience-docs-root-0908(owner audience-docs-root-0908)承接交付,没有新建工作区,也未改动独立进行中的 #125。
在当前 main 基线 51f82acc7bcfa91fc27ec05f6674b0cb5985c08d 上,类型实现为 d0ccf1a,网站说明为 d55207e3442ba3b8daaa570454154afca79542c4。已解决 Core README 重写及方法默认值两处迁移冲突,保留最新文档组织、#106 缓存与 #117 默认值;ModelKind / ModelForKind 方案不变。Core README、网站建模 API 参考和内部建模架构同步说明普通/空/混合/嵌套 group 的通用可赋值性及泛型返回类型。无运行时状态新增,保留模型值语义;不迁移或替换 TypeScript 语言服务。
交付复验通过:全工作区类型检查、全部包构建、22 项 group origin/material 运行时回归,真实 Host Chrome / Monaco TypeScript 5.9.3 的全部 4 项语言服务回归(共享 public-models 类型用例、Unicode、F2 重命名、文件身份/导航),App 与网站生产构建、62 个 HTML/Markdown 页面的链接/锚点/资源检查、9 个改动文件格式及 diff 检查。测试日志:/tmp/code3d-111-delivery-{types,build-packages,runtime,browser,app-build,web-build,format}.log。
已完成本地合并:7ce6059d6f217d8b1437a6a9ebe43657d1973fd4,正文包含 Closes #111;双亲为主线 51f82acc7bcfa91fc27ec05f6674b0cb5985c08d 和交付提交 d55207e3442ba3b8daaa570454154afca79542c4。最终合并树与已验收开发树一致,主区全部包重建、Core 类型检查和 diff 检查通过;生成声明与验收环境一致。2026-09-11 最终合并已随主分支推送进入远端 main cc8090f2dd2bc69ba7a10a8855fc10adbab23ab2,GitHub 已自动关闭,工作状态标签已清理。本次未执行 npm 发布或手工部署。
原实现通过 cherry-pick 转移:原区保存提交 c2c093a03f4b024d4a0743da9219cef7ea9179bf 本身不在 main 祖先链中,其全部实现与测试已在 d0ccf1a 适配最新主线后完整纳入以上合并,网站说明由 d55207e 补齐;原提交没有遗失或待再次合并的范围。原区保留 clean,原 owner/协调身份未被接管。本次复用工作区也 clean。临时验收服务 5180 在成功合并后停止,复用前台 pane w1:p4G 随后关闭;其他会话和 #125 工作保持不动。
Activity