Commit Graph

726 Commits

Author SHA1 Message Date
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
e7551cbf8f docs(rust): plan fixes — D181-D185, how step 2 is built
Step 2 of PLAN_FIXES §6 had four open choices; the org lead answered them
before any code:

- D181/D182: F12 is a ZoneManager helper that Harmony-patches
  Zone.InitializeZone, ships in the overlay, and the bridge falls back to
  IsPositionInZone for scoring without it.
- D183: F14's expiry is core's: an `expired` ledger status and
  ctx.events.expired (MODULE_API 1.11.0), without disturbing Module-uo.
- D184: F8 is plugin.loaded / plugin.unloaded with the permission diff.
- D185: F2 is the site's labels; no wire change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 20:41:08 -05:00
697e00b2c4 Merge pull request 'docs(rust): protocol 13 — the reload as the rigs showed it (W1-W5, D180)' (#287) from docs/rust-protocol-13-carbon-reload into main
Reviewed-on: #287
2026-09-27 01:23:35 +00:00
b8d9740ed0 docs(rust): protocol 13 — the reload as the rigs showed it (W1-W5, D180)
PROTOCOL.md §19.1: how the reload is asked for (Carbon: c.reload on the
server console), which log is read (Carbon.Core.log on Carbon), the pinned
failure lines on both frameworks, a load confirmed by a log read, and the
compiler's give-up retried once. PLAYER_WALK.md: the Carbon reload path and
failure words as walked. PLAN_FIXES.md: D180.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 20:21:26 -05:00
cfa37c44e3 Merge pull request 'docs(rust): plan fixes — D176-D179, how step 1 is built' (#285) from docs/rust-plan-fixes-step1 into main
Reviewed-on: #285
2026-09-26 22:22:21 +00:00
259049bdc0 Merge pull request 'docs(rust): protocol 13 opens — the configuration save that answers first (PROTOCOL.md §19)' (#286) from docs/rust-protocol-13-config into main
Reviewed-on: #286
2026-09-26 22:21:37 +00:00
b9d8689061 docs(rust): protocol 13 opens — the configuration save that answers first (PROTOCOL.md §19)
§19 starts protocol 13 with its first piece: config.write answers pending
with a writeId and ceilingMs, a reload fails on the framework log's evidence
under a 30 s ceiling judged by what is loaded, a rollback waits for the
restore, and the outcome is a staff-class config.outcome event (F9, F10,
D178). F15's UTF-8 decode rides in the same release. §11.4 points at the
amendment; §2 says 13. PLAYER_WALK.md's configuration steps now expect
"Saved. Reloading…", add a cold-compile save and a non-ASCII save, use
Kits' chat command instead of a ZoneManager setting that does not exist
(D-2), and name Carbon's failure wording as the thing step 4 pins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 17:19:14 -05:00
d72ccd56dd docs(rust): plan fixes — D176-D179, how step 1 is built
F15 waits for protocol 13 (D176); F9 and F10 open that bump on edge in all
three repos (D177); a reload fails on the log's evidence under a 30 s
ceiling with a loaded check before any restore (D178); the configuration
page polls the write until it settles (D179).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 16:55:23 -05:00
f015772425 Merge pull request 'docs(rust): plan fixes — D173 quests, D174 title rules, D175 admin-owned titles' (#284) from docs/rust-plan-fixes-quests into main
Reviewed-on: #284
2026-09-26 21:36:12 +00:00
e5255f021a Merge pull request 'docs(rust): plan fixes — D169-D172, the org lead's answers' (#283) from docs/rust-plan-fixes-answers into main
Reviewed-on: #283
2026-09-26 21:35:56 +00:00
0319f6b26e docs(rust): plan fixes — D175 titles are defaults admins can replace
The twenty-three title names in §4.6 are the module's defaults. An admin
can set their own title per category, once for the site, and it
supersedes the default on every server; clearing it restores the
default. A rule's own text still wins over both. §4.6 describes the
three layers on top of phase 17's rust_title_rules (stat grows from
three values to the twenty-three categories).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 16:34:54 -05:00
7743cec1fb docs(rust): plan fixes — D173 quests are Rust's own missions, D174 title rules
D173: "Quests completed" (Wayfarer) counts the missions Rust's NPCs
already hand out; no quest plugin. uMod's catalogue names no mission
hook and CARBON.md lists none, so the detailed plan starts with a rig
spike: a framework hook if one exists at build time, else reading the
player's mission list at each tally flush, else a D168 helper patch.
D174 adopts §4.6's recommended title rules (best columns for kill
distance, weapon-class kills count every credited kill, killing-blow
credit for APC/heli, heals of others only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 16:32:38 -05:00
7834ef1a88 docs(rust): plan fixes — D169-D172, the org lead's answers
D169 every fix and redesign lands before Module-Rust's cutover. D170 an
expired zone is marked expired on the site (F14 moves from "by design"
to a fix, amending D96). D171 Steam sign-in moves to the website's own
plan as part of the base website. D172 chat titles use all twenty-three
listed conditions under new names: §4.6 is now a table of condition,
title and the hook that feeds it, plus what the detailed plan must
settle (best-value columns, weapon classes, vehicle-kill credit, heals
of others, quests). PLAN.md §35 and the rust README follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-26 16:27:52 -05:00
dc6c5a72fd Merge pull request 'docs(rust): plan fixes — the first player walk's findings, gating the cutover' (#282) from docs/rust-plan-fixes into main
Reviewed-on: #282
2026-09-26 21:26:49 +00:00
8afe53b3db Merge pull request 'docs(modules): a site runs one module (decision 35)' (#263) from docs/one-module-per-site into main
Reviewed-on: #263
2026-09-26 21:26:20 +00:00
96fb7e1807 Merge pull request 'docs(tree): sync installer/PROJECT_TREE.md' (#280) from chore/sync-installer-tree into main
Reviewed-on: #280
2026-09-26 21:26:01 +00:00