Uh oh!
There was an error while loading. Please reload this page.
feat(spec): register UNIQUE_SCOPE_CONFIRMATION_REQUIRED in ERROR_CODE_LEDGER (#9246) - #9269
Conversation
…_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
📓 Docs Drift CheckThis PR changes 2 package(s): 3 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 1 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 117 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop):
|
Uh oh!
There was an error while loading. Please reload this page.
…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
…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>
Fixes#9246
What
Registers
UNIQUE_SCOPE_CONFIRMATION_REQUIREDunder@objectstack/cloud-connectioninERROR_CODE_LEDGER(ADR-0112 D3), and — in the same change, per the armed ratchet — deletes the now-dischargedpending-registrationrow frompackages/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 theisolatedtenancy posture. It was already on the wire with a live reader —os package installbranches 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-routedoor). PR #9247 landed the classification row; this PR is the registration half of the hand-off.Changes
packages/spec/src/api/error-code-ledger.zod.ts— one row under@objectstack/cloud-connection, alphabetical, with a[#9246]provenance comment in the spec: register the dispatcher conformance gate's reported error codes in ERROR_CODE_LEDGER (spec half of the #8087 ruling) #8846-row style. Synonym admission checked: not an HTTP reason phrase, and the tokenCONFIRMATIONappears in no standard-catalog member, sostandardSynonymOfcannot flag it.packages/runtime/src/dispatcher-error-vocabulary.ts— the stalepending-registrationrow deleted; the section comment now records the second full ratchet cycle (check-dispatcher-error-vocabulary is blind to a non-literalcode:in an object literal — a constant or template produces no finding, silently #9223 report, spec: register UNIQUE_SCOPE_CONFIRMATION_REQUIRED — the install seam's posture-gate refusal reaches a wire unregistered #9246 registration).packages/runtime/src/error-envelope.conformance.test.ts— comment-only: the derivation-drive case's prose described a one-member pending list; it now records the discharge. No assertion changed (the pending loops are empty again by design; the gate reconciles both directions mechanically).content/docs/references/api/contract.mdx,content/docs/references/api/error-code-ledger.mdx— regenerated viapnpm --filter @objectstack/spec check:generated --fix(gen:docs), never hand-edited. Exactly 2 pages, per the post-fix(spec-docs): the in-shape enum marker stops restating vocabulary cardinality — one new error code touches 2 pages, not 11 #9239 generator; neighbour check: the new code appears in both full-vocabulary lists beside its siblings, and theApiErrorSchema.codeenum counter moved +281 to +282..changeset/register-unique-scope-confirmation-required.md—@objectstack/specpatch, following the feat(spec): register the 9 unregistered REST wire codes the #8885 sweep found; pin the ADR-0106 D6 tier-3 emission #9177/feat(spec): register the dispatcher conformance gate's reported error codes in ERROR_CODE_LEDGER #9170 level convention. No wire behavior changes: the value was already emitted; the schema now accepts what the wire carries.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) andpnpm 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'typecheckgreen.scripts/pm/dispatch-gates.mjsagainst 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 nodistin 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-routedoor 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