maniator / maniator/verticopolis
[Bug]: [P3] Game input stays live on a dead renderer during in-place recovery
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 5
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Description
Imported from the engineering backlog (
_bmad-output/implementation-artifacts/backlog.md, storycontext-loss-recovery).
Priority P3 (do-first order) | Severity: low | Status: open | Epic: stability | Type: review-deferral | Recorded: 2026-07-13
What happened?
Game input stays live on a dead renderer during the in-place recovery wait (gds-code-review, Edge Case Hunter). Between a context loss and the restore (up to ~8s of visible time, longer while backgrounded) the canvas is frozen but keyboard shortcuts, the palette, Load/New/Import and the speed buttons all still work, so a player can mutate the sim blind. The crash-screen path mutes game keys via CRASH_SCREEN_ID; the recovery wait has no equivalent guard. Mitigations already shipped: the "Recovering..." toast, gesture-state reset in rebuildEngine, and the tower-swap guard on the success bulletin. If revisited, add a lightweight input gate (like the crash screen's key mute) for the wait window.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at the in-place recovery wait and compare its input handling with the crash-screen path using CRASH_SCREEN_ID. Review rebuildEngine and the existing recovery guards; done means keyboard shortcuts, the palette, Load/New/Import, and speed buttons remain inactive until the renderer is restored.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend, game-dev
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100