Skip to content

feat(spec): register UNIQUE_SCOPE_CONFIRMATION_REQUIRED in ERROR_CODE_LEDGER (#9246) - #9269

Merged
os-steve merged 1 commit into
mainfrom
claude/issue-9246-register-unique-scope-code
Aug 17, 2026
Merged

feat(spec): register UNIQUE_SCOPE_CONFIRMATION_REQUIRED in ERROR_CODE_LEDGER (#9246)#9269
os-steve merged 1 commit into
mainfrom
claude/issue-9246-register-unique-scope-code

Conversation

@os-steve

Copy link
Copy Markdown
Collaborator

Fixes#9246

What

Registers UNIQUE_SCOPE_CONFIRMATION_REQUIRED under @objectstack/cloud-connection in ERROR_CODE_LEDGER (ADR-0112 D3), and — in the same change, per the armed ratchet — deletes the now-discharged pending-registration row from packages/runtime/src/dispatcher-error-vocabulary.ts.

The code is the ADR-0120 D5e posture-gate refusal: the marketplace install seam answers 409 with it when an app declares installation-wide ('global') unique constraints under the isolated tenancy posture. It was already on the wire with a live reader — os package install branches on the literal (packages/cli/src/commands/package/install.ts) to print the per-index decision list — but sat outside the closed vocabulary, invisible until #9223 taught the dispatcher-vocabulary gate to see a constant stamped in an object literal (objlitconst, plugin-route door). PR #9247 landed the classification row; this PR is the registration half of the hand-off.

Changes

Verification (at head 318df8bd2, clean tree)

  • pnpm check:dispatcher-error-vocabulary — green: 12 unregistered code-stamping sites, all classified, 0 awaiting a ledger entry; the site reclassified cleanly out of the unregistered derivation.
  • pnpm check:error-code-casing (4167 files) and pnpm check:error-status-conformance — green.
  • pnpm --filter @objectstack/spec check:generated — all 13 artifacts up to date.
  • pnpm --filter @objectstack/spec test — 407 files, 10851 tests passed. pnpm --filter @objectstack/runtime test — 165 files, 2464 tests passed. Both packages' typecheck green.
  • Path-derived gate sweep (scripts/pm/dispatch-gates.mjs against the actual diff): changeset gates (adr-0087-registration, changeset-no-major, empty-changeset, objectui-changeset, changeset-gate-self-tests), docs gates (quick-reference-counts, role-word, docs-audit-scope, docs-redirects, affected-docs, doc-formula-expressions), spec gates (spec-parsed-alias, type-source-resolution, merge-driver, liveness, strictness-ledger, variant-docs, empty-state), cross-package-test-inputs, nul-bytes, and the test-file convention gates (engine-double-contract, where-matcher, query-options-erasure, type-check-coverage) — all green locally. One local-environment failure: check-dev-prereqs (35+ unrelated packages have no dist in this fresh worktree; CI runs it after a full build).

Out of scope

#9267 remains open — filed from this card's confirmed side observation: the plugin-route door has no envelope guard and nothing parses its bodies against the declared schema. Ruled out of this card's scope by triage; not addressed here.


Generated by Claude Code

…_LEDGER (#9246)
Registers the ADR-0120 D5e posture-gate refusal the marketplace install seam
answers (409, isolated tenancy posture, installation-wide uniques) under
@objectstack/cloud-connection — already on the wire with a live reader
(packages/cli/src/commands/package/install.ts branches on the literal), found
by the #9223-widened dispatcher-vocabulary gate (objlitconst, plugin-route
door), and ratchets the discharged pending-registration row out of
packages/runtime/src/dispatcher-error-vocabulary.ts in the same change (the
gate reconciles in both directions).
Reference docs regenerated via check:generated --fix (gen:docs): 2 pages,
per the post-#9239 generator.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fs18A2DdXLVN2h8PaaFBcP
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/runtime, @objectstack/spec, touching 2 documentable anchor(s).

3 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:

  • content/docs/api/error-catalog.mdx(via ERROR_CODE_LEDGER (symbol))
  • content/docs/api/error-handling-server.mdx(via ERROR_CODE_LEDGER (symbol))
  • content/docs/kernel/contracts/data-engine.mdx(via ERROR_CODE_LEDGER (symbol))

1 release-owned page(s) also name something this change touched. These are read-only:

  • content/docs/releases/v17.mdx(via ERROR_CODE_LEDGER (symbol))

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

What this run could not see
  • 4 name(s) were too generic to anchor anything (single lowercase words)

Coarse fallback — 117 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json origin/mainpackageMentionDocs.

Advisory only, and a precision-first one (#9192): a page is listed because it names a
symbol, wire route or SDK method this diff touched — not because it mentions a changed
package. Each row says which anchor put it there, so a wrong row is reportable rather than
merely annoying. 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.

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tests tooling labels Aug 17, 2026
@os-steve
os-steve marked this pull request as ready for review August 17, 2026 09:05
@os-steve
os-steve added this pull request to the merge queueAug 17, 2026
Merged via the queue into main with commit 5d4f3d5Aug 17, 2026
27 checks passed
@os-steve
os-steve deleted the claude/issue-9246-register-unique-scope-code branch August 17, 2026 09:24
os-zhuang pushed a commit that referenced this pull request Aug 17, 2026
…h main
Discharges the os-regen deferral recorded by merge 0da2465. Wholesale
`gen:schema && gen:docs && gen:openapi` from the merged tree.
Round 4 reconciles against #9269, which registered
UNIQUE_SCOPE_CONFIRMATION_REQUIRED (#9246) after the round-3 regen — the
staleness that dequeued this PR from the merge queue with CI_FAILURE on
`check:docs` (contract.mdx out of date). Both codes are present; the
generated footprint is the two-page floor: contract.mdx + error-code-ledger.mdx.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTKPDRoynY8i3HmdSFUxFj
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 17, 2026
…ry overlay mint door (objectstack-ai#9173)
* fix(metadata-protocol): assert the canonical type at the registry mint door (objectstack-ai#9111)
`hydrateOverlayIntoRegistry` minted registry entries under the raw `type`
with no fold and no assertion — the last unfolded seam of the `objects`
tolerance family. The "callers must fold" contract lived in no type, no
signature and no check.
Measured across all six producer routes first: four fold completely, and two
(boot `loadMetaFromDb`, `revertCommit`) fold through the MANIFEST-collection
map, which is tolerant AND incomplete — it passes through the six spellings
whose types are not stack collections. Dormant for live traffic; reachable
only from pre-objectstack-ai#7894 at-rest residue.
Closed as an ASSERT rather than a fold: folding would launder a row past the
NOT_OVERRIDABLE lock that objectstack-ai#7894 closed the door on.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTKPDRoynY8i3HmdSFUxFj
* docs(spec): regenerate references for the new error code; record observed ablation directions (objectstack-ai#9111)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTKPDRoynY8i3HmdSFUxFj
* test(metadata-protocol): drop unexercised write verbs from the objectstack-ai#9111 engine double
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTKPDRoynY8i3HmdSFUxFj
* chore(spec): regenerate references from the merged tree (objectstack-ai#9111)
Discharges the os-regen deferral recorded against the merge commit. Wholesale
gen:schema + gen:docs on the committed merge, never hand-resolved: both
roll-ups moved by exactly +1 (1x +272->+273, 66x +276->+277) and the neighbour
control confirms objectstack-ai#8846's QUERY_OBJECT_MISMATCH survived alongside
REGISTRY_TYPE_NOT_CANONICAL on both enumerating pages.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTKPDRoynY8i3HmdSFUxFj
* chore(spec): regenerate references from the merged tree (objectstack-ai#9111)
Discharges the os-regen deferral recorded against merge commit b4c842c.
Wholesale gen:schema + gen:docs on the committed merge, plus gen:openapi to
restore what gen:schema's cleanup wipes. No generated file hand-resolved.
Neighbour control re-run ledger-wide rather than on a handful: all 241
ERROR_CODE_LEDGER codes scanned across 213 reference pages, zero in an empty
page-set. 225 share the contract.mdx + error-code-ledger.mdx baseline
(REGISTRY_TYPE_NOT_CANONICAL among them); every outlier is a superset that also
names the code in domain prose, never a page short. Roll-ups moved by exactly
one (1x +281->+282, 66x +285->+286).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTKPDRoynY8i3HmdSFUxFj
* chore(docs): regenerate the API reference after the round-3 merge with main
Discharges the os-regen deferral recorded by the merge commit. Wholesale
`gen:schema && gen:docs && gen:openapi` from the merged tree, per
scripts/pm/os-regen-merge.sh step 4.
The regenerated diff against main is now 2 pages, not 11: objectstack-ai#9239 landed on
main since round 2 and stopped the in-shape enum marker from restating
vocabulary cardinality, so a single new error code no longer bumps a
roll-up count on nine unrelated pages.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTKPDRoynY8i3HmdSFUxFj
* chore(docs): regenerate the API reference after the round-4 merge with main
Discharges the os-regen deferral recorded by merge 0da2465. Wholesale
`gen:schema && gen:docs && gen:openapi` from the merged tree.
Round 4 reconciles against objectstack-ai#9269, which registered
UNIQUE_SCOPE_CONFIRMATION_REQUIRED (objectstack-ai#9246) after the round-3 regen — the
staleness that dequeued this PR from the merge queue with CI_FAILURE on
`check:docs` (contract.mdx out of date). Both codes are present; the
generated footprint is the two-page floor: contract.mdx + error-code-ledger.mdx.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTKPDRoynY8i3HmdSFUxFj
---------
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/steststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

spec: register UNIQUE_SCOPE_CONFIRMATION_REQUIRED — the install seam's posture-gate refusal reaches a wire unregistered

2 participants

@os-steve@claude