From 82e6bb306afd97d45f6d86179257ee2a02b51324 Mon Sep 17 00:00:00 2001 From: arcattack Date: Wed, 15 Jul 2026 14:35:41 -0500 Subject: [PATCH] KB: sweep STALE "unfinished" claims -> match landed commits (context-system audit) 4-agent audit cross-checked every open/pending/stub/deferred claim in the context system against git + code. Fixed ~13 stale spots (currency only, no code change), each contradicted by its own file body + a landed commit: - 0xBD3 SubsystemMessageManager (task #7, afefaee): subsystems.md frontmatter+body line 57; decomp-reference.md 0xBD3 row + +0x434 row -- all still said "MISLABELS controlsMapper / WAVE 8 untangle" (done; mech.hpp names it messageManager). - Cylinder hit-location STEP 6 (d07ac7d): combat-damage.md frontmatter; decomp-reference.md "not reconstructed" line. - Per-mech turn-rate wiring (task #64b, a83995a): multiplayer.md + locomotion.md frontmatter (still "bring-up constant / not yet wired"). - Mech-level update records (task #1, c9f0c2a): open-questions.md "dead Wword branches mech.cpp:1511/1613" (those branches are gone; named fields now). - Collision damage + DeathShutdown (2026-07-08/12): combat-damage.md frontmatter. - Myomers un-stub (8b36440): decomp-reference.md "INERT un-stub" row. - Day/night BT_MATPRI (shipped, default-on): rendering.md frontmatter (LOD half kept). - Fire-trigger path (task #5, 8ed6184): open-questions.md "still gBTWeaponTrigger bring-up" (globals retired/never-read). - HEAT entry FACTUAL fix: "heatLoad -> effectiveRange 0 = overheat cutout" was false per aab7a8a -- effectiveRange reads host-zone damage; the real cutout is the FailureHeat charge-hold. Frontmatter open_questions re-pointed at genuinely-open items. VERIFIED NOT stale (left as-is): multiplayer body-channel-projection notes (a real open [T3] residual per the coupled-motion section's ~2.9u leg-vs-body snap). Genuinely-open items (factory roster loops 2-4, subsystem-panel gate, missile cluster, console-death freeze, gyro tails, etc.) untouched. checkctx CLEAN. Co-Authored-By: Claude Opus 4.8 (1M context) --- context/combat-damage.md | 2 +- context/decomp-reference.md | 8 ++++---- context/locomotion.md | 2 +- context/multiplayer.md | 2 +- context/open-questions.md | 20 +++++++++++++------- context/rendering.md | 2 +- context/subsystems.md | 12 ++++++------ 7 files changed, 27 insertions(+), 21 deletions(-) diff --git a/context/combat-damage.md b/context/combat-damage.md index 96a6768..672ebe4 100644 --- a/context/combat-damage.md +++ b/context/combat-damage.md @@ -6,7 +6,7 @@ source_sections: "PROGRESS_LOG.md §10c; docs/HARD_PROBLEMS.md (P5)" related_topics: [subsystems, decomp-reference, reconstruction-gotchas, locomotion, rendering, translocation-warp, multiplayer] key_terms: [damage-zone, TakeDamage, viewpoint-entity, master, replicant] open_questions: - - "Per-impact aim (cylinder lookup); collision damage application; DeathShutdown + collapse anim" + - "Missile cluster-hit variance/concentration (task #60-D deferred); per-player splash enable sub-gate (Missile+0x360 [T3]); ~100pt ram lethality vs the pod unverified [T3]" --- # Combat & Damage diff --git a/context/decomp-reference.md b/context/decomp-reference.md index 890bf31..abf2336 100644 --- a/context/decomp-reference.md +++ b/context/decomp-reference.md @@ -58,13 +58,13 @@ reconciled via `CLASSMAP.md`, not the case label. [T1] | 0xBC3 | **Sensor** | — | `case`=MyomersClassID | | 0xBC4 | **Gyroscope** | @004b3778 | LIVE (task #56: byte-exact ctor/integrators/writers; hit-bounce fan-out wired) | | 0xBC5 | **Torso** | @004b6b0c | sizeof 0x280; `case`=SinkSource | -| 0xBC6 | **Myomers** | @4b8fec | `case`=Actuator; INERT un-stub | +| 0xBC6 | **Myomers** | @4b8fec | `case`=Actuator; un-stubbed (`8b36440`, full recon; per-tick Sim SetPerformance call-site still best-effort) | | 0xBC8 | **Emitter** | @004b1d18 | sizeof 0x478; energy weapon | | 0xBCB | **AmmoBin** | — | `case`=JumpJet; sizeof 0x22C | | 0xBCD | **ProjectileWeapon** | @4bc3fc | sizeof 0x448 (`case`≠ this — see VDATA.h) | | 0xBCE | **GaussRifle** | @4bdcb4 | : Emitter; FireWeapon is a **no-op** in this build | | 0xBD0 | **MissileLauncher** | @4bcff0 | sizeof 0x44C | -| 0xBD3 | **SubsystemMessageManager** | @0049bca4 | damage/explosion consolidation hub (ConsolidateAndSendDamage, weaponExplosions); cached to `Mech[0x10d]`=**0x434** (recon MISLABELS it `controlsMapper`; the drive squats there — the real mapper is roster slot 0). NOT the valve/Myomers gate (that's the owning **BTPlayer** @mech+0x190). WAVE 8 = untangle + damage-hub. | +| 0xBD3 | **SubsystemMessageManager** | @0049bca4 | damage/explosion consolidation hub (ConsolidateAndSendDamage, weaponExplosions); cached to `Mech[0x10d]`=**0x434** (✅ task #7 `afefaee`: factory builds the real class + `mech.hpp` names it `messageManager`; the `controlsMapper` mislabel is swept — the real mapper is roster slot 0). NOT the valve/Myomers gate (that's the owning **BTPlayer** @mech+0x190). | | 0xBD4 | **PPC** (: Emitter) | — | same FireWeapon as Emitter; `factory calls it GaussRifle` | | 0xBD6 | **HUD** | — | alloc 0x2a4; `case`=MechDisplay-ish | | 0xBD8 | **Searchlight** | — | `case`=LegSubsystem | @@ -113,7 +113,7 @@ valid for reading the decomp, NOT for our compiled layout (see [[reconstruction- | +0x11c / +0x120 | `damageZoneCount` / `damageZones[]` | inherited Entity; Mech ctor populates the array | | +0x124 / +0x128 | `subsystemCount` / `subsystemArray[]` | the [[subsystem-roster]] (NOT the segment table) | | +0x190 | **owning `BTPlayer`** (`GetPlayerLink()`) | set by `FUN_0049f624` (mech↔player bind; also `player->playerVehicle(+0x1fc)=mech`). The valve guard (`FUN_004ac9c8 →player+0x274`) + Myomers gate (`FUN_004ad7d4 →player+0x260`) read the owning player's game-mode flags (NOT the messmgr @0x434). `MECH_OWNING_PLAYER`. | -| +0x434 (word 0x10d) | `SubsystemMessageManager` cache | the 0xBD3 damage/explosion hub (factory @10142). Our recon MISLABELS this `controlsMapper` + the drive squats here; the real mapper is roster slot 0. | +| +0x434 (word 0x10d) | `SubsystemMessageManager` cache | the 0xBD3 damage/explosion hub (factory @10142). ✅ task #7 (`afefaee`): `mech.hpp` names this `messageManager`; the `controlsMapper` mislabel is swept — the real mapper is roster slot 0. | | +0x260 / +0x26c | `localOrigin` = { Point3D linearPosition; Quaternion angularPosition } | ORIGIN.h:15; position@+0x100 in some subsystem views | | +0x300 | segment table | skeleton `EntitySegment`s (muzzle sites, joints) | | +0x37c | target world `Point3D` | aim source | @@ -132,7 +132,7 @@ valid for reading the decomp, NOT for our compiled layout (see [[reconstruction- ## 4. Damage delivery - `Entity::TakeDamageMessage(id, size, inflictingEntityID, zone, Damage&)` → `target->Dispatch(&msg)`. -- Base `Entity::TakeDamageMessageHandler` **IGNORES zone==-1** — send a VALID zone index (the Mech cylinder-lookup override for unaimed hits is not reconstructed). [T1] +- Base `Entity::TakeDamageMessageHandler` **IGNORES zone==-1** — the Mech STEP-6 cylinder-lookup override (✅ done, `d07ac7d`; `dmgtable.cpp` `ResolveHit` + `Mech::damageLookupTable`) resolves an unaimed (zone==-1) hit to a zone before base-routing. [T1/T2] - `class Damage { damageType(enum Collision/Ballistic/Explosive/Laser/Energy), damageAmount, damageForce, surfaceNormal, impactPoint, burstCount }`. [T1] - Weapon effect id: **"explode" = 13** (`Explosion::Make`). [T2] - `DestroyEntityMessage(id,size)` removes an entity — but a killed mech STAYS (a WRECK); death = a STATE transition (`SetGraphicState(DestroyedGraphicState)`), NOT removal. Issuing removal-on-death is the P5 teardown bug (do not). [T2] diff --git a/context/locomotion.md b/context/locomotion.md index b184b5f..e91cf7b 100644 --- a/context/locomotion.md +++ b/context/locomotion.md @@ -6,7 +6,7 @@ source_sections: "PROGRESS_LOG.md §7, §10 (gait/ground/collision/shadow); docs related_topics: [asset-formats, decomp-reference, reconstruction-gotchas, combat-damage, rendering] key_terms: [RootTranslation, ground-model, SequenceController, MechControlsMapper, SLD, joint] open_questions: - - "Authentic per-mech turn-rate constant (currently bring-up constant; the authored WalkingTurnRate/RunningTurnRate now STREAM correctly since the task #4 record-layout fix -- rec words 0x18/0x19 deg->rad -> mech+0x574/0x578, Wword-absorbed -- wiring them in retires the bring-up rate)" + - "Turn-in-place FEEL re-verification (authentic release at standSpeed vs the earlier 0.25x stand-in -- subjective playtest, non-gating)" - "Airborne clip callbacks (FUN_004a7970) deferred" --- diff --git a/context/multiplayer.md b/context/multiplayer.md index c915154..4430182 100644 --- a/context/multiplayer.md +++ b/context/multiplayer.md @@ -6,7 +6,7 @@ source_sections: "PROGRESS_LOG.md §7 (Phase 7), §8 (P6); docs/HARD_PROBLEMS.md related_topics: [wintesla-port, combat-damage, locomotion, decomp-reference] key_terms: [master, replicant, EGG, dead-reckon] open_questions: - - "pod-LAN config (real IPs); update-record velocity from the body-channel projection; peer SimulationState/DropZoneLocation replication (authentic peer warp spheres); authentic per-mech turn rates now streamed (task #4) but not yet wired into the turn code" + - "pod-LAN config (real IPs); peer SimulationState/DropZoneLocation replication (authentic peer warp spheres); console-death replication freeze (pending recurrence to diagnose)" --- # Multiplayer diff --git a/context/open-questions.md b/context/open-questions.md index de476e1..f824e1d 100644 --- a/context/open-questions.md +++ b/context/open-questions.md @@ -212,8 +212,9 @@ register. ⚠ The audit also flags the damage-economy item as SELF-CONTRADICTOR Also: `deathAnimationLatched`/`legResetLatch` were never ctor-initialised (0xCDCDCDCD gate bug, fixed in mech.cpp ctor). See [[cockpit-view]]. - **MechControlsMapper look/eyepoint commit** — reconstructed but its offsets collide with declared - members; arbitrate before enabling (no port consumer yet). The fire-trigger-through-mapper is - still the `gBTWeaponTrigger` bring-up. + members; arbitrate before enabling (no port consumer yet). (The fire-trigger-through-mapper is NO + LONGER the bring-up: the `gBT*Trigger` globals are retired / never-read — the authentic LBE4 + buttonGroup path replaced them, task #5 `8ed6184`.) - **✅ Weapon groups — the AUTHENTIC defaults + fire path LIVE (task #5, 2026-07-11) [T1/T2].** The system decoded end-to-end: a fire "channel" = a physical `buttonGroup` slot in the global `LBE4ControlsManager` (fire buttons 0x40 Trigger / 0x45 Pinky / 0x46 ThumbLow / 0x47 ThumbHigh); @@ -366,8 +367,12 @@ register. ⚠ The audit also flags the damage-economy item as SELF-CONTRADICTOR three coolant epsilon corrections (0.0025/0.003/1e-4 for the old single 1e-4) + CoolantCapacityScale = 0.05 float80 (both prior readings wrong). Verified: heat flows, exits (~2/3 of a 1e10 spam run drained), weapons overheat under max-rate autofire exactly - as the authored-constant simulation predicts (thermal spam is unsustainable BY DESIGN; - heatLoad -> effectiveRange 0 = the authentic overheat cutout). + as the authored-constant simulation predicts (thermal spam is unsustainable BY DESIGN; the + authentic overheat cutout is the FailureHeat CHARGE-HOLD -- `ResetFiringState` + currentLevel=0 + until it cools, @004baa88 -- NOT a range collapse. ⚠ CORRECTION (`aab7a8a`, task #50): + effectiveRange = (1 - HOST-ZONE damage) x weaponRange reads `Subsystem::damageZone->damageLevel` + (weapon+0xE0), NOT heatLoad; the old "heatLoad -> effectiveRange 0" mechanism here was the same + @0xE0-DamageZone-vs-heat misattribution fixed in heat.cpp:803). - **Task #10 -- the "scrambled routing" RESOLVED (2026-07-11) [T2].** The routing was NEVER scrambled: a `[heat-link]` attach log proved every subsystem links its authored sink exactly (bhk1: PPC_1->C4, PPC_2->C6, ERM_1/2/3->C1/C6/C4, SRM6s->C2, generators->C1/C2/C3/C5, @@ -547,9 +552,10 @@ register. ⚠ The audit also flags the damage-economy item as SELF-CONTRADICTOR ctor per mech, zone destroyed → crits damaged/DESTROYED with authentic accumulation. Residue: roster idx 0/1 (mapper installed post-ctor / voltage-bus stub) stay unbound with a logged skip — none of the 8 mechs' streams crit-list them in practice. -- **Two dead Wword comparison branches (multiplayer)**: `mech.cpp:1511` + `:1613` (replicant - leg-state/stability sync in ReadUpdateRecord) — always-false BTVal comparisons ([[reconstruction-gotchas]] §2); - needs slots 0xf/0x10 promoted to named members when P6 replication work resumes. +- **✅ Two dead Wword comparison branches — DONE (task #1, `c9f0c2a`).** `Mech::ReadUpdateRecord` + case 3 now reads real named fields off `Mech__StateUpdateRecord` (legState / stability / legResetLatch / + speedDemand); the always-false Wword/BTVal branches are gone (the old `mech.cpp:1511`/`:1613` line + numbers no longer point at that code). ## Multiplayer (Phase 7 / P6) - **OPEN: console death froze peer replication BOTH ways (2026-07-14) [T4 mechanism].** Live 2-node diff --git a/context/rendering.md b/context/rendering.md index 0cc598a..ecd0976 100644 --- a/context/rendering.md +++ b/context/rendering.md @@ -6,7 +6,7 @@ source_sections: "PROGRESS_LOG.md §10 (render-fidelity notes); docs/BGF_FORMAT. related_topics: [bgf-format, asset-formats, wintesla-port, locomotion, pod-hardware, cockpit-view] key_terms: [L4D3D, material-ramp, BSL, LOD, DPL, beam] open_questions: - - "Replacement-LOD for NON-additive multi-LOD models; day/night material path priority (BT_MATPRI)" + - "Replacement-LOD for NON-additive multi-LOD models" --- # Rendering diff --git a/context/subsystems.md b/context/subsystems.md index 3a3097c..b1962fb 100644 --- a/context/subsystems.md +++ b/context/subsystems.md @@ -6,7 +6,7 @@ source_sections: "PROGRESS_LOG.md §10d; docs/SUBSYS_PLAN.md; docs/VEHICLE_SUBSY related_topics: [decomp-reference, reconstruction-gotchas, combat-damage, gauges-hud] key_terms: [subsystem, factory, ClassID, subsystem-roster, PoweredSubsystem, bridge] open_questions: - - "Myomers coupling (gates on owning-player @mech+0x190); 0xBD3 damage-hub untangle (WAVE 8)" + - "Myomers coupling (gates on owning-player @mech+0x190); factory capability-roster loops 2-4 still dead (SubProxy stub)" --- # Subsystems @@ -54,11 +54,11 @@ Making a base byte-exact GROWS every subclass — they must be re-based TOGETHER - **TASK #56 (2026-07-11)** — Gyroscope LIVE byte-exact (ctor @004b3778, sizeof 0x3D0 locked; integrators + `FUN_004b2980` damage fan-out; joint dispatch from the Mech performance tail @0x4aaf74/83; `BT_GYRO_LOG`/`BT_GYRO_TRACE`) — see [[cockpit-view]]. -- **DEFERRED** — SubsystemMessageManager 0xBD3 (WAVE 8 — a - **damage/explosion consolidation hub** cached to `Mech[0x10d]`=0x434; recon MISLABELS the slot - `controlsMapper` + the drive squats there while the real mapper is roster slot 0, so wiring it needs - an untangle. NOT the valve/advanced-damage gate — that's the owning **BTPlayer** @mech+0x190, see - [[combat-damage]]/[[open-questions]]). [T2] +- **✅ DONE (task #7, `afefaee`)** — SubsystemMessageManager 0xBD3 (a + **damage/explosion consolidation hub** cached to `Mech[0x10d]`=0x434; the factory builds the REAL + class and `mech.hpp` names the slot `messageManager` — the old `controlsMapper` mislabel is swept, + the real mapper is roster slot 0. NOT the valve/advanced-damage gate — that's the owning **BTPlayer** + @mech+0x190, see [[combat-damage]]/[[open-questions]]). [T2] ## The watcher electrical chain (task #57, 2026-07-13 — the torso power gate) The Watcher branch is POWERED indirectly: a watcher WATCHES another roster subsystem and mirrors