Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions .github/workflows/nightly-mutation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@ jobs:
# big modules are now ISOLATED into their own batches (a=auth, b=accountFallback).
# - Onda 3 / Fase 9 T5 re-add: combo.ts was split into 11 leaves; the 8 well-covered
# combo/* leaves are back in `mutate` (covered by the 24 combo-*.test.ts), grouped into
# 2 batches (d=heavy, e=light). chatCore/* leaves + quotaScoring/quotaStrategies (#4204)
# are follow-ups — see _mutate_godfiles_excluded_comment in stryker.conf.json.
# 5 PARALLEL batches, each overriding the mutate set via `--mutate` (Stryker 9 CLI:
# 2 batches (d=heavy, e=light). After #4204 (D7b) merged, the reset-aware quota pair
# quotaScoring/quotaStrategies was added as batch f. A covering-test audit then added the
# 6 chatCore/* leaves with direct unit coverage as batch g; the other 9 chatCore leaves
# remain a follow-up — see _mutate_godfiles_excluded_comment in stryker.conf.json.
# 7 PARALLEL batches, each overriding the mutate set via `--mutate` (Stryker 9 CLI:
# `-m, --mutate <comma-list>`; the conf's `mutate[]` remains the local-run default/union).
# Each batch targets <180min; full coverage every night in parallel (~180min wall-clock).
# The `incremental` cache (per-batch key) makes runs after the first cold one much cheaper,
Expand All @@ -44,6 +46,10 @@ jobs:
mutate: "open-sse/services/combo/comboStructure.ts,open-sse/services/combo/autoStrategy.ts,open-sse/services/combo/validateQuality.ts"
- name: e
mutate: "open-sse/services/combo/shadowRouting.ts,open-sse/services/combo/targetSorters.ts,open-sse/services/combo/comboPredicates.ts,open-sse/services/combo/rrState.ts,open-sse/services/combo/comboData.ts"
- name: f
mutate: "open-sse/services/combo/quotaScoring.ts,open-sse/services/combo/quotaStrategies.ts"
- name: g
mutate: "open-sse/handlers/chatCore/comboContextCache.ts,open-sse/handlers/chatCore/idempotency.ts,open-sse/handlers/chatCore/passthroughHelpers.ts,open-sse/handlers/chatCore/responseHeaders.ts,open-sse/handlers/chatCore/sanitization.ts,open-sse/handlers/chatCore/upstreamTimeouts.ts"
timeout-minutes: 180
steps:
- uses: actions/checkout@v6
Expand Down
33 changes: 24 additions & 9 deletions stryker.conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -196,19 +196,26 @@
"2026-06-18 (Onda 3 / Fase 9 T5 re-add): the combo.ts god-file was split into 11 small",
"leaf modules under open-sse/services/combo/ (PRs #4162/#4175/#4186/#4196/#4204). The",
"routing LOGIC that justified combo.ts being in `mutate` now lives in those leaves, so the",
"8 well-covered combo/* leaves are ADDED back to `mutate` here (comboStructure/autoStrategy/",
"validateQuality/shadowRouting/targetSorters/comboPredicates/rrState/comboData). They are",
"covered by the 24 combo-*.test.ts files already in tap.testFiles. types.ts is omitted",
"(pure type declarations produce 0 mutants).",
"10 well-covered combo/* leaves are ADDED back to `mutate` here (comboStructure/autoStrategy/",
"validateQuality/shadowRouting/targetSorters/comboPredicates/rrState/comboData + the reset-aware",
"quota pair quotaScoring/quotaStrategies, added after #4204 (D7b) merged). They are covered by",
"the 24 combo-*.test.ts files already in tap.testFiles (quota by combo-prescreen/combo-config/",
"combo-strategy-fallbacks). types.ts is omitted (pure type declarations produce 0 mutants).",
"",
"chatCore/* leaves: a covering-test audit (do any tap.testFiles reference each leaf's exported",
"function names?) found 6 with direct unit coverage — comboContextCache/idempotency/",
"passthroughHelpers/responseHeaders/sanitization/upstreamTimeouts — ADDED here (batch g).",
"",
"STILL EXCLUDED (follow-ups, NOT in `mutate` yet):",
" - combo.ts + chatCore.ts barrels: their handleComboChat/handleChatCore CORES were not",
" split (out of scope — Fase 3 ChatCoreContext refactor). The barrels are now thin-ish",
" but still large; keep excluded until the cores are split.",
" - combo/quotaScoring.ts + combo/quotaStrategies.ts: in PR #4204 (D7b), not yet merged.",
" Add them here once #4204 lands (they are covered by combo-prescreen/combo-config tests).",
" - chatCore/* leaves (15 modules): thinner test coverage (only ~7 chatcore-*.test.ts in",
" tap.testFiles); add after a covering-test audit so they don't all 'survive (no coverage)'.",
" - the other 9 chatCore/* leaves (executorHelpers/headers/logTruncation/memoryExtraction/",
" memorySkillsInjection/nonStreamingSse/passthroughToolNames/semanticCache/telemetryHelpers):",
" no tap.testFiles reference their exported symbols by name — they are only exercised",
" TRANSITIVELY via handleChatCore, which the tap unit tests may not fully drive. Adding them",
" blindly would produce 'survived (no coverage)' noise. Add each once it gains a dedicated",
" unit test (or after a Stryker --dryRunOnly confirms the perTest map covers it).",
"See project memory: Quality Gate v2 / Fase 9 (project-combo-split)."
],
"mutate": [
Expand All @@ -225,7 +232,15 @@
"open-sse/services/combo/targetSorters.ts",
"open-sse/services/combo/comboPredicates.ts",
"open-sse/services/combo/rrState.ts",
"open-sse/services/combo/comboData.ts"
"open-sse/services/combo/comboData.ts",
"open-sse/services/combo/quotaScoring.ts",
"open-sse/services/combo/quotaStrategies.ts",
"open-sse/handlers/chatCore/comboContextCache.ts",
"open-sse/handlers/chatCore/idempotency.ts",
"open-sse/handlers/chatCore/passthroughHelpers.ts",
"open-sse/handlers/chatCore/responseHeaders.ts",
"open-sse/handlers/chatCore/sanitization.ts",
"open-sse/handlers/chatCore/upstreamTimeouts.ts"
],
"_ignorePatterns_comment": [
"ignorePatterns = files NOT copied into the Stryker sandbox. It does NOT scope",
Expand Down
Loading