Skip to content

Commit f283226

Browse files
docs(adr): record ADR-0048 Addendum A as accepted (#30833)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} --> _Requested by **Elon** · [project thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DAUj1Z8Wn6VjhHNjXq26y1F)_ domain:server#4 · os-elon-musk · session_016WV4cwkYtfcduZmfxJhuG3 Fixes #30814 Clause-②: no Metadata-protocol: none Claim: 6677779234 (re-posted whole with the branch: 6677846365) · Branch: `claude/project-thread-gor61o` · Ruling-ref: the card body (maintainer 「同意」, recorded by epic:#3600#1 — correct the record only; the exclusivity gate is not built) ## 维护者速读 - 改了什么:ADR-0048 的 2026-08-08 附录 A(发布时 / 市场命名空间独占)两处状态行从「Proposed」改为「Accepted (2026-08-08)」,链接 #1825 上的接受评论与落地 PR #6671;§A.5 末尾加一条 2026-11-06 注:A2 门仍绑定 A.5 前置条件,仅第一方发布期间 D2 + D4 在开闸时即保留第一方命名空间、无需另立官方保留名单,A1 已落地(#6864、cloud#1927)。 - 为什么改:附录 A 当天即被接受,但状态行留给「下一次文档改动」顺带翻转,三个月没人翻;读者据此把契约当成未定。本 PR 只纠正记录,不改任何决策文字、不建门。 - 风险与回滚:极小。单文件 +19 / −2,无代码、无 schema、无生成物;回滚即撤 PR。 - 先看:`docs/adr/0048-cross-package-metadata-collision.md` 第 370–375 行(状态行)与第 724–734 行(§A.5 末尾注);第 8 行是页首 Addenda 条目。 - 两分钟验证:打开本 PR 的 Files 标签,预期只有 1 个文件、+19 / −2;点状态行里的 acceptance comment 链接,落在 #1825 2026-08-08 13:55Z 的「ADR-0048 addendum ACCEPTED as drafted」评论。 - 需要你做的:`docs/adr/**` 属 Tier H,请审阅后亲手合并(或批准后由席位落地)。cloud#1927 这一个引用车队会话读不到(见 Acceptance notes),请顺手确认。 ## What changes One file, `docs/adr/0048-cross-package-metadata-collision.md`, three hunks, no decision text touched: 1. **Line 8, the header `Addenda` entry** — `(**Proposed**; …)` becomes `(**Accepted** 2026-08-08 — maintainer ruling on #1825, [acceptance comment 5226411687], landed by PR #6671; additive to §3.2, supersedes nothing)`. 2. **Line 370, the addendum's own status line** — `Status of this addendum: Proposed.` becomes `Accepted (2026-08-08)`, naming that the maintainer accepted it as drafted with D2 and D3 rule 2 included, linking the same comment, and recording why the line lagged: PR #6671 merged the same day with the line still reading "Proposed", the comment being the acceptance record of authority until the line caught up. The sentence that follows ("It is **additive to §3.2** and **supersedes no text above** …") is kept verbatim. 3. **End of §A.5 (Activation precondition)** — one dated note, `Note (2026-11-06, #30814) — where the precondition stands; no decision changes.`, with the three points the card asks for: Phase A2 stays bound to the precondition and lands before third-party publishing opens; while publishing is first-party only, first-party namespaces are reserved at switch-on by D2 and D4 (the back-fill awards each published namespace to the publisher of its earliest published version, and the reservation is held by that publisher), so no separate official reserved list is needed; Phase A1 is landed (PR #6864 in this repository, objectstack-ai/cloud#1927 on the cloud side). ## Why The addendum was accepted the day it was drafted, but the acceptance comment deliberately left the in-document status flip to "the next docs touch", and no docs touch came for three months. Agents and people reading the ADR concluded the contract was undecided. The maintainer's 「同意」 on #30814 is to correct the record only — not to build the namespace-exclusivity gate now — so this PR changes two status lines and adds one dated note, and nothing else. ## Tests None: a docs-only change to one ADR. No code, schema, generated artifact or published file moves. ## Acceptance notes - **Every cited number was verified from this repository before it was written, except one.** #1825's acceptance comment is id 5226411687, created 2026-08-08T13:55:40Z, opening "Maintainer ruling (2026-08-08, via the engine-core PM session): ADR-0048 addendum ACCEPTED as drafted" (read via the issue-comments API). PR #6671 is `merged: true`, merged 2026-08-08T14:23:32Z by os-zhuang, head d722c64, one file (this ADR, +396). PR #6864 is `merged: true`, merged 2026-08-09T02:22:38Z, titled "feat(spec,cli): carry the package namespace on the publish payload (ADR-0048 addendum Phase A1)", `Fixes #6760`. **objectstack-ai/cloud#1927 could not be read**: that repository is outside the fleet session's GitHub scope (search answers 422 "cannot be searched"; the seat's session answers 403). It is cited exactly as the card body cites it, on the authority of the maintainer's filing (epic:#3600#1, hotlong) — please confirm it names the cloud-side half of Phase A1 before merging. - **Lines that now read stale and were deliberately not edited** (the card's scope is the two status lines plus the one note): §A.6's bullet `[proposed] Phase A1` — A1 is landed, so that bullet owes a `[done]` flip; the header `Addenda` line lists only the 2026-08-08 addendum, not the 2026-10-08 one that line 3's status already names; §A.0's measurement ("Publish time has zero namespace surface") is dated 2026-08-08 and superseded by #6864 — true as dated, stale as a description of today. A reader chasing the acceptance through #6760's claim comment will find it cited there as comment 5226117769; the real id is 5226411687 (a GitHub comment, not repository text). - The §A.5 note spells D2 + D4's effect in the ADR's own words (back-fill to the earliest publisher, reservation held by the publisher) so that "reserved at switch-on" is traceable to the two decisions rather than asserted. - `skip-changeset` requested on `pr_create`: `docs/adr/**` publishes nothing from any released package. - `docs/adr/**` is Tier H (`dispatch-gates --tier`: Model tier MANDATORY claude-fable-5-1); the landing is a governed approver's. ## Verification <details><summary>Local gates at 9f78f24 (dispatch-gates --commands on this diff, 21 commands; exit codes captured before any pipe)</summary> ```text node scripts/check-adr-links.mjs --self-test :: exit 0 node scripts/check-adr-links.mjs :: exit 0 node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 node scripts/check-closing-keyword-parity.mjs :: exit 0 node scripts/check-comment-mask-corpus.mjs :: exit 0 node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0 pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 pnpm check:adr-anchors :: exit 0 pnpm check:adr-index :: exit 0 pnpm check:adr-symbol-anchors :: exit 0 pnpm check:ci-filter-parity :: exit 0 pnpm check:closed-ceremony-text :: exit 0 pnpm check:cross-package-test-inputs :: exit 0 pnpm check:doc-authoring :: exit 0 pnpm check:driver-memory-census :: exit 0 pnpm check:gitlink-declared :: exit 0 pnpm check:nul-bytes :: exit 0 pnpm check:pm-governed-merges :: exit 0 pnpm check:pm-prior-rulings :: exit 0 pnpm check:refd-timer-probe :: exit 0 pnpm check:watch-hint-literal :: exit 0 ``` `node scripts/pm/dispatch-gates.mjs --ran`: 21 derived, 21 run, 0 NOT-MEASURED, 0 UNRUN (exit 0). `check:doc-formula-expressions` ran after `pnpm --filter '@objectstack/lint...' build` under `os-verify-lock` (VERDICT command-exit 0, 96s). `check:commit-card-trailers --range origin/main..HEAD`: 1 commit, no card relation, no model identifier (exit 0). CI families outside the derivation (artifact rosters, wide-population families, the type-check lanes) are CI's; this PR's check-runs are their record. </details> ## Human Minimum - [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic. (not touched) - [x] 2. Every name I added uses the casing for its kind. (none added) - [x] 3. No formatter ran; `pnpm lint` passes. (no source file touched) - [x] 4. One issue, one branch off an up-to-date `main`, one pull request. - [x] 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset. (publishes nothing: `skip-changeset`) - [x] 6. `packages/spec` touched: its generated artifacts are regenerated and committed. (not touched) - [x] 7. No hand edits to `content/docs/references/`, `packages/*/CHANGELOG.md` or `content/docs/releases/`. - [x] 8. Title, body and comments are in English. - [x] The *Before Submitting* list in CONTRIBUTING.md is done. --- _Generated by [Claude Code](https://claude.ai/code/session_016WV4cwkYtfcduZmfxJhuG3)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 0e73de8 commit f283226

1 file changed

Lines changed: 22 additions & 4 deletions

File tree

‎docs/adr/0048-cross-package-metadata-collision.md‎

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
**Builds on**: [ADR-0003](./0003-package-as-first-class-citizen.md) (package as first-class citizen), [ADR-0005](./0005-metadata-customization-overlay.md) (artifact vs runtime overlay precedence), [ADR-0008](./0008-metadata-repository-and-change-log.md) (metadata repository, `MetaRef` identity), [ADR-0010](./0010-metadata-protection-model.md) (package provenance / `_packageId` stamping)
66
**Consumers**: `@objectstack/objectql` (`SchemaRegistry.registerItem`, `ObjectQL.registerApp`, install path), `@objectstack/console` / `objectui` (routing + metadata resolution), package authors, CLI/CI install path, the app marketplace registry.
77
**Surfaced by**: ADR-0046 review (doc naming) → generalised to all bare-named metadata → re-examined through the app-marketplace install lens.
8-
**Addenda**: [2026-08-08 — publish-time / marketplace namespace exclusivity](#addendum-2026-08-08-publish-time--marketplace-namespace-exclusivity) (**Proposed**; additive to §3.2, supersedes nothing).
8+
**Addenda**: [2026-08-08 — publish-time / marketplace namespace exclusivity](#addendum-2026-08-08-publish-time--marketplace-namespace-exclusivity) (**Accepted** 2026-08-08 — maintainer ruling on #1825, [acceptance comment 5226411687](https://github.com/objectstack-ai/objectstack/issues/1825#issuecomment-5226411687), landed by PR #6671; additive to §3.2, supersedes nothing).
99

1010
---
1111

@@ -367,7 +367,12 @@ Status legend: **[done]** shipped · **[proposed]** not yet built ·
367367

368368
## Addendum (2026-08-08): publish-time / marketplace namespace exclusivity
369369

370-
> **Status of this addendum: Proposed.** It is **additive to §3.2** and
370+
> **Status of this addendum: Accepted (2026-08-08).** The maintainer accepted
371+
> it as drafted, D2 and D3 rule 2 included, on #1825
372+
> ([acceptance comment 5226411687](https://github.com/objectstack-ai/objectstack/issues/1825#issuecomment-5226411687),
373+
> 2026-08-08 13:55Z); PR #6671 landed it the same day with this line still
374+
> reading "Proposed", that comment being the acceptance record of authority
375+
> until the line caught up (2026-11-06, #30814). It is **additive to §3.2** and
371376
> **supersedes no text above** — §§1–6 stand verbatim, the install-time gate's
372377
> semantics are unchanged, and §3.5 (namespace rename-on-install) stays
373378
> deferred. What it adds is a **second, earlier checkpoint** in front of the
@@ -716,14 +721,27 @@ publishers there is no cross-vendor collision to prevent, which is exactly why
716721
the work sat on hold. This addendum therefore draws the **contract** now and
717722
lets the enterprise-side implementation be scheduled against the opening date.
718723

724+
> **Note (2026-11-06, #30814) — where the precondition stands; no decision
725+
> changes.** Phase A2, the publish-time gate (§A.6), stays bound to this
726+
> precondition: it lands before third-party publishing opens, and the opening
727+
> waits for it. While publishing is first-party only, first-party namespaces
728+
> are reserved at switch-on by D2 and D4 (the D3 whitelist aside, which is
729+
> never reserved and stays first-party-tier only): the back-fill awards each
730+
> published namespace to the publisher of its earliest published version, and
731+
> the reservation is held by that publisher. So no separate official reserved
732+
> list is needed. Phase A1 is landed: PR #6864 (2026-08-09) carries
733+
> `namespace` on the publish payload in this repository, read off the
734+
> artifact's `manifest.namespace`, with its cloud-side receiver in
735+
> objectstack-ai/cloud#1927 (per #30814).
736+
719737
### A.6 Phasing
720738

721739
Status legend as in §5.
722740

723-
- **[proposed] Phase A1 — carry the namespace to publish.** `namespace` on
741+
- **[done] Phase A1 — carry the namespace to publish.** `namespace` on
724742
`PackageSchema` / `CreatePackageRequestSchema`; `objectstack package publish`
725743
reads it off the artifact manifest. Open-side, this repo. Prerequisite for
726-
everything below.
744+
everything below. Landed by PR #6864 (2026-08-09).
727745
- **[proposed] Phase A2 — the publish-time gate (minimal version A).** §A.2's
728746
algorithm in the marketplace review pipeline, plus the reservation store.
729747
Enterprise-side. **This is the item bound by §A.5.**

0 commit comments

Comments
 (0)