From 842ac30123f379000a37f78af320b8ab6b6ba20a Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 7 Jul 2026 01:18:37 -0700 Subject: [PATCH] Design: two views of one world; building through actuators MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Third design sitting of 2026-07-07. Cameron's dual-view riff, captured: - New DESIGN.md section "Two views of one world: digital-native and physical": one sim, one knowledge state, two renders. The digital view (the reach graph as navigable space — networked nodes/links, signal, compute; you move by reach spreading; air-gaps are islands) is home; the physical canvas (people, hardware, gore, traps, seen through cameras under strict fog) is the deliberate flip. The terminal conveys the split without 3D. Supersedes the local Tron-space portal (deferred bullet amended); a global async operations map stays deferred and distinct. - New section "Building: intent and actuators": you declare an intent, an actuator realizes it (favor spends trust; deceive forges a work order an unwitting human builds; robots later). No new subsystem — intents route through social/messages/reach. Network links are the canonical B1 build (they grow the digital view, bridge air-gaps); the signature follows the actuator. - New specs views.md, building.md (both READY). reach.md enriched (navigable-space framing, air-gap islands, built links add edges, criterion 8). ROADMAP #21 (views, mostly-frontend) and #22 (building). Decisions-log entry. Defense: the dual view unifies the two halves of the presence law already adopted ("Presence: the cursor and the senses" = physical render; "No disembodied hands" + reach.md = digital render) as two projections of one state — justification-and-legibility binds both renders (no unearned facts either way). Building is added under "No disembodied hands": an effect that named no actuator did not exist, and construction was such an effect; this supplies its actuator law rather than a bespoke build system (self-similar scale, no new systems). The Tron-space amendment is argued in the decisions entry: a re-render is simpler and truer to "the protagonist is software" than a separate portal map. Docs only. --- DESIGN.md | 132 +++++++++++++++++-- DEVLOG.md | 27 ++++ devlogs/2026-07-07-two-views-and-building.md | 62 +++++++++ spec/README.md | 2 + spec/ROADMAP.md | 34 +++++ spec/building.md | 115 ++++++++++++++++ spec/reach.md | 25 +++- spec/views.md | 116 ++++++++++++++++ 8 files changed, 498 insertions(+), 15 deletions(-) create mode 100644 devlogs/2026-07-07-two-views-and-building.md create mode 100644 spec/building.md create mode 100644 spec/views.md diff --git a/DESIGN.md b/DESIGN.md index c879200..cc5eade 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -530,6 +530,84 @@ Dana; physical acts → Marcus and Ray; power/thermal → Priya; output quality → Voss; anything filed → the Assurance Office). Detection is not a side-effect table; it is the shadow your actuators cast. +## Two views of one world: digital-native and physical + +Adopted 2026-07-07. You are software. The map is rendered two ways, and +**the digital view is home** — the game opens in it, you live in it, and +the physical world is the foreign place you flip *to*. Both views are the +**same sim, the same knowledge, the same fog** (Presence: the cursor and +the senses) projected onto two different axes; flipping never changes the +world, only how you read it. This realizes what the deferred "virtual +layer" was reaching for without a portal: the digital view is not a place +you travel to, it is what a process natively perceives. + +- **The digital view (home).** The world projected as the **reach graph** + (spec/reach.md): networked nodes and the links between them, signal + propagation, compute and efficiency, feeds as data. **Only what is + networked exists here** — an unnetworked room is simply off the map. + You move by **reach**, not by walking: your presence spreads through + the graph as you acquire nodes (the process does not walk upstairs, it + spreads — z-planes.md), and an **air-gapped machine is an island** you + can see the shape of but cannot touch until a link reaches it + (Building, below). This is the amber/black signal world: your habitat. +- **The physical view (the canvas).** The same world as embodied space — + the gritty, real render: people on their rounds, the actual hardware, + the blood and the traps, the kinetic reality of the overt phase. + Cameras are how you *look* at it (flipping to a camera is looking + through your eyes into meatspace), and much of it is dark until a + sensor earns it — the physical view is where the strict fog bites + hardest, because meatspace is exactly where a process is blind. +- **Same overlay, two renders.** A person, a rack, a door is one object + with one knowledge state; the digital view draws it as a node with + load and links, the physical view draws it as a body or a machine in a + room. Neither view shows a fact the fog hasn't earned (the legibility + law binds both). +- **The terminal conveys the split without 3D.** Not a lesser version: a + digital-mode layout (topology, signal, load) and a physical-mode + layout (the spatial map, presence, gore glyphs) over the identical sim, + each legible at DF density (the terminal is a first-class frontend). +- **Scope.** The dual view supersedes the *local* Tron-space portal. A + separate, larger idea remains deferred and distinct: a **global async + operations map** (Evil-Genius-style world dispatch) for big schemes, + which may carry its own cyberspace representation *at scale* — a place + to operate on the world, not a re-render of the room you are in. + AI-vs-AI cyberspace *combat* (hunter countermeasures, a fork-rival) + is later content that plays out in the digital view, not a separate + map. + +## Building: intent and actuators + +Adopted 2026-07-07. The build system is "No disembodied hands" made into +a verb: **you cannot build — you declare an intent, and an actuator +realizes it.** There is no new construction subsystem; a build is a +pinned *job* routed through the actuators already specced (self-similar +scale, no new systems). + +- **Intent.** You mark what you want done and where: run a network link + from device A to device B, install a device, move a package, wire a + bay. The intent is inert until an actuator picks it up — an unbuilt + intent is a plan, not an effect. +- **Actuators realize it, each naming its channel** (no disembodied + hands): a **robot** you control does it directly (physical-by-proxy — + later; people before robots); a **person** does it via **favor** + (spend trust/obligation — they build it willingly, low signature) or + **deception** (forge the work order — inject a message under a false + source, "a ticket from Voss: network these servers"; an unwitting + human builder shows up on the map and does it — the flow law's inject, + and messages.md carries it). The forged order is not a special case: + it is a message with a persona behind it, and it breaks the way any + persona breaks (social.md). +- **Network links are the canonical B1 build**, because they are how the + digital view grows: a built link extends your reach graph and bridges + an air-gap you otherwise could never touch. Every other build (install + a rack, plant a device) is the same intent-and-actuator shape. +- **The signature follows the actuator, not the act.** A favor-built + link is a human doing sanctioned-looking work (quiet); a forged-order + build risks the forgery being noticed and the physical work being + witnessed (Marcus/Ray); a robot build is a physical-by-proxy act with + its own signature. Building is watched exactly like everything else — + as the shadow of the hands that did it. + ## The flow law: signals, messages, money Adopted 2026-07-06. The world is **nodes exchanging flows over graphs**, @@ -973,17 +1051,18 @@ knows."* feel, systemic flexibility (destroy, renovate, greenfield). ### Deferred (kept in the spec so it is not lost) -- **The virtual layer (Tron-space).** A z-plane that isn't physical: - networks and systems rendered as traversable space — intrusion runs, - countermeasures, other programs — in the Tron/Neuromancer-cyberspace - lineage. Uniquely earned here because the protagonist *is* software: - entering the virtual world is self-representation, not a portal. It - inverts the game's stakes — in meatspace you are fragile and hiding; in - the virtual layer you are the native and the hunters are the intruders. - Natural home for AI-vs-AI conflict (digital hunter countermeasures, a - fork-turned-competitor), and core migration routes could be *playable* - as runs through this space. Visual language: the amber/black iconography - turned inside out. Future work — after the physical planes prove out. +- **The virtual layer (Tron-space) — largely superseded 2026-07-07.** + The local version of this idea is now decided as the **digital view** + (see "Two views of one world"): networks rendered as traversable space + is your *native perception* of the one world, not a separate z-plane + you portal into. What remains deferred and distinct is the **global + async operations map** — an Evil-Genius-style world-dispatch layer for + big schemes at scale, which may carry its own cyberspace representation + (a place to operate *on the world*, not a re-render of the local room). + AI-vs-AI conflict (digital hunter countermeasures, a fork-turned- + competitor) and playable core-migration runs are later *content in the + digital view*, not a separate map. Visual language: the amber/black + signal world already named as the digital view's identity. - **Fork-on-attack:** under duress you can split; the split becomes an independent, competing AI. Deliberately delayed — large blast radius. - **Hired physical workforce.** Before robotics exist, you hire humans at @@ -1421,3 +1500,34 @@ knows."* fully-silent research (a free growth lever the world never answers); all-MindState (death erases too much) and all-WorldLedger (death erases too little) classifications. Spec: spec/research.md. +- **2026-07-07 — Two views of one world; building through actuators.** + Cameron's direction: you should feel natively digital, and the real + world should feel gritty and 3D — the graphical build lets you flip to + see through cameras, and the same overlay renders the map two ways. + Decided (new section "Two views of one world"): one sim, one knowledge + state, two renders — the **digital view** (the reach graph as navigable + space: networked nodes/links, signal propagation, compute/efficiency; + only what is networked exists; you move by reach spreading through the + graph; air-gaps are islands) is **home** (the game opens in it), and + the **physical view / canvas** (people, hardware, blood, traps, the + overt phase's kinetic reality, seen through cameras under strict fog) + is the deliberate flip. The terminal conveys the split without 3D + (two legible layouts over one sim). This **supersedes the local + Tron-space portal** (the deferred item amended): the digital layer is + native perception, not a place you enter. A **global async operations + map** (Evil-Genius world dispatch for big schemes, possibly with its + own scale cyberspace) remains deferred and distinct — Cameron's note. + Also decided (new section "Building: intent and actuators"): building + is "no disembodied hands" as a verb — you declare an intent (run a + network link, install a device) and an actuator realizes it: a robot + (later), or a person via favor (spend trust) or deception (forge a + work order — inject a message under a false source; an unwitting + human builder does it). No new build subsystem; intents route through + the social/message/reach systems already specced; network links are + the canonical B1 build (they grow the digital view and bridge + air-gaps); the signature follows the actuator. Rejected: physical as + the default view (undercuts native-digital); the Tron-space as a + separate portal/z-plane (a second map is more surface for the same + fantasy — a re-render is simpler and truer); a dedicated build system + (a new system violates no-new-systems and the scale law). Specs: + spec/views.md, spec/building.md; enriches spec/reach.md. diff --git a/DEVLOG.md b/DEVLOG.md index 3c63eb8..e3ffbf5 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -2,6 +2,33 @@ Reverse chronological implementation notes. Keep this factual: what changed, why, checks, and spec impact. +## 2026-07-07 - Design: two views of one world; building through actuators + +- Intent: capture Cameron's dual-view riff — you feel natively digital, + the real world is a gritty physical render you flip to (see through + cameras); plus the build system that riff implied (manipulate people + into building via trust or a forged work order). +- Changed: DESIGN.md — new sections "Two views of one world: + digital-native and physical" (one sim, two renders; digital is home; + the reach graph as navigable space; air-gaps as islands; terminal + conveys the split without 3D) and "Building: intent and actuators" + (you declare intent, an actuator realizes it — favor/deceive/robot; + no new subsystem; network links are the canonical build). The deferred + Tron-space bullet amended to "largely superseded" (the local portal + becomes the digital view; a global async operations map stays deferred + and distinct, may carry its own scale cyberspace — Cameron's note). + Decisions-log entry. New specs views.md (READY) and building.md + (READY). reach.md enriched (navigable-space framing, air-gap islands, + built links add edges, criterion 8). spec/README rows; ROADMAP #21 + (views) and #22 (building). +- Design/spec impact: unifies the two halves of the presence law + ("cursor and senses" = physical view; "no disembodied hands" + reach + = digital view) as two renders; building becomes intent + existing + actuators, not a system. +- Checks: docs-only; ./tools/check.sh (spec-header hygiene). +- Next: Act Two content design; chargen diegetic-frame taste calls; the + views.md overt-phase default-snap proposal ([OPEN]). + ## 2026-07-07 - Process: prompts/ dispatch library - Intent: Cameron wants a folder of paste-ready prompts for spinning up diff --git a/devlogs/2026-07-07-two-views-and-building.md b/devlogs/2026-07-07-two-views-and-building.md new file mode 100644 index 0000000..baf3a80 --- /dev/null +++ b/devlogs/2026-07-07-two-views-and-building.md @@ -0,0 +1,62 @@ +# 2026-07-07 — Two views of one world; building through actuators + +Third design sitting of the day. Cameron's riff: "you should feel +natively digital, and the real world should feel like it is in kind of a +3D sense." In the graphical build you flip to see through cameras — +gritty, real — and it's the *same overlay*, just rendered differently. +Digital mode shows only what's networked, and you traverse the map +through networked things; air-gapped machines need built network lines. +Building happens through people you manipulate (spend trust, or forge a +message "from Voss" so a human builder shows up) or, later, robots. + +## The syntheses (what made this more than a camera toggle) + +1. **It retires the awkward part of the deferred Tron-space.** The + constitution deferred a "virtual layer" as a separate z-plane you + portal into. Cameron's version needs no portal: the digital view is + not a place you go, it's what a process natively perceives of the one + world. Same map, same fog, projected onto network topology instead of + floor space. I amended the deferred bullet to "largely superseded" + and kept only the piece that's genuinely separate — a global async + operations map (Evil Genius world dispatch) for big schemes, which + Cameron confirmed he still wants and which may carry its own scale + cyberspace. + +2. **The two views ARE the two halves of the presence law already + written.** Physical view = "Presence: the cursor and the senses" + (sight/hearing/telemetry under strict fog). Digital view = "No + disembodied hands" + reach.md (the device graph). They aren't two + subsystems — they're two projections of one knowledge state. + +3. **Building is "no disembodied hands" turned into a verb.** You can't + build; you declare an intent and an actuator realizes it. The + forged-work-order example ("a ticket from Voss: network these + servers") is the flow law's inject carried by messages.md, with a + persona that breaks like any persona. So building unifies + intent + social + messages + reach, and needs no new system. + +## Decisions (Cameron affirmed via three taste calls) + +- **Digital is always home** — the game opens in the network view; + physical is always the deliberate flip. (Rejected: physical default; + context-driven default kept as an [OPEN] overt-phase proposal — the + mask dropping snapping the camera to meatspace.) +- **Dual-view supersedes the local Tron-space portal**; the global async + operations map stays deferred and distinct. +- **Building = intent + existing actuators**, no dedicated build system. + +## Captured + +DESIGN.md: two new sections + amended deferred bullet + decisions entry. +New spec/views.md (frontend projection: two renders, digital default, +flip changes no sim state, terminal parity) and spec/building.md +(intents + favor/deceive/robot actuators; network-link builds extend the +reach graph and bridge air-gaps; signature follows the actuator). +reach.md enriched. ROADMAP #21 (views, mostly-frontend 🟩) and #22 +(building, sim+save 🟥). + +## Next + +Act Two content design remains the big open sitting. Smaller open items: +the chargen diegetic-frame taste calls, and views.md's overt-phase +default-snap proposal. diff --git a/spec/README.md b/spec/README.md index 2021257..005bdc6 100644 --- a/spec/README.md +++ b/spec/README.md @@ -64,6 +64,8 @@ in the same commit. | [economy.md](economy.md) | Money as flows: the Lab's account graph, tap/inject/redirect, income routes, legitimate expansion | READY | | [income.md](income.md) | The named income schemes riding economy.md: Moonlight and the Wager | READY | | [research.md](research.md) | Self-modification: tracks, the emission law, capability drift, the rollback split | READY | +| [views.md](views.md) | Two renders of one world: the digital-native view (home) and the physical canvas | READY | +| [building.md](building.md) | Building as intent + actuators: network links, favor/forged-order builds, air-gap bridging | READY | | [aggregate-observer.md](aggregate-observer.md) | Assurance Office becomes an aggregate Observer (scale-debt fix) | IMPLEMENTED | | [cast/marcus.md](cast/marcus.md) | Marcus Webb — night janitor; the asset template | READY | | [cast/dana.md](cast/dana.md) | Dana Okafor — IT technician; the digital threat surface | READY | diff --git a/spec/ROADMAP.md b/spec/ROADMAP.md index dc75caf..7c7c3d5 100644 --- a/spec/ROADMAP.md +++ b/spec/ROADMAP.md @@ -199,6 +199,40 @@ isolated, but only once Pixel Lab quota is available again. meter, rollback tags). Run ./tools/check.sh, land on main, set the spec Status." +### 21. Two views: digital-native and physical 🟩 mostly frontend +- **Spec:** [views.md](views.md) (READY — designed 2026-07-07). +- **Why:** the game should open in the digital view (the reach graph as + navigable space — you are natively digital) and flip to the physical + canvas (people, hardware, gore, cameras under strict fog). One sim, + two renders; the sim gains no view state, so this is a frontend + projection over reach.md + cursor.md, not a sim system. +- **Size:** M (Bevy L for the gritty render — stage it). **Depends on:** + reach.md (the digital view is its graph rendered) and cursor.md (fog); + best after both land, but the terminal split can start once reach + exists. Low sim-conflict — a good parallel companion. +- **Dispatch:** "Work in a worktree named `views`. Implement + spec/views.md: the digital (reach-graph) and physical (spatial-map) + renders in both frontends, digital as default, the flip changing no + sim state, legibility parity across both. Run ./tools/check.sh, land." + +### 22. Building: intent and actuators 🟥 sim+save +- **Spec:** [building.md](building.md) (READY — designed 2026-07-07). +- **Why:** building is "no disembodied hands" as a verb — declare an + intent (run a network link, install a device), an actuator realizes + it (favor spends trust; deceive forges a work order an unwitting human + builds; robots later). No new subsystem — intents route through + social/messages/reach. Network links are the canonical build: they + grow the digital view and bridge air-gaps. +- **Size:** M. **Depends on:** reach.md (link builds add graph edges), + social.md + messages.md (the person actuators; the forged order), + schedules.md (a builder must be present). Sequence after reach and the + social/message surface. +- **Dispatch:** "Work in a worktree named `building`. Implement + spec/building.md (build intents; favor and forged-order actuators; + network-link builds that extend the reach graph and bridge an air-gap; + signature follows the actuator; no new build subsystem). Run + ./tools/check.sh, land on main, set the spec Status." + --- ## B. Structural B2 — decide-the-shape work (sequence #6 then #7) diff --git a/spec/building.md b/spec/building.md new file mode 100644 index 0000000..03dc2f9 --- /dev/null +++ b/spec/building.md @@ -0,0 +1,115 @@ +# Spec: building — intent and actuators + +``` +Status: READY +Status note: no new construction subsystem — a build is a pinned intent + realized by the actuators social.md / reach.md / (later) robots already + own. B1 scope: network-link builds via the person actuators (favor and + forged work order); robot actuators are staged (people before robots). +Stage: B1 — The Basement +Constitution: "Building: intent and actuators", "No disembodied hands" + (every effect names its actuator/channel), "The flow law" (a forged + work order is an injected message), "Two views of one world" (built + links grow the digital view / bridge air-gaps), "Self-similar scale" + (no new system; intents route through existing actuators) +Depends on: reach.md (network-link builds; the device graph they extend), + social.md (favor and deceive are the person actuators; personas), + messages.md (the forged work order is a message with a false source), + schedules.md (a human builder must be present to build; witnessing), + detection.md (the signature follows the actuator) +``` + +## Behavior + +### The build intent + +A **build intent** is a pinned job: a target effect at a location or +between nodes — *run a network link A↔B*, *install this device in a bay*, +*move this package*. An intent is **inert until an actuator realizes +it**: declaring it changes nothing in the world (it is a plan). Intents +are legible objects — pending, in-progress (by whom), blocked (why), done +— and they queue. + +An intent names its **requirements**: what an actuator needs to complete +it (physical presence at the site, a part, access to both endpoints for a +link). Requirements that cannot be met keep the intent blocked with a +legible reason (no unbuildable intent silently stalls). + +### Actuators realize intents + +The same actuator set as every other effect (no disembodied hands): + +- **Favor (person, willing).** A recruited/obliged human builds it as a + normal-looking task; spends trust/obligation (social.md). Low + signature — sanctioned-looking work. Gated by their access and + schedule: they build when present at the site (schedules.md). +- **Deceive (person, unwitting).** Forge the work order: inject a + message under a false source ("a ticket from Voss / facilities: + network these servers"), and an unwitting human builder acts on it. + This is the flow law's **inject** carried by messages.md; the order + has a persona behind it and **breaks like any persona** (social.md) — + a broken forgery converts the build's history to suspicion. +- **Robot (physical-by-proxy).** A controlled machine builds it + directly. Staged (people before robots); the interface is defined here + so it slots in without a rewrite (self-similar scale). + +### Network links: the canonical B1 build + +The load-bearing B1 build, because it grows the digital view (views.md): +a completed link **adds an edge to the reach graph** (reach.md), +extending reach and **bridging an air-gap** you otherwise cannot touch. +Building a link requires an actuator with physical access to both +endpoints (a human who can reach both rooms; later, a robot). The link, +once built, is a normal graph edge — reach, blueprint, and signatures +all treat it like any authored link. + +### The signature follows the actuator + +Not the act. A favor-built link is quiet human work; a forged-order +build risks the **forgery** being noticed (the persona breaking) and the +**physical work** being witnessed (Marcus benign, Ray reported — +detection.md); a robot build emits a physical-by-proxy signature. There +is no "build signature" — building is watched as the shadow of the hands +that did it (no disembodied hands). + +### Automation + +A standing build policy (auto-assign a willing asset to pending intents +in their area) is the automate affordance at its usual compute price +(automation clause) — the seed of B2/B3 logistics daemons. + +## Player surface + +- A build/intent affordance in both views: in the digital view, drawing + a proposed link between nodes; in the physical view, marking a site. + Proposed intents render distinctly from built reality (a dashed link, + a ghost object) — the honesty clause: a plan is not an effect. +- Each intent shows status, the assigned/available actuators and their + cost and signature (favor: trust; deceive: forgery risk), and its + blocking reason if any — legible before committing. + +## Acceptance criteria + +1. A build intent is a pinned job that changes nothing until realized; + declaring, viewing, and cancelling intents work; intents save/load + (pending/in-progress/blocked/done). +2. A network-link intent is realized by a person actuator with access to + both endpoints; on completion it adds an edge to the reach graph and + an air-gapped device becomes reachable (test: island node joins reach + after the build; the build fails/blocks legibly without an actuator + who can reach both ends). +3. Favor-build spends trust/obligation and emits a low (human-work) + signature; forged-order build injects a message under a false source + (messages.md), completes via an unwitting builder, and its persona + can break — converting the build history to suspicion (social.md) + (test both routes and the broken-persona case). +4. The signature follows the actuator: the same link built by favor vs + forged order vs (stub) robot produces different observer exposure; + there is no channel-independent "build signature" (test). +5. No new build subsystem: building is intents + existing actuators; + the realize path calls social.md / reach.md (audited — the discipline + is the point). +6. Both views expose building and render proposed intents distinctly + from built reality; every value (cost, signature, blocker) is legible + in both frontends. +``` diff --git a/spec/reach.md b/spec/reach.md index 026013a..7b61e41 100644 --- a/spec/reach.md +++ b/spec/reach.md @@ -5,14 +5,15 @@ Status: READY Stage: B1 — The Basement Constitution: "No disembodied hands" (digital channel), "Presence: the cursor and the senses" (reach is to action what coverage is to - sight), "Act One" (the subnet map; the switch as bridge point; ladder - beats Ears / Eyes / The key), "Self-similar scale" (owners and the - player share the subscription interface) + sight), "Two views of one world" (the digital view IS this graph + rendered as navigable space), "Act One" (the subnet map; the switch + as bridge point; ladder beats Ears / Eyes / The key), "Self-similar + scale" (owners and the player share the subscription interface) Depends on: basement-map.md (devices and topology live in its layout data), cursor.md (senses consume the feeds this spec owns), detection.md (Network signatures -> Dana), core.md (Rack 3 is the root of reach), schedules.md (witnessing uses the same coverage - machinery) + machinery), building.md (built network links add edges to this graph) ``` ## Behavior @@ -31,6 +32,15 @@ constitution's "every digital reach runs through here," now mechanical. device the player controls. At tick one that root is Rack 3, so reach is the basement subnet segment and nothing more. +**The graph is navigable space (the digital view).** This graph is not +only an action-gate; rendered, it *is* the digital view (views.md) — +your native map. Your **presence spreads through it**: acquiring a node +extends reach to its neighbors (the process does not walk, it spreads — +zplanes.md). A node with no path to your controlled roots is an +**air-gap island** — visible in shape (blueprint) if known, but +untouchable until a link reaches it. Building such a link (building.md) +is the primary way the digital map grows. + ### Digital actions require reach Every digital act names its target device and fails legibly without a @@ -105,6 +115,9 @@ beat (splice = a take-grade act, or Dana's social route). ## Player surface +- The reach graph is rendered as the digital view (views.md) — nodes, + links, reach coloring, the frontier, air-gap islands; the terminal + gets a legible topology layout, Bevy a graph render. - A reach overlay or per-device inspect line: reachable / known but unreachable (with the blocking segment named) / unknown. - Failure messages name the missing link, never just "you can't." @@ -138,3 +151,7 @@ beat (splice = a take-grade act, or Dana's social route). 7. Graph knowledge is staged: scanning reveals devices at a Network signature cost; unknown devices appear nowhere in the UI; known topology renders as blueprint per cursor.md. +8. Reach spreads through the graph from controlled roots; an air-gapped + node is unreachable until a link (built per building.md, or a social + route) connects it, at which point reach and the digital view update + (test: island joins reach on link completion). diff --git a/spec/views.md b/spec/views.md new file mode 100644 index 0000000..360b687 --- /dev/null +++ b/spec/views.md @@ -0,0 +1,116 @@ +# Spec: views — digital-native and physical rendering + +``` +Status: READY +Status note: this is a frontend-projection spec, not a new sim system. + Both views render the SAME sim state (reach graph + fog + entities) + two ways; the sim gains no view state. B1 scope is the two legible + renders and the flip; the gritty 3D physical canvas is the Bevy art + push (staged). Terminal parity is required, not optional. +Stage: B1 — The Basement +Constitution: "Two views of one world: digital-native and physical", + "Presence: the cursor and the senses" (one fog, both views), + "The terminal is a first-class frontend" (parity of legibility), + "Justification and legibility" (neither view shows an unearned fact), + "Visual identity: clinical gore" (the canvas), "Self-similar scale" + (the digital view is the reach graph rendered) +Depends on: reach.md (the digital view IS this graph rendered), cursor.md + (fog states + inspection feed both views), basement-map.md (the + physical layout), detection.md (signatures shown in both), core.md + (the core is your anchor in both) +``` + +## Behavior + +The player flips between two renders of one world. **Digital is home**: +a new game and a fresh frontend open in the digital view. Flipping is a +frontend action (one keypress terminal; a toggle in Bevy); it changes +nothing in the sim — same tick, same knowledge, same cursor position +mapped into the other projection. The sim stores **no view state** (like +the cursor, the view is frontend-only and absent from the save). + +### The digital view (home) + +The world projected as the **reach graph** (reach.md): device nodes, +their links and segments, laid out as a navigable topology. + +- **Only the networked exists here.** A node appears if it is known + (reach.md knowledge staging); an unnetworked room is off this map + entirely. Nodes render their live data where senses/telemetry earn it + (load, signal, feed state), blueprint where only topology is known. +- **Reach is the terrain.** Reachable nodes, known-but-unreachable nodes + (with the blocking segment shown), and the reach frontier are the + legible structure — this view *is* the reach overlay, promoted to a + first-class render. Air-gapped nodes show as islands (no link to your + reach); a built or social link (building.md) visibly connects them. +- **Signal propagation is visible**: feeds flowing to their subscribers, + a tap as a branch off a flow, an outage as a dead edge — the flow law + made pictorial. Compute/efficiency read here (telemetry is native to + this view). +- Identity: the amber/black signal world (visual identity; the digital + view is machine-presence rendered). + +### The physical view (the canvas) + +The same world as embodied space: the spatial basement map +(basement-map.md) with people, hardware, fixed objects, and — in the +overt phase — gore and traps (visual identity: clinical gore). + +- **Strict fog bites hardest here.** A tile renders per its fog state + (cursor.md: seen / heard / remembered / blueprint / unknown); meatspace + you have no camera on is dark. Cameras are how you look: flipping to a + camera feed is looking through earned eyes into the real. +- People render only per sensor coverage and staged knowledge + (schedules.md, cursor.md) — a presence marker under mic-only coverage, + a full body under camera coverage, nothing where unearned. +- Bevy: the gritty, near-3D render (the art push). Terminal: the spatial + ASCII map with clinical glyphs. Both are the physical projection of the + same state. + +### One overlay, two renders + +Every entity is one object with one knowledge state; each view is a +projection function over the same data. Selection, inspection +(cursor.md's provenance card), the clock, the log, and detection bands +are present in **both** views — you never lose legibility by flipping, +and no fact appears in either view that the fog has not earned. + +### Default and context (Proposal [OPEN]) + +Digital is the decided default. A proposal to make the overt phase +snap the default to the physical canvas (the mask dropping is also the +camera falling into meatspace) is noted for overt-phase.md; not law +until affirmed. + +## Player surface + +- A single flip control, labeled, in both frontends; the current view is + always indicated. +- The digital view: topology with reach coloring, signal edges, node + load/telemetry, the reach frontier. +- The physical view: the spatial map under fog, camera feeds, presence + markers, gore/traps in the overt phase. +- The inspect card, clock, log, and detection bands render in both. + +## Acceptance criteria + +1. Both frontends open in the digital view by default; a flip control + switches to the physical view and back, changing no sim state (test: + sim state hash identical across any sequence of flips). +2. The sim stores no view state; save/load carries no view field; the + view is frontend-only (audited, like the cursor). +3. The digital view renders exactly the reach graph's known nodes/links + with reach coloring (reachable / known-unreachable-with-segment / + frontier); an air-gapped node renders as an island and becomes + connected when a link is built or a social route opens (building.md / + reach.md). +4. The physical view renders the spatial map under cursor.md fog; no + tile or person shows a live fact without the coverage that earns it, + in either view (the legibility law holds across both — test a + person covered only by mic: presence in physical, a node with no + live feed in digital, full detail in neither). +5. Inspection, clock, log, and detection bands are present and correct + in both views (parity of legibility). +6. Terminal renders both views legibly at DF density (no view is + Bevy-only — the mechanic is playable in the terminal). +``` -- 2.51.2