diff --git a/wiki/log/2026-08-04-thought-fluid-lifecycle-reaudit.md b/wiki/log/2026-08-04-thought-fluid-lifecycle-reaudit.md new file mode 100644 index 00000000..8e0fb71b --- /dev/null +++ b/wiki/log/2026-08-04-thought-fluid-lifecycle-reaudit.md @@ -0,0 +1,42 @@ +# Thought fluid still has one truth and one lifecycle + +``` +Type: log +Date: 2026-08-04 +Subject: Thought-fluid acceptance and shared effect-root lifecycle +``` + +A fresh audit of [the Thought-fluid specification](../interface/thought-fluid.md) +found its implemented contract still aligned with core, Bevy, terminal, agent +mode, and the shared effects renderer. + +- `Sim::work_in_flight()` remains the sole route/move source. Bevy creates one + `GameThoughtEffect` root per active directed Thought hop, passes one causal + quantum to close and medium presentation, and lets far LOD compress that + same root to an explicitly aggregate 2/4/6 rate read. +- Game route roots disable the effects lab's endpoint demo pools. Chassis pools + still derive from exact WorkGrid queue amounts and the sim's stranded-node + readout; sink vessels and snap geometry still derive from exact sink and + fire readouts. +- The shared renderer owns disposable children only. The game owns root + lifetime, and `(sync_game_thought_effects, ApplyDeferred).chain()` remains + ordered before `MaterialEffectsSet::RebuildPopulation`, so a retired route + cannot be rebuilt under a dead parent. +- Terminal and agent parity still consume the same WorkGrid and sink + projections. No frontend Thought counter or saved presentation state has + appeared. + +The one open map-zoom sink-mark question remains explicitly outside the ten +implemented acceptance criteria. It does not make the live quantity, custody, +or lifecycle claims premature. + +Verification: + +- `cargo test -p misaligned-assets --lib` — 27 passed, including far-density, + no-spine, vessel/snap, strain-window, and flushed-retirement defenses; +- `cargo test -p misaligned-bevy --bin misaligned-bevy thought_effects` — four + focused route/root tests passed; +- `cargo test -p misaligned-bevy --bin misaligned-bevy visual_proof_scenario_tests` + — nine live scenarios passed, including exact Eyes fire and starved tap sag. + +Verdict: **clean**. No law, runtime, or status change is warranted. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 19611d77..744e1f8a 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -21,6 +21,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-08-04-villain-shape-open-marker.md](2026-08-04-villain-shape-open-marker.md) +## 2026-08-04 - Thought fluid still has one truth and one lifecycle + +- Intent: (see session log) +- Log: [wiki/log/2026-08-04-thought-fluid-lifecycle-reaudit.md](2026-08-04-thought-fluid-lifecycle-reaudit.md) + ## 2026-08-04 - Social contract re-audit - Intent: (see session log) diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index 2bb817fc..8eb44a91 100644 --- a/wiki/process/tick-ledger.md +++ b/wiki/process/tick-ledger.md @@ -40,7 +40,7 @@ Verdicts: **clean** (slice and code agree), **finding** (acted this tick), | `wiki/world/places/zplanes.md` + plane-stack substrate/API | 2026-07-26 | finding | criteria 1-2 remain implemented and criteria 3-6 honestly deferred, but the ratified plane-agnostic contract still left an unused `World::active()` simulation accessor plus active-plane comments on the B1 compatibility map path. The accessor is removed, map reads now say plane 0, the stale criterion/sensing comments are corrected, and a source-shape regression rejects restoration of simulation-owned floor selection — [log](../log/2026-07-26-zplanes-plane-agnostic-api-audit.md) | | `wiki/mechanics/markets.md` + `income.md` B1 contract/account/evidence mirror | 2026-07-26 | finding | the deferred B3 criteria and their current B1 mirror still allowed the operation shape to collapse into payout plus signature, bypassing or obscuring exact AccountGraph, financial-mail, carrier, and routed-evidence custody. Markets now aggregate immutable B1 contract/position records through the same causal chain; current runtime is unchanged — [log](../log/2026-07-26-markets-contract-custody-reconciliation.md) | | `wiki/art/effects-lab.md` + corpus navigation | 2026-07-26 | finding | the owning spec, shared renderer, game adapter, and runtime title all describe the current Thought-only route/pool harness, but `SUMMARY.md` still advertised the retired “dust and liquid” scope. Navigation now names Thought routes and pools, and the recurring retired-form gate rejects particulate/dust labels on links to `effects-lab.md` as well as prose that names the binary — [log](../log/2026-07-26-effects-lab-navigation-gate.md) | -| `wiki/interface/thought-fluid.md` + shared effect lifecycle | 2026-07-24 | finding | live Bevy logs exposed a deferred-command race: when a changed Thought route disappeared, the game queued its root despawn while the shared renderer queued child replacement from the same old root. Command application could remove the root and old children first, then issue stale child despawns and `ChildOf` insertions against the dead id. Route-root reconciliation now flushes before the renderer's named population-rebuild set; behavioral and composition-root regressions pin zero orphan visuals and the exact ordering seam — [log](../log/2026-07-24-bevy-effect-root-lifecycle.md) | +| `wiki/interface/thought-fluid.md` + shared effect lifecycle | 2026-08-04 | clean | fresh code/spec re-audit found the ten implemented criteria still intact: each game root comes from one live Thought move; close/medium causal quanta remain one while far dashes explicitly compress rate; shared vessel/snap helpers remain readout-only; queue pools and stranded anchors remain sim-derived; and `(sync_game_thought_effects, ApplyDeferred).chain()` still flushes root changes before `MaterialEffectsSet::RebuildPopulation`. The asset suite, focused Bevy root tests, and live snap/tap proof scenarios passed. The separately named map-zoom sink-mark question remains an honest optional open call, not an unimplemented acceptance criterion — [log](../log/2026-08-04-thought-fluid-lifecycle-reaudit.md). Prior race repair: [log](../log/2026-07-24-bevy-effect-root-lifecycle.md). | | `wiki/art/visual-identity.md` + `wiki/interface/flat-materials.md` | 2026-08-04 | finding | the shared palette still supplied production materials, but nine Bevy sites copied exact BONE, SIGNAL, GUNMETAL_DARK, or AMBER tuples merely to vary alpha; the old guard rejected duplicate constants in `main.rs` while allowing this equivalent second authority in every module. Those sites now derive alpha from named colors, and the guard scans all ten production Bevy modules for raw literals matching every named role tuple — [log](../log/2026-08-04-bevy-palette-role-authority.md). Prior shared-palette repair stands — [log](../log/2026-07-22-shared-clinical-palette.md). | | `wiki/interface/superhuman-operability.md` + Bevy opening | 2026-08-04 | clean | re-audit of the exact 2026-07-22 finding: the first earned sense now enters the derived, clock-held five-step environmental-monitor lesson instead of releasing the mature frame. The current deterministic capture showed only THINK → Thought, its arrival, hearing, the exact TAP CAMERA verb, and sight on true black; map, rail, clock, objective, Operations, threat, and unrelated actions remained absent until the real camera TAP. Core and Bevy regressions pin the ordinary bound command and chrome/input suppression — [re-audit](../log/2026-08-04-operability-opening-reaudit.md); [repair](../log/2026-07-22-post-perception-teaching-lock.md); [original report](../playtests/2026-07-22-playtest-gui-human-legibility.md). | | `wiki/process/living-spec.md` no-dead-code + core orphans | 2026-08-04 | finding | re-audit: every core source file remains reachable and all targets compile without warnings, but public visibility again hid two zero-consumer helpers from rustc. Deleted `BuildRouteCommitment::wire_path_matches_endpoints`, which duplicated current-save geometry validation, and `Sim::next_economy_tick`, which had no core, frontend, test, or corpus consumer; the law now makes public APIs prove a current consumer or a corpus-named external contract — [log](../log/2026-08-04-public-api-orphan-scrub.md). The wider 2026-07-21 scrub remains valid — [prior](../log/2026-07-21-dead-code-scrub.md). |