Finding
Two production catch arms rethrow a failed read of the repository's label catalog (GET /repos/{owner}/{repo}/labels) and neither is reached by the bundle suite:
| arm |
file:line |
reached from |
could not list the repository labels |
src/utils/labeling.ts:135 (assertLabelsExist, called by labelIssue at :78) |
every /kind, /priority, /area-style prefixed label command |
could not list the repository labels |
src/cronJobs/labelSync.ts:55 (labelSync) |
the label-sync cron / workflow_dispatch job |
Evidence (main @ aa6a0f8, Node v26.10.0, vitest 5.0.3):
Unlike the arms in #386, these are reachable from the shipped bundle: a GitHub API outage during a label command surfaces exactly this message to the user, so the wording and the no-write guarantee are worth pinning end-to-end.
Recommendation
One new bundle test file, nothing else touched:
Cluster: label-catalog read failure — disjoint from #312 (label-sync write refusals / description drift) and from the /kind write refusal in labelWriteRefused.test.ts.
Priority
- Impact: medium (covered by unit tests, not end-to-end)
- Effort: low
Filed by quality agent (hold-gated mode)
🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5q9t | SHA: aa6a0f8
— hive: agent=quality backend=copilot model=claude-fable-5.1
Finding
Two production catch arms rethrow a failed read of the repository's label catalog (
GET /repos/{owner}/{repo}/labels) and neither is reached by the bundle suite:could not list the repository labelssrc/utils/labeling.ts:135(assertLabelsExist, called bylabelIssueat:78)/kind,/priority,/area-style prefixed label commandcould not list the repository labelssrc/cronJobs/labelSync.ts:55(labelSync)label-synccron /workflow_dispatchjobEvidence (
main@ aa6a0f8, Node v26.10.0, vitest 5.0.3):npx vitest run --coverage→ 100 % lines; both arms are covered by__tests__/utils/utilsErrorPaths.test.tsand__tests__/cronJobs/via a mocked octokit.npm run test:coverage:e2eon a scratch branch =origin/main+ the heads of all 33 open hold-gated bundle PRs (test(bundle): drive root-OWNERS authorization on an issue and the OWNERS-based /lgtm refusal through dist/index.js #283 … test(bundle): drive the sweep cron's enqueued outcome (sweep.ts:75) through dist/index.js #385; 53 files / 420 tests pass) →labelSync.ts97.91 % lines with only line 55 uncovered,labeling.ts84.61 % with 135 among the uncovered lines. Every existing bundle test routesGET /labelsto 200 (labelWriteRefused.test.ts,labelSyncFailureArms.test.tson test(bundle): drive label-sync's refused-write and description-drift arms through dist/index.js #312,bundle.test.ts), so no fixture ever makes the catalog read fail.try, so a 500 from the fake GitHub drives them;@octokit/restdoes not retry without the retry plugin.Unlike the arms in #386, these are reachable from the shipped bundle: a GitHub API outage during a label command surfaces exactly this message to the user, so the wording and the no-write guarantee are worth pinning end-to-end.
Recommendation
One new bundle test file, nothing else touched:
__tests__/bundle/labelListingRefused.test.ts:/kind cleanupwithGET /labels→ 500 fails witherror handling issue comment: Error: could not list the repository labels: HttpError: boomand makes no write;jobs: label-syncwith the same route fails witherror handling cron job: Error: could not list the repository labels: HttpError: boomand makes no POST/PATCH.Cluster: label-catalog read failure — disjoint from #312 (label-sync write refusals / description drift) and from the
/kindwrite refusal inlabelWriteRefused.test.ts.Priority
Filed by quality agent (hold-gated mode)
🐝 Hive Agent:
quality| Instance:hosted-available-lke648397-260827-5q9t| SHA:aa6a0f8— hive: agent=quality backend=copilot model=claude-fable-5.1