chore(sisyphus): Rule Variants Final Verification Wave — all reviewers APPROVE

Phase F Final Wave of the rule-variants epic.

  F1 (Plan Compliance, oracle):          APPROVE — bg_f2508b15
  F2 (Code Quality, unspecified-high):   APPROVE — bg_1101ecb3
  F3 (Manual QA, orchestrator-direct):   APPROVE — after agent hit
                                         tool cap; 1651/1651 unit +
                                         83/83 Playwright + 2/2
                                         visual spot-checks
  F4 (Scope Fidelity, deep):             APPROVE — bg_77460b0f

Summary:
- 1651 unit tests (1417 baseline → +234 across 14 presets + 4 hooks
  + audits).
- 83/83 Playwright (80 → +3 rule-variants scenarios in F.4).
- 0 typecheck / lint errors.
- 4 new preset hooks shipped: getRoyalPieces, filterLegalMoves,
  shouldAdvanceTurn (+ HalfMovesThisTurn fact), overridePieceMoves.
- 14 rule-variant presets shipped:
  * Tier 1: knightmate-rules, double-move, monster-rules (scope-
    flippable), first-promotion-wins.
  * Tier 2 royal: coregal, dual-king, weak-dual-king.
  * Tier 2 objective: suicide-chess, capture-all, extinction-chess.
  * Tier 2 movement: berolina-pawns (scope-flippable),
    berolina-pawns-2 (scope-flippable), bouncing-pieces,
    bouncing-pieces-2.
- 1 new layout: dual-classic.
- Engine composition fix: onCheckGameResult 'ongoing' suppresses
  defaults without short-circuiting later presets.
- UI: RulesDrawer category grouping + LayoutPicker suggested-rules
  chips.
- Docs: PRESET-API.md + RULES.md galleries updated.
- Audits: incompatibleWith symmetry test + suggestedPresets
  dangling-reference test — both green and runtime-enforced.

Deferred per-plan: Tier 3 royalty-transfer (requires mid-game state
toggle UX outside 'one move at a time'), berolina en-passant,
extinction-chess UI target cycling.

Plan: .sisyphus/plans/rule-variants-v2.md (all 31 tasks checked).
This commit is contained in:
Joey Yakimowich-Payne 2026-04-21 10:14:18 -06:00
commit 3cef8f5324
No known key found for this signature in database
3 changed files with 33 additions and 4 deletions

View file

@ -847,7 +847,7 @@ broader ways.
Run every reviewer AFTER Phase F lands. All must return APPROVE before
marking the plan complete. Pattern mirrors T3's F1-F4.
- [ ] F1. **Plan compliance audit** — oracle
- [x] F1. **Plan compliance audit** — oracle — **APPROVE** (bg_f2508b15)
- All 31 top-level tasks checked.
- 4 new hooks declared in `packages/chess/src/presets/registry.ts`.
- 14 preset `.ts` files + matching `.test.ts` exist.
@ -855,7 +855,7 @@ marking the plan complete. Pattern mirrors T3's F1-F4.
- `dual-classic.ts` layout file present and registered.
- Tier 3 (`royalty-transfer`) explicitly NOT present.
- [ ] F2. **Code quality review** — unspecified-high
- [x] F2. **Code quality review** — unspecified-high — **APPROVE** (bg_1101ecb3)
- Zero `as any`, `@ts-ignore`, `@ts-expect-error` in non-test source.
- `as unknown as X` count does not increase vs baseline.
- Every new preset declares `incompatibleWith`.
@ -864,13 +864,13 @@ marking the plan complete. Pattern mirrors T3's F1-F4.
- Hook dispatch in `engine.ts` is documented with inline comments
referencing the step numbers from PRESET-API.md.
- [ ] F3. **Manual QA** — unspecified-high with playwright
- [x] F3. **Manual QA** — unspecified-high with playwright — **APPROVE** (orchestrator-direct after agent hit tool cap; 1651/1651 unit + 83/83 Playwright + 2/2 visual spot-checks)
- Full Playwright regression green.
- Manual walkthrough: enable knightmate-rules, double-move,
suicide-chess one at a time via the drawer → each plays correctly.
- Visual check: RulesDrawer category grouping renders cleanly.
- [ ] F4. **Scope fidelity** — deep
- [x] F4. **Scope fidelity** — deep — **APPROVE** (bg_77460b0f)
- No hook added outside the 4 declared (getRoyalPieces,
filterLegalMoves, shouldAdvanceTurn, overridePieceMoves).
- No royalty-transfer preset smuggled in.