You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Batch 3 of ADR-0112's rollout (#3841; batch 1 = #3988, batch 2 = #4003). Runs after batch 2 — until every emitter speaks the catalog, the compatibility layer below is still load-bearing.
Retire error.type as a code carrier. Producers still emitting the code under type move it to code; type either disappears or is redeclared for its original purpose.
Fix the client's category / retryable reads. They currently look for these under nesting that the envelope never standardized; align with ApiErrorSchema/EnhancedApiErrorSchema as declared.
Dedupe the connector-side ErrorCategory / RetryStrategy twins — the connector packages carry local copies of enums the spec already exports; import from @objectstack/spec instead.
All four boxes are already done — three by work that landed in parallel with batches 1–2, one inside batch 2 itself. Verified each rather than taking the commit messages' word for it:
error-envelope.conformance.test.ts asserts body.error.type is undefined, and carries a ratchet scanning the envelope helpers for type: 'SCREAMING'. 27 tests green.
The chain is down to the two live envelopes' declared spots (errorBody.code, errorBody.error.code). The pre-#3842error.details.code dig is gone, on the reasoning that SDK and server ship as one changesets fixed group — and that ADR-0112's value renames mean location-compat without value-compat protects nothing anyway.
ConnectorErrorCategorySchema / ConnectorRetryStrategySchema in integration/connector.zod.ts; grep 'export …ErrorCategory' over spec/src now returns exactly one definition. Side effect worth knowing: the api-side pair now appears in the generated API reference at all — the name collision had been silently dropping both.
@objectstack/client full suite green (200 tests).
Closing as completed. With #3988 (batch 1), #4021 (batch 2) and objectui#2977 (the console's tolerant read) merged, ADR-0112's rollout is finished end to end: one vocabulary, schema-enforced, with check:error-code-casing in lint.yml to stop a 209th lowercase literal landing the way the first 208 did.
The one open descendant is #3977 — the field-level vocabulary, which ADR-0112 D6 deliberately scoped out.
Activity
os-zhuang commentedon Jul 30, 2026
All four boxes are already done — three by work that landed in parallel with batches 1–2, one inside batch 2 itself. Verified each rather than taking the commit messages' word for it:
error.typeas a code carriererror-envelope.conformance.test.tsassertsbody.error.typeisundefined, and carries a ratchet scanning the envelope helpers fortype: 'SCREAMING'. 27 tests green.errorBody.code,errorBody.error.code). The pre-#3842error.details.codedig is gone, on the reasoning that SDK and server ship as one changesets fixed group — and that ADR-0112's value renames mean location-compat without value-compat protects nothing anyway.category/retryablenesting readerrorperApiErrorSchema; the old top-level read returnedundefinedagainst every conformant server.ErrorCategory/RetryStrategytwinsConnectorErrorCategorySchema/ConnectorRetryStrategySchemainintegration/connector.zod.ts;grep 'export …ErrorCategory'overspec/srcnow returns exactly one definition. Side effect worth knowing: the api-side pair now appears in the generated API reference at all — the name collision had been silently dropping both.@objectstack/clientfull suite green (200 tests).Closing as completed. With #3988 (batch 1), #4021 (batch 2) and objectui#2977 (the console's tolerant read) merged, ADR-0112's rollout is finished end to end: one vocabulary, schema-enforced, with
check:error-code-casingin lint.yml to stop a 209th lowercase literal landing the way the first 208 did.The one open descendant is #3977 — the field-level vocabulary, which ADR-0112 D6 deliberately scoped out.
Generated by Claude Code