diff --git a/.cursor/skills/idle-spectator-e2e/SKILL.md b/.cursor/skills/idle-spectator-e2e/SKILL.md index 44138d0..36ac07a 100644 --- a/.cursor/skills/idle-spectator-e2e/SKILL.md +++ b/.cursor/skills/idle-spectator-e2e/SKILL.md @@ -13,6 +13,22 @@ Always validate IdleSpectator changes with the in-game harness. Do not rely on OS mouse/keyboard automation (Wayland-flaky). Do not call `Application.Quit()` (can hang Steam on Linux). +Quality bar (also in `.cursor/rules/idle-spectator-quality.mdc`): + +1. **Comprehensive / scales** - fix the class via discovery, not one logged example. +2. **Long-term / maintainable** - no brittle shortcuts. +3. **Always live-test** - open the game, spawn/drop entities, statuses, wars, plots; do not stop at code review or a single assert. + +## Live playtest (required for features/fixes) + +Harness scenarios are the gate, not a substitute for poking the world. + +- Start or reuse WorldBox with `worldbox-ctl` / `harness-run.sh` (`all` permissions). +- Use harness actions that actually seed the situation: `spawn`, `status_apply` / `status_apply_nearby`, combat sessions, war/plot/family/outbreak sessions, wire attack sides, etc. +- When a bug was seen in a soak or Player.log, reproduce that shape in-world (same sticky kind, pair size, status class) before declaring fixed. +- Prefer extending `HarnessScenarios.cs` so the live repro becomes a repeatable `--repeat 3` gate. +- Watching the camera tip + dossier after drops counts; reading only the C# change does not. + ## Sandbox / permissions (required) **Never start, relaunch, or kill WorldBox / Steam from the Cursor sandbox.** @@ -49,23 +65,25 @@ Vanilla `Tooltip` / `TooltipLibrary` (`tooltips/tooltip_actor`, etc.) may be reu After any feature or bug fix in `IdleSpectator/`: -1. Bump `IdleSpectator/mod.json` version (NML recompiles on game load). -2. If the game was already running, recompile with: +1. Design for full coverage (discovery / class rules), not the single failing tip. +2. Bump `IdleSpectator/mod.json` version (NML recompiles on game load). +3. If the game was already running, recompile with: ```bash ./scripts/worldbox-ctl.sh restart ``` -3. Extend or add a scenario in `IdleSpectator/HarnessScenarios.cs` when the change is new behavior. -4. Day-to-day / PR gate: +4. Live-test: spawn/drop the relevant entities and statuses in-world (via harness scenario or focused harness commands). Confirm tip/focus/dossier behavior matches the contract. +5. Extend or add a scenario in `IdleSpectator/HarnessScenarios.cs` when the change is new behavior. +6. Day-to-day / PR gate: ```bash ./scripts/harness-run.sh --repeat 3 critical_smoke ``` -5. After larger changes (director, discovery, settings, input, tips, chronicle), also run: +7. After larger changes (director, discovery, settings, input, tips, chronicle), also run: ```bash ./scripts/harness-run.sh regression ``` -6. If you added a focused scenario, run it directly too. -7. Iterate until **all repeats PASS**. Do not stop after one flaky pass. -8. Report: scenario name(s), PASS/FAIL counts, and any new asserts. +8. If you added a focused scenario, run it directly too with `--repeat 3`. +9. Iterate until **all repeats PASS**. Do not stop after one flaky pass. +10. Report: scenario name(s), PASS/FAIL counts, what you spawned/live-checked, and any new asserts. ### HUD / visual changes - screenshot gate (required)