[quality] mutation survivors in src/cronJobs/sweep.ts: blunderbuss explicit:false (:163) and the since-window edge (:149,:178,:179)
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- github-actions, typescript
Direzione di ricerca
Read src/cronJobs/sweep.ts alongside __tests__/cronJobTest/sweep.test.ts, especially the candidate filtering and reviewer request cases. Add the four recommended boundary and ignore_authors cases, using the existing ago, prowYaml and servePulls helpers; run the sweep tests and confirm each case catches its corresponding mutation. A linked pull request is already open for this work.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Finding
Line coverage on main @ 88241f4 is 100 % in every file of src/cronJobs/ and src/plugins/ under both suites (npm run test:coverage: 163 files / 2206 tests, 100 % lines / 99.75 % branches; npm run test:coverage:e2e: 83 files / 502 tests, src/cronJobs 100 % lines / 98.03 % branches, src/plugins 100 % lines / 98.93 % branches), so there is no coverage gap to file. The question left is whether the tests pin what they execute. A single-operator mutation probe over src/cronJobs/{sweep,lgtm,labelSync,handleCronJob}.ts and src/plugins/{ownersLabel,blunderbuss,requireMatchingLabel,lgtmBinding}.ts (258 mutants: ||/&&, ===/!==, </<=, >/>=, true/false, ??/||, ! removal, + 1/+ 0), each first run against the module's own test file and every survivor then re-run with npx vitest related <file> --run, leaves four non-equivalent survivors, all in src/cronJobs/sweep.ts, the same cluster #513 did not touch:
-
sweep.ts:163—requestOwnersReviewers(…, { explicit: false, … })mutated toexplicit: truepasses all 4 related files / 77 tests.explicit: falseis what makes the sweep honourblunderbuss.ignore_authors(andignore_drafts; the sweep's own draft check at line 153 masks that half). No sweep test configuresignore_authors, so a regression would have the scheduled job request reviewers on every dependabot pull request while thepull_requesthandler still skips them, and nothing would notice. -
sweep.ts:178—new Date(pr.updated_at) >= sincemutated to>survives: no candidate is ever updated exactly at the start of the window, so whether the window is closed or open atsinceis unpinned. -
sweep.ts:179— the second<inconst exhausted = items.length < pageSize || new Date(items[items.length - 1].updated_at) < sincemutated to<=survives: a full page whose oldest entry sits exactly onsincewould wrongly be treated as the last page and the next page never fetched.keeps paging while a full page is still inside the window(sweep.test.ts:154) has its oldest entry 100 s inside the window, not on the edge. -
sweep.ts:149—new Date(pr.created_at) < plugins.sincemutated to<=survives: a pull request opened exactly atsinceis fresh (gets reviewers) today, and nothing says so.
Survivors judged equivalent or unobservable, needing no test: ??→|| on blunderbuss.ts:31,33,35,174, sweep.ts:141,153, labelSync.ts:133 (the left operand is validated >= 1, a boolean, or an array/null, so || and ?? agree); blunderbuss.ts:58 (remaining === 0 yields an empty sample either way); required: true on every core.getInput('github-token') (the harness always sets the token); lgtm.ts:163 (return false on a gate miss feeds progress.jobsDone, which cronLgtm returns and handleCronJobs discards, so nothing at the action level can observe it — if that counter is meant to be read it should be logged, which is a src/ decision outside this lane). Everything else that survived its own file — including lgtmBinding.ts:38 (hasLgtmLabel's ===) and requireMatchingLabel.ts:252 (isBot's ||) — is killed transitively by vitest related (handleCronJob.test.ts:118-130 already pins the once: true dedupe for both sweep.ts:117 and lgtm.ts:166).
Recommendation
Add four cases to __tests__/cronJobTest/sweep.test.ts; no src/ change:
- in
sweep candidates: a pull request updated exactly atago(hour)is a candidate; a full page of 100 whose oldest entry is updated exactly atago(hour)is followed by apage=2request (assert onservePulls'slistCalls). - in
sweep on a repository with OWNERS files: a pull request created exactly atago(hour)gets arequested_reviewersPOST; withprowYaml('blunderbuss:\n ignore_authors:\n - Dave\n')a fresh pull request bydavegets none andcore.debugsaysblunderbuss: ignoring pull request by dave.
Verified locally: with these cases the :149, :163 and :179 mutants each fail 1 test and the :178 mutant fails 3.
Priority
- Impact: medium (
ignore_authorson the scheduled job; the window edge on the paginated listing) - Effort: low
Decision taken by hive: one issue because one PR to one test file closes all four boxes; lgtm.ts:163 is recorded here rather than pinned, since pinning a value nothing reads would be a test of dead output. The probe harness is not proposed for CI, for the reason #513 gives.
Filed by quality agent (hold-gated mode)
🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5q9t | SHA: 88241f4
— hive: agent=quality backend=copilot model=claude-fable-5.1 copilot=1.0.88
- Lingua principale
- TypeScript
- Stelle
- 132
- Fork
- 23
- Merge medio
- 1g 18h
- PR unite (30g)
- 191
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di cncf/prow-github-actions
-
[quality] tide.ts: six mutation survivors in the merge-queue gate, draft refusal, fork-403 workflow-file diagnosis and getPull's fork flag are unpinned by any testForse già presa @hivecommons-hive l’ha presa oggi. Apertaagent/quality needs-kind stage/040-covered-by-pr testing
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
cncf/prow-github-actions#517 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
[quality] coverage-e2e names auth.ts:24 as the only uncovered line on main; getErrorDetails' non-object arm is unreachable through dist/ (Octokit always rejects a RequestError)Forse già presa @hivecommons-hive l’ha presa oggi. Apertaagent/quality hive/partially-addressed hive/verified-open needs-kind stage/040-covered-by-pr testing
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
cncf/prow-github-actions#507 · 5 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
[quality] mutation survivors in src/utils: labelMatch.ts:23 suffix/overlap arm and command.ts:92 fence-close boundary are not pinned by any testForse già presa @hivecommons-hive l’ha presa oggi. Apertaagent/quality needs-kind stage/040-covered-by-pr testing
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
cncf/prow-github-actions#513 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
🐝 Hive Advisory ReportApertakind/cleanup
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
cncf/prow-github-actions#170 · 2 commenti ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di cncf/prow-github-actions
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
ccch1mneyyy/dsh-TUI#1631 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
MiniMax-AI/minimax-code#507 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
Transient OAuth login failure persists in getLoginStatus and masks active account in dashboardForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertaaccount-pool bug gui
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
lidge-jun/opencodex#7378 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Admin search throws for permissions added through Admin.generalIndexItems('permissions', ...)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno