feat(rust): RunicNPC is required in the Rust bundle (runicnpc stage 9, D310) #38

Merged
whitlocktech merged 1 commits from feat/runicnpc-required into edge 2026-10-07 02:42:58 +00:00
Member

What & why

Phase 9b of docs/runicnpc/PLAN.md stage 9, D310: the Rust bundle's RunicNPC entry stops being optional.

Into a recreated edge. This repo's edge was deleted when it was last cut over, and main releases on every push. Merging this into main would publish an installer that refuses today's Rust bundle, which carries no RunicNPC. I recreated edge from main (2567cf5) so that it lands with the coordinated cutover (D313, phase 9e), after a bundle with RunicNPC v1.0.0 exists.

  • install / update --game rust refuse a bundle with no RunicNPC before anything is written, and say how to get one that has it.
  • doctor --game rust fails when RunicNPC is missing or was never installed. A file edited by hand stays a warning, since it still loads.
  • compose-bundles.sh composes no Rust bundle without a RunicNPC release that answers the bridge's runicnpc_api, and fails a bridge that declares none. The published bundle stays, and ServUO is unaffected (per-game failure). Every Rust bundle now has npc.
  • A RunicNPC API-mismatch message had lost its line continuation (a run of spaces in the middle); restored.
  • The bundle type still parses a bundle without npc, so doctor and an old pin can name it. The egg follows the bundle and needs no change.

How it was tested

  • cargo fmt, cargo clippy --all-targets -- -D warnings clean; cargo test: 174 + 9 pass.
  • compose-bundles.sh run by hand against the real release API: Rust fails with "Rust-Plugins v0.1.1 declares no runicnpc_api, and RunicNPC is required (D310)…", and ServUO reports "no change". The success path's jq document was checked separately with a stand-in npc.

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-assisted contributions (required)

  • No AI tools were used to produce this contribution.
  • AI tools were used. Tool(s): Claude Code (Claude Opus 5.5). I have reviewed and understand
    every change, and take responsibility for it. AI-authored commits are
    marked with a Co-Authored-By / Assisted-By trailer.

License

  • I agree that my contribution is licensed under this project's license
    (GNU GPL v3.0 or later), and I have the right to contribute it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

## What & why Phase 9b of `docs/runicnpc/PLAN.md` stage 9, D310: the Rust bundle's RunicNPC entry stops being optional. **Into a recreated `edge`.** This repo's `edge` was deleted when it was last cut over, and `main` releases on every push. Merging this into `main` would publish an installer that refuses today's Rust bundle, which carries no RunicNPC. I recreated `edge` from `main` (2567cf5) so that it lands with the coordinated cutover (D313, phase 9e), after a bundle with RunicNPC v1.0.0 exists. - **`install` / `update --game rust`** refuse a bundle with no RunicNPC before anything is written, and say how to get one that has it. - **`doctor --game rust`** fails when RunicNPC is missing or was never installed. A file edited by hand stays a warning, since it still loads. - **`compose-bundles.sh`** composes no Rust bundle without a RunicNPC release that answers the bridge's `runicnpc_api`, and fails a bridge that declares none. The published bundle stays, and ServUO is unaffected (per-game failure). Every Rust bundle now has `npc`. - A RunicNPC API-mismatch message had lost its line continuation (a run of spaces in the middle); restored. - The bundle type still **parses** a bundle without `npc`, so `doctor` and an old pin can name it. The egg follows the bundle and needs no change. ## How it was tested - `cargo fmt`, `cargo clippy --all-targets -- -D warnings` clean; `cargo test`: 174 + 9 pass. - `compose-bundles.sh` run by hand against the **real** release API: Rust fails with "Rust-Plugins v0.1.1 declares no runicnpc_api, and RunicNPC is required (D310)…", and ServUO reports "no change". The success path's jq document was checked separately with a stand-in `npc`. ## Checklist - [x] I have read [CONTRIBUTING.md](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. ## AI-assisted contributions (required) - [ ] No AI tools were used to produce this contribution. - [x] AI tools were used. Tool(s): `Claude Code (Claude Opus 5.5)`. I have reviewed and understand every change, and take responsibility for it. AI-authored commits are marked with a `Co-Authored-By` / `Assisted-By` trailer. ## License - [x] I agree that my contribution is licensed under this project's license (**GNU GPL v3.0 or later**), and I have the right to contribute it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 1 commit 2026-10-07 02:37:15 +00:00
feat(rust): RunicNPC is required in the Rust bundle (runicnpc stage 9, D310)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 2m13s
04bab67778
- install/update refuse a Rust bundle that carries no RunicNPC, before anything
  is written, and say how to get one that does.
- doctor fails when RunicNPC is missing or was never installed; a file edited
  by hand stays a warning, since it still loads.
- compose-bundles.sh composes no Rust bundle without a RunicNPC release that
  answers the bridge's runicnpc_api (the published one stays), and fails a
  bridge that declares none; every Rust bundle now has `npc`.
- A RunicNPC API-mismatch message lost its line continuation; restored.

The bundle type still parses a bundle without `npc`, so doctor and an old pin
can name it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit 6ab40a1e6a into edge 2026-10-07 02:42:58 +00:00
whitlocktech deleted branch feat/runicnpc-required 2026-10-07 02:42:59 +00:00
Sign in to join this conversation.
No description provided.