Skip to content

feat(quality): T3 — seed 31 mutationScore floors + blocking aggregation ratchet - #4305

Merged
diegosouzapw merged 1 commit into
release/v3.8.30from
feat/qg-mutation-score-ratchet
Jun 19, 2026
Merged

diegosouzapw merged 1 commit into
release/v3.8.30from
feat/qg-mutation-score-ratchet

Conversation

@diegosouzapw

Copy link
Copy Markdown
Owner

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:62 faz SKIP); são enforçados só pelo check-mutation-ratchet.mjs.

piso
memorySkillsInjection (mais fraco) 13.49
error (sanitização) 43.83
auth 52.57
circuitBreaker 56.94
publicCreds 59.76
accountFallback 68.38
routeGuard 76.08
headers (mais forte) 94.29

Gate (nightly-mutation.yml — novo job mutation-ratchet)

Roda após todos os batches (needs: stryker, if: always()), baixa todos os reports e ratcheta os scores merged com check-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. O check-mutation-ratchet une mutantes do mesmo arquivo entre reports (#4272). Módulo abaixo do piso → falha; reports ausentes (flake de upload) → skip.

Validação

  • --ratchet contra as medições semeadas → exit 0 (passa).
  • --ratchet sobre regressão sintética (auth 33.33 < 52.57) → exit 1 (bloqueia).
  • sem --ratchet → exit 0 (advisory).
  • Baseline aditivo (31 pisos + 1 comentário; chaves existentes intactas).
  • check-mutation-ratchet testes 8/8.

Diff: 2 arquivos, +186/−1 (a "−1" é a vírgula de formatação no _rebaseline anterior).

Depende do split + merge-fix do #4272 (já mergeado em v3.8.30). Completo em 1 commit.

🤖 Generated with Claude Code

…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.
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@diegosouzapw
diegosouzapw merged commit bbc9d1e into release/v3.8.30 Jun 19, 2026
4 checks passed
@diegosouzapw diegosouzapw mentioned this pull request Jun 20, 2026
@diegosouzapw
diegosouzapw deleted the feat/qg-mutation-score-ratchet branch June 21, 2026 12:33
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant