Uh oh!
There was an error while loading. Please reload this page.
feat(spec): retire BATCH_PARTIAL_FAILURE, BATCH_COMPLETE_FAILURE, TRANSACTION_FAILED from StandardErrorCode - #9723
Conversation
…NSACTION_FAILED from StandardErrorCode ADR-0049 enforce-or-remove applied to the error vocabulary, per maintainer ruling on #9266 (2026-08-18): no producer has ever emitted any of the three; the batch surface reports these conditions per row via ledger-registered ROLLED_BACK / NOT_ATTEMPTED at HTTP 200. Removes the 3 enum members, the 3 catalog entries (+ count 53 -> 50), the 3 unpinned-baseline rows, swaps the two test fixture uses to surviving codes, adds a retirement refusal pin, an ADR-0112 amendment, and the ADR-0087 semantic notification entry. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016D9wdJR14KKCxz1WgdAzcw
📓 Docs Drift CheckThis PR changes 1 package(s): 4 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 — 115 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 9fd09cec5aa5bb74f4acc762616a357d4ce3de86 && git checkout 9fd09cec5aa5bb74f4acc762616a357d4ce3de86
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 10bbc1971e1d8ac4a2c76e9548a75ad71b96502e ad9ec0702180ccb9cf30f00c7ef7bd7e6232a762 && git checkout -B drift-repro 10bbc1971e1d8ac4a2c76e9548a75ad71b96502e && git merge --no-ff ad9ec0702180ccb9cf30f00c7ef7bd7e6232a762
node scripts/docs-audit/affected-docs.mjs --json 10bbc1971e1d8ac4a2c76e9548a75ad71b96502e
|
…generation) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016D9wdJR14KKCxz1WgdAzcw
Uh oh!
There was an error while loading. Please reload this page.
Fixes#9266
Retires
BATCH_PARTIAL_FAILURE,BATCH_COMPLETE_FAILUREandTRANSACTION_FAILEDfromStandardErrorCode, per the maintainer ruling of 2026-08-18 (verbatim, untranslated): 「9266 同意 A」 — ADR-0049 enforce-or-remove applied to the error vocabulary. Evidence of record is the dev report on #9266: zero producers ever (measured by whole-tree grep andgit log -S), zero consumers, and the real batch failure vocabulary (per-rowROLLED_BACK/NOT_ATTEMPTED, ledger-registered, HTTP 200) already richer than an envelope code could be.Ruled scope, delivered
packages/spec/src/api/errors.zod.ts(with a retirement comment naming the ADR-0112 amendment).content/docs/api/error-catalog.mdx, whole## Batch Operation Errorssection (it covered nothing else); advertised count 53 → 50 on the same page (the D7 bijection guard pins both directions and the count; the spec suite is green at 50).scripts/error-status-unpinned-baseline.json(shrink-only; the census now reportsunpinned: 34 (baselined: 34),ungraded: 0, and nonowPinnedfindings — the baseline rows moved in the same diff as the doc entries).batch.test.tsenvelope fixture now usesINTERNAL_ERROR;errors.test.ts's batch-codes acceptance block is replaced by a retirement refusal pin: all three retired spellings failStandardErrorCode.safeParse.docs/adr/0112-error-code-vocabulary-and-ledger.md, carrying the ruling verbatim, the measurement, and the ADR-0087 disposition.check:generatedagainst the rebuilt dist: theapi-surface/snapshot is unchanged by design (it records that an export exists, never what it resolves to —StandardErrorCodestill exists, narrowed). The regenerated artifacts that did move arecontent/docs/references/**(contract.mdx, errors.mdx, error-code-ledger.mdx viagen:docs) andpackages/spec/src/migrations/registry.ts(viagen:migration-registry).@objectstack/specminor (house rule: never major), body carries the FROM → TO mapping, the one-line fix, and the ADR-0087 marker.ADR-0087 conversion-entry judgement: registered, as a notification channel
Callers pattern-matching the retired codes are owed a ledger entry, and it is registered:
standard-error-code-batch-members-retired(semantic entry,packages/spec/src/migrations/entries/semantic/18.standard-error-code-batch-members-retired.ts). Reasoning:sys_metadatarow for the D2 chain to rewrite, and a dead branch has no correct mechanical rewrite target (the per-row codes carry strictly more information than the envelope verdict the branch expected). This matches the two standing precedents for non-stored-metadata surfaces:enhanced-api-error-field-errors-renamed(a response surface) anddriver-sql-upsert-cross-row-identity-merge-refused(a code-path API), both of which registered semantic entries explicitly as "the notification channel".objectstack migrate meta, the upgrade guide): the accept-set narrowing (clause-②) is observable outside this repo — a consumer test fixture or fake server constructing anApiErrorwith a retired spelling parses today and refuses after upgrade — and for that author the entry carries the prescription (delete the dead branch; readresults[].errors[].code).adr-0087: registered standard-error-code-batch-members-retired, verified bycheck-adr-0087-registration(green).Verification (all at the head commit; union re-run noted in the report)
origin/mainbefore editing: census byte-identical to the card (3 ungraded at :465/:470/:475); producer grep still empty; PR fix(tooling): error-status gate names the real cause when a code leaves the ungraded set (#9563) #9577's gate-message fix (793567fdc) confirmed onorigin/main.pnpm --filter @objectstack/spec test— 412 files, 10963 passed (includes the D7 bijection guard at 50 and the new refusal pin);pnpm --filter @objectstack/spec typecheckgreen.packages/*+packages/*/*turbo build closure (70 tasks) green against the rebuilt spec — the downstream-consumer direction.pnpm --filter @objectstack/runtime test— 171 files, 2543 passed, including the The dispatcher emits unregisterederror.codevalues verbatim — three suites pin bodies thatApiErrorSchemawould reject #8087 error-envelope conformance pins (error-envelope.conformance,package-door-error-parity,actions-validation-envelope).packages/client(importsStandardErrorCodefrom@objectstack/spec/api, i.e. through the rebuilt dist.d.ts) went red on exactly the retired spelling —TS2322: Type '"BATCH_PARTIAL_FAILURE"' is not assignable to … 50-member union— while the survivor line stayed green; probe deleted, clean typecheck re-confirmed. Direction as predicted: red, on the retired member only.check:error-status-conformanceon the diff: green —ungraded: 0,unpinned: 34 (baselined: 34), nonowPinnedfinding (PM mechanism assumption 1 confirmed: with fix(tooling): error-status gate names the real cause when a code leaves the ungraded set (#9563) #9577 landed, the two-cause message is in the self-test; on this diff the question never arises because baseline rows and doc entries move together).node scripts/pm/dispatch-gates.mjs(no paths — merge-base derivation) added on the actual diff, all green; details in the dev report.Not swept (deliberately)
scripts/check-error-status-conformance.mjsuseTRANSACTION_FAILEDas a synthetic fixture string — self-contained, not the enum; out of ruled scope.docs/audits/2026-06-handwritten-docs-accuracy-followups.mdmentioningTRANSACTION_FAILEDis a dated audit record, not a live claim.Generated by Claude Code
Generated by Claude Code