feat(bridge): protocol 9 — the world verbs events place and give back (phase 13a)

world.monuments, world.zone, world.place, world.revert and world.owned
(PLAN.md §28, D86-D96):

- Zones through ZoneManager's temporary zones, owned by the bridge, with a
  required duration the plugin enforces itself (D96) and re-created from the
  bridge's own registry on every load and every ZoneManager reload (D92),
  because ZoneManager erases a plugin's zones when that plugin unloads.
- Crates and NPCs from a plugin-held allowlist (D88) at a monument by kind
  and instance, or at raw coordinates (D87, D93), bounded 25/20 per step (D95).
- A registry file keyed by the website's idempotency key, since this bridge
  has no at-most-once store: a repeat answers with the first call's ids.
- world.owned LOOKS by net id: crates survive a restart, NPCs do not, so a
  boot id proves nothing. A wipe drops the registry whole.
- EventsEnabled gates every world write; revert, owned and monuments never
  (D94). Revert refuses only a thing that exists and is not this run's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
2026-09-24 01:22:06 -05:00
parent c106ba826b
commit bbaa7f346e
2 changed files with 1217 additions and 8 deletions

View File

@@ -26,10 +26,11 @@
# the same change that alters the emitters, exactly as the sidecar bumps
# PROTOCOL_VERSION and the module bumps its own constant.
#
# Current: 8 — the transport, the read path, identity, the permission mirror,
# configuration from the site, first-party clans, and a raid frame that names who
# lives there (docs/rust-link/PROTOCOL.md §13).
protocol = 8
# Current: 9 — the transport, the read path, identity, the permission mirror,
# configuration from the site, first-party clans, a raid frame that names who
# lives there, the event leases, and the world verbs events place and give back
# (docs/rust-link/PROTOCOL.md §15).
protocol = 9
# ── Oxide compatibility ──────────────────────────────────────────────────────
#

File diff suppressed because it is too large Load Diff