Commit Graph

63 Commits

Author SHA1 Message Date
5c4eaf5a31 Merge pull request 'chore(release): cut edge over to main — protocol 14' (#32) from edge into main
All checks were successful
Release sidecar / release (push) Successful in -2m18s
Reviewed-on: #32
v0.3.0
2026-10-22 10:23:04 +00:00
a61d7794d9 Merge pull request 'feat(sidecar): protocol 14 — the raid base spawn and spot check forwards (PLAN_REDESIGNS §11.4)' (#31) from feat/raidable-bases into edge
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 10m45s
Reviewed-on: #31
2026-10-17 06:32:54 +00:00
b8e860d85e feat(sidecar): protocol 14 — the raid base spawn and spot check forwards (PLAN_REDESIGNS §11.4)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 7m7s
POST /raid/spawn stamps the body raid.spawn and POST /raid/check stamps it
raid.check, and each forwards it. The plugin keeps the key and the run's
base in its world registry, so world.revert takes it back like a zone;
nothing is kept here. The five raid.* events ride the feed like any other.
Spec: docs rust-link/PROTOCOL.md §20.12.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-16 15:18:51 -05:00
d61470503f Merge pull request 'feat(sidecar): protocol 14 — the console command run forward (PLAN_REDESIGNS §16)' (#30) from feat/command-steps into edge
Reviewed-on: #30
2026-10-16 07:47:50 +00:00
6bf8a3624e feat(sidecar): protocol 14 — the console command run forward (PLAN_REDESIGNS §16)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 3m21s
`POST /commands/run`, stamped `command.run` the way `world.call`,
`dt.start` and `gc.place` are (PROTOCOL.md §20.11). The plugin keeps the
key, fills {steamid} and {name} and decides who is online; the sidecar
moves the line and knows nothing of what a command does (D384, no
allowlist). Joins protocol 14, still unreleased on edge.

Stamp test: the body's key, commands and recipients pass through byte for
byte, placeholders and quotes included.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-16 02:37:12 -05:00
532abc5761 Merge pull request 'feat(sidecar): protocol 14 — the guarded crate placement forward (PLAN_REDESIGNS §14.3.5)' (#29) from feat/guarded-crate into edge
Reviewed-on: #29
2026-10-15 23:18:55 +00:00
f96878441d feat(sidecar): protocol 14 — the guarded crate placement forward (PLAN_REDESIGNS §14.3.5)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 1m44s
POST /gc/place stamps the body gc.place and forwards it; the plugin keeps the
key and the crate is kept when the run ends, so nothing is kept here. Spec:
docs rust-link/PROTOCOL.md §20.9.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-15 12:26:47 -05:00
42d63121e0 Merge pull request 'feat(sidecar): protocol 14 — the Dangerous Treasures start forward (PLAN_REDESIGNS §14.3.4)' (#28) from feat/dangerous-treasures into edge
Reviewed-on: #28
2026-10-15 12:04:43 +00:00
1ab0cab80a feat(sidecar): protocol 14 — the Dangerous Treasures start forward (PLAN_REDESIGNS §14.3.4)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 2m46s
POST /dt/start, stamped dt.start whatever its body names, forwarded to the
plugin and answered with its dt.opened or dt.error. The plugin remembers the
key; DT despawns its own chest; nothing is kept here. dt.started, dt.won and
dt.ended ride the feed like any other event (docs rust-link/PROTOCOL.md §20.8).

72 tests (one new), fmt and clippy clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-15 06:45:27 -05:00
847c3baa07 Merge pull request 'feat(sidecar): protocol 14 — the world event call forward (PLAN_REDESIGNS §14.3.1)' (#27) from feat/world-events into edge
Reviewed-on: #27
2026-10-15 07:19:33 +00:00
4ad5cb0545 feat(sidecar): protocol 14 — the world event call forward (PLAN_REDESIGNS §14.3.1)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 5m49s
POST /world/call, a thin forward like /world/place: the body is stamped
`world.call` whatever it names, so the route cannot place, revert or zone
anything. What a call starts is kept, so nothing is remembered here; the
plugin keeps the call's key. The `world.event` frames (24 types, told apart by
`event`) ride the feed like any other event, and hello's `console` like any
other field. Still protocol 14 (D332); one new test, 71 pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-15 00:39:00 -05:00
5b2471b110 Merge pull request 'feat(sidecar): protocol 14 — the Backpacks forward (PLAN_REDESIGNS §11.3)' (#26) from feat/rust-backpacks into edge
Reviewed-on: #26
2026-10-12 19:41:45 +00:00
a95ecb8e25 feat(sidecar): protocol 14 — the Backpacks forward (PLAN_REDESIGNS §11.3)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 2m29s
POST /backpacks/read, a thin forward like /kits/uses: the body is stamped
`backpacks.read` whatever it names, so the route can only ever read. Nothing is
kept here. The bigger backpack an event lends is a permission in an ordinary
perm.sync (D337) and needs nothing new. Still protocol 14 (D332); one test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-12 14:35:54 -05:00
4eac5297e8 Merge pull request 'feat(sidecar): protocol 14 — the Economics forwards (PLAN_REDESIGNS §11.2)' (#25) from feat/protocol-14-economics into edge
Reviewed-on: #25
2026-10-12 12:40:38 +00:00
e720c21c09 feat(sidecar): protocol 14 — the Economics forwards (PLAN_REDESIGNS §11.2)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 4m7s
POST /economics/pay, /economics/balances and /economics/adjust, thin
forwards like /kits/uses: each body is stamped with its own command and
passed to the plugin, which remembers a payment's key. Nothing is kept here.
The tally's `balance` and the `economics.wiped` event ride the feed like any
frame. Still protocol 14 (D332); one forward test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-12 06:53:51 -05:00
21c9af645d Merge pull request 'feat(sidecar): protocol 14 — POST /kits/uses (PLAN_REDESIGNS §2.6)' (#24) from feat/protocol-14-step-editor into edge
Reviewed-on: #24
2026-10-12 09:52:22 +00:00
ef4fdb6e25 feat(sidecar): protocol 14 — POST /kits/uses (PLAN_REDESIGNS §2.6)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 16m11s
Opens protocol 14 (D332) for the step editor: one thin forward, POST /kits/uses
-> kits.uses ({kit, steamIds} in, counts out), for the kit weekend's warning.
perm.sync's new notices (D333) pass through untouched like the rest of the
body. PROTOCOL_VERSION 13 -> 14; one forward test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-12 02:13:15 -05:00
703245455b Merge pull request 'feat(sidecar): protocol 13, the egg with RunicNPC and the banner, edge → main (runicnpc 9e step 3, merge 2 of 3)' (#23) from edge into main
All checks were successful
Release sidecar / release (push) Successful in 14m22s
Reviewed-on: #23
v0.2.0
2026-10-09 07:20:59 +00:00
f895eaa961 Merge pull request 'feat(egg): write the recommended PopupNotifications banner (runicnpc 9e, D327, D328)' (#22) from feat/9e-popup-banner into edge
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 2m12s
Reviewed-on: #22
2026-10-09 06:29:39 +00:00
4eee1fbe17 feat(egg): write the recommended PopupNotifications banner (runicnpc 9e, D327, D328)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 4m43s
The install writes PopupNotifications.json into oxide/config or
carbon/configs as a banner across the top of the screen, by the installer's
rule: only where the file is missing or every setting is still the plugin's
own default (the Version aside). Anything else is kept whole. The plugin's
Version is written or kept, because PopupNotifications resets a config
without one. A failed write is said in the console and does not fail the
install: it is a look, not the bridge.

Tested in ghcr.io/ptero-eggs/installers:debian: missing, the rig's defaults,
defaults from a later release (version kept), four kinds of change, not
JSON, an existing banner, and an unmakeable directory. egg/build.sh builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-09 01:24:27 -05:00
13a6d33dfd Merge pull request 'feat: forward RunicNPC's profiles and placements; the egg installs RunicNPC (runicnpc stage 4)' (#21) from feat/runicnpc-stage4 into edge
Reviewed-on: #21
2026-09-30 19:52:29 +00:00
10221b7e20 feat(egg): install RunicNPC when the bundle carries it (runicnpc stage 4, D224)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 1m53s
The install script fetches RunicNPC's tarball with the rest, checks it against
the bundle's sha256, its API against the bundle and its file against its own
manifest, and places RunicNPC.cs before the bridge. Its data directory is left
for RunicNPC to make (runicnpc PLAN.md §1.5). rust-link/bundle.json names it.
Walked against a mock Gitea with and without RunicNPC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 08:11:34 -05:00
3b9a986e3a feat(sidecar): forward RunicNPC's profiles and placements (runicnpc stage 4)
GET and POST /npc/profiles, GET /npc/placements and POST /npc/placement:
four thin forwards of the plugin's npc.* commands, stamped like every other.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 04:21:53 -05:00
6cfb236125 Merge pull request 'feat(sidecar): POST /permissions/inventory forwards the plugin's store read' (#20) from feat/perm-inventory into edge
Reviewed-on: #20
2026-09-28 16:38:43 +00:00
3662363caf feat(sidecar): POST /permissions/inventory forwards the plugin's store read
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 1m40s
Protocol 13, the permission manager (PLAN_REDESIGNS section 1): one more
opaque forward. The body is {snapshotId?, page?}; paging is the plugin's
and the website's, and no page is kept here.

Refs RunicGateway/Module-Rust#21

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-28 06:58:43 -05:00
4498baffe4 Merge pull request 'feat(egg): install every plugin file the release lists, helpers included (D182)' (#19) from feat/protocol-13-egg-helpers into edge
Reviewed-on: #19
2026-09-27 06:11:57 +00:00
fe7b2822c5 feat(egg): install every plugin file the release lists, helpers included (D182)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 1m58s
Rust-Plugins now releases a ZoneManager helper, RunicGatewayZones.cs, beside
the bridge (docs/modules/rust/PLAN_FIXES.md D181, D182), installed by default.
The egg copied only RunicGateway.cs out of the tarball.

It now takes every .cs the plugin manifest lists in `files`, checks each
against its own sha256 before anything is placed (the bridge's own checksum
was never checked by the egg before), and refuses a name that is not a plain
<Name>.cs. A release older than helpers lists only the bridge and installs
exactly what it did before. Exercised in an Alpine shell against both, a
tampered helper, a missing one, `../evil.cs` and `evil.dll`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 21:25:35 -05:00
0179ca52ec Merge pull request 'fix(sidecar): protocol 13 — a configuration write no longer waits for its reload (F9)' (#18) from fix/protocol-13-config-reload into edge
Reviewed-on: #18
2026-09-26 22:29:27 +00:00
522187ddd1 fix(sidecar): protocol 13 — a configuration write no longer waits for its reload (F9)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 3m48s
The plugin now answers config.write once the files are on disk and reports
the reload as a config.outcome event, which this process files and feeds by
its type like any other event. The reload window no longer has to fit
inside REPLY_TIMEOUT, so CONFIG_RELOAD_WINDOW and the test that asserted
the pairing are gone, and the 504 body stops pointing at a rollback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 17:08:37 -05:00
e9b6778b78 Merge pull request 'fix(egg): the launcher drops Carbon's preloader for itself, not just the sidecar' (#17) from fix/launcher-carbon-preload into main
All checks were successful
Release sidecar / release (push) Successful in 5m6s
Reviewed-on: #17
v0.1.3
2026-09-26 14:53:33 +00:00
af0e6be9f5 fix(egg): the launcher drops Carbon's preloader for itself, not just the sidecar
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 4m0s
Carbon's entrypoint puts LD_PRELOAD=libdoorstop.so in front of the whole
startup string, and with Carbon's DOORSTOP_* environment that preloader
breaks the launcher shell's own command substitution: the sidecar's
--print-config output went straight to the console and the capture came
back empty. The first Carbon server built from the egg printed its config
JSON, token included, unframed, then "server id 'main', sidecar URL
http://192.168.0.12: (listening on )" and never the once-only banner.
`env -u LD_PRELOAD` on the sidecar alone was not enough: the shell doing
the capturing had the preload too.

The launcher now re-execs itself once without LD_PRELOAD, keeps it aside,
and gives it back to the game in run_game, the only process that needs it.

Reproduced and fixed under Carbon's real environment (environment.sh +
libdoorstop.so): the released launcher dumps the JSON; this one prints the
banner and "server id 'egg-carbon', sidecar URL http://192.168.0.12:21019",
and the game still gets LD_PRELOAD and DOORSTOP_ENABLED. The four
no-preload cases in the game image are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 04:28:05 -05:00
6c46d9388a Merge pull request 'fix(egg): name the egg runicgateway-rust-autowipe' (#16) from fix/egg-name into main
All checks were successful
Release sidecar / release (push) Successful in 5m19s
Reviewed-on: #16
v0.1.2
2026-09-26 08:45:32 +00:00
08ad7b93ce fix(egg): name the egg runicgateway-rust-autowipe
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 1m30s
The org lead's name for it in the panel. Pterodactyl takes an egg's name
from the imported JSON, so it is set here rather than renamed by hand
after every import.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 03:31:56 -05:00
bc1919ce38 Merge pull request 'fix(sidecar): refuse a plugin that names another server (D155)' (#15) from fix/refuse-foreign-plugin into main
All checks were successful
Release sidecar / release (push) Successful in 5m12s
Reviewed-on: #15
v0.1.1
2026-09-26 06:27:15 +00:00
3f5ed059b8 fix(sidecar): refuse a plugin that names another server (D155)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 4m1s
`[game].server_id` was a cross-check that WARNED and kept the plugin's id.
The phase 18 walk showed what that costs: a second server's plugin,
parked in this listener's backlog by a plugin bug (Rust-Plugins, D154),
was accepted the moment the first server's plugin reloaded, and the
website showed server "alpha" with beta's hostname and wipe.

Now, with `server_id` set, the connection is closed on the first frame
that names another server, BEFORE that frame reaches the store or the
feed, and both ids are logged at ERROR. The command channel is installed
only once a frame has named this server, so no website command (a grant,
a world write) can reach a plugin about to be refused, and /health reports
the plugin connected only from then. Blank `server_id`: nothing checked,
as before.

The egg's launcher now hands the sidecar the plugin config's ServerId once
that file exists. The plugin reads RUSTLINK_SERVER_ID only at its first
config write (D150); without this, a variable edited after the first boot
would be refused instead of changing nothing, as INSTALL.md promises.

Walked: a plugin aimed at another server's sidecar is refused with an
ERROR naming both ids, and the site keeps the right server's identity.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 01:19:50 -05:00
1f3dfb55b2 Merge pull request 'chore(release): cut edge over to main — protocols 3–12, the egg, and the first release (rust phase 18, D145)' (#14) from edge into main
All checks were successful
Release sidecar / release (push) Successful in 8m21s
Reviewed-on: #14
v0.1.0
2026-09-26 05:45:07 +00:00
d8b638773d Merge pull request 'feat(sidecar): a Windows service, the egg and its launcher, and the first release workflow (phase 18)' (#13) from feat/phase-18-release into edge
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 3m34s
Reviewed-on: #13
2026-09-26 05:34:13 +00:00
b3b66b1cc2 feat(sidecar): a Windows service, the egg and its launcher, and the first release workflow (phase 18)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 3m53s
Module-rust phase 18, step 4 of docs/modules/rust/PLAN.md §34.2.7.

The Windows service (D149, §34.2.5): src/windows.rs, ported from link's fix
for error 1053. The same exe tries the SCM handshake and falls through to a
console run on 1063; it reports Running only once the listener and store are
up, and logs to a daily file beside its config. One binary serves every
RunicGatewayRust-<id> instance, because the SCM ignores the dispatcher's name
for an own-process service.

An empty environment variable now counts as unset. A Pterodactyl egg exports
every variable it declares, so a blank RUSTLINK_WEB_TOKEN arrived as "" and
overrode the saved token, and a new one was generated and persisted on every
boot. That breaks D152, which this change makes true.

The egg (R20, R22, D151, D152, §34.2.6), in egg/:
- install.sh is egg 18's script with two changes. A wipe guard moves
  rust-link/ to /tmp around `rm -rf ${REMOVE_FILES}`. The bridge block then
  fetches a schema-2 Rust bundle (pinnable by RUNICGATEWAY_BUNDLE), checks
  every asset's sha256 and the plugin's protocol before placing anything, and
  places the plugin by FRAMEWORK. Vanilla installs nothing and does not fail.
- with-sidecar.sh is the launcher. It unsets blank variables, builds the web
  bind from RUSTLINK_WEB_PORT, and runs --print-config so that a newly
  generated token is printed once. It prints the URL and server id for the
  admin page, then execs the game. It no longer uses `set -e`: nothing the
  bridge gets wrong may keep the game from booting.
- The startup's launcher prefix is conditional, so a server with no bridge
  boots exactly as egg 18 does.
- build.sh assembles egg-rust-runicgateway.json. PR Checks runs it.

The release (D145, §34.2.1) reuses servuo-plugins' engine. It publishes the
static musl Linux binary, the Windows exe, the launcher, the egg and
SHA256SUMS, and dispatches the installer's bundle.yml. PR Checks gains a
clippy run for the Windows target.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-25 23:14:57 -05:00
6aa6cdcf97 Merge pull request 'feat(sidecar): protocol 12 — POST /titles (phase 17)' (#12) from feat/phase-17-integrations into edge
Reviewed-on: #12
2026-09-25 23:31:25 +00:00
46ba35d89a feat(sidecar): protocol 12 — POST /titles (phase 17)
Some checks failed
PR Checks / rust-gates (pull_request) Failing after -35s
One more thin forward: the chat titles each player has earned, as a whole
set the plugin swaps in and BetterChat reads on the chat path. perm.sync's
BetterChat styles and chat.say's delivery and format pass through untouched
like the rest of their bodies. PROTOCOL_VERSION moves to 12.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-25 17:48:05 -05:00
73b2523aa6 Merge pull request 'feat(sidecar): protocol 11 — four map forwards (phase 14)' (#11) from feat/phase-14-map into edge
Reviewed-on: #11
2026-09-25 12:00:35 +00:00
9e2a83d7c9 feat(sidecar): protocol 11 — four map forwards (phase 14)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 1m17s
GET /map, GET /map/chunk, POST /map/render and GET /map/live, stamped and
forwarded like the reward routes (PLAN.md §30.2). Nothing is stored: the
picture passes through in 512 KiB slices and positions are never filed
(D111). A test asserts a base64 slice plus its envelope fits the game
link's 1 MiB line cap on the way back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-25 00:11:19 -05:00
06c3ed79b4 Merge pull request 'feat(sidecar): protocol 10 — five reward forwards (phase 13b)' (#10) from feat/phase-13b-rewards into edge
Reviewed-on: #10
2026-09-24 13:01:37 +00:00
c80994ce87 feat(sidecar): protocol 10 — five reward forwards (phase 13b)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 1m13s
POST /tally/open, GET /tally/snapshot, POST /tally/close, GET /kits and
POST /chat: who took part in a run, the kits a reward can name, and one
line in the server's chat (the module's PLAN.md §29). Thin forwards like
protocol 9's; the tally, the kit catalogue and the chat memory all live
in the plugin. perm.sync's new `credits` field passes through untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-24 06:37:38 -05:00
86205d6140 Merge pull request 'feat(sidecar): protocol 9 — five world forwards (phase 13a)' (#9) from feat/phase-13a-world into edge
Reviewed-on: #9
2026-09-24 10:09:13 +00:00
a1a6177921 feat(sidecar): protocol 9 — five world forwards (phase 13a)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 2m58s
GET /world/monuments, GET /world/owned, POST /world/zone, POST /world/place
and POST /world/revert, each a correlated round trip with cmd and reqId
stamped over the caller's. The allowlist, bounds, monument vocabulary and
the registry of what each run owns live in the plugin (the module's PLAN.md
§28); this process moves lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-24 00:42:54 -05:00
788bed89a0 Merge pull request 'feat(sidecar): protocol 8 — three lease forwards (phase 12)' (#8) from feat/phase-12-leases into edge
Reviewed-on: #8
2026-09-24 04:03:12 +00:00
d688dfca66 feat(sidecar): protocol 8 — three lease forwards
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 1m42s
GET /lease, POST /lease, POST /lease/release, each a correlated round trip with cmd and reqId stamped over the caller's. lease.expired is an ordinary event. The sidecar learns nothing about keys, bounds or deadlines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-23 21:14:03 -05:00
698fbb386d Merge pull request 'feat(sidecar): protocol 7 — the raid frame, and again no new code' (#7) from feat/phase-10-engagement into edge
Reviewed-on: #7
2026-09-23 18:43:43 +00:00
cb0913388d feat(sidecar): protocol 7 — the raid frame, and again no new code
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 1m7s
entity.destroyed gains the cupboard's authorised list and covers doors,
walls and the cupboard. The sidecar stores and serves events as they
arrive, so only the number moves. The bump is what stops a website that
alerts on `authorized` from pairing with a protocol-6 plugin that never
sends it, which would read every raid as a base with no cupboard.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-23 05:52:56 -05:00