Backend:
- Add `simulations` table to MariaDB (mission, players, result, XP,
roll feed, player cards, scene log, findings — all persisted as JSON)
- simulationHelpers: save / getAll / getById / delete
- simulationRoutes.js: POST /api/simulations (run engine + save),
GET /api/simulations (list), GET /:id (full report), DELETE /:id
- Simulation engine: d100 dice, fear tests, combat rounds with
initiative, conditions, damage, fate re-rolls, skill checks,
auto-assign checks to best-stat player, enemy pools from scene data,
per-player report cards with grade A-D, hero moments, shame list
Frontend:
- SimulationTab.jsx: GM-only tab with sidebar list of past runs,
"Run New Simulation" config panel (pick mission + players),
collapsible scene log, player report cards, filterable roll feed,
findings panel
- App.js: import SimulationTab, add "⚙ Sim Lab" nav button (GM only)
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>