WS-A1 [PROTO] Typed errors: ErrorInfo message + frozen ErrorReason enum via Status details #273

Closed
opened 2026-07-31 18:12:40 +00:00 by KofTwentyTwo · 1 comment
KofTwentyTwo commented 2026-07-31 18:12:40 +00:00 (Migrated from github.com)

Replace ~90 stringly Status::internal with a nuncio.v1.ErrorInfo (reason enum + metadata) attached via Status details; taxonomy maps each reason to the right canonical code. Size M. Do first (unblocks WS-F typed-error hints + WS-A error-code pass).

Part of the Roadmap-to-9/10 program (design: scratchpad/design/, ROADMAP-TO-9.md). Serial PROTO queue: only one [PROTO] story in flight at a time; WS-A is the sole .proto editor. Detailed brief written at dispatch. DoD per docs/STORY-WORKFLOW.md (engine+proto+CLI+offline mock-only E2E, no fabrication, golden regen on proto change).

Replace ~90 stringly Status::internal with a nuncio.v1.ErrorInfo (reason enum + metadata) attached via Status details; taxonomy maps each reason to the right canonical code. Size M. Do first (unblocks WS-F typed-error hints + WS-A error-code pass). Part of the Roadmap-to-9/10 program (design: scratchpad/design/, ROADMAP-TO-9.md). Serial PROTO queue: only one [PROTO] story in flight at a time; WS-A is the sole .proto editor. Detailed brief written at dispatch. DoD per docs/STORY-WORKFLOW.md (engine+proto+CLI+offline mock-only E2E, no fabrication, golden regen on proto change).
KofTwentyTwo commented 2026-07-31 19:12:47 +00:00 (Migrated from github.com)

Delivered via PR #342 (WS-A1, squash-merged to dev). Typed errors: frozen ErrorReason enum + ErrorInfo{reason,metadata,message}, prost-encoded into the grpc-status-details-bin trailer via nuncio_proto::errors::status(); reason->canonical-code mapping centralized; representative error sites (not-found/validation/not-configured) now carry typed details with the offending id as metadata, each keeping its prior canonical code (existing code()/message() assertions hold). Over-the-wire decode E2E + 4 unit tests. Golden regenerated; contract_stability passes. Sets the typed-error pattern for the contract + CLI (WS-F12). WS-A7 will do the full ~90-site code-correctness sweep (Contacts.Sync Internal->NOT_CONFIGURED etc.).

Delivered via PR #342 (WS-A1, squash-merged to dev). Typed errors: frozen ErrorReason enum + ErrorInfo{reason,metadata,message}, prost-encoded into the grpc-status-details-bin trailer via nuncio_proto::errors::status(); reason->canonical-code mapping centralized; representative error sites (not-found/validation/not-configured) now carry typed details with the offending id as metadata, each keeping its prior canonical code (existing code()/message() assertions hold). Over-the-wire decode E2E + 4 unit tests. Golden regenerated; contract_stability passes. Sets the typed-error pattern for the contract + CLI (WS-F12). WS-A7 will do the full ~90-site code-correctness sweep (Contacts.Sync Internal->NOT_CONFIGURED etc.).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: KofTwentyTwo/nuncio#273