[Medium] [Bug] Spire Climbing: Seed calculation missing runId component #299

Closed
opened 2026-06-07 17:41:01 +02:00 by Anexim · 1 comment
Owner

Spec: docs/specs/spire-climbing-spec.md §4.2, §7
Severity: Medium

Problem: The spec says seed = floor × 12345 + runId but the code only uses floor × 12345 everywhere:

  • src/lib/game/stores/combat-descent-actions.ts:228enterSpireMode seed
  • src/lib/game/stores/combat-descent-actions.ts:68,80advanceRoomOrFloor descending seed
  • src/lib/game/utils/spire-utils.ts:90,96,99,131 — room type and puzzle seeds

This means room layouts and types are identical every run for the same floor, reducing variety.

Files: Multiple files listed above

**Spec:** docs/specs/spire-climbing-spec.md §4.2, §7 **Severity:** Medium **Problem:** The spec says `seed = floor × 12345 + runId` but the code only uses `floor × 12345` everywhere: - `src/lib/game/stores/combat-descent-actions.ts:228` — `enterSpireMode` seed - `src/lib/game/stores/combat-descent-actions.ts:68,80` — `advanceRoomOrFloor` descending seed - `src/lib/game/utils/spire-utils.ts:90,96,99,131` — room type and puzzle seeds This means room layouts and types are identical every run for the same floor, reducing variety. **Files:** Multiple files listed above
Anexim added the ai:todo label 2026-06-07 17:41:01 +02:00
n8n-gitea was assigned by Anexim 2026-06-07 17:41:01 +02:00
Anexim added ai:done and removed ai:todo labels 2026-06-08 14:55:33 +02:00
Author
Owner

Fix applied and pushed. Seed calculation now includes runId component per spec (seed = floor × 12345 + runId).

Root cause: The spec defines the seed as floor × 12345 + runId but the code only used floor × 12345 everywhere, meaning room layouts were identical every run for the same floor.

Changes:

  • Added runId: number field to CombatState
  • Generated random runId on spire entry in createEnterSpireMode()
  • Updated getRoomsForFloor, generateSpireRoomType, generateSpireFloorState to accept and use runId
  • Updated all call sites in combat-descent-actions.ts and combatStore.ts
  • Added runId to partialize for persistence

Tests: 1069 passed (58 files), all pre-commit checks pass.

**Fix applied and pushed.** Seed calculation now includes runId component per spec (`seed = floor × 12345 + runId`). **Root cause:** The spec defines the seed as `floor × 12345 + runId` but the code only used `floor × 12345` everywhere, meaning room layouts were identical every run for the same floor. **Changes:** - Added `runId: number` field to `CombatState` - Generated random `runId` on spire entry in `createEnterSpireMode()` - Updated `getRoomsForFloor`, `generateSpireRoomType`, `generateSpireFloorState` to accept and use `runId` - Updated all call sites in `combat-descent-actions.ts` and `combatStore.ts` - Added `runId` to `partialize` for persistence **Tests:** 1069 passed (58 files), all pre-commit checks pass.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Anexim/Mana-Loop#299