diff --git a/.claude/skills/probe/SKILL.md b/.claude/skills/probe/SKILL.md deleted file mode 100644 index 7610dcde..00000000 --- a/.claude/skills/probe/SKILL.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -name: probe -description: Run the client unattended against the local vmangos server — a live probe, a capture, a leg. Use whenever a session or an agent needs the client logged in without a person at the keyboard. ---- - -The rules are in `docs/METHOD.md` ("The local server"). This is the how. - -**Identity.** The account this checkout declares in `.probe-identity` at the tree root -(`WOW_USER=`, `WOW_PASS=`, `WOW_CHAR=`, one per line, never committed), or the same three in -the environment. A login kicks whoever holds the account, so a probe account is its own, with -the top GM level (the GM commands the probes use all work; `.modify money` is out of reach -even so), and from a checkout that declares one the client refuses the scripted login on any -other account; `WOW_ALLOW_ACCOUNT=1` overrides. `scripts/smoke.sh`, `cine.sh` and -`summon-live.sh` take the identity from `scripts/probe-identity.sh`, which applies this rule. - -**Every run:** `WOW_UNATTENDED=1`, which reconnects instead of parking on a dialog and exits -non-zero on a login it cannot pass. An agent adds `WOW_NOSOUND=1`. The three scripts pass -`WOW_UNATTENDED=1`; `smoke.sh` and `summon-live.sh` add `WOW_NOSOUND=1`, and `cine.sh` -silences through a throwaway config with `MasterVolume=0` because the music path is its -subject. A capture (`WOW_CAPTURE`) implies both; a rig (`WOW_RIG`) implies unattended only. - -**The body.** A probe cannot die: every world entry sends `.cheat god on`. `.die` clears it for -a death test; `WOW_GOD=off` runs unshielded. GM mode is on by default and makes reaction -colours, nameplates, threat, aggro, fall damage and breath read wrong: `WOW_GM=off` for any of -those. The preflight banner names the body and its state on every entry; read it first. - -**A body that is not a level-1 human warrior:** `WOW_RIG="tauren druid 60 gear:heal-preraid-bis -spec:heal-preraid-bis at:ThunderBluff"` finds or creates it on the slot's account and applies -the lot; `WOW_RIG="gear:?"` lists the catalog. `WOW_PROBE_CHAT=""` sends a GM command, and -the server's answer is echoed as `net: server says`. - -**Wire work is proven from the trace:** `WOW_MOVE_TRACE= WOW_MOVE_TRACE_TAGS="move,snd,in" -WOW_PROBE_EXIT_AT=`, then grep the file for the `rly` and `snd` lines. An unfiltered trace -in a populated scene stops being a per-frame clock. - -**Keep a long run awake:** `caffeinate -u -t 2`, then `caffeinate -dis `. An occluded -window runs at about 1 fps and the live-FPS line stamps `occluded_frames=`; a lock screen -throttles the same way but reads 0 with `p99_ms` near 1020, so check -`ioreg -n Root -d1 -a | grep CGSSessionScreenIsLocked` before an unattended series. - -**Captures:** `scripts/visual.sh` wraps a capture run; the recipe, and why a capture goes -through `cargo run` and never a bare binary, is the header of -`crates/benilla-app/src/capture/mod.rs`. Pixel questions go through `benilla-visual crop`, -`series` and `hotspot`. diff --git a/.gitignore b/.gitignore index 79b32879..11050328 100644 --- a/.gitignore +++ b/.gitignore @@ -32,10 +32,8 @@ trace-*.json .DS_Store *.swp /.idea/ -# Claude Code: the skills are shared procedures (AGENTS.md names them); every other file under -# .claude/ is its owner's own settings. -/.claude/* -!/.claude/skills/ +# Claude Code: settings and skills under .claude/ are each person's own. +/.claude/ # Python bytecode from the `scripts/` tooling. __pycache__/ diff --git a/AGENTS.md b/AGENTS.md index 998468c7..a0b67e0d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,9 +10,6 @@ Read, in this order: touching anything. 3. `docs/CONTRIBUTING.md` — what gets in and how a change is judged. -Procedures with steps are skills in `.claude/skills/`: `probe` (an unattended run against the -local server). - The rest of the root is code and data: `crates/` the workspace, `reference/` the 1.12 name catalogues the tests check against, `scripts/` the gates and instruments, `third_party/` vendored code. diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 09d1f389..7f8cdf83 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -56,6 +56,22 @@ fork, and forks are welcome. the environment or in a `.probe-identity` file at the repo root (one per line, never committed), and `scripts/smoke.sh` (the live login gate) refuses without them. The probes drive the body with GM commands, so give that account the top GM level. +- **Running it unattended.** The rules are `docs/METHOD.md`, "The local server"; these are the + switches. + - `WOW_UNATTENDED=1` reconnects instead of waiting at a dialog, and exits non-zero on a login + it cannot pass. `WOW_NOSOUND=1` runs silent. A capture (`WOW_CAPTURE`) is both, and a rig + (`WOW_RIG`) is unattended. `WOW_ALLOW_ACCOUNT=1` overrides the account guard. + - On vmangos, `WOW_RIG="tauren druid 60 gear:heal-preraid-bis spec:heal-preraid-bis + at:ThunderBluff"` finds or creates that character on the account and applies the server's + premade sets (`WOW_RIG="gear:?"` lists them). `WOW_PROBE_CHAT=""` sends one GM + command and logs the reply as `net: server says`. An account named `probe` and digits is + shielded: every world entry sends `.cheat god on`, `.die` clears it for a death test, and + `WOW_GOD=off` leaves it off. + - A trace is `WOW_MOVE_TRACE=`, filtered with `WOW_MOVE_TRACE_TAGS` (`"move,snd,in"`) and + ended by `WOW_PROBE_EXIT_AT=`; grep it for the `rly` and `snd` lines. + - A capture runs through `scripts/visual.sh`, whose recipe is the header of + `crates/benilla-app/src/capture/mod.rs`. Pixel questions go through `benilla-visual crop`, + `series` and `hotspot`. - **The loop.** `cargo play` builds and runs the play profile. `scripts/check.sh` verifies a round of work; `scripts/gates.sh` is the full chain, and it opens a window for the engine boot checks, so it needs a display. Work on a branch. diff --git a/docs/METHOD.md b/docs/METHOD.md index bfaf2a4c..fe8cd76c 100644 --- a/docs/METHOD.md +++ b/docs/METHOD.md @@ -63,8 +63,6 @@ comment naming the reference fact and why we differ. Anything else is a fork. - git: the history. No changelogs, no status docs, no "what we did" narratives. - The code: a comment says what the code does and the 1.12 fact behind it, in a line. No history, no stories. -- `.claude/skills/`: procedures with steps. `probe` runs the client unattended against the local - server. ## Gates @@ -101,4 +99,4 @@ account. These bind every session and every agent: `WOW_GM=off`. - Read the preflight banner before debugging anything else. -The mechanics are the `probe` skill. +The switches for such a run are `docs/CONTRIBUTING.md`, "Running it unattended".