feat(rust): Guarded Crate — feed, map, Warden, Place a guarded crate (PLAN_REDESIGNS §14.3.5) #48

Merged
whitlocktech merged 1 commits from feat/guarded-crate into edge 2026-10-15 18:19:16 -05:00
Member

Stage 6 of the §14.3 integration plan, on protocol 14. Spec: docs rust-link/PROTOCOL.md §20.9. Record: modules/rust/PLAN_REDESIGNS.md §14.3.19.

  • Feed. gc.started and gc.ended are public kinds; gc.failed (the timeout) is staff's. The new guardedCrate.js reads each row for its viewer:

    • everyone: the grid, and won (whether a player cleared it)
    • the presence audience: the clearer's name (D376)
    • staff: the position, the step's key and the clearer's Steam id

    Lines, in the World events filter: "A guarded crate landed · M4", "Alice cleared the guarded crate · M4", "A guarded crate ended with nobody clearing it".

  • Triggers rust.gc.started (with byEvent) and rust.gc.ended. Both are public, the cooldown subject is the server, and players are named only. rust.gc.ended fires only for a crate a player cleared.

  • The step rust.gc.place, Place a guarded crate (risk change, reversible none, budget rust.gc.crates):

    • Params: an event (option source rust.options.gc_events: every server's own names, or Guarded Crate's four defaults where none has said) and a world call's location (monument + offsets, or a point).
    • Refused at verify where the server said Guarded Crate is not loaded, that NpcSpawn is missing (D364's wording), that console.plugins is false, or that it has no event of that name. A server that has not said is left to the plugin.
    • Kept (D373): the success line in the run log says the crate is kept when the run ends and how it ends (D380).
    • gc-too-close and a game that is down are retried; every other refusal is permanent.
  • Warden (D375): guardedWon is stored as guarded_won, with the title category guardedwon and a sortable Crates cleared column. The column shows where the server reports Guarded Crate or a row already counts one.

  • Map: a running crate is drawn on the world layer.

  • Server settings: the plugin line names Guarded Crate, NpcSpawn and the events, and says whether a step can place one.

  • Housekeeping: ci/bundle.json ships the two new files; the swagger fragment and engagement manifest are regenerated; README lists Guarded Crate. No MODULE_API change: coreApi stays ^1.15.0.

Tested:

  • Server: 643/643, 16 new in test/guardedCrate.test.js; imports, bundle, swagger and engagement checks pass.
  • Client: 95/95, build and externals pass.
  • Booted against the pinned core: 47 triggers, 14 actions, 12 budgets, 22 option sources; the 89 routes unchanged (frozen manifest current).

AI-assisted: written with Claude Code (disclosed per org policy).

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

Stage 6 of the §14.3 integration plan, on protocol 14. Spec: docs `rust-link/PROTOCOL.md` §20.9. Record: `modules/rust/PLAN_REDESIGNS.md` §14.3.19. - **Feed.** `gc.started` and `gc.ended` are public kinds; `gc.failed` (the timeout) is staff's. The new `guardedCrate.js` reads each row for its viewer: - everyone: the grid, and `won` (whether a player cleared it) - the presence audience: the clearer's name (D376) - staff: the position, the step's key and the clearer's Steam id Lines, in the *World events* filter: *"A guarded crate landed · M4"*, *"Alice cleared the guarded crate · M4"*, *"A guarded crate ended with nobody clearing it"*. - **Triggers** `rust.gc.started` (with `byEvent`) and `rust.gc.ended`. Both are public, the cooldown subject is the server, and players are named only. `rust.gc.ended` fires only for a crate a player cleared. - **The step `rust.gc.place`**, *Place a guarded crate* (risk `change`, reversible `none`, budget `rust.gc.crates`): - Params: an event (option source `rust.options.gc_events`: every server's own names, or Guarded Crate's four defaults where none has said) and a world call's location (monument + offsets, or a point). - Refused at verify where the server said Guarded Crate is not loaded, that **NpcSpawn is missing** (D364's wording), that `console.plugins` is false, or that it has no event of that name. A server that has not said is left to the plugin. - **Kept (D373):** the success line in the run log says the crate is kept when the run ends and how it ends (D380). - `gc-too-close` and a game that is down are retried; every other refusal is permanent. - **Warden (D375):** `guardedWon` is stored as `guarded_won`, with the title category `guardedwon` and a sortable **Crates cleared** column. The column shows where the server reports Guarded Crate or a row already counts one. - **Map:** a running crate is drawn on the world layer. - **Server settings:** the plugin line names Guarded Crate, NpcSpawn and the events, and says whether a step can place one. - **Housekeeping:** `ci/bundle.json` ships the two new files; the swagger fragment and engagement manifest are regenerated; README lists Guarded Crate. No MODULE_API change: `coreApi` stays `^1.15.0`. **Tested:** - Server: 643/643, 16 new in `test/guardedCrate.test.js`; imports, bundle, swagger and engagement checks pass. - Client: 95/95, build and externals pass. - Booted against the pinned core: 47 triggers, 14 actions, 12 budgets, 22 option sources; the 89 routes unchanged (frozen manifest current). AI-assisted: written with Claude Code (disclosed per org policy). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 1 commit 2026-10-15 12:27:47 -05:00
feat(rust): Guarded Crate — feed, map, Warden, Place a guarded crate (PLAN_REDESIGNS §14.3.5)
All checks were successful
PR Checks / client-build (pull_request) Successful in 30s
PR Checks / server-tests (pull_request) Successful in 34s
PR Checks / frozen-manifest (pull_request) Successful in -1m34s
da1d74bdff
Stage 6 of the §14.3 integration plan, on protocol 14. Spec: docs
rust-link/PROTOCOL.md §20.9.

- gc.started and gc.ended public, gc.failed staff's; guardedCrate.js reads
  each row per viewer (the clearer's name for the presence audience, Steam id,
  position and key for staff, `won` for everyone).
- Triggers rust.gc.started and rust.gc.ended (a crate a player cleared only).
- The step rust.gc.place: an event from rust.options.gc_events and a world
  call's location; refused at verify for Guarded Crate absent, NpcSpawn missing
  (D364), console unavailable, or an unknown event. Kept (D373); the run log's
  success line says so (D380). Budget rust.gc.crates.
- Warden (D375): guarded_won, title category guardedwon, Crates cleared column.
- Map marker, server settings line, swagger, engagement manifest, bundle, README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit 8be7e5607e into edge 2026-10-15 18:19:16 -05:00
whitlocktech deleted branch feat/guarded-crate 2026-10-15 18:19:17 -05:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/Module-Rust#48
No description provided.