mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-12 08:51:01 +01:00
Splitter dies into three rushers, so killing it creates pressure rather than relieving it. Artillery outranges the survivor (460 vs its 260) and holds station beyond reach, the first unit its kiting AI cannot answer. Warden outruns it. Leech is a third boss. Two new EnemySpec fields carry this: spawnKind generalizes the hivemind's hardcoded 'rusher' minion, and splitCount drives on-death splitting. split() is called unconditionally and is a no-op at splitCount 0 — a guard branch would need two tests to satisfy the 100% gate and buys nothing. Child offsets are fixed rather than drawn from the RNG, so seeded replays are unchanged. 105 tests, 100% coverage. Branch count stays at 117: this adds none. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VFyXexNjMQG9V7K8de17fc
19 lines
1.7 KiB
JSON
19 lines
1.7 KiB
JSON
{
|
|
"title": "Reverse Survivors gameplay extension: enemies, statuses, director powers, difficulty",
|
|
"objective": "Extend the game with four systems, landed as four independently-green commits: new enemy kinds; survivor status debuffs (slow/suppress/bleed); director powers that buy back placement control (ambush/frenzy/rift); and difficulty tiers. Each commit must typecheck, lint at --max-warnings 0, and hold 100% coverage on its own, so the history stays bisectable.",
|
|
"acceptance_criteria": [
|
|
"Every commit passes `npm run check` in reverse_survivors/ standalone: tsc --noEmit clean, eslint --max-warnings 0 clean, vitest at 100% statements/branches/functions/lines.",
|
|
"No lint suppressions, @ts-ignore, or coverage excludes are introduced.",
|
|
"New status logic contributes zero branches, verified against the v8 branch count.",
|
|
"Seeded replays stay deterministic: the same seed and action sequence produce identical outcomes.",
|
|
"The game runs and both sides can still win, verified by driving the real simulation rather than tests alone."
|
|
],
|
|
"out_of_scope": [
|
|
"Endless mode: fmtTime(Infinity) renders Infinity:NaN and would need a guard plus tests for a mode whose only content is the same game but longer.",
|
|
"localStorage difficulty persistence: its catch arm is only reachable by stubbing a throwing setItem, which tests the mock rather than the game.",
|
|
"The pending dependency refresh (7 packages one patch behind) ships separately.",
|
|
"Rebalancing the pre-existing economy, where a trickle strategy loses to the survivor's kill rate."
|
|
],
|
|
"verifier": "npm run check (typecheck + eslint --max-warnings 0 + vitest --coverage at 100%), npm run build, and a headless full-game playtest driving src/core/sim.ts via vite-node"
|
|
}
|