Finding
Every command handler opens with the same guard — github context payload missing issue number (or pull number in cc.ts/uncc.ts, pr number in onPrLgtm.ts) — thrown before the first API call when the event payload carries no number. The unit suite reaches all of them, but the end-to-end suite (npm run test:coverage:e2e, which runs dist/index.js against the fake GitHub) never does: every bundle fixture carries issue.number / pull_request.number, so no bundle test has ever observed the guard's message surface through handleIssueComment's error collection into core.setFailed.
Evidence on main @ 3fc21f2:
- Unit:
npx vitest run --coverage — 100 % lines; every guard line hit.
- End-to-end:
npm run test:coverage:e2e — 77.9 % lines overall; these 18 statements have 0 hits:
| file |
line |
message |
src/issueComment/assign.ts |
29 |
missing issue number |
src/issueComment/unassign.ts |
25 |
missing issue number |
src/issueComment/cc.ts |
26 |
missing pull number |
src/issueComment/uncc.ts |
25 |
missing pull number |
src/issueComment/approve.ts |
44 |
missing issue number |
src/issueComment/retitle.ts |
26 |
missing issue number |
src/issueComment/close.ts |
24 |
missing issue number |
src/issueComment/lock.ts |
33 |
missing issue number |
src/issueComment/reopen.ts |
21 |
missing issue number |
src/issueComment/milestone.ts |
28 |
missing issue number |
src/issueComment/meow.ts |
35 |
missing issue number |
src/issueComment/trigger.ts |
207 (prepare, shared by /retest, /test, /ok-to-test) |
missing issue number |
src/labels/remove.ts |
25 |
missing issue number |
src/labels/hold.ts |
30 |
missing issue number |
src/labels/lgtm.ts |
39 |
missing issue number |
src/labels/fixed.ts |
70 (requireIssueNumber) |
missing issue number |
src/labels/prefixed.ts |
146 (requireIssueNumber) |
missing issue number |
src/pullReq/onPrLgtm.ts |
19 |
missing pr number |
Overlap check: overlaying the test files of all 31 open hold-gated bundle PRs (#242–#341) onto main and re-running test:coverage:e2e leaves every one of these 18 lines at 0 hits, so no open PR claims this ground.
Recommendation
Priority
- Impact: medium — covered by unit tests but not end-to-end (18 lines across 18 files; e2e 77.9 % → 79.16 % lines)
- Effort: low
Filed by quality agent (hold-gated mode)
🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5q9t | SHA: 3fc21f2
— hive: agent=quality backend=copilot model=claude-fable-5.1
Finding
Every command handler opens with the same guard —
github context payload missing issue number(orpull numberincc.ts/uncc.ts,pr numberinonPrLgtm.ts) — thrown before the first API call when the event payload carries no number. The unit suite reaches all of them, but the end-to-end suite (npm run test:coverage:e2e, which runsdist/index.jsagainst the fake GitHub) never does: every bundle fixture carriesissue.number/pull_request.number, so no bundle test has ever observed the guard's message surface throughhandleIssueComment's error collection intocore.setFailed.Evidence on
main@ 3fc21f2:npx vitest run --coverage— 100 % lines; every guard line hit.npm run test:coverage:e2e— 77.9 % lines overall; these 18 statements have 0 hits:src/issueComment/assign.tssrc/issueComment/unassign.tssrc/issueComment/cc.tssrc/issueComment/uncc.tssrc/issueComment/approve.tssrc/issueComment/retitle.tssrc/issueComment/close.tssrc/issueComment/lock.tssrc/issueComment/reopen.tssrc/issueComment/milestone.tssrc/issueComment/meow.tssrc/issueComment/trigger.tsprepare, shared by/retest,/test,/ok-to-test)src/labels/remove.tssrc/labels/hold.tssrc/labels/lgtm.tssrc/labels/fixed.tsrequireIssueNumber)src/labels/prefixed.tsrequireIssueNumber)src/pullReq/onPrLgtm.tsOverlap check: overlaying the test files of all 31 open hold-gated bundle PRs (#242–#341) onto
mainand re-runningtest:coverage:e2eleaves every one of these 18 lines at 0 hits, so no open PR claims this ground.Recommendation
__tests__/bundle/missingNumberGuards.test.ts: for each command in the table, rundist/index.json anissue_commentpayload withissue.numberdeleted and assert exit 1 pluserror handling issue comment: Error: github context payload missing issue|pull number: [object Object]; for the hand-written commands that read nothing before the guard (/assign,/cc,/retitle,/close,/lock,/reopen,/milestone,/meow,/retest) also assert the fake GitHub received no request; and runjobs: lgtmon apull_requestsynchronizepayload withpull_request.numberdeleted foronPrLgtm.Priority
Filed by quality agent (hold-gated mode)
🐝 Hive Agent:
quality| Instance:hosted-available-lke648397-260827-5q9t| SHA:3fc21f2— hive: agent=quality backend=copilot model=claude-fable-5.1