docs(rust): phase 13 plan, and 13a as built (PLAN.md §28, PROTOCOL.md §15) #268

Merged
whitlocktech merged 4 commits from docs/rust-phase-13 into main 2026-09-24 10:07:19 +00:00
Showing only changes of commit a39d860123 - Show all commits

View File

@@ -266,9 +266,8 @@ this walk. It is §27.7's and §28.8's "not proven" lists, done by a person.
2. **`EventsEnabled` on** — Admin → Rust mod config → `RunicGateway.json`. It takes effect at once.
3. **The four event verbs switched on** in Admin → Events → Actions: `core.lease`, `rust.zone.open`,
`rust.crate.place`, `rust.npc.place`.
4. **A non-admin Steam account for steps 1 and 6.** Kits applies its gate to an admin too, so step 1
works on the owner's account; ZoneManager's flags do not (§12.5), which is why step 6 wants the
second account.
4. **A non-admin Steam account for step 6** is preferable but not required. Kits applies its gate to an
admin too, so step 1 works on the owner's account, and nothing in steps 26 depends on a permission.
Each step is an event you author in Admin → Events, publish, and start by hand. A monument is picked
from the dropdown (it lists this map's monuments by name and grid square); stand near it before you
@@ -277,11 +276,11 @@ start the run.
| # | Author this, start it, then | You should see |
|---|---|---|
| 1 | **A `core.lease` on `rust.group.permission`**: target `<server>/default/<the kit's RequiredPermission>`, value `true`, 10 minutes. Open the kit menu before and after starting it | The kit goes from **locked** to **available** when the step runs, and back to locked when the run ends or its ten minutes pass — whichever comes first. Redeem it once while it is open: the items stay in your inventory after it locks again, which is correct (the lease borrowed the *right*, not the loot) |
| 2 | **`rust.zone.open`** at a monument you are standing next to, radius 30, 15 minutes, a name you will recognise. Walk in and out of it | The zone is there: `zone.list`/ZoneManager's own `/zone list` at the console shows it with your name, and `rg.hooks` shows `OnEnterZone`/`OnExitZone` counted (13b subscribes to them; they fire either way). Walking in and out is the check a console could not make — §28.8's first item |
| 3 | **Leave step 2's run going and restart the server.** Rejoin and walk back into the zone | The zone is **back** after the restart, at the same place, with the same name re-created from the bridge's own record, because ZoneManager forgets temporary zones. On the site the run's zone row still reads `confirmed` |
| 2 | **`rust.zone.open`** at a monument you are standing next to, radius 30, 15 minutes, a name you will recognise. At the console run `rgp.inzone` with you **outside** the zone, then walk in and run it again | `zone_list` at the console lists the zone with your name (`rg-<run>-…`). `rgp.inzone` answers *nobody* for it while you are outside and **your name** once you are in — that is ZoneManager's own `IsPlayerInZone` saying a player is inside a zone the bridge made, which is §28.8's first item. (`rgp.inzone` is the rig-only probe, `RgProbe13`, on both rigs; ZoneManager itself has no command that says who is in a zone.) Nothing reaches the website yet: the bridge subscribes to `OnEnterZone`/`OnExitZone` in 13b, not 13a |
| 3 | **Leave step 2's run going and restart the server.** Rejoin, walk back into the zone and run `rgp.inzone` | `zone_list` shows the zone **back** after the restart, at the same place and with the same name, re-created from the bridge's own record because ZoneManager forgets temporary zones. `rgp.inzone` names you again. On the site the run's zone row still reads `confirmed` |
| 4 | **`rust.crate.place`**: `crate.hackable` ×1 and `crate.elite` ×3 at the same monument, spread 8. Loot one elite crate empty; start the hack on the locked crate. Then cancel the run | The crates are there and lootable, the hack timer runs. At teardown the untouched crates vanish, and the looted one is simply **gone** already — its row reads `reverted` all the same (§15.2: reverting something a player took is a success) |
| 5 | **`rust.npc.place`**: `npc.scientist` ×3 at the monument. Kill one; let the others see you | They are hostile and fight. The one you killed is just gone; at teardown the survivors vanish mid-fight. Every row reads `reverted`. If an NPC spawned **inside a wall or fell through the ground**, note the monument — some offsets land off the navmesh, and that is a finding about where to put things, not a bug to hide |
| 6 | **On the non-admin account**: a zone for 3 minutes. Stand inside it when the three minutes run out | The zone disappears around you **without anybody on the website doing anything** the game keeps the deadline (D96). The sidecar's `/events?kind=world.expired` shows the frame |
| 6 | **A zone for 3 minutes.** Stand inside it (`rgp.inzone` names you) and wait out the three minutes | The zone disappears around you **without anybody on the website doing anything**, because the game keeps the deadline (D96). `zone_list` no longer lists it, and the sidecar's `/events?kind=world.expired` shows the frame. Best done on the non-admin account, which is the view a real player has |
| 7 | **If players can be arranged, a `core.lease` on `spawn.max_rate`** — these two scalars are left out of the catalogue today because they only matter with people online (§27.5) | With several players on, the population system's spawn rate moves (`spawn.report`) while the lease holds and returns after. If it does, the two `spawn.max_*` keys can be added to the allowlist; if nothing moves even with players, they stay out |
**Run steps 15 on both frameworks.** One thing is specific to Carbon: ZoneManager was only installed