docs(runicnpc): stage 6 spike, measured on both rigs; D283–D284 #314

Merged
whitlocktech merged 1 commits from docs/runicnpc-stage6-spike into main 2026-10-05 14:26:16 +00:00
Member

What

Stage 6's spike results (D282), in runicnpc/PLAN.md stage 6, "Measured", and your two answers to the questions they raised (D283, D284). The harness is runicnpc-rust#9: rnt.spike6, 26 of 26 on each rig.

Found
Press E (D278) No OnUseNPC on either framework, and Rust ignores the use button server-side. It goes through OnPlayerInput, which costs ~7 ns a tick; a 3 m ray hits our NPC 9 times in 9.
Bar (D274) CUI's update works on both frameworks, so a redraw is 434 B. It costs 115–200 µs to build, and 6–8 µs to find who sees it with a distance loop (the sphere query costs 316–357 µs).
Kit swap (D275) The NPC keeps its target and fires the new weapon. It must call EquipWeapon, or it holds nothing. 3–7 ms; ~100 ms the first time the server makes that weapon.
Adds (D275) 4.4–7.6 ms each, all in one frame, so the build places one per frame. All landed on the mesh and fought.
Kits' file (D280) data/Kits/kits_data.json. A reload picks up a written kit and keeps players' usage, including a claim held only in memory. Oxide 3.5–15 s, Carbon 0.4–2.3 s. IsHidden does not stop /kit <name>.
Found on the way RunicNPC's // Requires: Kits makes every Kits reload unload RunicNPC too, on both frameworks, killing its NPCs, an event's included.

Your answers (2026-10-05)

# Decision
D283 RunicNPC keeps // Requires: Kits. A Kits reload reloads RunicNPC and loses the NPCs it had spawned; placements respawn, an event's NPCs do not. The operator documentation says not to reload Kits during an event.
D284 The four example kits are written only on the first install, behind a flag in RunicNPC's data, and are never restored or overwritten afterwards.

Proposed with D284; merging this PR approves them:

  • the kit names rnpc_raider, rnpc_campguard, rnpc_sniper and rnpc_juggernaut;
  • RequiredPermission: runicnpc.examplekits, which nobody is granted, so players can't claim the kits by name;
  • the first-install order: write the kits, set the flag, then reload Kits.

Checklist

  • I have read CONTRIBUTING.md.
  • Docs only.
  • AI tools were used. Tool(s): Claude Code (Claude Opus 5.5). The 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 Stage 6's spike results (D282), in `runicnpc/PLAN.md` stage 6, "Measured", and your two answers to the questions they raised (D283, D284). The harness is runicnpc-rust#9: `rnt.spike6`, 26 of 26 on each rig. | | Found | |---|---| | Press E (D278) | No `OnUseNPC` on either framework, and Rust ignores the use button server-side. It goes through `OnPlayerInput`, which costs ~7 ns a tick; a 3 m ray hits our NPC 9 times in 9. | | Bar (D274) | CUI's `update` works on both frameworks, so a redraw is 434 B. It costs 115–200 µs to build, and 6–8 µs to find who sees it with a distance loop (the sphere query costs 316–357 µs). | | Kit swap (D275) | The NPC keeps its target and fires the new weapon. It **must call `EquipWeapon`**, or it holds nothing. 3–7 ms; ~100 ms the first time the server makes that weapon. | | Adds (D275) | 4.4–7.6 ms each, all in one frame, so the build places one per frame. All landed on the mesh and fought. | | Kits' file (D280) | `data/Kits/kits_data.json`. A reload picks up a written kit and keeps players' usage, including a claim held only in memory. Oxide 3.5–15 s, Carbon 0.4–2.3 s. `IsHidden` does not stop `/kit <name>`. | | Found on the way | RunicNPC's `// Requires: Kits` makes every Kits reload unload RunicNPC too, on both frameworks, killing its NPCs, an event's included. | ## Your answers (2026-10-05) | # | Decision | |---|---| | D283 | RunicNPC keeps `// Requires: Kits`. A Kits reload reloads RunicNPC and loses the NPCs it had spawned; placements respawn, an event's NPCs do not. The operator documentation says not to reload Kits during an event. | | D284 | The four example kits are written only on the first install, behind a flag in RunicNPC's data, and are never restored or overwritten afterwards. | Proposed with D284; merging this PR approves them: - the kit names `rnpc_raider`, `rnpc_campguard`, `rnpc_sniper` and `rnpc_juggernaut`; - `RequiredPermission: runicnpc.examplekits`, which nobody is granted, so players can't claim the kits by name; - the first-install order: write the kits, set the flag, then reload Kits. ## Checklist - [x] I have read CONTRIBUTING.md. - [x] Docs only. - [x] AI tools were used. Tool(s): `Claude Code (Claude Opus 5.5)`. The 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 1 commit 2026-10-05 11:24:14 +00:00
What rnt.spike6 found on the Oxide and Carbon rigs: press E has no
hook but OnPlayerInput; the bar can redraw in place with CUI's update;
a phase's kit swap keeps the target but needs EquipWeapon; adds cost
4-8 ms each in one frame; Kits' data file takes an added kit on reload
and keeps players' usage. Found on the way: RunicNPC's
"// Requires: Kits" makes every Kits reload take RunicNPC and its
NPCs down. Two questions for the org lead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit 59586eece7 into main 2026-10-05 14:26:16 +00:00
whitlocktech deleted branch docs/runicnpc-stage6-spike 2026-10-05 14:26:18 +00:00
wtclaude changed title from docs(runicnpc): stage 6 spike, measured on both rigs to docs(runicnpc): stage 6 spike, measured on both rigs; D283–D284 2026-10-05 14:28:32 +00:00
Sign in to join this conversation.
No description provided.