feat: forward RunicNPC's profiles and placements; the egg installs RunicNPC (runicnpc stage 4) #21

Merged
whitlocktech merged 2 commits from feat/runicnpc-stage4 into edge 2026-09-30 19:52:31 +00:00
Member

What

This is Rust-Link's part of RunicNPC stage 4. PROTOCOL_VERSION stays 13 (D248).

  • The sidecar gains four thin forwards, stamped like every other:

    • GET /npc/profiles → npc.profiles
    • POST /npc/profiles → npc.profiles.set
    • GET /npc/placements → npc.placements
    • POST /npc/placement → npc.placement

    Nothing here knows a profile from a placement.

  • The egg installs RunicNPC.cs when the bundle carries it (D224).

    • It is fetched and checked with the rest before anything is placed: the bundle's sha256, the API against the bundle, and the file against RunicNPC's own manifest.
    • It is placed before the bridge.
    • Its data directory is left for RunicNPC to make (runicnpc PLAN.md §1.5).
    • rust-link/bundle.json names it.

Tested

  • cargo fmt --check, clippy -D warnings and 67 tests pass, including a new stamping test.
  • The static musl build ran on both rigs through the stage 4 walk.
  • The egg's install script was run against a mock Gitea, with and without RunicNPC in the bundle, and egg/build.sh builds.

Pairs with

runicnpc-rust feat/stage-4-api3, Rust-Plugins, Module-Rust and installer feat/runicnpc-stage4, plus the docs PR.

Checklist

  • I have read CONTRIBUTING.md.
  • The change builds and existing tests/checks pass locally.
  • I have added or updated tests/docs where it makes sense.
  • My commits are reasonably scoped with clear messages.
  • AI tools were used. Tool(s): Claude Code (Claude Opus 5.5). Commits carry the Co-Authored-By trailer.
  • I agree that my contribution is licensed under GPL-3.0-or-later.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

## What This is Rust-Link's part of RunicNPC stage 4. `PROTOCOL_VERSION` stays 13 (D248). - **The sidecar** gains four thin forwards, stamped like every other: - `GET /npc/profiles` → `npc.profiles` - `POST /npc/profiles` → `npc.profiles.set` - `GET /npc/placements` → `npc.placements` - `POST /npc/placement` → `npc.placement` Nothing here knows a profile from a placement. - **The egg** installs `RunicNPC.cs` when the bundle carries it (D224). - It is fetched and checked with the rest before anything is placed: the bundle's sha256, the API against the bundle, and the file against RunicNPC's own manifest. - It is placed before the bridge. - Its data directory is left for RunicNPC to make (runicnpc PLAN.md §1.5). - `rust-link/bundle.json` names it. ## Tested - `cargo fmt --check`, `clippy -D warnings` and 67 tests pass, including a new stamping test. - The static musl build ran on both rigs through the stage 4 walk. - The egg's install script was run against a mock Gitea, with and without RunicNPC in the bundle, and `egg/build.sh` builds. ## Pairs with runicnpc-rust `feat/stage-4-api3`, Rust-Plugins, Module-Rust and installer `feat/runicnpc-stage4`, plus the docs PR. ## Checklist - [x] I have read CONTRIBUTING.md. - [x] The change builds and existing tests/checks pass locally. - [x] I have added or updated tests/docs where it makes sense. - [x] My commits are reasonably scoped with clear messages. - [x] AI tools were used. Tool(s): `Claude Code (Claude Opus 5.5)`. Commits carry the `Co-Authored-By` trailer. - [x] I agree that my contribution is licensed under GPL-3.0-or-later. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 2 commits 2026-09-30 13:46:43 +00:00
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
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
10221b7e20
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
whitlocktech merged commit 13a6d33dfd into edge 2026-09-30 19:52:31 +00:00
whitlocktech deleted branch feat/runicnpc-stage4 2026-09-30 19:52:32 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/Rust-Link#21
No description provided.