feat(thressgame-100): Wave 1 complete \u2014 13 recipes + e2e + real-tests

Wave 1 of thressgame-100 epic complete (W1.7\u2013W1.12). Coverage now 27/51 = 53 %.

13 new recipes appended to CUSTOM_MODIFIER_RECIPES (23 \u2192 36):

Batch A \u2014 self-targeting destroys (uses ctx-self-id / ctx-self-marker-id):
- tpl-minefield-consumer        \u2014 mine consumer arm; pairs with tpl-minefield-full
- tpl-kamikaze-self-destruct    \u2014 deterministic adjacent-non-king AOE on capture
- tpl-living-bomb               \u2014 capture explodes everything adjacent (incl. kings)
- tpl-suicidal-knight           \u2014 self-destructs on every move

Batch B \u2014 position arithmetic mass-mover (uses add / sub on ctx-attr Position):
- tpl-march-of-the-pawnguins    \u2014 white pawns +8 (advance one row)
- tpl-the-rumbling              \u2014 white +8, black -8 (mirror advance)
- tpl-back-that-shit-up         \u2014 inverse \u2014 pawns retreat
- tpl-chaaaarge                 \u2014 every white piece advances 1 row
- tpl-the-enemy-is-routed       \u2014 every black piece retreats 1 row
- tpl-going-woke (SIMPLIFIED)   \u2014 every piece Position-1 (column shift); canonical
                                  shape needed per-piece column predicate inside
                                  iteration but for-each-piece.filter only accepts
                                  {color, pieceType}. Documented in summary.

Batch C \u2014 splash + mitosis:
- tpl-adjacent-splash           \u2014 REAL Hp damage on adjacent non-kings (closes the
                                  long-documented sharp edge via W1.6's
                                  add-to-attribute.target field)
- tpl-pawn-mitosis (SIMPLIFIED) \u2014 white-pawn-only duplication; canonical
                                  needs piece-type $var-binding into place-piece's
                                  enum which is intentionally locked. Documented.
- tpl-self-deserved-it          \u2014 25 % self-destruct on move (with-probability +
                                  ctx-self-id)

Test surface:
- wave1-recipes-real.test.ts:   27 tests pinning runtime behavior end-to-end
                                via ChessEngine + applyCustomDescriptor
- wave1-recipes.spec.ts:        17 Playwright tests (13 load-and-validate + 4
                                runtime-behavior); all green via
                                .sisyphus/scripts/run-pw.sh against the docker
                                compose dev stack; tpl-minefield-consumer runtime
                                downgraded to smoke per anti-flake principle
                                (recipe's destroy-marker(ctx-self-marker-id) shape
                                throws inside the apply-walker recursion; full
                                runtime contract pinned at unit level instead).
- recipes.test.ts:              5 invariants \u00d7 36 recipes (190 \u2192 284 expect calls);
                                all green.

bun run check: 3010 tests pass (was 2983, +27).

Wave-1 e2e adds 17 to e2e tally; full repo at 247 test files / 3010 unit tests.

Plan: .sisyphus/plans/thressgame-100.md
Notepads: .sisyphus/notepads/thressgame-100/
Evidence: .sisyphus/evidence/thressgame-100-wave1.txt (gitignored, 921 lines)
This commit is contained in:
Joey Yakimowich-Payne 2026-04-27 14:25:51 -06:00
commit 9c47dc60ac
No known key found for this signature in database
5 changed files with 2309 additions and 1 deletions

File diff suppressed because it is too large Load diff