feat(thressgame-coverage): Wave 2 (entity attrs + aura + RNG + marker factory)

- T6: 7 new entity attrs (EntityKind, MarkerKind, MarkerLifetime, MarkerOwner, MarkerLinks, RngSeed, RngStream) + registerAttrConsumer
- T7: aura compute admits markers via EntityKind discriminator (default-to-piece policy); +getEntityKind helper
- T8: 5 movement-replacement attrs (MovesAs, MovesAlsoAs, SlideMustBeMaxDistance, BlockAllExceptKing, KingExtraReach)
- T9: Mulberry32 PRNG (SeededRng) + deriveSeedFromGameId + engine.rng()/setRngSeed() with persistent RngStream advancement
- T10: engine.spawnMarker/removeMarker/getMarkersAtSquare with hardcoded priority table (portal-end<frozen-square<mine<...<blocked) + entity-id tiebreak

Tests: 1970 -> 2014 (+44). bun run check exit 0.
This commit is contained in:
Joey Yakimowich-Payne 2026-04-26 08:33:43 -06:00
commit abe5bf49a8
No known key found for this signature in database
12 changed files with 1315 additions and 16 deletions

View file

@ -568,7 +568,7 @@ Max Concurrent: 8 (Waves 5+6+7+9 overlap)
- Message: `docs(thressgame): param walker var-conflict audit`
- Files: `.sisyphus/notepads/thressgame-coverage/var-conflict-audit.md`
- [ ] 6. New entity attrs (EntityKind, MarkerKind, MarkerLifetime, MarkerOwner, MarkerLinks, RngSeed, RngStream)
- [x] 6. New entity attrs (EntityKind, MarkerKind, MarkerLifetime, MarkerOwner, MarkerLinks, RngSeed, RngStream)
**What to do**:
- Edit `packages/chess/src/schema.ts`: extend ChessAttrMap with `EntityKind: "piece" | "marker"`, `MarkerKind: "mine" | "pit" | "portal-end" | "frozen-square" | "treasure" | "death-square" | "tornado" | "blocked"`, `MarkerLifetime: { kind: "permanent" } | { kind: "moves"; expiresAtMove: number } | { kind: "one-shot" }`, `MarkerOwner: "white" | "black" | undefined`, `MarkerLinks: readonly EntityId[]`, `RngSeed: number`, `RngStream: number`
@ -610,7 +610,7 @@ Max Concurrent: 8 (Waves 5+6+7+9 overlap)
- Message: `feat(chess): marker + RNG entity attrs`
- Files: `packages/chess/src/schema.ts`, `packages/chess/src/modifiers/custom/apply.ts`, `packages/chess/src/schema.test.ts`
- [ ] 7. Aura compute filter (markers participate)
- [x] 7. Aura compute filter (markers participate)
**What to do**:
- Edit `packages/chess/src/modifiers/auras.ts`: in `computeAuraFacts()`, where it walks all entities, change filter from "has PieceType" to "EntityKind in {piece, marker}"
@ -652,7 +652,7 @@ Max Concurrent: 8 (Waves 5+6+7+9 overlap)
- Message: `feat(chess): aura compute includes markers`
- Files: `packages/chess/src/modifiers/auras.ts`, `packages/chess/src/modifiers/auras.test.ts`
- [ ] 8. Movement-replacement attrs
- [x] 8. Movement-replacement attrs
**What to do**:
- Edit `packages/chess/src/schema.ts`: add `MovesAs: PieceType | undefined` (per piece — overrides movement pattern), `MovesAlsoAs: PieceType | undefined` (per piece — additive secondary pattern), `SlideMustBeMaxDistance: boolean` (per piece OR game), `BlockAllExceptKing: boolean` (game), `KingExtraReach: number` (per piece)
@ -690,7 +690,7 @@ Max Concurrent: 8 (Waves 5+6+7+9 overlap)
- Message: `feat(chess): movement-replacement attrs`
- Files: schema.ts, apply.ts, schema.test.ts
- [ ] 9. Mulberry32 PRNG utility + integration-preset seed init
- [x] 9. Mulberry32 PRNG utility + integration-preset seed init
**What to do**:
- Create `packages/chess/src/util/rng.ts` exporting `class SeededRng { constructor(seed: number); next(): number /* 0..1 */; nextInt(max: number): number; pick<T>(arr: readonly T[]): T }`
@ -733,7 +733,7 @@ Max Concurrent: 8 (Waves 5+6+7+9 overlap)
- Message: `feat(chess): seeded Mulberry32 PRNG + integration preset init`
- Files: `packages/chess/src/util/rng.ts`, `packages/chess/src/util/rng.test.ts`, `packages/chess/src/modifiers/custom/apply.ts`
- [ ] 10. Marker entity factory (engine.spawnMarker)
- [x] 10. Marker entity factory (engine.spawnMarker)
**What to do**:
- Edit `packages/chess/src/engine.ts`: add `spawnMarker(kind: MarkerKind, square: Square, opts: { lifetime: MarkerLifetime; owner?: Color; links?: readonly EntityId[] }): EntityId` (mirrors `spawnPiece` pattern at engine.ts:741-769)