Skip to content

Commit 38d66fe

Browse files
committed
docs(spec): the ledger entry names the flat better-auth error body, not an ADR-0112 envelope
`entries/semantic/18.client-oauth-applications-delete-void.ts` listed "same ADR-0112 error envelope" among the things this change leaves untouched on the wire. The operative claim is true — the error bodies do not move — but the label is wrong for this route. `POST {auth}/oauth2/delete-client` is better-auth's, and its 404 answers the vendor's FLAT shape, `{"error_description":"client not found","error":"not_found"}`, not ObjectStack's nested ADR-0112 envelope. The repo states the distinction verbatim at `packages/plugins/plugin-auth/src/admin-remove-user-gate-ordering.test.ts:86`: "ObjectStack's ADR-0112 envelope nests it; better-auth's flat shape does not". Worth a correction rather than a follow-up because the string is consumer-facing: entries prefixed `18.` project into `spec-changes.json` and `docs/protocol-upgrade-guide.md` when major 18 becomes current, and a reader told "same ADR-0112 error envelope" would write a nested read against a flat body. What the entry asserts is unchanged; only the mislabel moves. `migrations/registry.ts` is regenerated by `gen:migration-registry`, never hand-edited, and a re-run at this head is a byte no-op — the entry is indexed, not merely present. This branch squashes, so its commit messages enter `main` verbatim and this one carries the current state of the disposition question. The ADR-0087 disposition IS claimed: the changeset carries `adr-0087: registered client-oauth-applications-delete-void`, and `check-adr-0087-registration` exits 0 at this head, printing "1 declared-breaking changeset(s), each carrying an ADR-0087 disposition" against that marker. An earlier message on this branch states the disposition is not claimed and that the gate is expected to red until a maintainer settles it; that expectation is superseded — the maintainer settled it as ruling D on #15674 (2026-09-05), and this class routes through ADR-0087 `registered`. Measured at this head, exit codes captured by redirect-then-capture: `gen:migration-registry` re-run byte no-op (`git hash-object` unchanged), `check:spec-changes` "spec-changes.json is up to date.", `check:upgrade-guide` "protocol-upgrade-guide.md is up to date.", `check:adr-0087-registration` self-test (332 assertions) and main both exit 0, the spec migrations suite 117 passed, `@objectstack/spec` typecheck exit 0, and `check:nul-bytes`, `check:doc-authoring`, `check:spec-parsed-alias` exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D47qPfEWVPmhguWgBZCi5N
1 parent 459d703 commit 38d66fe

2 files changed

Lines changed: 6 additions & 2 deletions

File tree

packages/spec/src/migrations/entries/semantic/18.client-oauth-applications-delete-void.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ export const entry: SemanticMigration = {
5151
+ 'now reads the body as text, returns on the empty case, and still parses (and still '
5252
+ 'throws on) a non-empty one — so the ONLY behaviour that moved is the zero-byte '
5353
+ 'case, which is the defect itself. THE WIRE IS BYTE-IDENTICAL: same route, same '
54-
+ 'request body, same status codes, same ADR-0112 error envelope; no Zod schema and '
54+
+ 'request body, same status codes, same error bodies — which on this route are '
55+
+ 'better-auth\'s FLAT `{ error, error_description }`, NOT ObjectStack\'s nested '
56+
+ 'ADR-0112 envelope; no Zod schema and '
5557
+ 'no `packages/spec` declaration moves, no authorable key and no stored '
5658
+ 'representation is involved, so a raw-HTTP caller is unaffected and '
5759
+ '`objectstack migrate meta` has nothing to rewrite. This is registered rather than '

packages/spec/src/migrations/registry.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6180,7 +6180,9 @@ const step18: MigrationStep = {
61806180
+ 'now reads the body as text, returns on the empty case, and still parses (and still '
61816181
+ 'throws on) a non-empty one — so the ONLY behaviour that moved is the zero-byte '
61826182
+ 'case, which is the defect itself. THE WIRE IS BYTE-IDENTICAL: same route, same '
6183-
+ 'request body, same status codes, same ADR-0112 error envelope; no Zod schema and '
6183+
+ 'request body, same status codes, same error bodies — which on this route are '
6184+
+ 'better-auth\'s FLAT `{ error, error_description }`, NOT ObjectStack\'s nested '
6185+
+ 'ADR-0112 envelope; no Zod schema and '
61846186
+ 'no `packages/spec` declaration moves, no authorable key and no stored '
61856187
+ 'representation is involved, so a raw-HTTP caller is unaffected and '
61866188
+ '`objectstack migrate meta` has nothing to rewrite. This is registered rather than '

0 commit comments

Comments
 (0)