Skip to content

修复嵌套 group 的 GroupModel 与 Model 类型兼容报错 #111

Closed

Description

@vilicvane

普通 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

  1. added
    bugSomething isn't working
    status:reviewAwaiting acceptance, integration, or authorized push
    and removed on Sep 10, 2026
  2. removed
    status:reviewAwaiting acceptance, integration, or authorized push
    on Sep 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions