feat(rust): RunicNPC is required for every Place NPCs step (runicnpc stage 9, D310) #34

Merged
whitlocktech merged 2 commits from feat/runicnpc-stage9 into edge 2026-10-07 02:43:34 +00:00
Member

What & why

Phase 9b of docs/runicnpc/PLAN.md stage 9, D310: RunicNPC is required, and a server without it places no NPCs at all, Rust's own scientists included. This ends D243's "Rust's own only" fallback. Decisions in docs#324 (D306–D314) and docs#325 (D315, D316).

  • Every Place NPCs step asks for RunicNPC first (npcMissing, which replaces profileMissing). It refuses before anything is sent, for good: "Main needs RunicNPC to place NPCs, Rust's own scientists included: RunicNPC is not loaded on it". The same goes for an old RunicNPC or a server that has not said. Crates are unaffected.
  • The site's RunicNPC floor rises from API 4 to 6, the bridge's RunicNpcApiNeeded, so a server the site calls ready is one the bridge will not refuse as runicnpc-old. The profile push follows the same floor; a server at API 5 was already refused by the bridge.
  • Admin → Rust → Servers: each server carries runicNpc ({ ready, absence, version, api }, in Swagger). A server without one that will do reads "Incomplete: …" with the reason.
  • The picker is unchanged (D316): on a site with no RunicNPC server it still lists Rust's own, and the step is refused on save. Core's option sources cannot show a module's reason.

Companion PRs (phase 9b)

docs#325, website#211 (D314) and, opened next, the bridge, installer and runicnpc-rust PRs.

How it was tested

  • Server npm test: 504/504. New: every NPC step refused without RunicNPC, with an old one (API 5) and with no word from the server, nothing sent to the server, and crates still placed. Fixtures move to API 6. world.test.js stubs a RunicNPC-ready server list.
  • Client: npm run build, check:externals clean, npm test 73/73.

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: RunicNPC is required, and a server without it places no NPCs at all, Rust's own scientists included. This ends D243's "Rust's own only" fallback. Decisions in docs#324 (D306–D314) and docs#325 (D315, D316). - **Every Place NPCs step asks for RunicNPC first** (`npcMissing`, which replaces `profileMissing`). It refuses before anything is sent, for good: "Main needs RunicNPC to place NPCs, Rust's own scientists included: RunicNPC is not loaded on it". The same goes for an old RunicNPC or a server that has not said. Crates are unaffected. - **The site's RunicNPC floor rises from API 4 to 6**, the bridge's `RunicNpcApiNeeded`, so a server the site calls ready is one the bridge will not refuse as `runicnpc-old`. The profile push follows the same floor; a server at API 5 was already refused by the bridge. - **Admin → Rust → Servers:** each server carries `runicNpc` (`{ ready, absence, version, api }`, in Swagger). A server without one that will do reads **"Incomplete: …"** with the reason. - **The picker is unchanged (D316):** on a site with no RunicNPC server it still lists Rust's own, and the step is refused on save. Core's option sources cannot show a module's reason. ## Companion PRs (phase 9b) docs#325, website#211 (D314) and, opened next, the bridge, installer and runicnpc-rust PRs. ## How it was tested - Server `npm test`: **504/504**. New: every NPC step refused without RunicNPC, with an old one (API 5) and with no word from the server, nothing sent to the server, and crates still placed. Fixtures move to API 6. `world.test.js` stubs a RunicNPC-ready server list. - Client: `npm run build`, `check:externals` clean, `npm test` **73/73**. ## 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 2 commits 2026-10-07 02:37:02 +00:00
A Place NPCs step on a server without RunicNPC, or with one older than the
bridge needs, is refused before it is sent: "<server> needs RunicNPC to place
NPCs, Rust's own scientists included: <why>". Rust's own scientists were the
fallback until now (D243); they need RunicNPC too. Crates are unaffected.

- npcs.model: API_NEEDED rises from 4 to 6, the bridge's RunicNpcApiNeeded, so a
  server the site calls ready is one the bridge will not refuse as runicnpc-old.
  The profile push follows the same floor.
- eventWorld: profileMissing becomes npcMissing, asked for every NPC step.
- Admin → Rust → Servers: each server carries `runicNpc` ({ready, absence,
  version, api}) and a server without one that will do reads "Incomplete" with
  the reason. Swagger documents the field.

The event picker is unchanged in this commit (an open question on the PR).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
docs(rust): the NPC picker's comment says what stage 9 kept (D310)
Some checks failed
PR Checks / client-build (pull_request) Successful in 23s
PR Checks / server-tests (pull_request) Failing after 26s
PR Checks / frozen-manifest (pull_request) Successful in 42s
f71a2907fb
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit 1188a3142e into edge 2026-10-07 02:43:34 +00:00
whitlocktech deleted branch feat/runicnpc-stage9 2026-10-07 02:43:35 +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/Module-Rust#34
No description provided.