Skip to content

feat(cli+spec): 从 N 个软件包的作者态编出一个 packages[] 发布物 —— os build 认识项目级 composeStacks('preserve'),装配后的包体有自己的声明(#14242 取 B) #14439

Description

@hotlong

Part of #14122 · ADR-0130 D4/D5/D7 的产出侧。发版前平台侧最后一块:维护者要在平台功能齐全后发版,hotcrm 分拆(epic 的业务目标)在本卡之前无法开始。

事实(都在 main 上实测)

决定(维护者 2026-09-02 在 PM 会话拍板)

#14242B:给装配/注册态的包体一个独立声明;作者态 ManifestSchema.objects 不加宽(否决 C);A 的"只声明 wrapper 门"作为过渡状态随本卡终止。

要做

  1. spec:声明装配后的包体 schema(命名由 dev 提,如 AssembledPackageBodySchema):manifest 字段 + 与 ObjectStackDefinitionSchema 相同的定义数组键(objects / apps / flows / …,键集从同一处派生,不手抄)。发布物层的 packages[] 引用它;作者态入口仍是 ArtifactPackageEntrySchema(manifest-only)。装载门从 wrapper-only 改为对装配态声明完整 parseartifact-packages.ts 模块头里对错配的记录同步改写。
  2. 作者态形状,不发明第二种写法:一个项目 = N 个各自合法的 defineStack(每个仍受 ADR-0019 单应用约束)+ 一个项目级 config 调 composeStacks([...], { manifest: 'preserve' })。⛔ 不放宽 validateSingleApp:组合后的项目物按 packages[] 迭代,单包路径一字不动。
  3. CLI os build / compileloadConfig 得到的定义带 packages[] 时,对每个包分别走今天单包的校验 / lint / lower 路径(同一套函数,不复制一份),产出一个发布物 JSON,packages[i] 为装配后包体;os dev 同样能起它。单包输出 bit-identical(D7 pin 已有,必须保持绿)。
  4. 夹具examples/app-multi-package/(名字 dev 定):两个包共享一个命名空间,一个 type:'app'、一个 type:'module' scope 键),各一个对象,模块对象 lookup 到应用对象;pnpm buildpackages[];dogfood 测试起服务,断言 GET /api/v1/packages 两行(feat(packages): GET /packages and GET /packages/:id rows carry the server's own writable verdict (isWritablePackage) #14430 合并后追加 writable: false 两行断言)。
  5. 文档:作者态页(content/docs/plugins/packages.mdx 或 dev 判定的正确页)加一节"项目 = 多包发布物",⛔ 不碰 content/docs/releases/
  6. 消融:删 CLI 的 packages[] 分支 → 夹具构建断言红;删装配态 schema 门 → 错形包体不再被拒(各自预测红集、复原按字节、经 dist 的腿要重建并 preflight)。

边界

⛔ 不动 marketplace / 安装面(ADR-0019 D2/D3,发布物停在控制面)。⛔ 不做跨发布物共有权(ADR-0130 D8)。⛔ ManifestSchema.objects 不加宽。⛔ 不改 ADR;若 ADR-0130 需要补记 D4 的两阶段声明,另开 docs-only 卡给维护者。

Clause-②

预期 YES:编译的接受 / 拒绝面变了(新的装配态 schema 门、CLI 新分支、装载门从 wrapper 变完整 parse)→ 挂 needs:contract-review,PR 留 draft,PM 复审。

验收

夹具 build + boot 全绿并留 GET /api/v1/packages 原文;D7 单包 bit-identity pin 绿;packages/specpackages/clipackages/objectql 全量绿;dispatch-gates 联合零发现;PR 同时 Fixes #14242。changeset:@objectstack/spec minor、@objectstack/cli minor、@objectstack/objectql patch。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions