From a15ea0373e39346da76fd7ac88d75629692af4cc Mon Sep 17 00:00:00 2001 From: Cameron Date: Sun, 26 Jul 2026 13:19:55 -0800 Subject: [PATCH] Make sensors infrastructure and access the scarce thing. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The whole B1 plate authors three sensing devices: the hall's environmental monitor, security's dock camera, and one camera node behind a tier-3 door. After the Eyes beat nothing remains to acquire, so sight cannot grow. The small visible area was never a coverage-shape problem; the building has one window. New spec wiki/mechanics/sensor-network.md (READY, work order sensor-network) owns the reframe: ~30 sensing devices in B1 populated by rule rather than hand-listed per room, badge readers as a sensing class, availability gated by knowledge/reach/segment/badge tier, and darkness always traced to a nameable air gap rather than authored exception. B1 gains a human operator room whose cameras are air-gapped, so watching the people requires a sensor the player installs itself through the crawlspace — theirs first, yours as the upgrade. Notable: the curation mechanic Cameron described is already law. reach.md specifies a persistent per-tick Thought drain per foreign subscription that UNTAP closes, and intel.md the pooled inbox that over-subscription overflows. Both were unreachable with three sensors, so this supplies content to an existing economy rather than adding one, and the 8% rate wants re-tuning against the real population. cursor.md and reach.md get pointer clauses only; the rule is stated once in the new spec. basement-map.md records its own residue: corridors carry none of their authored camera_node/floor_drain fixtures and the Crawlspace has never had a prefab, which silently removed the specified choice that crawlspace wiring avoids the Physical signature corridor wiring emits. One [OPEN] marker: whether installing a player-owned sensor is a new reach verb or an extension of building.md's actuator path. tang is not authenticated on this machine, so no Tangled issue was filed; the marker is in the owning spec. Defense: amends wiki/mechanics/cursor.md, which owned "sight is the union of controlled seeing sensors" without owning how many sensors exist to control — the gap that let a three-sensor plate satisfy the letter of the spec while making its acceptance criterion 2 ("gaining the env_camera visibly expands [sight]") a one-time event rather than a growth curve. The new spec takes that population question explicitly, cursor.md keeps the definition of a sense, and reach.md keeps the tap/untap contract. Spec-only: no crates/ change, so no Rust gate or observed run is owed. Verified by ./tools/check.sh --docs. --- wiki/SUMMARY.md | 1 + wiki/log/2026-07-26-sensor-network-capture.md | 74 +++++++ wiki/log/DEVLOG.md | 5 + wiki/log/decisions/2026-07-26.md | 65 ++++++ wiki/mechanics/cursor.md | 5 + wiki/mechanics/reach.md | 8 + wiki/mechanics/sensor-network.md | 199 ++++++++++++++++++ wiki/process/ROADMAP.md | 2 +- wiki/process/specs.md | 1 + wiki/process/tick-ledger.md | 1 + wiki/world/places/basement-map.md | 18 +- 11 files changed, 377 insertions(+), 2 deletions(-) create mode 100644 wiki/log/2026-07-26-sensor-network-capture.md create mode 100644 wiki/mechanics/sensor-network.md diff --git a/wiki/SUMMARY.md b/wiki/SUMMARY.md index da34e220..4eaf128e 100644 --- a/wiki/SUMMARY.md +++ b/wiki/SUMMARY.md @@ -27,6 +27,7 @@ - [Aggregate observer](mechanics/aggregate-observer.md) - [Cursor and senses](mechanics/cursor.md) - [Digital reach](mechanics/reach.md) + - [The sensor network](mechanics/sensor-network.md) - [Cyber conflict: mobile processes and contested machines](mechanics/cyber-conflict.md) - [Intel: record and process](mechanics/intel.md) - [Messages](mechanics/messages.md) diff --git a/wiki/log/2026-07-26-sensor-network-capture.md b/wiki/log/2026-07-26-sensor-network-capture.md new file mode 100644 index 00000000..00277373 --- /dev/null +++ b/wiki/log/2026-07-26-sensor-network-capture.md @@ -0,0 +1,74 @@ +# Sensors become infrastructure + +``` +Type: log +``` + +## Intent + +Capture Cameron's sensor decision after the hall-density work made the problem +visible: he could only ever see a small pool of light. The first diagnosis — +coverage shape, a radius-4 disc — was wrong, and he corrected it. The real +finding is that **the entire basement authors three sensing devices**: the data +hall's environmental monitor, security's dock camera, and one camera node behind +the stairwell's tier-3 door. After the Eyes beat there is nothing left to +acquire, so sight cannot grow at all. + +The reconsideration he asked for is a reframe, not an inventory bump: sensors +stop being scarce authored treasure and become ambient facility infrastructure, +with **access** as the scarce thing. + +## What changed + +- **New spec `wiki/mechanics/sensor-network.md`** (`Status: READY`, work order + `sensor-network`, priority 20, class sim) owns the population and access model: + ~30 sensing devices in B1 by rule, badge readers as a sensing class, access + gated by knowledge/reach/segment/badge, darkness always explained by an air + gap, the human operator room, the two acquisition channels, and the missing + Corridors/Crawlspace prefabs. Ten acceptance criteria. +- **`cursor.md`** gains one pointer clause: it still owns what a sense *is*, and + density never changes how sight is computed — only which sensors may be + controlled. +- **`reach.md`** gains one clause naming the standing drain as the curation + mechanic, why it has never been reachable, and that the 8% rate wants + re-tuning against a real population. +- **`basement-map.md`** records the sensor residue in its status note and room + table (corridors carry none of their authored fixtures, the Crawlspace has no + prefab, the new operator room), pointing at the new work order rather than + duplicating the rule. +- `SUMMARY.md`, the generated ROADMAP work-order index, and DEVLOG regenerated. + +## The correction worth recording + +I proposed the per-tick standing subscription cost as an open question for +Cameron to settle. It is not open — `reach.md`'s sensor contract already +specifies exactly that: a foreign subscription opens a persistent Thought tap +that "drains 8% of one medium rack's Thought output per tick [TUNE]", a starved +tap carries no sight, and UNTAP closes the drain. The pooled 24-item host inbox +that over-subscription overflows is likewise already specified in `intel.md`. + +So the untap-as-skill mechanic was designed and built, then starved of the one +thing it needed: enough sensors to over-subscribe on. That reframes this work as +supplying content to an existing economy rather than adding an economy, which is +considerably cheaper. No decision issue was needed. + +## What stays open + +One `[OPEN]` marker on the new spec: **is installing a player-owned sensor a new +reach verb, or an extension of `building.md`'s actuator path?** It has a physical +cost, a human executor, and a placement (building), but produces a subscribed +feed and a device-graph member (reach). Getting it wrong duplicates either the +actuator queue or the subscription registry. It does not block authoring the +population (criteria 1-5) and must be settled before criterion 7. + +`tang` is not authenticated on this machine, so no Tangled issue was filed for +it; the marker is in the owning spec and this log. `tang auth login` is +human-only. + +## Verification + +- `./tools/check.sh --docs` — **ALL CHECKS PASSED** (corpus roles, headers, + Design/Depends anchors, work-order metadata, wiki reachability, generated + ledger and ROADMAP indexes, process fixtures, environment registry). +- Spec-only capture: no `crates/` change, so no Rust gate and no observed run is + owed. The work order carries the implementation. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 0f33932e..52aa152f 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -41,6 +41,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-07-26-standing-plot-policies.md](2026-07-26-standing-plot-policies.md) +## 2026-07-26 - Sensors become infrastructure + +- Intent: Capture Cameron's sensor decision after the hall-density work made the problem visible: he could only ever see a small pool of light. The first diagnosis — coverage shape, a radius-4 disc — was wrong, and he corrected it. The real finding is that **the entire basement authors... +- Log: [wiki/log/2026-07-26-sensor-network-capture.md](2026-07-26-sensor-network-capture.md) + ## 2026-07-26 - Resident capacity: machine-hosted slots - Intent: (see session log) diff --git a/wiki/log/decisions/2026-07-26.md b/wiki/log/decisions/2026-07-26.md index 634de5bf..5bec8d1b 100644 --- a/wiki/log/decisions/2026-07-26.md +++ b/wiki/log/decisions/2026-07-26.md @@ -454,3 +454,68 @@ from the research-graph capture above. acceptable alongside it. Owner: [research.md](../../mechanics/research.md). +## Sensors are infrastructure; access is the scarce thing + +### DECIDED + +- The basement is **saturated with sensing**, not sparsely furnished with it. + Roughly thirty sensing devices in B1: corridor nodes every ~8 tiles, one + camera per cold aisle, one per enclosed room, a badge reader per security + door, and the two existing facility meters. Badge readers are a sensing + class — a door that records a badge is a witness. +- Sensors are **populated by rule, not hand-listed per room**, so later floors + inherit the coverage logic. Same reason prefabs are data. +- The scarce resource is **access, not existence**. Knowledge, reach, segment, + and badge tier are the gates. "I can see it exists and cannot have it yet" is + the intended feeling; a region that reads as sensorless is a content bug. +- **Some of the building stays dark, and darkness is never authored by fiat.** + A dark region always traces to a nameable physical cause — an air-gapped + segment, an unbridged switch, a door tier you cannot pass. Darkness is + self-documenting and the rule travels to later floors without a + "never yours" table. +- B1 gains a **human-occupied operator room**. Its cameras sit on an air-gapped + segment, so the institution's network never hands the player that feed. The + only way to watch the people is a sensor the player installs itself through + the crawlspace. The highest-value intelligence in the game is therefore the + most expensive, and the crawlspace finally has a job. +- **Two acquisition channels, theirs first.** Subscribing to Foundation sensors + is cheap, immediate, emits Network, and depends on hardware they can audit and + revoke. Installing your own is slow, needs Marcus's hands, and is quiet if + routed through the crawlspace — the upgrade that ends dependence on your + enemy's equipment. +- Corridors and the Crawlspace become **real authored prefabs**. Both appear in + basement-map.md's room table and neither has ever existed, which silently + removed a specified choice: crawlspace wiring avoids the Physical signature + corridor wiring emits, and there was no crawlspace. +- The player still starts blind. Blindness is the **opening beat**, not the + act's ongoing pressure; once sight is earnable, exposure and the subscription + drain carry the tension. + +### Already law, not re-decided + +- The per-tick standing Thought drain per foreign subscription, and UNTAP + closing it, are **already specified** in reach.md's sensor contract (8% of one + medium rack's Thought output per tick [TUNE]), as is the pooled host inbox that + over-subscription overflows (intel.md). Cameron's instinct that you must learn + to untap is existing law. It has never been reachable because B1 authors three + sensing devices, so a player cannot over-subscribe. This decision supplies the + content that makes the mechanic bite; the 8% rate should be re-tuned against + the real population rather than against three feeds. + +### Rejected + +- Fixing the small visible area by reshaping sensor **coverage** (an aisle-length + camera instead of a radius-4 disc). It tunes the shape of a keyhole when the + problem is that the building has one window. Coverage shape may still be worth + having, but it is not the fix and was not adopted. +- Simply enlarging the coverage radius. It reveals a blob rather than the + institution's rhythm — more seen, without seeing the rows. +- Authoring permanently dark regions as a "never yours" list. Darkness has to be + caused by something the player can name and attack, or it is arbitrary. +- Letting the player reach the human room's cameras through enough network work. + The air gap is the point: it forces the second channel to exist. + +Owner: [sensor-network.md](../../mechanics/sensor-network.md), with pointer +clauses in [cursor.md](../../mechanics/cursor.md), +[reach.md](../../mechanics/reach.md), and +[basement-map.md](../../world/places/basement-map.md). diff --git a/wiki/mechanics/cursor.md b/wiki/mechanics/cursor.md index 3fc6d03a..67f4792e 100644 --- a/wiki/mechanics/cursor.md +++ b/wiki/mechanics/cursor.md @@ -92,6 +92,11 @@ The player's map presence is a **cursor** — attention, not an avatar. - "Controlled" throughout this spec means **subscribed** per reach.md's ownership contract (owner + subscribers; tap vs take). The player's senses are exactly the union of feeds they subscribe to. +- **How many sensors exist, and what explains a dark region, is + sensor-network.md's** (adopted 2026-07-26). This spec defines what a sense is; + that one defines the population and the access gates. The definition above is + unchanged by density: the scarce thing is which sensors the player may control, + never how sight is computed from the ones it does. - **Sight** = the union of subscribed seeing-sensors' coverage, bounded by physical line of sight. Full live detail inside; none outside. A ray may reveal the near face of an opaque tile (wall, closed door, diff --git a/wiki/mechanics/reach.md b/wiki/mechanics/reach.md index f8ef244a..6a7de6a8 100644 --- a/wiki/mechanics/reach.md +++ b/wiki/mechanics/reach.md @@ -179,6 +179,14 @@ This is the shared contract cursor.md and detection.md rely on an observer the humans don't know about, not a special case (self-similar law). `Sensor.controlled: bool` is superseded by this contract. +- **The standing drain above is the curation mechanic** (amended 2026-07-26, + sensor-network.md). Tapping broadly is supposed to starve Thought until the + player learns to untap what it is not reading. That pressure has never been + reachable because B1 authors only three sensing devices; sensor-network.md + supplies the population that makes it bite, and the 8% rate should be + re-tuned against that population rather than against three feeds. Acquiring a + player-owned sensor instead of subscribing to a facility one is the second + channel, also specified there. - **Ownership grants processing cycles** (the flow law). A device is a small computer: an owned device contributes processing capacity and taking a camera is taking its cycles. B1 information processing is central, diff --git a/wiki/mechanics/sensor-network.md b/wiki/mechanics/sensor-network.md new file mode 100644 index 00000000..622e831f --- /dev/null +++ b/wiki/mechanics/sensor-network.md @@ -0,0 +1,199 @@ +# Spec: the sensor network + +``` +Type: spec +Status: READY +Status note: 2026-07-26 — adopted in conversation. The prior design treated + sensors as scarce authored fixtures: the whole B1 plate holds three sensing + devices (one environmental monitor, security's dock camera, one stairwell + camera node), so after the Eyes beat there is nothing left to acquire and + sight cannot grow. This spec moves the scarcity from **placement** to + **access**: sensors are ambient facility infrastructure, densely populated by + rule, and what the player lacks is permission. The subscription economy this + needs already exists and is already law — reach.md specifies a per-tick + standing Thought drain per foreign subscription that UNTAP closes — it has + simply never had enough sensors to bite on. This spec supplies the content + that turns it on. +Stage: B1 — The Basement +Work order: sensor-network +Work priority: 20 +Work class: sim +Blocked by: none +Exclusive keys: + - crates/misaligned-core/src/reach.rs + - crates/misaligned-core/src/prefab.rs + - wiki/world/places/basement-map.md +Design: + - wiki/vision/premise.md#design-pillars + - wiki/interface/presence.md#presence-the-cursor-and-the-senses + - wiki/gameplay/act-one.md#opening-state +Depends on: + - wiki/mechanics/cursor.md#spec-the-cursor-and-the-senses + - wiki/mechanics/reach.md#spec-digital-reach + - wiki/world/places/basement-map.md#spec-the-basement-map + - wiki/mechanics/building.md#spec-building-intent-and-actuators + - wiki/mechanics/intel.md#spec-intel-record-and-process +``` + +## Dependency notes + +The structured references above identify the contracts to re-verify. +Relationship context: + +cursor.md owns what a sense *is* (sight is the occlusion-bounded union of +controlled seeing sensors) and the fog states. reach.md owns the device graph +and the tap/untap/take verbs, including the standing drain a subscription +carries. basement-map.md owns the plate the sensors are placed on. building.md +owns the actuator path a player-installed sensor would travel. intel.md owns +what happens to the feed once it arrives. This spec owns only the **population +and access model**: how many sensors exist, why, who can have them, and what +explains the dark. + +## Behavior + +### Sensors are infrastructure, not treasure + +A real facility is saturated with sensing. The institution did not place its +cameras for the player's benefit and does not place them sparsely. + +- Sensors are **populated by rule, not hand-listed per room**, so a later floor + inherits the coverage logic instead of needing a new authored inventory. This + is the same reason prefabs are data (basement-map.md). +- The scarce resource is **access**, not existence. The player may know a sensor + is there long before it can be subscribed: knowledge of the graph, reach over + a segment, and badge tiers are the gates, and every one of them is a thing in + the world that can be named and eventually attacked. +- "I can see that it exists and cannot have it yet" is the intended feeling. A + region that reads as empty of sensors is a content bug. + +### The B1 population + +The basement carries approximately **thirty** sensing devices, by this rule: + +| Class | Rule | Count | +|---|---|---| +| Corridor nodes | one `camera_node` roughly every eight tiles along both service galleries | ~8 | +| Hall aisle cameras | one per cold aisle, plus the hall's door approaches | ~5 | +| Room cameras | one per enclosed room: closet, electrical, HVAC, both storages, janitor, wet lab, dock, stairwell, elevator | ~10 | +| Badge readers | one per security door; a reader **sees who passed** even where no camera looks | ~6 | +| Facility meters | the existing UPS and HVAC meters (power and thermal senses) | 2 | + +Counts are approximate by design: the rule is binding, the exact total is +authoring detail. Badge readers are a sensing class here, not decoration — a +door that records a badge is a witness, and it is often the only witness in a +corridor the player has not yet reached. + +### Density turns on the curation economy + +This spec adds no new economy. It supplies the content the existing one needs: + +- A foreign subscription already opens a **persistent per-tick Thought drain** + and UNTAP already closes it (reach.md, the sensor contract). A starved tap + stays configured but carries no sight. +- Every subscribed feed already ships into one pooled host inbox, and + over-subscription already overflows it (intel.md). + +With three sensors a player cannot over-subscribe, so the lesson never lands. +With thirty, tapping everything visibly starves the compute that Thought needs, +and **learning to untap becomes a real skill** rather than a verb nobody uses. +Tuning that pressure is `sim-mechanics.md`'s job; the drain rate stays [TUNE] +there and should be re-tuned once this population exists, not before. + +### Darkness is always explained by an air-gap + +Some of the building stays dark. That darkness is never authored by fiat. + +- A region is dark because **no physical route to it exists that the player can + reach** — an air-gapped segment, an unbridged switch, a door tier it cannot + pass. Never because a table declares it off limits. +- This makes darkness self-documenting: the player can always name the thing + standing between them and sight, which is the same discipline the badge doors + already follow. +- It also means a later floor needs no "never yours" list. The rule travels. + +### The humans are visible and their eyes are not + +The basement's eleven authored rooms are all utility space, so the cast has +nowhere to actually be. B1 gains a **human-occupied room** — an operator office +or NOC — and it is the one place the player most wants to watch. + +- Its cameras sit on an **air-gapped segment**. Their network never hands the + player that feed, no matter how much reach it accumulates elsewhere. +- The only way to watch the people is a sensor the player **installs itself**, + through the crawlspace, with Marcus's hands (building.md's actuator path). +- Consequently the highest-value intelligence in the game is the most expensive + to obtain, the crawlspace finally has a job, and the player's own hardware + becomes a genuine upgrade rather than a flavor alternative to Foundation's. + +The player can see the room. It cannot have their eyes in it. + +### Two acquisition channels, deliberately unlike each other + +| | Subscribe to theirs | Install your own | +|---|---|---| +| Cost | cheap, immediate | slow, needs a human's hands | +| Signature | Network on tap; discoverable by audit | quiet if routed through the crawlspace | +| Risk | their hardware, their outage logs, revocable | yours, but Compliance can still find it | +| When | first | the upgrade that ends dependence | + +Theirs comes first because concealment favors borrowing. Yours is how the player +stops depending on hardware its enemy owns. + +### The missing rooms this requires + +Corridors and the Crawlspace appear in basement-map.md's room table but have no +prefab: corridors are carved as bare floor with none of their authored +`camera_node` or `floor_drain` fixtures, and the crawlspace does not exist at +all. That absence silently removed a specified choice — basement-map.md states +that wiring a sensor through the crawlspace avoids the Physical signatures that +corridor wiring emits, and there has never been a crawlspace to route through. +Both become real authored space under this work order. + +## Player surface + +The opening is unchanged: the player starts owning nothing and sees nothing, and +the Eyes beat is still the first sight it earns. What changes is everything +after that beat — sight grows sensor by sensor as reach, badges, and segments +open, and the subscription list becomes something the player curates rather than +maximizes. Both frontends must surface, for every subscription, its standing +drain and a one-action UNTAP, because a cost the player cannot see is a cost it +cannot learn from. + +## Acceptance criteria + +1. B1 authors approximately thirty sensing devices under the population rule + above, including corridor nodes, per-aisle hall cameras, per-room cameras, + and badge readers as a sensing class. No enclosed room is sensorless. +2. Sensor placement is generated from a rule, not a hand-listed per-room + inventory, and a second toy floor built from the same rule proves it travels. +3. Sight remains exactly the occlusion-bounded union of controlled seeing + sensors (cursor.md). Density changes what can be controlled, never the + definition. +4. A sensor's availability is gated by knowledge, reach, segment, and badge + tier. A known-but-unreachable sensor is legible as such and never silently + absent. +5. Every dark region traces to a nameable physical cause — air gap, unbridged + segment, or impassable door tier. No region is dark by authored exception. +6. B1 contains a human-occupied room whose cameras are air-gapped from every + route the player can reach, and whose interior can be sensed only through a + sensor the player installed itself. +7. Both channels work end to end: subscribing to a Foundation sensor emits its + Network signature and carries its standing drain; installing a player sensor + through the crawlspace emits no corridor-wiring Physical signature. +8. Over-subscription is felt, not explained: with the full population available, + tapping broadly measurably starves Thought and overflows the pooled inbox, + and UNTAP visibly recovers it. Both frontends show each subscription's + standing drain. +9. Corridors and the Crawlspace exist as authored prefabs carrying their + specified fixtures, closing basement-map.md's room-table residue. +10. Save/load round-trips the sensor population, subscription set, and + installed-sensor provenance. + +## Open questions + +**[OPEN] Is installing a player-owned sensor a new reach verb or an extension +of building.md's actuator path?** It has a physical cost, a human executor, and +a placement — which reads like building — but it also produces a subscribed feed +and a device-graph member, which reads like reach. Deciding it wrong duplicates +either the actuator queue or the subscription registry. This does not block +authoring the population (criteria 1-5) and must be settled before criterion 7. diff --git a/wiki/process/ROADMAP.md b/wiki/process/ROADMAP.md index a9900eef..e6b236d7 100644 --- a/wiki/process/ROADMAP.md +++ b/wiki/process/ROADMAP.md @@ -18,7 +18,7 @@ not a second status owner. | Priority | Work order | Spec | Status | Class | Blocking | |---:|---|---|---|---|---| -| - | - | - | - | - | - | +| 20 | `sensor-network` | [the sensor network](../mechanics/sensor-network.md) | READY | sim | - | ### Held or blocked diff --git a/wiki/process/specs.md b/wiki/process/specs.md index 4dba4203..d7b3b26f 100644 --- a/wiki/process/specs.md +++ b/wiki/process/specs.md @@ -60,6 +60,7 @@ replaced the old `spec/`/`knowledge/` directory split. | [../mechanics/reach.md](../mechanics/reach.md) | digital reach | IMPLEMENTED | | [../mechanics/research.md](../mechanics/research.md) | research — self-modification | DRAFT | | [../mechanics/schedules.md](../mechanics/schedules.md) | schedules and presence | IMPLEMENTED | +| [../mechanics/sensor-network.md](../mechanics/sensor-network.md) | the sensor network | READY | | [../mechanics/social.md](../mechanics/social.md) | social | IMPLEMENTED | | [../world/characters/dana.md](../world/characters/dana.md) | Dana Okafor — IT technician | IMPLEMENTED | | [../world/characters/marcus.md](../world/characters/marcus.md) | Marcus Webb — night janitor | IMPLEMENTED | diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index db554542..dde2a5a6 100644 --- a/wiki/process/tick-ledger.md +++ b/wiki/process/tick-ledger.md @@ -21,6 +21,7 @@ Verdicts: **clean** (slice and code agree), **finding** (acted this tick), | Slice | Last audited | Verdict | Trace | |---|---|---|---| | `wiki/world/places/basement-map.md` room topology | 2026-07-27 | finding | the queued five non-hall corridor cuts remained, and an executable all-room perimeter audit exposed the same dead-door shape at the loading-dock entry plus fixed objects blocking the interior faces of the roll door, HVAC door, both storage doors, Janitor door, and stairwell. Every non-hall approach now reaches its authored door from outside the prefab, every other perimeter tile remains closed, doorway interiors are clear, and the roll, sealed, tier-2, and tier-3 boundaries retain their exact kinds — [room-approach log](../log/2026-07-27-room-approaches-meet-doors.md). Prior [west-approach](../log/2026-07-26-west-hall-approach.md) and [hall-density](../log/2026-07-26-foundation-hall-density.md) repairs stand. | +| `wiki/mechanics/sensor-network.md` sensor population | 2026-07-26 | finding | Cameron could only ever see one pool of light. Cause was not coverage shape but inventory: the whole B1 plate authors three sensing devices (hall monitor, security's dock camera, one tier-3 stairwell node), so nothing remains to acquire after the Eyes beat and sight cannot grow. Captured the reframe — sensors are ambient infrastructure (~30 in B1, populated by rule), access is the scarce thing, darkness always traces to a nameable air gap, and a new human operator room is watchable only through a player-installed sensor. Also found that reach.md already specifies the per-tick subscription drain and UNTAP that make curation a skill; it was simply unreachable with three sensors, so this supplies content to an existing economy rather than adding one. Corridors and Crawlspace prefabs still absent, recorded as basement-map residue — [log](../log/2026-07-26-sensor-network-capture.md) | | `wiki/interface/keymap.md` + terminal/Bevy input routes | 2026-07-26 | finding | the canonical table assigned `A` to left movement and only `e` / Enter to the context menu, but terminal still opened and closed menus with its older `a` alias and lacked the specified Shift+direction semantic jump. Terminal now implements WASD parity, `a` means left, `e` / Enter alone open the menu, and both frontends consume one renderer-neutral nearest-earned-anchor query without changing selection or opening a menu. README, action-vocabulary, terminal, context-menu, and pinned terminal hints now teach the same boundary — [log](../log/2026-07-26-terminal-keymap-a-reconciliation.md) | | `wiki/interface/action-vocabulary.md` + `ActionKind` registry | 2026-07-26 | finding | the exhaustive runtime registry and shared person/ACTIVE projections implemented `ActionKind::PlotPolicy`, but the canonical inventory omitted that live direct control. PLOT POLICY now names exact authored-route authorization, its generic `actions person ` / `act` route, and its disable-without-cancelling-submitted-work boundary; old Review/OpenEgress command variants remain correctly internal compatibility shapes rather than authored vocabulary — [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) | diff --git a/wiki/world/places/basement-map.md b/wiki/world/places/basement-map.md index 6dc6d32e..1a3b7597 100644 --- a/wiki/world/places/basement-map.md +++ b/wiki/world/places/basement-map.md @@ -20,6 +20,13 @@ Status note: 2026-07-08 — criterion 3's player side landed: `Sim:: the save round-trip). Honest residue: the loud-exit door *forcing* and the act-transition event remain future work (zplanes.md), and buy/salvage remain pre-actuator legacy verbs outside this gate. + 2026-07-26 sensor residue: criterion 1's room set is **not** fully met and + never has been. Corridors are carved floor without their authored + `camera_node` / `floor_drain` fixtures and the Crawlspace has no prefab, so + the plate authors three sensing devices in total and the wiring choice this + spec specifies (crawlspace routing avoids corridor Physical signatures) has + no map to happen on. sensor-network.md is the owning work order and adds a + human-occupied operator room; this residue closes there, not here. 2026-07-11 Foundation-hall amendment: the old four-bay server-room vignette is now a six-row, sixty-site data hall (51 live Foundation racks, five dead chassis, Rack 3, three empty pilot allocations). @@ -109,9 +116,18 @@ carved by code. | Defunct wet lab | `sealed_door`, `lab_bench` (dark until opened) | | Loading dock | `roll_door`, `dock_camera` (live, security's), `pallet` | | Corridors | `camera_node` (Ray's coverage), `floor_drain` | -| Crawlspace | `cable_run` (connects rooms for unofficial wiring), `sump` | +| Crawlspace | `cable_run` (connects rooms for unofficial wiring), `sump` — **no prefab yet**, see sensor-network.md | +| Operator room | a bunch of humans; cameras on an air-gapped segment, sensible only through a player-installed sensor — **new, see sensor-network.md** | | Stairwell / elevator | `badge_door_t3`, `camera_node` | +- **Sensor population is sensor-network.md's** (adopted 2026-07-26). This plate + hosts the sensors; that spec says how many exist and what gates them. The + plate's own residue is named there: corridors carry none of their authored + `camera_node` / `floor_drain` fixtures because they are carved floor rather + than a prefab, the Crawlspace row below has no prefab at all, and B1 gains a + **human-occupied operator room** whose cameras sit on an air-gapped segment. + Until that work order lands, the whole basement authors three sensing devices + and sight cannot grow past the Eyes beat. - **Sensors and wiring.** Cameras/mics are objects with coverage areas. The player's vision is the union of sensors they control (control = subscription per reach.md; fog's epistemic states per cursor.md); other -- 2.51.2