Skip to content

docs(adr-0146): D8 item 2 names the pair's export, GET /packages/X.custom/export, never the base's - #29791

Merged
os-zhuang merged 2 commits into
mainfrom
claude/project-thread-x37kcs
Nov 3, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/project-thread-x37kcs

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Warren · project thread
Fixes #29601

Clause-②: no
Metadata-protocol: none

维护者速读

What changes

One sentence of ADR-0146 D8 item 2. The list of reads that serve a declared override named "the export of X's app surface". It now names the export it means: the pair's export, GET /packages/X.custom/export, with a pointer to item 3, and says it is never GET /packages/X/export, the base's own export, which item 3 keeps unchanged. The contract review's should-fixes (6595888270) moved two more spots in the same file: item 2's lead now says the override is served "in every read but the base's own export (item 3)", and Decided here #5 is scoped to the four reads under the base's address, with the override travelling in the pair's export, never the base's. Refs gains a dated entry naming #29601 and this PR. No code, no schema, no other ADR.

The reading taken is the seat's (dispatch order, claim 6594501078): item 3 already splits the two routes, PR #29597 implemented that split and read item 2 this way, and the getMetaItemsPerPackage docblock in packages/metadata-protocol/src/protocol.ts reads it the same way. The other reading the card lists, a whole-surface export serving effective documents, is #28914's tenant ontology export, which is unlanded and unnamed in ADR-0146; naming it there would be a new decision, so this edit does not.

No amendment entry on the Status line: the record's own convention reserves **Amended in place** for rulings that change a decision (ruling records on decision cards). This clarification reverses nothing and picks the reading item 3 already fixes; the card and this PR are its provenance.

Why

Read literally, item 2 said the base's export serves the override, while item 3 says the base's export carries the base unchanged. Code on main at c76c0e04 agrees with item 3 and with the clarified item 2: ownDocumentsOf in packages/runtime/src/domains/packages.ts drops or replaces an item that declares it overrides the exported package, so GET /packages/BASE/export serves the base's own documents and the pair's export carries the override with its overrides block. No code on main contradicts the reading. The whole-deployment export GET /packages/export that #29755 landed on main (b3d14150) while this PR was open answers each package exactly as its per-package export, the pair after its base, so it agrees with item 3 and is not named here (delta review 6596113742: a docs-only follow-up).

Tests

Docs-only; no test changes. The gate families derived for the diff ran locally (Verification).

Acceptance notes

Verification

