[quality] mutation survivors in src/cronJobs/sweep.ts: blunderbuss explicit:false (:163) and the since-window edge (:149,:178,:179)
Los mantenedores suelen responder en 2 días
@hivecommons-hive ya está trabajando en esto.
Desde el 19/10/2026.
- #516 de @hivecommons-hive — abierto
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Estancado
- Stack tecnológico
- github-actions, typescript
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
- Lenguaje dominante
- TypeScript
- Estrellas
- 132
- Forks
- 23
- Merge medio
- 1 d 18 h
- PR fusionados (30 d)
- 191
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de cncf/prow-github-actions
-
[quality] approveReview.ts: a PAT that is not the author never has its review submission asserted, and withdrawalReason's five-file bound, lgtm skip, user casing and withdrawer order are unpinnedPosiblemente ocupada @hivecommons-hive la tomó hoy. Abiertoagent/quality needs-kind stage/040-covered-by-pr testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
cncf/prow-github-actions#526 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
[quality] trigger.ts: /test matches workflow names and paths case-insensitively, /ok-to-test honours an existing label in any case, and the non-PR arm of /test and /ok-to-test leaves the run green — none of it is assertedPosiblemente ocupada @hivecommons-hive la tomó hoy. Abiertoagent/quality needs-kind stage/040-covered-by-pr testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
cncf/prow-github-actions#523 · 4 comentarios ·
Los mantenedores suelen responder en 2 días
-
[quality] approve.ts: ten mutation survivors — any-Bot /approve, user-token bot review, require_self_approval break, approver sort, label casing, isBot notifier matchPosiblemente ocupada @hivecommons-hive la tomó hoy. Abiertoagent/quality needs-kind stage/040-covered-by-pr testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
cncf/prow-github-actions#521 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
[quality] mutation survivors in src/plugins/requireMatchingLabel.ts: the withGracePeriod default, the graceMs > 0 guard, isBot's || and the no-rule debug text are not pinned by any testPosiblemente ocupada @hivecommons-hive la tomó hace 1 día. Abiertoagent/quality needs-kind stage/040-covered-by-pr testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
cncf/prow-github-actions#519 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
[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 testPosiblemente ocupada @hivecommons-hive la tomó hace 1 día. Abiertoagent/quality needs-kind stage/040-covered-by-pr testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
cncf/prow-github-actions#517 · 2 comentarios ·
Los mantenedores suelen responder en 2 días
Todos los issues de cncf/prow-github-actions
Issues similares
-
Edit: Travel Mix (RO)Abiertocheck:failed streams:edit
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
iptv-org/iptv#55901 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 2 días
-
package:ios ships XCFrameworks with absolute symlinks, which SwiftPM refuses to extractPosiblemente ocupada @cusnirvladislav la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
callstackincubator/rock#740 ·
-
S: triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 2 días
-
RED ladder stopped @ 4db4ed91Abiertoarea:workflow bug ready-for-human
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
fil-donadoni/tolaria#6108 ·
Los mantenedores suelen responder en 1 día