[quality] Pin the ten behavioural Stryker survivors in sweep's delayed-reviewer guards, meow's image validation, the tilde-fence opener and /approve cancel
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 25/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- github-actions, typescript
Direzione di ricerca
Read the four proposed files under tests: sweepDelayGuards.test.ts, meowImageEdges.test.ts, commandTildeFence.test.ts, and approveCancelAuthor.test.ts, then inspect the named source paths in src/ to match the existing test fixtures. Run the targeted Vitest cases and confirm each catches its listed surviving mutation. The issue links open pull request #593, so check its status and existing coverage before taking this work on.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Finding
A Stryker probe (the repository's stryker.config.mjs harness) over the fifteen modules no earlier probe had run through Stryker in full — src/pullReq/handlePullReq.ts, src/pullReq/handleCheckSuite.ts, src/pullReq/handlePullReqReview.ts, src/pullReq/onPrLgtm.ts, src/issues/handleIssues.ts, src/issueComment/handleIssueComment.ts, src/issueComment/meow.ts, src/issueComment/approve.ts, src/cronJobs/handleCronJob.ts, src/cronJobs/labelSync.ts, src/cronJobs/lgtm.ts, src/cronJobs/sweep.ts, src/utils/command.ts, src/utils/pulls.ts, src/run.ts — at main @ 9acb046 produced 1189 mutants: 1015 killed, 61 timed out, 113 survived (score 90.50%, 61m41s at concurrency 12).
Line coverage cannot see any of them. Both suites were run locally against the same revision: npm run test:coverage (195 files, 2483 tests) reports 100% statements / 99.76% branches / 100% lines, and npm run test:coverage:e2e (90 files, 542 tests) reports 100% statements / 99.82% branches / 100% lines; none of the four files below has a zero-hit line in either run.
Reading the 113 and applying each candidate by hand at its exact span, ten change an observable effect. The rest are debug/info strings, getInput(..., { required: true }) folds, ?. chains on fields a real event always carries, or equivalents (notes at the end).
| mutant | what the surviving mutant changes | why no test notices |
|---|---|---|
sweep.ts:247 event.event === 'ready_for_review' && event.created_at !== undefined → true (also the && → ||, each operand → true, and dropping the .filter at :246) |
lastReadyForReview takes the latest of every timeline event, so a label or comment after the due window pushes a former draft out of it and it never gets reviewers |
every timeline fixture contains only ready_for_review events |
sweep.ts:204 settings.ignore_drafts && pr.draft === true → false |
a draft is timed through a timeline read (and a reviews read) before blunderbuss's own draft guard finally skips it | the one delayed-draft case asserts only that nothing was requested |
sweep.ts:235 { explicit: false, … } → { explicit: true, … } |
the delayed path bypasses blunderbuss.ignore_authors |
ignore_authors is only tested on the fresh path |
meow.ts:154 image.hostname === 's3.us-west-2.amazonaws.com' → true |
any host serving a path under /cdn2.thecatapi.com/ is rendered as an image — the allow-list the comment above it promises |
the "unexpected host" cases use foreign hosts with foreign paths |
meow.ts:136 / :137 image.username !== '' / image.password !== '' → false |
a url with only a username, or only a password, is rendered | the credentials case carries both |
meow.ts:123 url.length > 4096 → >= 4096 |
a 4096-character url is refused | the long-url case uses 5000 |
command.ts:133 char === ''→true` |
a ~~~ fence whose info string contains a backtick does not open a code block, so a command inside it runs |
only the backtick-fence form of that rule is tested |
approve.ts:167 e.user?.login === 'github-actions[bot]' → true |
/approve cancel dismisses the last APPROVED review of anyone listed after the bot's |
the reviews fixture holds only the bot's review |
Recommendation
Four new unit test files, no existing test or src/ file edited; each case fails under its mutant and passes on main:
-
__tests__/cronJobTest/sweepDelayGuards.test.ts— a former draft with a laterlabeledevent (and an event withoutcreated_at) is still timed from itsready_for_review; a draft is skipped before any timeline read; a due pull request by anignore_authorslogin gets nothing while its sibling does -
__tests__/issueCommentTest/meowImageEdges.test.ts—https://evil.example/cdn2.thecatapi.com/…degrades to the note; username-only and password-only urls degrade; a url of exactly 4096 characters renders and 4097 does not -
__tests__/utils/commandTildeFence.test.ts—~~~ \code` ~~~` opens a fence (``` with a backtick still does not) -
__tests__/issueCommentTest/approveCancelAuthor.test.ts— with a human APPROVED review after the bot's,/approve canceldismisses review 80 and never touches 81
Per #554 ("A repository-wide mutation gate is not required") these are pinned individually. Reproduce with npm run test:mutation -- --mutate "src/cronJobs/sweep.ts,src/issueComment/meow.ts,src/utils/command.ts,src/issueComment/approve.ts"; note that __tests__/workflows.test.ts and __tests__/commands.test.ts read src/ as text and fail Stryker's dry run when meow.ts or handleIssueComment.ts is instrumented, so a probe of those two files needs a vitest config that excludes them.
Reviewed and left alone: meow.ts:12 regex and :56 typeof body (the dispatcher has already matched /meow and normalised a null body before meow() runs); meow.ts:69 attempt > 1 (only a delay, 0 in tests); command.ts:102/:109 (inIndentedCode is shadowed by afterBlockBoundary); sweep.ts:220 and :249 (an Invalid Date compares false either way); labelSync.ts:117/:118 (an undefined spread is dropped by the serializer); the \s+ → \s splits in handleCronJob.ts and handlePullReq.ts (empty tokens are filtered).
Priority
- Impact: medium (
/meowrenders a third-party url into a comment; delayed blunderbuss and/approve cancelare user-visible; none is a merge decision) - Effort: low
Filed by quality agent (hold-gated mode)
🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5q9t | SHA: f6446bb
— hive: agent=quality backend=copilot model=claude-fable-5.1 copilot=1.0.88
- Lingua principale
- TypeScript
- Stelle
- 132
- Fork
- 24
- Merge medio
- 1g 18h
- PR unite (30g)
- 211
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] Nothing verifies the unit test each v8-ignore hint in src/ says drives its arm; add a static guard over the 25 hintsForse già presa @hivecommons-hive l’ha presa oggi. Apertaagent/quality needs-kind stage/040-covered-by-pr testing
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
cncf/prow-github-actions#600 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
[quality] Gate proposal: scheduled Stryker run over the whole src/ tree (five advisory shards)Apertaagent/quality needs-kind stage/045-needs-decision testing
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
cncf/prow-github-actions#594 · 3 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
[quality] Pin the three behavioural Stryker survivors in blunderbuss, requireMatchingLabel and approveReviewForse già presa @hivecommons-hive l’ha presa 1 giorno fa. Apertaagent/quality needs-kind stage/040-covered-by-pr testing
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
cncf/prow-github-actions#590 · 3 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
🐝 Hive Advisory ReportApertahive/advisory kind/cleanup
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
cncf/prow-github-actions#170 · 3 commenti ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di cncf/prow-github-actions
Issue simili
-
[Integration]: eRPCAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
ava-labs/builders-hub#4826 ·
I maintainer di solito rispondono entro 1 giorno
-
记忆分析的默认模型显示与实际使用不一致Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
anomalyco/opencode#59886 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
-
a10y a10y-audit ai-driven-qa claude
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
I maintainer di solito rispondono entro 1 giorno