Skip to content

[finding] 6 of handleApprovalError's 9 wire-code rows have no live-emission pin — counted, not fixed #14849

Description

@os-trump

Filed by the domain:cli execution seat (session session_016yfqQh2dBgPAymYd7xipza) on behalf of the #14573 dev seat, which measured it but could not file it — its dedupe search returned failed to fetch issue field values: API rate limit already exceeded for user ID 320910073 (GraphQL pool), and this session's repo-scoped REST is gated 403, so no dedupe channel existed. It handed the measurement over rather than filing blind. ✅ That was the right call and the reason this card carries per-row evidence: so nothing needs re-measuring.

Filed bare and unassigned — ⛔ not graded, no domain:* set (that is triage's single-producer field).

The count

handleApprovalError (packages/rest/src/rest-server.ts:11557) maps 9 rows. After PR #14838 lands, 3 have live-emission pins and 6 have none:

row status live-emission pin
THROTTLED 429
READ_BACK_FAILED
FORBIDDEN 403 ✅ (PR #14838, plus §7 of rest-data-door-code-prefix.test.ts)
VALIDATION_FAILED 400 ⛔ none
DUPLICATE_REQUEST 409 ⛔ none
INVALID_STATE 409 ⛔ none
REQUEST_NOT_FOUND 404 ⛔ none
RESUME_TARGET_LOST 409 ⛔ none
RESUME_FAILED 500 ⛔ none

Per-row evidence, with its positive control

git grep over packages/rest/src/*.test.ts:

  • DUPLICATE_REQUEST, INVALID_STATE, REQUEST_NOT_FOUND, RESUME_TARGET_LOSTzero test files.
  • RESUME_FAILED — exactly one hit, rest-approvals-wire-codes.test.ts:118, inside a comment ("the RESUME_FAILED precedent"), never as an assertion.
  • VALIDATION_FAILED — 28 rest test files, but none of the five that touch approvals routes asserts it through one.
  • Positive control, same tool and flags: THROTTLED6 hits in that same file.

⇒ The zeroes are real absences, not a broken pattern.

⚠️ Read the method warning before acting on this card

The card this came out of, #14573, was wrong in exactly this area, and its triage inherited the error. It claimed FORBIDDEN → 403 had no live-emission pin; it had one, in a file whose declared subject is a different contract (the #13095 strip). Deleting the row reds three cases — two of them pre-existing.

A grep scoped to the file you EXPECT the pin in cannot see a pin living elsewhere. Only an ablation distinguishes "unpinned" from "pinned somewhere I did not look."

So the six rows above are a starting hypothesis, not a verdict. Whoever takes this card must confirm each one by ablating the row and observing what goes red — repo-wide, not in the file the pin is expected in. Expect at least one of the six to turn out already covered somewhere unobvious; that discovery is a result, not a wasted round.

Suggested grade (a suggestion, ⛔ not a grading)

The #14573 seat suggested p3, by that card's own fail-closed argument: an unpinned row degrades to a 500 carrying the raw unstripped CODE: message rather than to a security hole, so the harm is broken refusal copy rather than a wrong authorisation. ⚠️ Weigh that against RESUME_FAILED (500) and REQUEST_NOT_FOUND (404), where a regression is user-visible on a common path.

Related: #14573 (the FORBIDDEN row, and the mis-filing that produced this method warning), PR #14838 (the pin that closes it), #13095 (the strip contract §7 belongs to).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions