From ef5a15ae2c787db79f3b2af758868a4f9536b29a Mon Sep 17 00:00:00 2001 From: arcattack Date: Fri, 24 Jul 2026 16:13:29 -0500 Subject: [PATCH] KB: late-join make-sync gap + revolving-door plan digest (multiplayer, open-questions) The 1995 engine tolerates late HOST attach but never finished late ENTITY sync (NotifyOfReplacementEntityCreation = Fail stub, makes broadcast-once). Routes to docs/REVOLVING_DOOR_PLAN.md. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_0166KTsC7ADm7VXEi1HF1jNg --- CLAUDE.md | 2 +- context/multiplayer.md | 22 ++++++++++++++++++++++ context/open-questions.md | 8 ++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9912203..7e35ae3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -83,7 +83,7 @@ precise than anything you can infer. | Term / acronym definitions | `reference/glossary.yaml` | | The ORIGINAL 1995 player manual (controls, per-mech stats, coolant loops) | `reference/manual/Tesla40_BT_manual.pdf` (+ alignment audit in `context/pod-hardware.md` §Manual) | | The complete verbatim detail (fallback) | `docs/PROGRESS_LOG.md` (the old 2236-line CLAUDE.md) | -| Detailed running ledgers | `docs/RECONCILE.md`, `docs/GAUGE_COMPOSITE.md`, `docs/HARD_PROBLEMS.md`, `docs/SUBSYS_PLAN.md`, `docs/P3_LOCOMOTION.md`, `docs/RESOURCE_AUDIT.md`, `docs/VEHICLE_SUBSYSTEMS.md`, `docs/BGF_FORMAT.md`, `docs/ASSET_PIPELINE.md`, `docs/BT_SOURCE_STATUS.md`, `docs/WAVE_PLAN.md`, `docs/GLASS_COCKPIT.md` | +| Detailed running ledgers | `docs/RECONCILE.md`, `docs/GAUGE_COMPOSITE.md`, `docs/HARD_PROBLEMS.md`, `docs/SUBSYS_PLAN.md`, `docs/P3_LOCOMOTION.md`, `docs/RESOURCE_AUDIT.md`, `docs/VEHICLE_SUBSYSTEMS.md`, `docs/BGF_FORMAT.md`, `docs/ASSET_PIPELINE.md`, `docs/BT_SOURCE_STATUS.md`, `docs/WAVE_PLAN.md`, `docs/GLASS_COCKPIT.md`, `docs/REVOLVING_DOOR_PLAN.md` | --- diff --git a/context/multiplayer.md b/context/multiplayer.md index 5fd5025..213e1dd 100644 --- a/context/multiplayer.md +++ b/context/multiplayer.md @@ -680,6 +680,28 @@ join/teardown/respawn windows leave the vehicle briefly NULL. Both sites now nu (burning semantics preserved). ALSO: live proof that interest teardown of entities RUNS in MP — the #38 paint-loss mechanism's first half is confirmed fact. +## Late-join / revolving-door feasibility (2026-07-24, read-only study) [T1 code-read] +Full plan + anchors: `docs/REVOLVING_DOOR_PLAN.md` (two phases; Phase 1 = console-only round +carousel, Phase 2 = true drop-in). The durable engine facts found: +- **Late HOST attach is designed-in**: `HostConnectedMessageHandler` (L4NET.CPP:1551+) flips an + existing ROSTER host to OnLine whenever it connects — arrival order/timing is free (this is + how slow loaders already work), and the relay's PEER_UP exchange is bidirectional for + newcomers (btconsole.py:1202-1209). +- **Late ENTITY sync was never finished in 1995**: entity MakeMessages are broadcast ONCE at + creation and never retained. `InterestManager::NotifyOfEntityCreation` (INTEREST.cpp:694-763 + → DynamicEntityCreation :839+) sends immediately; the interest-zone bookkeeping is + `#if 0 "HACK - Partial implementation"`; and `HostManager::NotifyOfReplacementEntityCreation` + (HOSTMGR.cpp) is literally `Fail("under construction")`. So a mid-mission joiner sees an + empty world — while the world sees the JOINER fine (its makes broadcast after it connects). +- **The engine launch gate stalls on absent roster seats** (every pod waits on every roster + host — the stall the relay warns about); the relay's launch-time roster TRIM is what makes + partial-attendance launches work today. +- The relay's back-to-back machinery (`_check_launch_gate` btconsole.py:780-813) already + auto re-arms after a round in auto mode — a round carousel is ~3 changes away (door gate, + round-end roster reset, round-length knob). Phase 2 = re-send locally-owned masters' makes + on a mid-mission PEER_UP + a duplicate-make guard + a relaxed launch gate; it lives in the + same interest-teardown neighborhood as the crash above, so churn-soak is mandatory. + ## Remaining (P6 phase 4 / Phase 7) Pod-LAN config: **real-IP path VALIDATED (2026-07-15)** — an egg with the machine's real LAN IP in `[pilots]` (not `127.0.0.1`) connected + replicated + moved end-to-end (`Connected to diff --git a/context/open-questions.md b/context/open-questions.md index c8d7b24..19bc316 100644 --- a/context/open-questions.md +++ b/context/open-questions.md @@ -139,6 +139,14 @@ register. ⚠ The audit also flags the damage-economy item as SELF-CONTRADICTOR (task #8 "landed" vs the kShotDamage=12 bring-up residue) — audit before reworking. ## Deferred subsystems / feeds (authentic path scoped, marked in code) +- **Revolving-door Phase 2 (true mid-mission drop-in) — PLANNED, gated on a spike** + (`docs/REVOLVING_DOOR_PLAN.md`, 2026-07-24). Open questions before any engine work: + (a) can an `Entity::MakeMessage` be REGENERATED post-birth (serializing current state), or + does the make path assume creation-time state? (b) what does the replicant-creation path do + with an already-known entity ID (idempotent, or double-create — needs a guard)? (c) where + exactly is the all-roster-hosts-connected launch wait, and can absent seats stay `Opening` + without stalling? Go/no-go = the 2-node late-attach spike in the plan doc. Phase 1 (round + carousel) is console-only and has no engine unknowns. [[multiplayer]] - **Glass panel dead-button backlog (input-coverage audit 2026-07-20) [T1 census].** 8 of the 72 panel buttons dispatch a streamed message with NO reconstructed handler (silently ignored): 0x13 → Mech `DuckRequest` @0049fa00 (CROUCH — `duckState` attr + SQUAT clips exist!), 0x28 →