Repository navigation
chore(quality): close v3.8.28 cycle gate drift (re-baseline + nightly-mutation scope) - #4135
Merged
Merged
Conversation
The post-release push->main Quality Ratchet (run 27725117464) failed on 3 metrics that drifted during the v3.8.28 cycle from legitimate feature merges: eslintWarnings 3769->3779, openapiCoverage.pct 38.3->37.6, i18nUiCoverage.pct 80.1->79.1. Reproduced locally on release/v3.8.29 (9f14c12) — identical to CI. None is hand-cleanable without gaming or unavailable infra: - eslint +10: no-explicit-any is warn-level and allowed in tests (the drift is test `any`), plus 4 react-hooks/exhaustive-deps in RequestLoggerV2.tsx (a refresh-sensitive component — touching hook deps without UI tests is risky). - openapi -0.7: the drop is from new INTERNAL routes (/api/tools/agent-bridge/*, LOCAL_ONLY) — documenting them in the public spec would game the metric. - i18n -1.0: 37/41 locales need ~3000 translations via `npm run i18n:run`, which requires OMNIROUTE_TRANSLATION_API_KEY (not available locally). Re-baselined to the real measured values per the documented v3.8.26 precedent (_eslint_rebaseline_2026_06_16_v3826_forward_merge). Tighten at cycle end: eslint/openapi via --require-tighten; i18n via i18n:run with creds.
The full 8-module Stryker run timed out at the 180min nightly cap (run 27705123780: 16:47:33 -> 19:47:48 = exactly 180min; the prior 120min scheduled run also timed out). #4078's DATA_DIR isolation made concurrency=4 safe but not sufficient: the tap-runner re-spawns a node process per test file per mutant, so spawn cost dominates and the two god-files chatCore.ts (5874 LOC) + combo.ts (5282 LOC) — ~2/3 of the ~15k mutants — do not fit. Removed both god-files from stryker.conf.json `mutate`. The 6 smaller modules fit the budget and produce real mutation scores now; the god-files regain coverage after the Onda 3 split into smaller units. Updated the nightly job name/comments (8->6 modules). Removing entries from `mutate` does not affect the dry-run baseline (it runs tap.testFiles, unchanged), so the all-green baseline is preserved.
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
…-mutation scope) (cheaper-inference#4135) * chore(quality): re-baseline v3.8.28 cycle drift (eslint/openapi/i18n) The post-release push->main Quality Ratchet (run 27725117464) failed on 3 metrics that drifted during the v3.8.28 cycle from legitimate feature merges: eslintWarnings 3769->3779, openapiCoverage.pct 38.3->37.6, i18nUiCoverage.pct 80.1->79.1. Reproduced locally on release/v3.8.29 (d95d2d4) — identical to CI. None is hand-cleanable without gaming or unavailable infra: - eslint +10: no-explicit-any is warn-level and allowed in tests (the drift is test `any`), plus 4 react-hooks/exhaustive-deps in RequestLoggerV2.tsx (a refresh-sensitive component — touching hook deps without UI tests is risky). - openapi -0.7: the drop is from new INTERNAL routes (/api/tools/agent-bridge/*, LOCAL_ONLY) — documenting them in the public spec would game the metric. - i18n -1.0: 37/41 locales need ~3000 translations via `npm run i18n:run`, which requires OMNIROUTE_TRANSLATION_API_KEY (not available locally). Re-baselined to the real measured values per the documented v3.8.26 precedent (_eslint_rebaseline_2026_06_16_v3826_forward_merge). Tighten at cycle end: eslint/openapi via --require-tighten; i18n via i18n:run with creds. * ci(mutation): scope nightly to 6 modules to fit the 180min budget The full 8-module Stryker run timed out at the 180min nightly cap (run 27705123780: 16:47:33 -> 19:47:48 = exactly 180min; the prior 120min scheduled run also timed out). cheaper-inference#4078's DATA_DIR isolation made concurrency=4 safe but not sufficient: the tap-runner re-spawns a node process per test file per mutant, so spawn cost dominates and the two god-files chatCore.ts (5874 LOC) + combo.ts (5282 LOC) — ~2/3 of the ~15k mutants — do not fit. Removed both god-files from stryker.conf.json `mutate`. The 6 smaller modules fit the budget and produce real mutation scores now; the god-files regain coverage after the Onda 3 split into smaller units. Updated the nightly job name/comments (8->6 modules). Removing entries from `mutate` does not affect the dry-run baseline (it runs tap.testFiles, unchanged), so the all-green baseline is preserved.
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.
Fecha os reds de gate que sobraram no
mainapós a release v3.8.28 (push→main run27725117464). São 2 decisões do operador, em commits separados.Commit 1 — Re-baseline do drift do ciclo (eslint/openapi/i18n)
O Quality Ratchet falhou em 3 métricas que driftaram no ciclo v3.8.28 (merges de feature legítimos). Re-baseline para os valores REAIS medidos (idênticos ao CI, reproduzidos em
9f14c1294):eslintWarningsno-explicit-anyé warn e permitido em testes (o drift éanyde teste) + 4exhaustive-depsnoRequestLoggerV2.tsx(componente refresh-sensitive #4103/#3972 — arriscado sem teste UI)openapiCoverage.pct/api/tools/agent-bridge/*, LOCAL_ONLY) — documentar no spec público = gamingi18nUiCoverage.pcti18n:run(exigeOMNIROUTE_TRANSLATION_API_KEY, indisponível)Segue o precedente documentado em
_eslint_rebaseline_2026_06_16_v3826_forward_merge. Aperto no fim do ciclo: eslint/openapi via--require-tighten; i18n viai18n:runcom creds. Justificativa completa na chave_rebaseline_2026_06_18_v3828_cycle_close.Commit 2 — Escopar nightly-mutation p/ caber em 180min
O run completo dos 8 módulos estourou os 180min (
27705123780:16:47:33 → 19:47:48= exatamente 180min; o agendado de 120min também estourou). O #4078 tornouconcurrency=4segura (isolamento DATA_DIR, A/B provado) mas não suficiente: o tap-runner re-spawnanodepor arquivo-de-teste por mutante, então o custo de spawn domina e os god-fileschatCore.ts(5874) +combo.ts(5282) = ~⅔ dos ~15k mutantes não cabem.Removi os 2 god-files do
mutate(stryker.conf.json). Os 6 módulos menores cabem no budget e produzem mutation score real já; os god-files recuperam cobertura após o split da Onda 3. Remover entradas domutatenão afeta o baseline (dry-run rodatap.testFiles, intocado) → all-green preservado.Validação
quality-baseline.jsonestryker.conf.jsonválidos (parse OK); 6 módulos nomutate.Ratchet check.🤖 Generated with Claude Code