44" @objectstack/runtime " : minor
55" @objectstack/cloud-connection " : minor
66" @objectstack/plugin-auth " : minor
7+ " @objectstack/plugin-approvals " : minor
78" @objectstack/plugin-webhooks " : minor
89" @objectstack/service-messaging " : minor
910" @objectstack/service-automation " : minor
1011" @objectstack/metadata-protocol " : minor
1112" @objectstack/metadata-core " : minor
13+ " @objectstack/trigger-api " : minor
1214" @objectstack/hono " : minor
1315---
1416
@@ -23,26 +25,42 @@ conditions collapse onto the standard catalog rather than keeping a synonym:
2325` unauthorized ` /` unauthenticated ` → ` UNAUTHENTICATED ` , ` forbidden ` →
2426` PERMISSION_DENIED ` , ` not_found ` → ` RESOURCE_NOT_FOUND ` , ` internal ` →
2527` INTERNAL_ERROR ` , ` unavailable ` → ` SERVICE_UNAVAILABLE ` , ` not_supported ` →
26- ` NOT_IMPLEMENTED ` , ` bad_request ` → ` INVALID_REQUEST ` . Domain conditions get
27- codes registered in ` ERROR_CODE_LEDGER ` (` MARKETPLACE_STORAGE_FAILED ` ,
28+ ` NOT_IMPLEMENTED ` , ` bad_request ` → ` INVALID_REQUEST ` . Domain conditions get codes
29+ registered in ` ERROR_CODE_LEDGER ` (` MARKETPLACE_STORAGE_FAILED ` ,
2830` PLUGIN_MANIFEST_INVALID ` , ` ITEM_LOCKED ` , ` DELIVERY_NOT_ELIGIBLE ` , …). Swept:
2931` cloud-connection ` , ` plugin-auth ` , ` hono ` , ` metadata-protocol ` , ` rest ` ,
30- ` service-messaging ` , ` service-automation ` .
32+ ` service-messaging ` , ` service-automation ` , ` trigger-api ` .
3133
32- ** Three routes stop putting a code in the message slot.** The webhook redeliver
33- route and two ` rest ` routes answered `{ success: false, error: '<code >',
34- message }` — the code occupying ` error`, the declared object envelope nowhere.
35- They now emit ` error: { code, message } ` . Clients reading ` body.error ` as a
36- string on these routes must read ` body.error.code ` .
34+ Branch on ` error.code ` values rather than pattern-matching their case: the
35+ console's fix for the same rename (objectui #2977 ) reads codes case-insensitively
36+ for exactly this reason, and that is the pattern to copy in your own consumers if
37+ you support servers on both sides of the change.
38+
39+ ** Four routes stop putting a code in the message slot.** The webhook redeliver
40+ route, the API-trigger webhook, and two ` rest ` routes answered
41+ ` { success: false, error: '<code>', message } ` — the code occupying ` error ` , the
42+ declared object envelope nowhere. They now emit ` error: { code, message } ` , and
43+ three API-trigger branches gained a message they never had. Clients reading
44+ ` body.error ` as a string on those routes must read ` body.error.code ` .
3745
3846** ` ConnectorErrorCategory ` / ` ConnectorRetryStrategy ` ** (ADR-0112 D9a):
3947` @objectstack/spec ` exported two mutually incompatible ` ErrorCategory ` types and
4048two ` RetryStrategy ` types. The connector-side pair is renamed; importers of the
4149` integration ` subpath update the name. Side effect: the api-side ` ErrorCategory `
42- and ` RetryStrategy ` now appear in the generated API reference at all — the
43- name collision had been silently dropping them.
50+ and ` RetryStrategy ` now appear in the generated API reference at all — the name
51+ collision had been silently dropping them.
52+
53+ ** ` OAUTH_REGISTER_FAILED ` replaces an unbounded code source.** The OAuth client
54+ registration route put better-auth's arbitrary ` body.error ` string straight into
55+ ` error.code ` . The code is now ours and the upstream discriminator moved to
56+ ` details.upstreamError ` .
57+
58+ ** Not swept, deliberately.** ` sys_metadata_audit.code ` keeps its lowercase values
59+ (ADR-0112 D6b): it is persisted audit history, and the same column holds
60+ non-error outcomes (` ok ` , ` lock_override ` ). Diagnostics records that ship inside a
61+ 200 keep theirs (D6c), as do field-level codes (D6, #3977 ) and the CLI's
62+ ` --json ` output contract.
4463
45- ** Not swept, deliberately.** ` sys_metadata_audit.code ` keeps its lowercase
46- values (ADR-0112 D6b): it is persisted audit history, and the same column holds
47- non-error outcomes (` ok ` , ` lock_override ` ). Field-level codes stay as they are
48- (D6, #3977 ).
64+ A ` check:error-code-casing ` CI guard now fails on a new lowercase literal in a
65+ code position, since the ledger's casing rule can only police codes that someone
66+ registers.
0 commit comments