The org lead connected, so the occupancy criterion is met: a zone created
on the player's own position reported OnEnterZone, occupancy=1 by name,
and OnExitZone. R17's "presence transitions as events" is verified, which
is what the participation ledger and advance conditions rest on.
The exit was produced by relocating the zone rather than walking the
player out — CreateOrUpdateZone on an existing id moves the trigger
volume and fires OnExitZone. Useful for testing presence unattended.
Two ceilings recorded, both constraining later phases:
- No console session can observe a gate (the !player || idiom).
- An admin account cannot see a refusal from most plugins either, and the
bypass is NOT uniform. PopupNotifications (player.IsAdmin) and
ZoneManager (authLevel > 0) hard-bypass; Kits' RequiredPermission gate
is config-gated with a shipped default of false, and Kits' own IsAdmin
is a permission rather than auth level. So phase 13 is demonstrable on
this rig as it stands and phase 7 is not — phase 7 needs a second,
non-admin Steam account.
Adds §12.6: R18's two trees as they actually look now the configs exist.
Its data/ inventory was exactly right, but config/ is FLAT on a fresh
base set — it is data/ that nests, i.e. the nesting R18 cites to justify
the recursive walk is currently only visible in the tree it must never
walk. Also: oxide/data/ holds Oxide's own permission store, so straying
one directory over would edit R2's mirror underneath itself.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
Org lead correction: every Rust host already updates the server and
re-installs Oxide together. Presenting that as something an operator
would be caught by talks down to the audience.
Keeps the one narrow consequence that is actually ours: app_update
leaves Oxide.Core.dll and the rest in place, so a phase-18 doctor check
that tests for oxide/ or for Oxide's assemblies passes on a server that
is mid-routine. Compare Assembly-CSharp.dll against the Oxide build.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
Brings D:\rust to build 25230300 with Oxide 2.0.7716 and the four base
plugins loaded, and records what the rig disproved.
- §4: start.bat never updated anything. +force_install_dir must precede
+login; the 2026-09-15 fix corrected the path and left the order, so
every update run in the rig's history errored without updating. Also:
app_update reverts Oxide's patched Assembly-CSharp.dll while leaving
Oxide's own assemblies, producing a server that looks Oxided and loads
no plugins. Phase 18's doctor should check for this.
- R2: permission.GrantUserPermission silently no-ops for an unregistered
permission — void, no throw, no log. Since R2 recovers by re-pushing
the full set on connect, a re-push into a server missing one plugin is
a silent partial. Plus: grants and groups have different reach for a
player who has never connected.
- R5: the Clans plugin raises nine hooks, not three, and three carry full
member lists. The "exactly three, none a membership transition" claim
was a grep artefact — the hook name is a const at the call site. The
decision stands on a different reason; phase 17 gains event-driven
leadership as a sharpening rather than a replacement.
- R17: EraseTemporaryZone's owner scoping refuses only a *different*
owner. An unowned zone — every zone an operator made by hand — is
erased by anyone and returns true. Phase 12 must gate on its own id map.
- §12.5: the zone-occupancy criterion stays open. A console command has no
BasePlayer, so every plugin's permission check short-circuits to allowed
and no console session can observe a gate closing; NPCs are excluded
from zone player lists by construction. This is a standing property of
the rig, relevant at phases 7 and 12.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4