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
📝 docs(domain-error-http-mapping): fill the verified-by column
Every AC now names the command that proves it. Only the fills the drift check
judged honest: AC-8 cites both specs, because the booted app proves the status
and body while the unit spec proves the ERROR-level log; AC-11 cites the unit
spec alone, since log level is not an HTTP-observable property.
D-020 records why the non-domain path delegates rather than reproduces.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: .claude/features/domain-error-http-mapping/charter.md
+9-9Lines changed: 9 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -103,17 +103,17 @@ correctly and still never be selected by Nest, and no unit test would notice.
103
103
104
104
| id | criterion | user-visible | verified by |
105
105
|----|-----------|--------------|-------------|
106
-
| AC-1 | An authenticated request whose user record no longer exists is answered `404`, not `500`| yes ||
107
-
| AC-2 | A request from a user who is not a member of the target organization is answered `403`| yes ||
108
-
| AC-3 | A request on an organization-admin-only route from a non-admin is answered `403`| yes ||
109
-
| AC-4 | A request scoped to a space the caller is not a member of is answered `404`, and is byte-identical to the answer for a space that does not exist | yes ||
110
-
| AC-5 | A request on a space-admin-only route from a space member who is not a space admin is answered `403`| yes ||
111
-
| AC-6 | The response body for AC-1..AC-5 carries a stable snake_case `reason` a client can branch on without parsing prose | yes ||
106
+
| AC-1 | An authenticated request whose user record no longer exists is answered `404`, not `500`| yes |`nx test api --testNamePattern='the domain exception filter over HTTP'`|
107
+
| AC-2 | A request from a user who is not a member of the target organization is answered `403`| yes |`nx test api --testNamePattern='the domain exception filter over HTTP'`|
108
+
| AC-3 | A request on an organization-admin-only route from a non-admin is answered `403`| yes |`nx test api --testNamePattern='the domain exception filter over HTTP'`|
109
+
| AC-4 | A request scoped to a space the caller is not a member of is answered `404`, and is byte-identical to the answer for a space that does not exist | yes |`nx test api --testNamePattern='the domain exception filter over HTTP'`|
110
+
| AC-5 | A request on a space-admin-only route from a space member who is not a space admin is answered `403`| yes |`nx test api --testNamePattern='the domain exception filter over HTTP'`|
111
+
| AC-6 | The response body for AC-1..AC-5 carries a stable snake_case `reason` a client can branch on without parsing prose | yes |`nx test api --testNamePattern='the domain exception filter over HTTP'`|
112
112
| AC-7 | None of the five reworded access-error messages that reach a client contains a UUID or any other identifier | yes |`nx test node-utils --testNamePattern='access error messages'`|
113
-
| AC-8 | An error class that has not declared a kind is still answered `500` with today's body and today's ERROR-level log | no ||
114
-
| AC-9 | An `HttpException` thrown by a controller reaches the client with its own status and its own body, untouched by the filter | no ||
113
+
| AC-8 | An error class that has not declared a kind is still answered `500` with today's body and today's ERROR-level log | no |`nx test api --testNamePattern='the domain exception filter over HTTP'` + `nx test node-utils --testNamePattern='DomainExceptionFilter'`|
114
+
| AC-9 | An `HttpException` thrown by a controller reaches the client with its own status and its own body, untouched by the filter | no |`nx test api --testNamePattern='the domain exception filter over HTTP'`|
115
115
| AC-10 | A domain error passing through `withSpan` does not set the span status to ERROR; a non-domain error still does, and both are still recorded as exceptions | no |`nx test node-utils --testNamePattern='withSpan'`|
116
-
| AC-11 | An access denial is logged at `warn` without a stack trace, as `ExpectedAuthError`'s docstring has always asked | no ||
116
+
| AC-11 | An access denial is logged at `warn` without a stack trace, as `ExpectedAuthError`'s docstring has always asked | no |`nx test node-utils --testNamePattern='DomainExceptionFilter'`|
0 commit comments