This commit is contained in:
DazedAnon 2026-07-17 02:38:06 -05:00
parent cb13b29c9e
commit 6b15466a92

View file

@ -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 rely on OS mouse/keyboard automation (Wayland-flaky).
Do not call `Application.Quit()` (can hang Steam on Linux). 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) ## Sandbox / permissions (required)
**Never start, relaunch, or kill WorldBox / Steam from the Cursor sandbox.** **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/`: After any feature or bug fix in `IdleSpectator/`:
1. Bump `IdleSpectator/mod.json` version (NML recompiles on game load). 1. Design for full coverage (discovery / class rules), not the single failing tip.
2. If the game was already running, recompile with: 2. Bump `IdleSpectator/mod.json` version (NML recompiles on game load).
3. If the game was already running, recompile with:
```bash ```bash
./scripts/worldbox-ctl.sh restart ./scripts/worldbox-ctl.sh restart
``` ```
3. Extend or add a scenario in `IdleSpectator/HarnessScenarios.cs` when the change is new behavior. 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.
4. Day-to-day / PR gate: 5. Extend or add a scenario in `IdleSpectator/HarnessScenarios.cs` when the change is new behavior.
6. Day-to-day / PR gate:
```bash ```bash
./scripts/harness-run.sh --repeat 3 critical_smoke ./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 ```bash
./scripts/harness-run.sh regression ./scripts/harness-run.sh regression
``` ```
6. If you added a focused scenario, run it directly too. 8. If you added a focused scenario, run it directly too with `--repeat 3`.
7. Iterate until **all repeats PASS**. Do not stop after one flaky pass. 9. Iterate until **all repeats PASS**. Do not stop after one flaky pass.
8. Report: scenario name(s), PASS/FAIL counts, and any new asserts. 10. Report: scenario name(s), PASS/FAIL counts, what you spawned/live-checked, and any new asserts.
### HUD / visual changes - screenshot gate (required) ### HUD / visual changes - screenshot gate (required)