feat(quality): T3 — seed 31 mutationScore floors + blocking aggregation ratchet - #4305
Merged
Merged
Conversation
…ation ratchet (T3) First full mutation measurement landed (run 27823984918, the split nightly from #4272): 31 modules now have a COVERED mutation score. T3 turns that into an enforced gate. Seed: 31 `mutationScore.<path>` floors in quality-baseline.json at ~2pt below the measured score (absorbs run-to-run variance), direction:up, dedicatedGate:true. dedicatedGate means the generic check-quality-ratchet SKIPS them (check-quality-ratchet.mjs:62) — they are enforced only by check-mutation-ratchet.mjs. Range: memorySkillsInjection 13.49 (weakest) to headers 94.29 (strongest); the security/critical floors: auth 52.57, accountFallback 68.38, routeGuard 76.08, circuitBreaker 56.94, error 43.83, publicCreds 59.76. Gate: a new `mutation-ratchet` job in nightly-mutation.yml runs AFTER all batches (needs: stryker, if: always()), downloads every mutation report, and ratchets the MERGED per-module scores with `check-mutation-ratchet --ratchet` (blocking). It must aggregate because the split batches each emit a PARTIAL view of a file (auth.ts in a1+a2, accountFallback in b1+b2) — a per-batch ratchet would compare half a file against the whole-file floor. check-mutation-ratchet unions same-file mutants across reports (#4272). A module dropping below its floor fails the run; missing reports (upload flake) are skipped. Verified: ratchet exits 0 on the seeded measurements, exits 1 on a synthetic regression (auth 33.33 < 52.57), exits 0 advisory without --ratchet. Baseline change is additive (31 floors + one comment; existing keys untouched). check-mutation-ratchet tests 8/8.
Contributor
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Merged
tkgo11
pushed a commit
to tkgo11/OmniRoute
that referenced
this pull request
Sep 23, 2026
…ation ratchet (T3) (diegosouzapw#4305) First full mutation measurement landed (run 27823984918, the split nightly from diegosouzapw#4272): 31 modules now have a COVERED mutation score. T3 turns that into an enforced gate. Seed: 31 `mutationScore.<path>` floors in quality-baseline.json at ~2pt below the measured score (absorbs run-to-run variance), direction:up, dedicatedGate:true. dedicatedGate means the generic check-quality-ratchet SKIPS them (check-quality-ratchet.mjs:62) — they are enforced only by check-mutation-ratchet.mjs. Range: memorySkillsInjection 13.49 (weakest) to headers 94.29 (strongest); the security/critical floors: auth 52.57, accountFallback 68.38, routeGuard 76.08, circuitBreaker 56.94, error 43.83, publicCreds 59.76. Gate: a new `mutation-ratchet` job in nightly-mutation.yml runs AFTER all batches (needs: stryker, if: always()), downloads every mutation report, and ratchets the MERGED per-module scores with `check-mutation-ratchet --ratchet` (blocking). It must aggregate because the split batches each emit a PARTIAL view of a file (auth.ts in a1+a2, accountFallback in b1+b2) — a per-batch ratchet would compare half a file against the whole-file floor. check-mutation-ratchet unions same-file mutants across reports (diegosouzapw#4272). A module dropping below its floor fails the run; missing reports (upload flake) are skipped. Verified: ratchet exits 0 on the seeded measurements, exits 1 on a synthetic regression (auth 33.33 < 52.57), exits 0 advisory without --ratchet. Baseline change is additive (31 floors + one comment; existing keys untouched). check-mutation-ratchet tests 8/8.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que / por quê (T3)
A 1ª medição completa de mutação chegou (run
27823984918— o nightly splitado do #4272): 31 módulos com covered mutation score. Este PR transforma isso em gate enforçado.Seed (
quality-baseline.json)31 pisos
mutationScore.<path>= ~2pt abaixo do medido (absorve variância run-to-run),direction:up,dedicatedGate:true.dedicatedGate→ o ratchet genérico ignora (check-quality-ratchet.mjs:62faz SKIP); são enforçados só pelocheck-mutation-ratchet.mjs.Gate (
nightly-mutation.yml— novo jobmutation-ratchet)Roda após todos os batches (
needs: stryker,if: always()), baixa todos os reports e ratcheta os scores merged comcheck-mutation-ratchet --ratchet(blocking). Precisa AGREGAR porque os batches splitados emitem visão parcial de um arquivo (auth em a1+a2, accountFallback em b1+b2) — um ratchet por-batch compararia meio-arquivo contra o piso do arquivo inteiro. Ocheck-mutation-ratchetune mutantes do mesmo arquivo entre reports (#4272). Módulo abaixo do piso → falha; reports ausentes (flake de upload) → skip.Validação
--ratchetcontra as medições semeadas → exit 0 (passa).--ratchetsobre regressão sintética (auth 33.33 < 52.57) → exit 1 (bloqueia).--ratchet→ exit 0 (advisory).check-mutation-ratchettestes 8/8.Diff: 2 arquivos, +186/−1 (a "−1" é a vírgula de formatação no
_rebaselineanterior).Depende do split + merge-fix do #4272 (já mergeado em v3.8.30). Completo em 1 commit.
🤖 Generated with Claude Code