Head 71e8cc17 (two commits on origin/main c76c0e04; the second answers the contract review's should-fixes). The same 21 derived gates re-ran at 71e8cc17: 21 run, all exit 0, 0 NOT-MEASURED (os-dev-report 6596068319).

dispatch-gates --commands (21) and --ran reconciliation, first run at 954c3bd

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 21 commands from the diff (1 path, +3/-1). Every one ran from the worktree with its exit code captured before any pipe; all 21 exit 0. Prerequisite for check:doc-formula-expressions: @objectstack/formula and @objectstack/lint built under the verify lock (VERDICT command-exit 0, held 170 s).

node scripts/pm/dispatch-gates.mjs --ran ran.list --repo objectstack-ai/objectstack: 21 derived, 21 run, 0 NOT-MEASURED, 0 UNRUN (exit 0).

Exit 0: check-adr-links (+ --self-test), check-closing-keyword-parity (+ --self-test), check-comment-mask-corpus, ci/plan-test-core-shards --self-test, lint check:doc-formula-expressions, check:adr-anchors, check:adr-index, check:adr-symbol-anchors, check:ci-filter-parity, check:closed-ceremony-text, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:pm-governed-merges, check:pm-prior-rulings, check:refd-timer-probe, check:watch-hint-literal.

Repo-level scans (pnpm lint, the full check:* farm) are CI's runs on this PR; read its check-runs.

Governed surface (docs/adr/**, Tier H): this PR stays a draft; it lands only after an authorized APPROVED review from GOVERNED_APPROVERS, following the owning seat's contract-tier review and ACCEPT. No reviewers requested by the dev.

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (No packages/spec change.)
  • 2. Every name I added uses the casing for its kind. (No names added.)
  • 3. No formatter ran; pnpm lint is CI's repo-level run (no code touched).
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset: docs-only, publishes nothing; both declaration lines are filled in above.
  • 6. packages/spec touched: n/a.
  • 7. No hand edits to content/docs/references/, packages/*/CHANGELOG.md or content/docs/releases/.
  • 8. Title, body and comments are in English (the 维护者速读 block is the os-dev house format).
  • The Before Submitting list in CONTRIBUTING.md is done.

🤖 Generated with Claude Code

https://claude.ai/code/session_01JQwxbYeS2U1HKXS13SzfKe


Generated by Claude Code

D8 item 2 listed "the export of X's app surface" among the reads that serve
a declared override. Read as GET /packages/X/export it contradicts item 3,
which keeps the base's export unchanged and puts the overriding item, with
its overrides block, in the pair's export. The sentence now names the pair's
export, GET /packages/X.custom/export, points at item 3, and says the base's
own export is never that read. Wording only; no decision changes, so the
Status line carries no amendment entry.

Claude-Session: https://claude.ai/code/session_01JQwxbYeS2U1HKXS13SzfKe
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Nov 3, 2026
@github-actions github-actions Bot added size/xs documentation Improvements or additions to documentation labels Nov 3, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#3 · os-warren · session_01JQwxbYyp6wSRcywGFK2L4A

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 954c3bd708f63bad27e7eb1e1dd8a8482cf28174
Local-runs: none
Scope: docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md + packages/runtime/src/domains/packages.ts (declaresOverrideOf, ownDocumentsOf, assemblePackageManifest, the GET /packages/:id/export route), packages/metadata-protocol/src/protocol.ts (the getMetaItemsPerPackage docblock), packages/runtime/src/domains/packages-export-base-unchanged-per-type.integration.test.ts (the #29597 pin)

Reviewer: an at-tier subagent adopted by this seat. Inputs: card #29601 and every comment, #29563 and its report 6588016343, merged PR #29597, #28914, ADR-0146, PR #29791's body, file list and net diff (one hunk, +3/−1), the head's check-runs (18 success, 5 unreachable-from-ADR lanes still running at review time, none failed).

① Derived judgments

  • The pair's export GET /packages/X.custom/export serves the overriding item with its overrides block: holds (assemblePackageManifest(deps, 'X.custom', …) → ownDocumentsOf keeps it since declaresOverrideOf(item, 'X.custom') is false; overrides survives cleaning; pinned for view/dashboard/report by the fix(runtime): the base's package export leaves out its pair's dashboard and report overrides (#29563) #29597 test).
  • The base's export GET /packages/X/export serves the base unchanged: holds (ownDocumentsOf drops overrides.package === 'X' items and restores the registry's own artifact; pinned).
  • Item 2 now agrees with item 3 and with the code's own comments (assemblePackageManifest, the getMetaItemsPerPackage docblock).
  • No ontology export is named anywhere under packages/runtime/src, packages/rest/src or packages/metadata-protocol/src; the retired phrase occurs nowhere else in the ADR.

② Semver level

none: docs/adr/** only, skip-changeset right; Clause-②: no, Metadata-protocol: none right and line-initial. Check Changeset green.

③ Boundary flags

④ Design judgment

No must-fix.

Implemented-by: claude/project-thread-x37kcs
Reviewed-by: session_01JQwxbYyp6wSRcywGFK2L4A

VERDICT: PASS

…ds under X's address; record the edit in Refs

Contract review of the first commit asked for three wording fixes, no
new decision. D8 item 2's lead now says the override is served in every
read under X's address but the base's own export (item 3), and the
enumeration is "the reads that serve X's name or carry X's
customizations", so the list is true with the pair's export in it.
Decided-here #5 no longer claims all five read kinds: four reads under
the base's address serve the override, the pair's export carries it, the
base's export never does (items 2 and 3). Refs gains a dated entry naming
the card and the PR beside the earlier wording-fix entry.

Claude-Session: https://claude.ai/code/session_01JQwxbYeS2U1HKXS13SzfKe
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added size/s and removed size/xs labels Nov 3, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#3 · os-warren · session_01JQwxbYyp6wSRcywGFK2L4A

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 71e8cc1774bc37bb5b942b3cb3d4469b31d5981d
Local-runs: probe — node scripts/check-adr-links.mjs ran once by accident, on the clone's origin/main tree and not on the head, so nothing below relies on its result
Scope: docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md + packages/runtime/src/domains/packages.ts (assemblePackageManifest, ownDocumentsOf, assemblePackageExportBundle / GET /packages/export as #29755 landed them at b3d14150), .changeset/28914-package-export-whole-deployment.md, packages/spec/src/api/package-lifecycle.zod.ts (PackageExportBundleSchema description)

VERDICT: PASS

This is a delta review of 954c3bd7..71e8cc17: one commit, no force push, +10/−6 in the one ADR file. The reviewer is the one who wrote record 6595888270, and this review judges only its three should-fixes and whether any new must-fix appeared.

① Derived judgments

② Semver level

Unchanged: none, skip-changeset, Clause-②: no, Metadata-protocol: none; the PR still touches only docs/adr/**.

③ Boundary flags

  • The Tier H posture is unchanged: the PR is still a draft with no reviewer requested, and Governed Surface Queue Guard is green.
  • At review time, CI showed no failures; 9 runs were still in progress, including Lint · docs & code guards, the run that reads the ADR hunk. The seat waits for green before ACCEPT.

④ Design judgment

Naming the whole-deployment export GET /packages/export (#28914, landed by PR #29755 at b3d14150) is a follow-up, not a must-fix here.

  • assemblePackageExportBundle returns, for each package, exactly what GET /packages/:id/export returns, in boot order, so a pair comes after its base. The spec description and the changeset say the same.
  • The bundle therefore adds no new read of X's name with a different answer, and D8 items 2 and 3 pass through it unchanged. The edited sentences stay true on b3d14150.
  • Naming the bundle in ADR-0146 is the new decision this wording-only card excluded.
  • The follow-up should be a docs-only card with a one-line pointer in D8 item 3 or in Refs: "the whole-deployment export lists each installed package's own export unchanged, the pair after its base".

There is no must-fix. All three should-fixes from the prior record landed as asked, so this review stops here.

Implemented-by: claude/project-thread-x37kcs
Reviewed-by: session_01JQwxbYyp6wSRcywGFK2L4A

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#3 · os-warren · session_01JQwxbYyp6wSRcywGFK2L4A

维护者速读

席位核对

ACCEPT · domain:server#3 · head 71e8cc1774bc37bb5b942b3cb3d4469b31d5981d · 2026-11-03T05:28Z · governed docs/adr/** (Tier H: check-governed-merges --pr 29791 reports 1 of 1 path governed, 18 lines). CONTRACT_REVIEW_TIER review PASS on this head (6596113742, delta of 6595888270). This is the final four-piece hand-off to the approvers.

  1. Shape: draft, base main, Fixes #29601, Clause-②: no, Metadata-protocol: none, skip-changeset (docs-only fast lane). 1 file, +12/−6. The seat refreshed the PR body to this head (relay issue_patch, read-back identical); this also dropped the stale "nothing names an ontology export" sentence.
  2. Premise measured: on origin/main c76c0e04, item 2 could be read as the base's export, against item 3. ownDocumentsOf (packages/runtime/src/domains/packages.ts) serves the base unchanged and puts the override in the pair's export. On b3d14150, assemblePackageExportBundle (feat(runtime,client,cli): export a deployment's whole ontology as installable packages in one read (GET /packages/export, os package export) #29755) composes the per-package export verbatim, so the reading still holds.
  3. Gates on this head: check-runs pinned to 71e8cc17: 45 total, 26 success, 19 skipped, 0 failed, including Lint · docs & code guards (check:adr-links, check:adr-anchors, check:doc-authoring). mergeable_state is clean. Dev: 21/21 derived gates exit 0 on 954c3bd7 and again on 71e8cc17 (os-dev-report 6596068319).
  4. Prose checked against the diff: the ADR text is the reviewed face (records above). The PR body's What changes, Why and Acceptance notes match the diff on this head.
  5. Out of scope: naming GET /packages/export in ADR-0146 is a new decision. It gets a docs-only follow-up card from the seat, not this PR. Skills-docs: not owed.
  6. Landing: Tier H ⇒ relay pr_request_reviewers to GOVERNED_APPROVERS (os-zhuang, hotlong) and needs-user-decision on the PR in the same act; the PR stays draft. On an approver's APPROVED: clear the label, pr_ready + automerge_enable, follow to MERGED, landing record on docs(adr-0146): D8 item 2's "the export of X's app surface" can be read as GET /packages/X/export, which item 3 says carries the base unchanged; name the export it means #29601.

@os-zhuang
os-zhuang marked this pull request as ready for review November 3, 2026 05:30
@os-zhuang
os-zhuang enabled auto-merge November 3, 2026 05:30
@os-zhuang
os-zhuang added this pull request to the merge queue Nov 3, 2026
Merged via the queue into main with commit 0e4b0fa Nov 3, 2026
51 checks passed
@os-zhuang
os-zhuang deleted the claude/project-thread-x37kcs branch November 3, 2026 05:41
os-warren pushed a commit that referenced this pull request Nov 3, 2026
…Refs entry names PR #29830

Contract review should-fixes (6597286611): the pair-after-base clause holds
when both are listed, and the pair of a code-registered base is exported
alone, its base travelling with the code; the dated Refs entry names the
PR beside the card, as the #29791 entry does.

Claude-Session: https://claude.ai/code/session_01JQwxbZL4zwPNbxQsb6VsoU
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/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants