What to build
Mechanical migration of the remaining ~165 HTTPException(detail=...) sites onto the error envelope proven in #55, plus documenting the pydantic 422 validation-error shape as contract (per the #54 decision).
Scope notes:
- Every router and helper that raises client-visible errors adopts the shared helper.
- English
detail text is preserved verbatim where reasonable — this sweep adds codes, it does not reword prose.
- Tests that assert on English message text move to asserting codes.
Acceptance criteria
Blocked by
What to build
Mechanical migration of the remaining ~165
HTTPException(detail=...)sites onto the error envelope proven in #55, plus documenting the pydantic 422 validation-error shape as contract (per the #54 decision).Scope notes:
detailtext is preserved verbatim where reasonable — this sweep adds codes, it does not reword prose.Acceptance criteria
HTTPException(detail=...)without acoderemains in client-visible pathsBlocked by