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
fix(runtime): carry the producer's userMessage at the dispatcher's PERMISSION_DENIED door (#13811)
`HttpDispatcher.dispatch`'s foot catch recognises `isPermissionDeniedError` and
answers the refusal itself, so a marked denial never reaches the throw-transparent
exit #13241 repaired and lost its `userMessage` at this second door instead.
The read is `declaredUserMessage` (`@objectstack/types`) — the one rule every
boundary applies — and the mark rides as a declared top-level sibling via the
`extra` bag, exactly as the sibling `errorFromThrown` carries it.
#7450's withhold is untouched: `details` still carries only the ROUTE-derived
object, and the gate's positions/permissionSets/cascade child stay server-side.
The PR #13619 §2 carve-out pin is MOVED, not fixed green — its docblock asked for
exactly that when the denial path stopped dropping the mark.
Claude-Session: https://claude.ai/code/session_01UngCYXF98BVpYA9hfz6NYk
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
{status: 400,code: 'VALIDATION_FAILED',prose: 'measure revenue not additive over stage',mark: 'Pick a measure that adds up across stages.'},
226
234
// ⚠️ `FORBIDDEN`, deliberately NOT `PERMISSION_DENIED` — see the
227
235
// carve-out pinned below this table: a throw spelling
228
-
// `PERMISSION_DENIED` never arrives at this exit at all.
236
+
// `PERMISSION_DENIED` never arrives at this exit at all. It is
237
+
// answered by `HttpDispatcher.dispatch`'s foot catch, which since
238
+
// #13623 carries the mark itself; this row keeps a status the foot
239
+
// catch does NOT intercept, so it still measures THIS exit's 403.
229
240
{status: 403,code: 'FORBIDDEN',prose: 'principal lacks cube_read on pipeline',mark: 'You do not have access to this report. Ask an admin for the Reporting role.'},
230
241
{status: 409,code: 'RECORD_LOCKED',prose: 'cube pipeline locked by in-flight rebuild',mark: 'This report is being rebuilt. Try again shortly.'},
231
242
{status: 503,code: 'SERVICE_UNAVAILABLE',prose: 'warehouse pool exhausted',mark: 'Reporting is briefly offline.'},
0 commit comments