Commit Graph

741 Commits

Author SHA1 Message Date
2ad2043060 docs(runicnpc): stage 4 built and walked; protocol 13 §19.12; API 3
PROTOCOL.md §19.12: RunicNPC over the bridge — integrations.runicNpc, the
npc.profiles, npc.profiles.set, npc.placements and npc.placement commands and
their refusals, the npc.died, npc.health and npc.placement.changed frames,
world.place with a profile, attackerNpc and attackerProfile, the tally's
npcProfileKills, the four sidecar routes, and overlay.toml's runicnpc_api.

API.md: API 3 — RunicNpc_AddPlacement, RunicNpc_RenamePlacement,
RunicNpc_RespawnPlacement and OnRunicNpcPlacementChanged.

PLAN.md stage 4: what was built in five repositories, the walk on both rigs
row by row, what was not walked and why, and what building it found.

rust-link/INSTALL.md: RunicNPC as the bundle's third file, by hand, the egg,
doctor and uninstall.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 08:45:21 -05:00
c6ba46d692 Merge pull request 'docs(runicnpc): stage 4 decisions D249–D251' (#306) from docs/runicnpc-stage4-api3-decisions into main
Reviewed-on: #306
2026-09-30 09:34:25 +00:00
a3d815dea1 docs(runicnpc): D252, a player's per-profile kills in their leaderboard row
The module has no public player page, so D250's "player's public stats" are
shown by opening the player's row in a server's leaderboard, and to the player
on their own Player -> Rust page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 04:12:00 -05:00
c48efe18c0 docs(runicnpc): stage 4 decisions D249-D251
D249: RunicNPC gets API 3 in stage 4 (a fifth PR): a call that creates and
names a placement from a map point it grounds and checks, rename and respawn
calls, and a hook raised when a placement changes.
D250: per-profile kills on the player's public stats, as a title category,
and as a leaderboard ranked by a picked profile.
D251: where an adopted server profile and a site profile share a name on
that server, the site's wins; the server's own is kept as "replaced".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 03:39:47 -05:00
e57fc5889a Merge pull request 'docs(runicnpc): stage 4 decisions D243–D248' (#305) from docs/runicnpc-stage4-decisions into main
Reviewed-on: #305
2026-09-30 08:32:27 +00:00
e601f1a1c6 docs(runicnpc): stage 4 decisions D243-D248
The org lead's answers for stage 4 (Runic Gateway integration): the event
picker shows profiles and Rust's own scientists (D243); a server's own
profiles are adopted on the first push (D244); placements are listed,
edited and created from the live map with /rnpc place's options (D245,
D246); kills count by profile name per server unless a profile says
otherwise (D247); one stage, four PRs, joining protocol 13 (D248).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 03:30:43 -05:00
84de5b2879 Merge pull request 'docs(runicnpc): stage 3 as built, and its in-game walk' (#304) from docs/runicnpc-stage3 into main
Reviewed-on: #304
2026-09-30 08:20:51 +00:00
953044b806 docs(runicnpc): stage 3 as built, and its in-game walk
- PLAN.md stage 3: what was built (runicnpc-rust#5), the results on
  both rigs (134/134, reload and restart 5/5), what building it found
  (Rust leaves an NPC in the air when its floor goes; a route leg can
  be on the navmesh and still unwalkable; a shore floor not covered;
  stage 2's JSON leak), the console-only at= option for the org
  lead's call, and the in-game walk checklist.
- API.md: SetPlacement's navmesh check and D239 fallback, the
  placements' note, List's regrounded, and SetRoute's unchecked legs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 03:19:14 -05:00
fdfd525bc4 Merge pull request 'docs(runicnpc): stage 3's design, D239–D242' (#303) from docs/runicnpc-stage3-decisions into main
Reviewed-on: #303
2026-09-30 06:52:55 +00:00
791ac75b14 docs(runicnpc): stage 3's design, D239–D242
The org lead answered stage 3's four questions on 2026-09-30:

- D239: a roamer may stand on a player-built floor (Rust's mesh covers it
  a moment after it is built, stage 2), with a warning in the answer.
  §5, §8 and stage 10 now follow it; stage 2's open item is closed.
- D240: routes are recorded point by point (record, point, undo,
  save loop|back, cancel), with nothing drawn on screen.
- D241: placements made in game are named <profile>-<n>, renamable.
- D242: /rnpc place and /rnpc here take key=value options in any order.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 01:49:48 -05:00
3f358bba76 Merge pull request 'docs(runicnpc): stage 2 as built, and API.md' (#302) from docs/runicnpc-stage2 into main
Reviewed-on: #302
2026-09-30 06:40:48 +00:00
1e00c5da6e docs(runicnpc): stage 2 as built, and API.md
runicnpc/API.md is the reference for other plugins: owners, every
RunicNpc_* call, the four hooks, and the profile, placement and route
shapes. PLAN.md records stage 2's results on both rigs and what building it
found: Rust's chase needs an AI zone like its roam, and a player-built floor
joins the navmesh 0.1-0.3 s after it spawns, which corrects stage 1's Q4
(left open for the org lead). README indexes API.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 01:31:44 -05:00
5c44ce437a Merge pull request 'docs(runicnpc): stage 2's design, D232–D238' (#301) from docs/runicnpc-stage2-decisions into main
Reviewed-on: #301
2026-09-30 04:41:05 +00:00
a542ae917f docs(runicnpc): stage 2's design, D232–D238
The org lead answered stage 2's open questions: a fixed field list for the
swap, three movement modes a placement may choose (wander, Rust's monument
paths, admin-recorded routes), sleep past 160 m after walking home, respawn
per placement (each or group), placements that wait for a deleted profile,
and the profile's shape. Stage 2 and 3 are rewritten around them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 23:40:19 -05:00
c2061d5dda Merge pull request 'docs(runicnpc): stage 1 measured, D231' (#300) from docs/runicnpc-stage1 into main
Reviewed-on: #300
2026-09-30 04:26:45 +00:00
e3ae1905cb docs(runicnpc): stage 1 measured, D231
The harness answered all six stage 1 questions on both rigs, on one 6000 world:
the swap needs AwakeFromInstantiate; unsaved NPCs never return; Rust's brain
honours sense values only before it starts, roams only in AI zones and never
attacks NPCs; placement checks use Rust's Gen2 navmesh (89% of monument points,
never a player-built floor); the cost table for 1/10/100 idle and fighting on
Oxide and Carbon; the death screen needs an AttackerInfo override, and the
bridge's frames still name the prefab.

D231: each profile or group decides whether its NPCs target NPCs, and which
kinds, which needs our own combat state and sensing (stage 5 spike).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 23:23:35 -05:00
23c2a5a5cf Merge pull request 'docs(runicnpc): stage 0 as built, D229–D230' (#299) from docs/runicnpc-stage0 into main
Reviewed-on: #299
2026-09-30 02:05:26 +00:00
ced4755ebb docs(runicnpc): stage 0 as built, D229-D230
Records what runicnpc-rust#1 built for stage 0 and the two decisions taken with
it: the empty repository seeded by one chore commit to main, then edge and PRs
(D229); plugin/RunicNPC.cs + plugin.toml rather than an overlay tree (D230).
Notes the Oxide floor that differs from the bridge's (2.0.7726, what the rig
runs), the three checks added over the bridge's checker, the manifest's `api`
field, and con.js renamed console.js because CON is a reserved device name on
Windows. PLAN_REDESIGNS' pointer now reads D214-D230.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 21:04:47 -05:00
216bbf9c54 Merge pull request 'docs(runicnpc): plan RunicNPC, our own Rust NPC plugin (D214–D220)' (#298) from docs/runicnpc-plan into main
Reviewed-on: #298
2026-09-30 01:47:49 +00:00
aec01342d5 docs(runicnpc): record the org lead's answers, D221-D228
Standalone use too (D221), placements live on the server (D222), our own
scientist subclass and brain (D223), installer and egg ship it plus a
Gitea release and possibly other download sites (D224), per-profile
kills public and in titles (D225), edge to main (D226), no default caps
but a measured cost warning wherever NPCs are added (D227), and the
names RunicNPC, /rnpc, runicnpc.* (D228). The sections they change are
updated: standalone profiles, the console profile verb, cost warnings,
stage 1's measurements, and publishing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 20:38:28 -05:00
97be4fb5ab docs(runicnpc): plan RunicNPC, our own Rust NPC plugin (D214-D220)
The PLAN_REDESIGNS §6 spike ran on the Oxide rig on 2026-09-30. Route A
kept its kit and fought with it but cannot be named; HumanNPC counted its
NPCs as players in the killfeed and tallies; NpcSpawn worked but costs a
boot hitch, a phone-home and an unbundleable dependency. The org lead
chose to write our own API-style plugin in runicnpc-rust.

runicnpc/PLAN.md records the spike, the decisions, the features, the API,
the chat commands, and stages 0-10 with how each is tested, plus eight
questions. PLAN_REDESIGNS §6, §9 and §10 point at it; the index lists it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 20:31:57 -05:00
71ab0c01af Merge pull request 'docs(rust): the map's monument labels as built and walked — PLAN_REDESIGNS 4.1, D213' (#297) from docs/rust-map-markers into main
Reviewed-on: #297
2026-09-30 00:17:04 +00:00
d7b178fb8b docs(rust): the map marker labels as walked
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 18:19:31 -05:00
3bd7a22bc6 docs(rust): the minor labels read from a 6000 map, and D213
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 18:12:08 -05:00
637a11326e docs(rust): the map's monument labels as built (PLAN_REDESIGNS §4.1, D196)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 12:10:47 -05:00
75a45b51a1 Merge pull request 'docs(rust): the chat-title conditions as built — PROTOCOL 19.10, PLAN_REDESIGNS 5.8 and D209' (#295) from docs/rust-title-conditions into main
Reviewed-on: #295
2026-09-29 17:00:40 +00:00
6ed4021c12 Merge main into docs/rust-title-conditions: §3's docs
PROTOCOL.md: §19.10 (titles) and §19.11 (zones) both kept, in order.
PLAN_REDESIGNS: the D210-D212 table moved from the end of the file, where
docs#296 appended it by mistake, into §10 after D209.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 11:36:45 -05:00
381d8ee5b6 Merge pull request 'docs(rust): zones and the dome as built and walked — PROTOCOL 19.11, PLAN_REDESIGNS 3.4, D210-D212' (#296) from docs/rust-zones-domes into main
Reviewed-on: #296
2026-09-29 16:27:52 +00:00
baef8f27eb docs(rust): §3's site half as walked — the presets page, a step from a preset, a run on Carbon
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 09:54:53 -05:00
4056e5a14d docs(rust): §3 walked on the rigs, and D212 (the full dome is the default)
PLAN_REDESIGNS §3.4: the rig rows as walked 2026-09-29 without a player,
the dome types, D212, and the in-game rows deferred to the later in-game walk.
PROTOCOL §19.11: dome type 0 when absent; walk status.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 09:42:25 -05:00
7f9026c9e7 docs(rust): zones and the dome as built — PROTOCOL 19.11, PLAN_REDESIGNS 3.4, D210, D211
PROTOCOL §19.11: world.zone's seven new fields, bad-option and
dome-unavailable, the bridge-said zone messages, the domes helper and
OnRgDomesReady, hello's zoneManager and integrations.zoneDomes.

PLAN_REDESIGNS: §0.6 corrected (ZoneFieldListRaw exists), §3.4 as built,
D210 (flags ticked on a presets page, the step copies a preset's line) and
D211 (the bridge reads the flag list). INSTALL names the new helper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 05:25:45 -05:00
e8f0ff2407 docs(rust): §5 compiled on both rigs, and what the item-list probe corrected
PLAN_REDESIGNS 5.8 records the probe's lists and the three members it corrected; PROTOCOL 19.10 names the crafter, the mission assignee and the heal target as built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 02:07:30 -05:00
e3c5d7128c docs(rust): the chat-title conditions as built — PROTOCOL 19.10, PLAN_REDESIGNS 5.8 and D209
PROTOCOL.md §19.10 documents player.tally's new fields and the ten hooks
behind them. PLAN_REDESIGNS §5.8 records what the build settled (the
category ids, where each is read from, the empty-text rule, the admin
API, the plugin's counting choices) and what is left before the walk.
D209: a title rule's "NPC kills" ranks human NPCs only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-28 23:32:59 -05:00
18a4a561e3 Merge pull request 'docs(rust): the RaidableBases spikes, and D203-D208' (#294) from docs/rust-raidablebases-spike into main
Reviewed-on: #294
2026-09-29 00:18:35 +00:00
664d2b2144 docs(rust): D206-D208, the org lead's answers to the helper spike
Lock-to-first-attacker per event via a BypassUseOwners patch; a step places
its base where RaidableBases picks or at an admin-given spot with a height
adjustment or exact height; a blocked spot is refused with the reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-28 12:20:30 -05:00
a34b5fdbf0 docs(rust): record the RaidableBases helper spike (§11.4.4)
One base despawns alone; overrides go in at OpenEvent through a deep copy;
lock-to-first-attacker is main-config only; an admin-given spot and height
work through a copied profile (Clone() is shallow and leaked); the area
check misses water; reloads drop Harmony patches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-28 12:18:33 -05:00
6684ea5c60 docs(rust): the RaidableBases spike, and D203-D205
The free edition (3.2.0) on both rigs with CopyPaste: its public API, the
17-argument lifecycle hooks, spawning only through `rbevent` at a spot the
plugin picks, base ids always "0", despawn only all-at-once, the boot
hitch and grid wait, and the profile options. Section 11.4.2 is left for
the paid edition the org lead supplies later in the week.

D203 RaidableBases picks where; D204 a helper despawns only the event's
base; D205 profile + difficulty + per-event overrides, and the site edits
RaidableBases' profiles as a named exception.

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 11:56:38 -05:00
5328ff35b5 Merge pull request 'docs(rust): perm.inventory in PROTOCOL 19.9, and the permission manager as built' (#293) from docs/rust-perm-manager into main
Reviewed-on: #293
2026-09-28 16:38:28 +00:00
52658ce2c1 docs(rust): perm.inventory in PROTOCOL 19.9, and the permission manager as built
PROTOCOL.md 19.9 specifies perm.inventory (owners, groups with parents,
holders, leased pairs; sliced, paged, one snapshot) and perm.sync's
protocol-13 changes (parents, titles and ranks written, absent means
leave it, managed and foreign gone). PLAN_REDESIGNS 1.9 records what the
build settled and the walk on both rigs.

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 11:25:58 -05:00
4c996e270f Merge pull request 'docs(rust): first-class optional plugins in the redesign plan (D199-D202)' (#292) from docs/rust-optional-plugins into main
Reviewed-on: #292
2026-09-28 11:37:11 +00:00
23ce47c6ad docs(rust): first-class optional plugins in the redesign plan (D199-D202)
Economics, Backpacks and RaidableBases become optional, supported
integrations; Kits stays required. PLAN_REDESIGNS.md gains section 11 with
what each plugin exposes, what the site does with it, the spikes each build
starts with, and the org lead's four answers.

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:35:04 -05:00
a9981f59bc Merge pull request 'docs(rust): plan the six step-3 redesigns, and D188-D198' (#291) from docs/rust-step3-plan into main
Reviewed-on: #291
2026-09-27 08:58:52 +00:00
fa53526079 docs(rust): record the org lead's answers to the step-3 plan (D188-D198)
Groups are per server unless an admin shares them (D189); an in-game
change affects that server only, as an exception or a split (D190);
ZoneDomes stays, made safe by a domes helper (D194); presets are the
admins' own (D195); zone and reward messages get the popup choice
(D193); the NPC spike tries both routes (D197). The rest confirm the
plan: D188, D191, D192, D196, D198.

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-27 03:56:43 -05:00
a430666f94 docs(rust): plan the six step-3 redesigns in one document
PLAN_REDESIGNS.md plans PLAN_FIXES §6 step 3 in detail, before any code:
the permission manager, the event step editor and kit weekend, zones and
domes, map marker types, the 23 title conditions, and NPCs. Checked on
both rigs first: the public owner lookup for permissions, the mission
hooks both frameworks already raise, and ZoneDomes' null-player throw.
Eleven questions for the org lead (§10) become D188 onward.

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-27 03:45:44 -05:00
180d6a85d9 Merge pull request 'docs(rust): the step-2 player walk, and D186-D187' (#290) from docs/rust-step2-player-walk into main
Reviewed-on: #290
2026-09-27 08:26:29 +00:00
1891f4f6fd docs(rust): the step-2 player walk, and D186-D187
PLAYER_WALK's step-2 rows 3-9 walked with the org lead in the game on
both rigs (2026-09-27). Records the results, corrects four rows (the
helper is unloaded, not deleted; no enter message can show; sleepers do
not score; ZoneManager's own entry counted the player anyway), and adds
D186 (a link code's second pass skips servers known down) and D187 (no
permission sync to a server the poll saw go away) with F6, F7 and F12's
as-walked notes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-27 03:18:40 -05:00
9aba725ca2 Merge pull request 'docs(rust): protocol 13 step 2 — expiry, plugin loads, the zone helper, the tally (§19.4-19.8, MODULE_API 1.11.0)' (#289) from docs/rust-protocol-13-step2 into main
Reviewed-on: #289
2026-09-27 06:09:43 +00:00
383f3bdbe5 docs(rust): the step-2 site walk, and the run it found stuck pending
Walked on a core running Module-Rust#22 on website#209 against rust-oxide:
F8, F13/F14, F7, F5/F6 and the helper's state all pass. The expiry walk found
a run left cleanup-pending for ever when its last resource expires while it
runs; website#209 now settles it, and EVENTS.md §L says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-27 01:05:35 -05:00
a199823513 docs(rust): say which half of the step-2 walk rows was walked
Rows 1-2 of PLAYER_WALK's step-2 section had their game side walked on both
rigs; their site side (the servers-page warning, a grant landing within a
minute) needs a walk core running Module-Rust#22 on website#209, which the
first commit claimed as walked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 21:48:18 -05:00
1a7f52743f docs(rust): protocol 13 step 2 — expiry, plugin loads, the zone helper, the tally (§19.4-19.8, MODULE_API 1.11.0)
The spec for PLAN_FIXES §6 step 2, as built (D181-D185):

- PROTOCOL.md §19.4 world.expired's `what` and the website recording an
  expiry (amends §15's "maps it to nothing"); §19.5 plugin.loaded /
  plugin.unloaded with the permission diff; §19.6 the ZoneManager helper and
  `zoneHelper` at hello; §19.7 what the tally counts (F1, F3, F4); §19.8 the
  website (F7 hold, F5/F6 link fleet, F2 names).
- MODULE_API.md 1.11.0 and ctx.events.expired; EVENTS.md §L the `expired`
  status, terminal and green, and `resource.expired`.
- rust-link/INSTALL.md: the helper in the tarball, by hand, and in doctor.
- PLAYER_WALK.md: events step 6 can pass now; a step-2 section whose rows 1-2
  were walked on both rigs without a player and 3-9 need one.
- PLAN_FIXES §6: step 2 as built, with its PRs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 21:47:42 -05:00