Skip to content

feat(spec)!: 改名 kernel 侧 PackageDependencySchema → ResolvedPackageDependencySchema —— 双源清账 C7,裸名唯一归 ./cloud (#4741) - #4789

Merged
os-zhuang merged 3 commits into
mainfrom
claude/issue-4741-package-dependency-dual-source
Aug 3, 2026
Merged

feat(spec)!: 改名 kernel 侧 PackageDependencySchema → ResolvedPackageDependencySchema —— 双源清账 C7,裸名唯一归 ./cloud (#4741)#4789
os-zhuang merged 3 commits into
mainfrom
claude/issue-4741-package-dependency-dual-source

Conversation

@os-zhuang

@os-zhuang os-zhuang commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Fixes #4741

#4535 第二批最后一簇(C7)。落地后 dual-source 基线归零(entries: [])。

🔄 已同步 main(2026-08-03,commit b8a6913):合并 #4768(C17)/ #4786 / #4780 / #4783 / #4788 / #4791 / #4794 后重生成并全量复验。基线口径由交付时的 3 → 1 更新为 2 → 0

为什么是改名而不是收敛

PackageDependency / PackageDependencySchema 曾由两个入口各自导出一个声明,键集完全不相交(0 个共享属性):

入口 键集 语义 唯一嵌入方 处置
./cloud package-version.zod.ts:48 packageId / versionRange / optional 声明形 —— 作者写进包清单的依赖行 PackageManifestSchema.dependencies[]sys_package_version.manifest_json 保名
./kernel plugin-security.zod.ts:310 name / versionConstraint / type / resolvedVersion 解析形 —— 解析器在依赖图上走的边 DependencyGraphNodeSchema.dependencies[] + PluginSecurityProtocol 改名ResolvedPackageDependency(Schema)

两边都不是 .strict(),所以把一侧的文档粘到另一侧不会响亮报错,只会静默剥掉全部外来键(#4411 陷阱 / ADR-0104 silent-strip 类)。两个概念而非两种拼写 ⇒ ADR-0112 D9(a),按 #4741 维护者裁决改名 kernel 侧。

⚠️ 同前缀近邻 PackageDependencyConflict(Schema)PackageDependencyResolutionResult(Schema)不同概念,一字未动,并由 pin 显式断言健在(派发单点名的误伤风险)。

三仓消费者复核(import 级实测)

kernel 侧 PackageDependency importer 结论
objectstack 0 个外部 importer(唯一读者是同文件的 DependencyGraphNodeSchemaPluginSecurityProtocol) 无影响
cloud(HEAD 5df2c69) 0(全仓 PackageDependency 零命中,亦无手拷形状) 无影响,无 followup
objectui 0(全仓零命中) 无影响

零 importer 不等于有死侧可删(#4653 判则)—— 两侧各自被真实 schema 嵌入,都活着,故走改名而非删除。

定级论证(#4535 §5,逐条自证,不照抄别簇)

基线删行自证(#4650 三路径门禁)—— 2 → 0

同步 main 后重新实跑(基线取 main 版本,未手编),门禁 stale 分支点名要求删除的正是这 2 行:

❌  2 stale baseline entries — no longer dual-source, delete the line(s):

    • PackageDependency — [./cloud (type)] ≠ [./kernel (type)]
    • PackageDependencySchema — [./cloud (const)] ≠ [./kernel (const)]

--update 规范形重写(非手编)后:

✅  self-test: flags same-name different-declaration exports, and nothing else.
✅  no new dual-source exports: 4286 names across 16 entry points — 173 re-exported (single declaration), 0 accepted dual-source (baseline).

dual-source-exports.baseline.json 现为 "entries": [] —— #4535 双源账目归零,第二批收官。

附注:--update 写出的是生成器规范形(原始 UTF-8),而 main 上的该文件为 \uXXXX 转义形,故 diff 含一处 _comment 重编码。内容逐字符相同,且该文件每次运行都由 dist 语义重算(增删行都会报红),故属无害的编码差异,非手编。

RENAMED_DEFS 承接(4 keys carry),authorable-surface.json 逐行位移、净零:

-    "kernel/PackageDependency:name",
-    "kernel/PackageDependency:resolvedVersion",
-    "kernel/PackageDependency:type",
-    "kernel/PackageDependency:versionConstraint",
+    "kernel/ResolvedPackageDependency:name",
+    "kernel/ResolvedPackageDependency:resolvedVersion",
+    "kernel/ResolvedPackageDependency:type",
+    "kernel/ResolvedPackageDependency:versionConstraint",

合并 main 的静默回退防护(#4535 §7)

三张 ratchet(dual-source-exports.baseline.json / authorable-surface.json / json-schema.manifest.json,加 api-surface.json)一律 git checkout origin/main -- 取 main 版本后全量重跑生成器,只重施本 PR 的一处改动 —— 其中后两张归 os-regen merge driver 管、合并不产生冲突标记,最易静默回退。

重生成后逐项实测确认他人蓄意变更未被回滚:

来源 蓄意变更 合并后实测
#4783 (#4634) data/DriverCapabilities:* 31 行 [RETIRED] + 3 行存活 ✅ 31 / 3
C10 #4767 system/EnvironmentArtifact* 整族删除 ✅ 仍为 0
C17 #4768 studio/ActionLocationstudio/ActionContributionLocation ✅ 旧 0 / 新 1
本 PR kernel/PackageDependencykernel/ResolvedPackageDependency ✅ 旧 0 / 新 1

renamed-defs.ts 的冲突是 C17 与本簇两条独立改名条目,按时序并存保留(非二选一)。最终 git diff origin/main 恰为本 PR 的 13 个文件,其余逐字节等同 main。

Sabotage 实证(2 组,均实跑)

S1 —— 复活被删声明(在 kernel 重新声明旧名的 4 键 schema)。两层独立拦截:

# pin
AssertionError: ./kernel must not export PackageDependencySchema: expected [ …(460) ] to not include 'PackageDependencySchema'
AssertionError: kernel must not export PackageDependencySchema: expected true to be false
 Tests  2 failed | 1 passed (3)

# build 阶段(RENAMED_DEFS 不变式 3),早于任何门禁
❌ 1 problem(s) in RENAMED_DEFS (scripts/lib/renamed-defs.ts):
     - kernel/PackageDependency → kernel/ResolvedPackageDependency: the SOURCE def is still emitted by this build.
       That is a copy, not a rename — and a copy is precisely the dual-source shape this table must never be able to launder (#4411, #4446).

S2 —— 禁止路线:在 ./kernel re-export cloud 声明顶裸名。这是对 dual-source 门禁全绿但语义说谎的那条路(一个声明、多个入口 = 良性 re-export)。用含 S2 的源码重新构建 dist 后实跑门禁,确认其结构性盲区:

✅  no new dual-source exports: 4284 names across 16 entry points — 175 re-exported (single declaration), 1 accepted dual-source (baseline).

173 → 175,多出的 2 个「良性 re-export」正是这条谎报。门禁看不见,而 pin 与承接表各自独立拦下:

# pin(holders 精确相等断言)
AssertionError: ./kernel must not export PackageDependencySchema: expected [ 'PackageDependencySchema', …(459) ] to not include 'PackageDependencySchema'
 Tests  2 failed | 1 passed (3)

# build 阶段:re-export 令 kernel/PackageDependency def 重新发出 ⇒ 不变式 3 再次拒绝
❌ kernel/PackageDependency → kernel/ResolvedPackageDependency: the SOURCE def is still emitted by this build.

(与 C17 同一实证:承接表不变式 3 能在 build 阶段拦下对 dual-source 门禁不可见的语义谎报路线。)

Sabotage 后已还原源码并全量重建 + 重跑全部生成器,复验全绿。

回归 pin(#4535 §4 形态)

新增 packages/spec/src/kernel/package-dependency-dual-source.test.ts —— TypeScript compiler API 在 src/ 上做符号身份解析:

  • package.json exports map 枚举全部 16 个入口(未来新入口无法逃逸);
  • 防空转守卫:module symbol 必解析(否则断言全部空过 —— packages/spec 的「编译期 pin」是失效的:tsconfig 排除了 *.test.ts,vitest 也不做类型检查 #4642 的门禁休眠形态)、./kernel 表面非平凡(> 40 个导出)、近邻健在;
  • holders 精确相等断言 toEqual(['./cloud']),而非子集包含 —— 这才拦得住 S2;
  • 运行时命名空间与编译器视图一致性(含 PluginSecurityProtocol 键改名 + parse 默认值钉子);
  • 第三个用例把「两形状从不可互换」钉死:键集不相交断言 + 交叉粘贴 safeParse 均失败 —— 若将来有人让两侧键集重叠,#4741「两个概念」的前提立即报红需重新论证。

验证清单(合并 main 后全量重跑,全绿)

检查 结果
check:dual-source-exports ✅ 2 行删除自证 → 0 accepted dual-source (baseline)
check:generated 8/8
源码审计组 check:exported-any / check:liveness / check:empty-state / check:variant-docs / check:react-declaration-parity / check:skill-examples / check:strictness-ledger
spec test 294 files / 7380 tests passed
spec typecheck tsc --noEmit 无输出
全仓 typecheck turbo run typecheck122 successful, 122 total

其他

  • ⛔ 未碰 content/docs/releases/;user-visible ⇒ 已加 .changeset/package-dependency-dual-source-c7.md(major)。
  • 幽灵页 references/cloud/plugin-security.mdxgen:docs 自愈(build-docs.ts 的 schema→页面索引按「裸名字」全局建表,同名跨 category 的 schema 会被归到错误的页面 #4696 语境:build-docs 按裸 schema 名做全局索引,改名后碰撞消失),cloud 侧 PackageDependency 归位到 package-version.mdx,cloud/meta.json 同步删行。
  • 区域仅 ./cloud + ./kernel;未碰 data / studio / api / system / automation / integration / ui。
  • 同步 main 用 git merge origin/main(AGENTS.md 禁 force-push),push 为 fast-forward。
  • draft 状态与合并时机归 PM;本 PR 未启用 auto-merge。

…endencySchema —— 双源清账 C7,裸名唯一归 ./cloud (#4741)

`PackageDependency` / `PackageDependencySchema` 曾由 `./cloud` 与 `./kernel` 各自
导出一个声明,键集完全不相交(0 个共享属性):cloud 侧 `{packageId, versionRange,
optional}` 是作者写进包清单的**声明形**,kernel 侧 `{name, versionConstraint,
type, resolvedVersion}` 是解析器在依赖图上走的**解析形**。两边都不是 `.strict()`,
把一侧文档粘到另一侧只会静默剥键而非报错(#4411 陷阱 / ADR-0104 silent-strip)。

两个概念而非两种拼写 ⇒ ADR-0112 D9(a),按维护者裁决改名 kernel 侧;cloud 侧保名。

- `RENAMED_DEFS` 承接 kernel/PackageDependency → kernel/ResolvedPackageDependency
  (4 keys carry:name / versionConstraint / type / resolvedVersion 全数健在)
- 零 tombstone、零 ADR-0087 conversion(无 key 离开契约,已按 #4767 retiredKey()
  先例逐条评估后排除);零形状变更、零词表变化、默认值原样并由 parse pin 钉住
- `PluginSecurityProtocol.PackageDependency` → `.ResolvedPackageDependency`
- 同前缀近邻 PackageDependencyConflict / PackageDependencyResolutionResult 未动
- dual-source 基线 3 → 1(本簇 2 行经门禁 stale 分支点名自证删除)
- 幽灵页 references/cloud/plugin-security.mdx 随 gen:docs 自愈(#4696 语境),
  cloud 侧 PackageDependency 归位到 package-version.mdx
- compiler-API 符号身份 pin(exports map 全 16 入口枚举 + 防空转守卫 + holders
  精确相等);S1/S2 sabotage 实证见 PR

三仓 import 级实测:objectstack / cloud / objectui 对 kernel 侧零外部 importer。
major(TS2305)、零元数据迁移。

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 3, 2026 7:33am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling size/m labels Aug 3, 2026
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

107 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

claude added 2 commits August 3, 2026 07:25
合并 #4768(C17)/ #4786 / #4780 / #4783(#4634,31 位能力位退役)后重生成。

按 #4535 §7 与「rebase/merge 静默回退」纪律处理三张 ratchet:
`dual-source-exports.baseline.json` / `authorable-surface.json` /
`json-schema.manifest.json`(+ `api-surface.json`)一律 `git checkout
origin/main --` 取 main 版本后全量重跑生成器,只重施本 PR 的一处改动。
其中 json-schema.manifest.json 与 authorable-surface.json 归 os-regen
merge driver 管、合并不产生冲突标记,最易静默回退,故以 gen:schema 实跑
输出为准。

逐项确认他人蓄意变更未被回滚(regen 后实测):
- #4783 `data/DriverCapabilities:*` 31 行 [RETIRED] + 3 行存活 —— 均在
- C10 `system/EnvironmentArtifact*` 删除 —— 仍为 0
- C17 `studio/ActionLocation` → `studio/ActionContributionLocation` —— 旧 0 新 1
- 本 PR `kernel/PackageDependency` → `kernel/ResolvedPackageDependency` —— 旧 0 新 1

`renamed-defs.ts` 冲突为两条独立改名条目并存(C17 与本簇),按时序保留两条。

dual-source 基线 2 → **0**(entries: []),#4535 第二批收官、双源账目归零。

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
@os-zhuang
os-zhuang marked this pull request as ready for review August 3, 2026 07:35
@os-zhuang
os-zhuang enabled auto-merge August 3, 2026 07:35
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit 7e05d8e Aug 3, 2026
23 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4741-package-dependency-dual-source branch August 3, 2026 07:57
os-zhuang pushed a commit that referenced this pull request Aug 3, 2026
…rename must not ride out on this branch

`git merge origin/main` brought in #4789 (kernel PackageDependencySchema ->
ResolvedPackageDependencySchema, dual-source C7), which touches the same three
generated artifacts this branch does. The merge reported NO conflicts and left
NO conflict markers, and it was wrong in all three:

  api-surface.json         re-added `PackageDependency (type)` +
                           `PackageDependencySchema (const)` and dropped
                           `ResolvedPackageDependency(Schema)`
  authorable-surface.json  re-added the 4 `kernel/PackageDependency:*` lines and
                           dropped the 4 `kernel/ResolvedPackageDependency:*` ones
  json-schema.manifest.json re-added `kernel/PackageDependency` and dropped
                           `kernel/ResolvedPackageDependency`

json-schema.manifest.json is routed to the `merge=os-regen` driver, which defers
rather than regenerates, so nothing textual signals this — the C17/C10 silent
revert, reproduced. `git merge-tree` does not run external merge drivers and so
cannot see it either.

Resolved the way #4783 did, without any textual merge: reset all three (plus
api-surface-signatures.json) to origin/main, re-applied ONLY this PR's own
deletion to the two hand-ratcheted files, then re-ran the generators over the
merged source. The 22 authorable-surface lines and 4 manifest keys are once
again deliberate deletions, now anchored at merge base ffab803, which
gen:schema re-proved under #4650 route 3 ("def no longer emitted by this
build").

Delta vs origin/main is now pure deletion in all three, with #4789's rename
intact:

  api-surface.json          -8  (4 const + 4 type), 0 insertions
  authorable-surface.json  -22  lines,              0 insertions
  json-schema.manifest.json -4  keys,               0 insertions

check:dual-source-exports reports 0 accepted dual-source (#4789's shrink to []
survives; this branch does not carry it back to 2). renamed-defs.ts is
byte-identical to main and keeps all 6 entries including #4789's.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

spec 双源清账 C7:PackageDependency(./cloud ≠ ./kernel)—— kernel 侧 D9(a) 改名,2 条

2 participants