From b8edd2826a86fccd1996bc1e93f9ae15b6d6a642 Mon Sep 17 00:00:00 2001 From: Cameron Pfiffer Date: Tue, 4 Aug 2026 11:05:42 -0700 Subject: [PATCH] Keep doors and risers separate in z-planes. Correct the stale transition criterion so badge access governs bodies while the disembodied player reaches another plane only through authored riser infrastructure. Defense: wiki/world/places/zplanes.md and the Act One ladder require vertical extension through the shared reach graph, never a player-shaped door credential. --- ...2026-08-04-zplanes-transition-authority.md | 37 +++++++++++++++++++ wiki/log/DEVLOG.md | 5 +++ wiki/process/tick-ledger.md | 2 +- wiki/world/places/zplanes.md | 8 ++-- 4 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 wiki/log/2026-08-04-zplanes-transition-authority.md diff --git a/wiki/log/2026-08-04-zplanes-transition-authority.md b/wiki/log/2026-08-04-zplanes-transition-authority.md new file mode 100644 index 00000000..24ad5b9e --- /dev/null +++ b/wiki/log/2026-08-04-zplanes-transition-authority.md @@ -0,0 +1,37 @@ +# 2026-08-04 — Keep doors and risers in their own authorities + +``` +Type: log +``` + +## Finding + +The z-planes behavior and current Act One law already separate two physical +boundaries: badge tiers decide whether a body can cross a door, while the +disembodied process reaches an upper plane through an authored riser link. +Acceptance criterion 4 still preserved the superseded version of the ladder, +however: it said a badge-controller beat opened the transition for +"assets/player-directed movement." That made a door sound like the player's +vertical-extension gate again and quietly restored an Act boundary that the +2026-07-26 riser amendment and 2026-07-28 no-boundary decision removed. + +## Correction + +Criterion 4 now tests the two exact authorities independently. Bodies need the +required door tier, supplied by their own credential or exact badge-controller +write. The player gains presence on another plane only through an authored +cross-plane edge in the reach graph along the riser; it never satisfies a +door-access check merely by being the player. + +Criteria 1-2 remain implemented. Criteria 3-6, including paired transitions, +the second authored plane, same-plane observer filtering, and the multi-plane +save shape, remain candidly deferred. + +## Defense + +[Z-planes behavior](../world/places/zplanes.md#behavior) and +[the Act One ladder](../gameplay/act-one.md#the-intended-ladder-beats-not-a-script) +both require the process to spread through infrastructure rather than acquire a +body. Keeping criterion 4 aligned prevents a future implementation from using +badge state as a shortcut around the one connected, z-tagged reach graph while +preserving badges' real purpose for physical actors. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 4bec54ab..7856f0a0 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -11,6 +11,11 @@ add or amend a session log, then re-run the generator. +## 2026-08-04 - Keep doors and risers in their own authorities + +- Intent: (see session log) +- Log: [wiki/log/2026-08-04-zplanes-transition-authority.md](2026-08-04-zplanes-transition-authority.md) + ## 2026-08-04 - Worktree activity contract repair - Intent: (see session log) diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index 9d4def0c..484bfbed 100644 --- a/wiki/process/tick-ledger.md +++ b/wiki/process/tick-ledger.md @@ -39,7 +39,7 @@ Verdicts: **clean** (slice and code agree), **finding** (acted this tick), | `wiki/mechanics/sensor-network.md` generated sensor population / criteria 1-5, 8 | 2026-07-28 | finding | criterion 8's standing subscription cost existed only in the global Thought-sink ledger, so a player choosing which individual camera to keep could not read that camera's exact burden. Every retained foreign subscription now names its exact `Thought/tick` upkeep and live/starved state on the device's shared inspect card, within both frontends' visible fact budget; UNTAP removes that addressed cost. The integrated several-subscription starvation/inbox-overflow experience remains pending, so criterion 8 is partial rather than overclaimed — [standing-upkeep log](../log/2026-07-28-subscription-upkeep-inspect.md). Prior generated-camera placement and badge-passage findings stand — [placement repair](../log/2026-07-27-room-camera-floor-placement.md), [passage implementation](../log/2026-07-27-badge-reader-passage-custody.md), [population foundation](../log/2026-07-27-sensor-population-foundation.md). | | `wiki/interface/keymap.md` + terminal/Bevy input routes | 2026-08-04 | finding | the complete-inventory follow-up is closed: the canonical table now includes terminal `;` FOCUS EVENT and `Shift+t` SELECT MACHINES beside their Bevy pointer forms, README exposes terminal selection, and terminal law names the live cursor toggle instead of its retired box-prompt description — [inventory log](../log/2026-08-04-keymap-complete-binding-inventory.md). The earlier chord-local repair stands: terminal captures only complete Ctrl/Command+S/L chords, routes those and F3 before modal text, and lets every unrelated modified key reach its current surface — [persistence log](../log/2026-08-04-terminal-persistence-chords.md). Prior A-key and semantic-jump reconciliation stands — [prior](../log/2026-07-26-terminal-keymap-a-reconciliation.md). | | `wiki/interface/action-vocabulary.md` + agent command registry | 2026-07-31 | finding | `PROPOSE SWITCH` still described declaration-only R2a after all four realization families and their exact agent route command had landed. The canonical inventory and agent-play spec now name current execution plus the honest remaining boundary—small-switch realization has no wire-run choice—and a paired corpus defense rejects regression to the stale support claim — [log](../log/2026-07-31-small-switch-action-vocabulary.md). Prior PLOT POLICY inventory repair stands — [log](../log/2026-07-26-action-vocabulary-plot-policy.md). | -| `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/world/places/zplanes.md` + plane-stack substrate/API | 2026-08-04 | finding | the plane stack and nested-layout foundation still satisfy criteria 1-2, and criteria 3-6 remain honestly deferred. Acceptance criterion 4 alone still called a badge-controller beat the gate for "assets/player-directed movement," contradicting its own behavior and current Act One law: doors gate bodies, while the disembodied process reaches another plane through an authored riser edge in the shared reach graph. The criterion now preserves those two authorities separately — [transition audit](../log/2026-08-04-zplanes-transition-authority.md), [prior API audit](../log/2026-07-26-zplanes-plane-agnostic-api-audit.md). | | `wiki/mechanics/markets.md` + `income.md` B1 contract/account/evidence mirror | 2026-08-04 | finding | the exact B1 contract/account/evidence chain still holds, but the 2026-07-28 Wager audit reopened optional analysis without updating all current mirrors: current-build still called the economy row wholly Live and said only that the Wager was “unchanged,” while implemented Operations law promised an analysis commitment no player action can author. Current-build, sim-mechanics, income, and Operations now distinguish the live base stake/timer/settlement route from the missing real-work analysis route — [re-audit](../log/2026-08-04-wager-current-mirror-reaudit.md). Prior custody reconciliation stands — [log](../log/2026-07-26-markets-contract-custody-reconciliation.md). | | `wiki/art/effects-lab.md` + corpus navigation | 2026-08-04 | finding | the Thought-only navigation defense remains exact, but the material game adapter had fallen behind the placed-wire law: unlike the flat work renderer, it passed only clipped hop endpoints into the shared effect, allowing Thought to cut center-to-center across persisted bends. `MaterialEffects` now accepts the exact caller-owned route polyline; the game adapter reuses `work_route_grid_points`, and slugs, far dashes, and route spines follow every authored segment while one move remains one slug. Focused assets/adapter tests, Bevy clippy, and inspected game/lab captures passed — [log](../log/2026-08-04-effects-lab-wire-route.md), prior [navigation finding](../log/2026-07-26-effects-lab-navigation-gate.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). | diff --git a/wiki/world/places/zplanes.md b/wiki/world/places/zplanes.md index 17af248b..4c681914 100644 --- a/wiki/world/places/zplanes.md +++ b/wiki/world/places/zplanes.md @@ -147,9 +147,11 @@ line (legibility). composing floor-Layouts stamps correctly (test). 3. A second authored plane loads with its own fog, power, sensors, and at least 3 template-instantiated persons whose schedules span planes. -4. Transitions gate on access sets via the existing door system; a human - without T3 never crosses; the badge-controller beat opens it for - assets/player-directed movement. +4. Paired transitions preserve the existing physical-access law: a human or + other body without the required door tier never crosses, while an exact + badge credential or badge-controller write opens that door for bodies. The + disembodied player reaches another plane only through an authored cross-plane + reach edge along the riser, never by satisfying a door's access tier. 5. Observers notice only same-plane signatures (aggregates unchanged); test: a Physical signature on Floor 1 never moves a basement-only observer. -- 2.51.2