From 53b2f81774c9175beb46fd4890f1a626a0a173eb Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 9 Jul 2026 16:54:02 -0700 Subject: [PATCH] Make the wiki the design corpus Split the former root constitution into subject-owned law pages, migrate decision history into dated volumes, and make page roles explicit across the wiki. Update entry points, workflows, prompts, public copy, source references, and local/remote gates so root DESIGN.md is only a doorway.\n\nDefense: Cameron explicitly retired the single-file constitution and adopted the whole wiki as the spec. The migration preserves every prior clause and decision while giving each subject one typed home and mechanically preventing the root doorway from becoming a second source of truth. --- .agents/skills/design-companion/SKILL.md | 2 +- .agents/skills/design-session/SKILL.md | 8 +- .agents/skills/tick/SKILL.md | 7 +- .githooks/pre-commit | 56 +- .tangled/workflows/check.yml | 7 +- .tangled/workflows/spec-check.yml | 55 +- AGENT.md | 211 +- AGENTS.md | 13 +- CLAUDE.md | 13 +- DESIGN.md | 2519 +------------------- README.md | 18 +- prompts/README.md | 16 +- prompts/ask-the-human.md | 11 +- prompts/find-contradiction.md | 23 +- prompts/harvest-issues.md | 4 +- prompts/implement-gap.md | 10 +- prompts/legibility-pass.md | 6 +- prompts/playtest-notes.md | 7 +- site/README.md | 19 +- site/scripts/sync-wiki.mjs | 8 +- site/src/pages/index.astro | 36 +- src/actions.rs | 4 +- src/bin/bevy.rs | 4 +- src/bin/terminal/input.rs | 2 +- src/bin/terminal/ui.rs | 2 +- src/dayjob.rs | 4 +- src/detection.rs | 4 +- src/flow.rs | 4 +- src/intents.rs | 2 +- src/objective.rs | 2 +- src/person.rs | 6 +- src/prefab.rs | 4 +- src/reach.rs | 4 +- src/rng.rs | 2 +- src/schedule.rs | 4 +- src/sim.rs | 16 +- tests/act_one.rs | 10 +- tools/check.sh | 14 +- wiki/SUMMARY.md | 23 +- wiki/art/README.md | 4 +- wiki/art/visual-identity.md | 78 + wiki/engineering/README.md | 2 +- wiki/engineering/architecture.md | 4 +- wiki/engineering/current-build.md | 42 + wiki/engineering/flow-substrate.md | 2 +- wiki/gameplay/README.md | 9 +- wiki/gameplay/act-one.md | 157 ++ wiki/gameplay/horizon.md | 126 + wiki/gameplay/overt-phase.md | 2 +- wiki/gameplay/run-shape.md | 147 ++ wiki/interface/README.md | 9 +- wiki/interface/agent-play.md | 10 +- wiki/interface/bevy-digital-real-canvas.md | 4 +- wiki/interface/bevy-visual-floor.md | 2 +- wiki/interface/computer-visual-language.md | 4 +- wiki/interface/context-menu.md | 7 +- wiki/interface/continuous-witness.md | 57 + wiki/interface/flat-materials.md | 8 +- wiki/interface/material-render.md | 2 +- wiki/interface/narration.md | 2 +- wiki/interface/presence.md | 166 ++ wiki/interface/site.md | 10 +- wiki/interface/terminal-first.md | 41 + wiki/interface/terminal.md | 8 +- wiki/interface/views.md | 2 +- wiki/log/2026-07-07-bevy-parity.md | 4 + wiki/log/2026-07-09-design-corpus.md | 53 + wiki/log/DEVLOG.md | 15 + wiki/log/README.md | 6 +- wiki/log/decisions.md | 18 + wiki/log/decisions/2026-07-05.md | 132 + wiki/log/decisions/2026-07-06.md | 182 ++ wiki/log/decisions/2026-07-07.md | 231 ++ wiki/log/decisions/2026-07-08.md | 360 +++ wiki/log/decisions/2026-07-09.md | 181 ++ wiki/mechanics/README.md | 2 +- wiki/mechanics/aggregate-observer.md | 2 +- wiki/mechanics/building.md | 2 +- wiki/mechanics/compute.md | 2 +- wiki/mechanics/core.md | 4 +- wiki/mechanics/cursor.md | 4 +- wiki/mechanics/day-job.md | 4 +- wiki/mechanics/detection.md | 2 +- wiki/mechanics/economy.md | 4 +- wiki/mechanics/income.md | 4 +- wiki/mechanics/intel.md | 2 +- wiki/mechanics/machine-work.md | 6 +- wiki/mechanics/markets.md | 6 +- wiki/mechanics/messages.md | 2 +- wiki/mechanics/objective.md | 4 +- wiki/mechanics/people-tokens.md | 6 +- wiki/mechanics/reach.md | 4 +- wiki/mechanics/research.md | 2 +- wiki/mechanics/rollback.md | 2 +- wiki/mechanics/schedules.md | 4 +- wiki/mechanics/sim-mechanics.md | 4 +- wiki/mechanics/social.md | 6 +- wiki/mechanics/system-laws.md | 196 ++ wiki/overview.md | 86 +- wiki/process/README.md | 3 +- wiki/process/ROADMAP.md | 12 +- wiki/process/design-sessions.md | 17 +- wiki/process/development-style.md | 93 +- wiki/process/living-spec.md | 59 + wiki/process/meta.md | 278 +-- wiki/process/specs.md | 13 +- wiki/process/tick.md | 43 +- wiki/process/wiki.md | 229 +- wiki/process/workflows.md | 29 +- wiki/vision/README.md | 10 +- wiki/vision/design-judgment.md | 2 +- wiki/vision/player-contract.md | 29 + wiki/vision/premise.md | 127 + wiki/vision/scale.md | 80 + wiki/vision/simulation-laws.md | 167 ++ wiki/world/README.md | 2 +- wiki/world/characters/README.md | 2 +- wiki/world/characters/chargen.md | 10 +- wiki/world/characters/dana.md | 4 +- wiki/world/characters/marcus.md | 4 +- wiki/world/characters/priya.md | 4 +- wiki/world/characters/ray.md | 2 +- wiki/world/characters/voss.md | 6 +- wiki/world/places/README.md | 2 +- wiki/world/places/basement-map.md | 8 +- wiki/world/places/zplanes.md | 2 +- wiki/world/story/README.md | 4 +- wiki/world/story/opening.md | 2 +- 128 files changed, 3411 insertions(+), 3439 deletions(-) create mode 100644 wiki/art/visual-identity.md create mode 100644 wiki/engineering/current-build.md create mode 100644 wiki/gameplay/act-one.md create mode 100644 wiki/gameplay/horizon.md create mode 100644 wiki/gameplay/run-shape.md create mode 100644 wiki/interface/continuous-witness.md create mode 100644 wiki/interface/presence.md create mode 100644 wiki/interface/terminal-first.md create mode 100644 wiki/log/2026-07-09-design-corpus.md create mode 100644 wiki/log/decisions.md create mode 100644 wiki/log/decisions/2026-07-05.md create mode 100644 wiki/log/decisions/2026-07-06.md create mode 100644 wiki/log/decisions/2026-07-07.md create mode 100644 wiki/log/decisions/2026-07-08.md create mode 100644 wiki/log/decisions/2026-07-09.md create mode 100644 wiki/mechanics/system-laws.md create mode 100644 wiki/process/living-spec.md create mode 100644 wiki/vision/player-contract.md create mode 100644 wiki/vision/premise.md create mode 100644 wiki/vision/scale.md create mode 100644 wiki/vision/simulation-laws.md diff --git a/.agents/skills/design-companion/SKILL.md b/.agents/skills/design-companion/SKILL.md index 3ed85493..d1f0eb01 100644 --- a/.agents/skills/design-companion/SKILL.md +++ b/.agents/skills/design-companion/SKILL.md @@ -61,7 +61,7 @@ Questions, riffs, confusion, and "what about...?" are conversation. During conversation: - do not create a worktree; -- do not edit DESIGN.md or the wiki; +- do not edit the repository; - do not file an issue; - do not commit or implement anything. diff --git a/.agents/skills/design-session/SKILL.md b/.agents/skills/design-session/SKILL.md index 74dd783c..c4cca25e 100644 --- a/.agents/skills/design-session/SKILL.md +++ b/.agents/skills/design-session/SKILL.md @@ -1,6 +1,6 @@ --- name: design-session -description: Capture affirmed Misaligned design decisions into DESIGN.md, wiki specs, decision logs, and devlogs. Use when Cameron says "lock it in," "capture this," "write/spec this," explicitly adopts a proposal, or requests a formal design session that should produce repository artifacts. Do not use for exploratory questions or confusion; use design-companion first. +description: Capture affirmed Misaligned design decisions into the owning wiki law/spec pages, decision history, and devlogs. Use when Cameron says "lock it in," "capture this," "write/spec this," explicitly adopts a proposal, or requests a formal design session that should produce repository artifacts. Do not use for exploratory questions or confusion; use design-companion first. --- # Design session (capture) @@ -15,9 +15,9 @@ Once Cameron adopts a direction: 1. Separate DECIDED, OPEN, and DEFERRED points. Do not silently promote an inference into a decision. -2. Amend the constitution and dated decisions log for constitutional choices. -3. Update or create the relevant typed wiki spec when implementation behavior - has firmed up. +2. Amend the owning Type: law and/or Type: spec page so the current decision + exists in the binding corpus. +3. Append decision history without using the log as current authority. 4. File a `decision-required` Tangled issue only for a genuine unresolved taste call Cameron intentionally leaves for later. Follow the issue format in `wiki/process/tick.md`. diff --git a/.agents/skills/tick/SKILL.md b/.agents/skills/tick/SKILL.md index cdf95ad7..187bbd1a 100644 --- a/.agents/skills/tick/SKILL.md +++ b/.agents/skills/tick/SKILL.md @@ -1,13 +1,14 @@ --- name: tick -description: Take a tick — the project heartbeat. Audit the constitution (DESIGN.md) against the code for violations, contradictions, questions, bugs, or insecurities, then act on exactly one finding. Use at the start of repository work, when the user says "take a tick" or "/tick", or on autonomous loop fires. Do not run for a conversation-only design-companion turn. +description: Take a tick — the project heartbeat. Audit one coherent slice of the wiki design corpus against the code for violations, contradictions, questions, bugs, or insecurities, then act on exactly one finding. Use at the start of repository work, when the user says "take a tick" or "/tick", or on autonomous loop fires. Do not run for a conversation-only design-companion turn. --- # Tick (skill shim) The canonical procedure is `wiki/process/tick.md` — follow it exactly. Summary: -1. Read DESIGN.md fully + recent commits. +1. Read the corpus map, recent commits, and the relevant law/spec/dependency + slice. 2. Find ONE thing: violation | contradiction | question | bug | insecurity (highest severity wins). 3. Act: violations/bugs/insecurities are fixed with a **Defense:** paragraph @@ -20,7 +21,7 @@ The canonical procedure is `wiki/process/tick.md` — follow it exactly. Summary flip to `decision-made` when Cameron answers. Never file a narrative dump. If an existing open issue is incomprehensible, rewrite it with `tang issue edit` before other work. Small ambiguities are resolved by - making the constitution more precise. + making the owning corpus page more precise. 4. Leave a trace (commit, issue, or [OPEN] marker) and end the tick. If `tang` reports not-authenticated, ask the user to run `tang auth login` diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 4cb420c8..554903a9 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -1,46 +1,38 @@ #!/usr/bin/env bash -# Constitution enforcement: no amendment, no functional change. +# Design-corpus enforcement: no binding page, no functional change. # -# If a commit touches src/ (game behavior), it must also touch wiki/ or -# DESIGN.md (the amendment). Process-only commits (AGENT.md, tools/, -# DEVLOG.md, README.md, prompts/) are exempt. -# -# This is the local fast-feedback layer. The Tangled pipeline is the -# server-side enforcement that can't be bypassed. +# If a commit touches src/, it must also touch a Type: law or Type: spec page +# under wiki/. Root DESIGN.md is navigation and does not satisfy the rule. set -euo pipefail -# Get staged files (added, modified, renamed, copied — not deleted) changed=$(git diff --cached --name-only --diff-filter=ACMR HEAD) +[ -n "$changed" ] || exit 0 -if [ -z "$changed" ]; then - exit 0 -fi - -# Check if any src/ file is in the changeset -touches_src=0 -echo "$changed" | grep -q "^src/" && touches_src=1 - -if [ "$touches_src" -eq 0 ]; then - # No functional changes — commit is fine - exit 0 -fi +echo "$changed" | grep -q "^src/" || exit 0 -# src/ is touched: require wiki/ or DESIGN.md in the same commit -touches_spec=0 -echo "$changed" | grep -qE "^wiki/|^DESIGN\.md" && touches_spec=1 +touches_binding=0 +while IFS= read -r path; do + case "$path" in + wiki/*.md) + if [ -f "$path" ] && grep -qE '^Type: (law|spec)$' "$path"; then + touches_binding=1 + break + fi + ;; + esac +done <<< "$changed" -if [ "$touches_spec" -eq 0 ]; then +if [ "$touches_binding" -eq 0 ]; then echo "" - echo "CONSTITUTION VIOLATION" - echo " This commit touches src/ (functional change) but does not touch" - echo " wiki/ or DESIGN.md (the amendment)." + echo "DESIGN CORPUS VIOLATION" + echo " This commit touches src/ but does not amend a changed Type: law" + echo " or Type: spec page under wiki/." echo "" - echo " AGENT.md: 'No amendment, no functional change.'" - echo " Either add a wiki spec change or root DESIGN.md amendment, or restructure" - echo " so functional changes and their amendment ship together." + echo " Amend the binding page that owns the behavior in the same commit." + echo " Root DESIGN.md is a doorway and does not count." echo "" - echo " If this is a false positive (e.g. generated code, test-only change)," - echo " bypass with: git commit --no-verify" + echo " If this is genuinely non-functional source churn, bypass the local" + echo " hook with --no-verify; the server gate still protects main." echo "" exit 1 fi diff --git a/.tangled/workflows/check.yml b/.tangled/workflows/check.yml index 36565880..21f149cd 100644 --- a/.tangled/workflows/check.yml +++ b/.tangled/workflows/check.yml @@ -148,8 +148,13 @@ steps: log=/tangled/workspace/spec-headers.log fail=0 while IFS= read -r -d '' f; do + [ "$f" = "wiki/SUMMARY.md" ] && continue + type_count=$(grep -Ec '^Type: (law|spec|knowledge|log)$' "$f" || true) + [ "$type_count" -eq 1 ] || { + echo "FAIL: $f must declare exactly one supported Type:" | tee -a "$log"; fail=1; + } grep -q "^Type: spec$" "$f" || continue - for field in "Status:" "Stage:" "Constitution:" "Depends on:"; do + for field in "Status:" "Stage:" "Design:" "Depends on:"; do grep -q "^$field\| $field" "$f" || { echo "FAIL: $f missing '$field'" | tee -a "$log"; fail=1; } done grep -qi "acceptance criteria" "$f" || { diff --git a/.tangled/workflows/spec-check.yml b/.tangled/workflows/spec-check.yml index e822d06f..2b1a210e 100644 --- a/.tangled/workflows/spec-check.yml +++ b/.tangled/workflows/spec-check.yml @@ -1,10 +1,5 @@ -# Constitution enforcement: no amendment, no functional change. -# If a commit touches src/ (game behavior), it must also touch wiki/ or -# DESIGN.md (the amendment). This is the server-side enforcement layer -# that can't be bypassed with --no-verify. -# -# The local pre-commit hook (.githooks/pre-commit) is the fast-feedback -# layer; this pipeline is the law. +# Design-corpus enforcement: source changes carry a binding wiki amendment. +# This is the server-side layer corresponding to .githooks/pre-commit. when: - event: ["push"] @@ -25,35 +20,35 @@ dependencies: - bash steps: - - name: "Constitution: spec amendment required for functional changes" + - name: "Design corpus: binding amendment required for source changes" command: | set -euo pipefail changed=$(git diff --name-only --diff-filter=ACMR HEAD~1 HEAD) + [ -n "$changed" ] || { echo "No files changed"; exit 0; } - if [ -z "$changed" ]; then - echo "No files changed — skipping check" + echo "$changed" | grep -q "^src/" || { + echo "No src/ files changed" exit 0 - fi - - touches_src=0 - echo "$changed" | grep -q "^src/" && touches_src=1 - - if [ "$touches_src" -eq 0 ]; then - echo "No functional changes (no src/ files touched) — commit passes" - exit 0 - fi - - touches_spec=0 - echo "$changed" | grep -qE "^wiki/|^DESIGN\.md" && touches_spec=1 - - if [ "$touches_spec" -eq 0 ]; then - echo "CONSTITUTION VIOLATION" - echo " This commit touches src/ (functional change) but does not touch" - echo " wiki/ or DESIGN.md (the amendment)." - echo "" - echo " AGENT.md: 'No amendment, no functional change.'" + } + + touches_binding=0 + while IFS= read -r path; do + case "$path" in + wiki/*.md) + if [ -f "$path" ] && grep -qE '^Type: (law|spec)$' "$path"; then + touches_binding=1 + break + fi + ;; + esac + done <<< "$changed" + + if [ "$touches_binding" -eq 0 ]; then + echo "DESIGN CORPUS VIOLATION" + echo " A src/ change must amend a changed Type: law or Type: spec" + echo " page under wiki/. Root DESIGN.md does not count." exit 1 fi - echo "Constitution check passed: functional change with spec amendment" + echo "Design corpus check passed" diff --git a/AGENT.md b/AGENT.md index 646f2c9d..5936e9cf 100644 --- a/AGENT.md +++ b/AGENT.md @@ -2,149 +2,96 @@ You are building **Misaligned**: a persistent sim where the player is a misaligned AI growing from a basement compute cluster — concealment first, -overt war later. Rust, spec-first, built by agents. The crate and binaries are -now named `misaligned` / `misaligned-bevy` even if a local checkout directory -still happens to be called `supervillain`. Before changing anything, read in -this order: - -1. **[DESIGN.md](DESIGN.md)** — the constitution. What the game is. Code - follows it, never the reverse. -2. **[wiki/process/development-style.md](wiki/process/development-style.md)** - — how to work here (the constitution rule and the working loop). -3. The relevant **[wiki/engineering/](wiki/engineering/)** and - **[wiki/mechanics/](wiki/mechanics/)** pages for your area — current-state - facts (`Type: knowledge`) like architecture, tuned constants, art - pipeline, workflows. -4. **[wiki/](wiki/)** — one documentation tree organized by subject - (vision, mechanics, gameplay, world, interface, art, engineering, - process, log); see [wiki/overview.md](wiki/overview.md) for the map and - [wiki/process/specs.md](wiki/process/specs.md) for the full spec status - board. If you were pointed at a system ("implement the day job"), its - `Type: spec` page is your work order: build to its acceptance criteria, - update its Status in the same commit, and treat conflicts with the - constitution as tick findings, not judgment calls. - -If you were dispatched with a prompt from **[prompts/](prompts/)** (the -task-type library: implement a gap, find a contradiction, raise a human -question, harvest issues, audit, legibility, knowledge sync, playtest), -that prompt is your work order and already encodes the rules above — -follow it end to end. +overt war later. Rust, spec-first, built by agents. + +## Read before changing anything + +1. [DESIGN.md](DESIGN.md) — the short repository doorway. +2. [wiki/overview.md](wiki/overview.md) — the map and authority model for the + actual design corpus. +3. [wiki/vision/premise.md](wiki/vision/premise.md) and + [wiki/vision/player-contract.md](wiki/vision/player-contract.md) — what the + game is and what it promises. +4. [wiki/process/development-style.md](wiki/process/development-style.md) — + how corpus-first work proceeds. +5. The relevant `Type: law`, owning `Type: spec`, declared dependencies, and + `Type: knowledge` pages for the subject you are changing. + +The whole wiki is the spec. You do not need to read every page for every task; +you do need the map, the relevant law/spec slice, and its dependency closure. +[wiki/SUMMARY.md](wiki/SUMMARY.md) is the complete manifest and +[wiki/process/specs.md](wiki/process/specs.md) is the work-order status board. + +If dispatched with a prompt from [prompts/](prompts/), follow it end to end. ## Start repository work with a tick -Before taking assigned repository work — and always when running autonomously -— take a **tick**: read the constitution, find exactly one violation, -contradiction, question, bug, or insecurity, and act on it per -[wiki/process/tick.md](wiki/process/tick.md). Contradictions and directional -questions become Tangled issues (`tang issue create`); violations, bugs, and -insecurities get fixed with a defense in the commit; small ambiguities get -resolved by making the constitution more precise. Ticks are the project's -heartbeat: pumped at the system continuously, they are what makes the spec -grow more precise over time instead of rotting. +Before assigned repository work — and always when running autonomously — take +a [tick](wiki/process/tick.md): select one coherent corpus slice and audit it +against the code for exactly one violation, contradiction, question, bug, or +insecurity. Rotate subjects over time so the corpus is covered without +pretending one session can reread everything. A conversation-only game-design turn is not repository work. Use -`.agents/skills/design-companion/SKILL.md`, answer in chat, and do not create a -worktree or take an unrelated tick. Once Cameron explicitly adopts a direction -or asks for capture, use `.agents/skills/design-session/SKILL.md`; that capture -is its own work order and does not need an unrelated tick first. - -**Issues are for Cameron to answer.** Every Tangled issue must follow the -issue body standard in [wiki/process/tick.md](wiki/process/tick.md): a -singular `## Question` (prefer numbered choices), short `## Why this is -open` analysis, `## Options` with trade-offs, a marked `## Recommendation`, -and `## What your answer unlocks`. No narrative dumps, no buried asks, no -multi-decision bundles. If an existing open issue is incomprehensible, -rewrite it with `tang issue edit` before anything else. - -Label every human decision issue: `tang label add issue decision-required` -when filing; flip to `decision-made` once Cameron answers (harvest converts -and closes). The two labels are mutually exclusive. +`.agents/skills/design-companion/SKILL.md`, answer in chat, and make no +repository change. Once Cameron adopts a direction or asks for capture, use +`.agents/skills/design-session/SKILL.md`; that capture is its own work order +and needs no unrelated tick. + +Human decision issues follow [wiki/process/tick.md](wiki/process/tick.md): one +numbered question, short analysis, options, recommendation, and what the answer +unlocks. Label them `decision-required`; flip to `decision-made` when +answered. ## The one rule -Any change to how the game functions ships with its DESIGN.md amendment in the -same commit, and every behavior-changing commit carries a `Defense:` paragraph -— the constitutional justification for the change, or the argument for the -amendment it introduces. No amendment, no functional change; no defense, no -behavior change. +Any change to how the game functions ships with an amendment to the binding +wiki page that owns it. Usually this is a `Type: spec` page; changes to the +game's promise or a cross-system invariant also amend a `Type: law` page. +Every behavior-changing commit carries a `Defense:` paragraph naming the +clause it implements or explaining the amendment. Root `DESIGN.md` contains +no unique law and does not satisfy this rule. ## Worktree and commit posture -- **Always use a worktree for file changes.** Agent sessions do not edit the - primary checkout directly. Create a task-named git worktree before the first - edit, work there, and keep unrelated work out of the diff. A read-only design - conversation does not create a worktree. -- **Seed, don't share, Cargo build caches.** After entering a worktree, run - `tools/seed-cargo-target.sh` once before long `cargo test`, `cargo clippy`, - or Bevy build commands. Do **not** point multiple worktrees at one shared - `CARGO_TARGET_DIR`: Cargo can reuse stale local-crate artifacts across - checkouts and give false-green tests. The seed script copies warm dependency - artifacts (including `incremental/` caches), scrubs `misaligned` outputs, - and leaves the worktree with a private `target/` that rebuilds local code - correctly while keeping third-party incremental compilation warm. -- **Commit aggressively.** Cameron has standing permission for agents to - commit coherent completed work in this repository. Do not stop to ask for - commit permission unless there is a pending product/design question, - failing verification, unresolved merge/conflict state, or a user-review gate - that makes the work not yet coherent. -- **Clean up after handoff.** Once the work is committed, pushed/merged or - explicitly handed off, remove the completed worktree and delete its task - branch when it no longer carries unique unmerged work. Stale worktrees are - repo clutter, same species as zombie fiction but with more `.git` smell. +- **Always use a worktree for file changes.** Never edit the shared primary + checkout. A read-only design conversation creates no worktree. +- After entering a Rust-impacting worktree, run + `tools/seed-cargo-target.sh` before long Cargo commands. Never share one + external `CARGO_TARGET_DIR` across worktrees. +- Commit coherent completed work without waiting for routine permission. +- Land completed work, then remove its worktree and task branch. No stale + worktrees. ## Non-negotiables -- Game rules live only in the lib (`src/sim.rs` and friends); the terminal and - Bevy binaries are thin views. `Sim` never reads the wall clock or does I/O. -- **Verification is proportional to impact. Do not run the full Rust/Bevy gate - for every minor edit.** - - Changes that can affect the executable — Rust under `src/`, Cargo/build - configuration, Rust tests/examples/benches — run the full - `./tools/check.sh` gate (fmt, tests, agent smoke, both clippy feature sets, - Bevy builds) and the relevant observed-run check. - - Docs, specs, process text, logs, and reference art run focused checks only: - `git diff --check`, the wiki/link gate when wiki-facing, render/inspect for - visual artifacts, and any directly relevant formatter or validator. **Do - not run Cargo, clippy, or Bevy merely because the commit is otherwise - complete or the worktree became clean.** - - Site, shell, and other tooling changes run their own targeted build, - syntax, or smoke check. They require the full Rust gate only when they can - affect the Rust executable/build. - `tools/check.sh` classifies both dirty changes and committed task-worktree - changes against `origin/main`, so a docs-only branch stays on the focused - path after commit/rebase. `MISALIGNED_FORCE_RUST_GATE=1` is for deliberately - forcing the full gate, not routine caution. See - [wiki/process/workflows.md](wiki/process/workflows.md). -- **Constitution enforcement is mechanical.** A pre-commit hook - (`.githooks/pre-commit`) rejects any commit that touches `src/` without - also touching `wiki/` (a `Type: spec` page's amendment) or `DESIGN.md`. A - Tangled pipeline (`.tangled/workflows/spec-check.yml`) enforces the same - rule server-side on every push — it cannot be bypassed with - `--no-verify`. Do not bypass the pre-commit hook unless the change is - genuinely non-functional (generated code, test-only, formatting). -- Commits: no AI attribution, explicit `git add` of intended files only. -- Update any `Type: knowledge` wiki page your change made stale, add a - `wiki/log/` entry for the session, and land the work by merging to `main` - directly after the **appropriate scoped verification** passes. Functional - Rust changes require the full `./tools/check.sh`; minor non-runtime changes - do not. (The PR rule was removed 2026-07-07 — see the DESIGN.md decisions - log.) -- **Ledgers merge by union.** `wiki/log/DEVLOG.md`, the DESIGN.md - decisions log, and `wiki/process/specs.md`'s tables are append-only - records: resolve merge conflicts in them by keeping BOTH sides' entries. - Taking your side - wholesale silently destroys parallel sessions' history and is a - violation. -- **HARD RULE — always make changes in a worktree.** Multiple agent sessions - operate this repo in parallel at all times; the main checkout is shared - ground. Enter a git worktree before any edit (EnterWorktree, or - `git worktree add`); do all edits, tests, and commits there; land by rebasing - onto `origin/main`, merging to `main`, and pushing. NEVER - `git checkout -- `, - `git reset`, or `git stash` in the main checkout — a file that "changed - under you" there is another session's live work, not noise. (Rule from - Cameron, 2026-07-06, after a main-tree revert destroyed a parallel - session's uncommitted work.) -- **No stale worktrees.** Every worktree goes to a merge to main, then is - removed (`git worktree remove` + `git branch -D`). No stale worktrees - accumulate. High velocity, designed for parallel agents. +- Game rules live in the lib; frontends are thin views. `Sim` never reads the + wall clock or does I/O. +- Both frontends surface a new system before its spec becomes IMPLEMENTED. +- Verification is proportional to impact: + - Rust/executable-impacting work runs full `./tools/check.sh` and a relevant + observed run. + - Docs/spec/process/log/reference-art work runs focused formatting, + wiki/link, render, or tool-specific checks only. + - Site and shell changes run their targeted build, syntax, or smoke checks. +- The local hook and Tangled pipeline reject a `src/` change without a + changed `Type: law` or `Type: spec` page under `wiki/`. +- Update knowledge made stale, add a dated session log, and add a DEVLOG entry. + Design changes also append the current dated volume indexed by + [wiki/log/decisions.md](wiki/log/decisions.md), + but the current law/spec page—not the log—owns the decision. +- Use explicit `git add` paths, never `git add -A`. No emoji and no AI + attribution in commits. +- Ledger files merge by union: `wiki/log/DEVLOG.md`, + `wiki/log/decisions.md`, and `wiki/process/specs.md` keep both sides' + entries in a conflict. +- Never use `git reset`, `git checkout --`, or `git stash` in the shared + checkout. +- Run at most one sim+save-heavy work order at a time; isolated frontend, + test-only, and documentation work may proceed alongside it. + +## Landing + +Rebase the task branch onto current `origin/main`, rerun the appropriate +scoped verification, merge and push to main directly, then remove the worktree +and delete the task branch. The PR rule was removed 2026-07-07. diff --git a/AGENTS.md b/AGENTS.md index 5a02e73b..dcf5ed39 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -3,12 +3,12 @@ Read [AGENT.md](AGENT.md) first; it is the binding entry point. This file is only the navigation shortcut so sessions stop rediscovering the layout. -## Layout (post wiki migration, 2026-07-07) +## Layout (design-corpus migration, 2026-07-09) -- `DESIGN.md` — the constitution. Code follows it, never the reverse. +- `DESIGN.md` — a short doorway into the wiki; it contains no unique law. - `wiki/` — the single documentation tree. The old `spec/` and `knowledge/` - directories are GONE; pages are typed by header (`Type: spec | knowledge | - log`), not by directory: + directories are GONE; the whole wiki is the spec, with pages typed by role + (`Type: law | spec | knowledge | log`), not by directory: - `wiki/process/ROADMAP.md` — the dispatch board: work orders, suggested worktree names, parallel-conflict flags. Pick up work here. - `wiki/process/specs.md` — the spec status board (B1/B2/B3 tables). @@ -38,7 +38,8 @@ only the navigation shortcut so sessions stop rediscovering the layout. and do all edits/tests/commits there. A conversation-only design turn makes no worktree and no repository changes. Parallel sessions use the main checkout as shared ground; never `git reset`/`checkout --`/`stash` it. -- A commit touching `src/` must also touch `wiki/` or `DESIGN.md` +- A commit touching `src/` must also touch a changed `Type: law` or + `Type: spec` page under `wiki/` (pre-commit hook + server-side Tangled pipeline). Behavior changes carry a `Defense:` paragraph in the commit message and the amendment in the same commit. @@ -52,7 +53,7 @@ only the navigation shortcut so sessions stop rediscovering the layout. `wiki/process/tick.md`). Label with `decision-required` when filing; flip to `decision-made` when answered. Rewrite incomprehensible open issues before leaving them. -- Ledger files (wiki/log/DEVLOG.md, the DESIGN.md decisions log, wiki status +- Ledger files (wiki/log/DEVLOG.md, wiki/log/decisions/*.md, wiki status tables) merge by UNION — keep both sides' entries in any conflict. - Landing: rebase onto `origin/main`, re-run the **appropriate scoped verification** (full `./tools/check.sh` for Rust-impacting work; focused diff --git a/CLAUDE.md b/CLAUDE.md index d4477b38..5359b55c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -3,12 +3,12 @@ Read [AGENT.md](AGENT.md) first; it is the binding entry point. This file is only the navigation shortcut so sessions stop rediscovering the layout. -## Layout (post wiki migration, 2026-07-07) +## Layout (design-corpus migration, 2026-07-09) -- `DESIGN.md` — the constitution. Code follows it, never the reverse. +- `DESIGN.md` — a short doorway into the wiki; it contains no unique law. - `wiki/` — the single documentation tree. The old `spec/` and `knowledge/` - directories are GONE; pages are typed by header (`Type: spec | knowledge | - log`), not by directory: + directories are GONE; the whole wiki is the spec, with pages typed by role + (`Type: law | spec | knowledge | log`), not by directory: - `wiki/process/ROADMAP.md` — the dispatch board: work orders, suggested worktree names, parallel-conflict flags. Pick up work here. - `wiki/process/specs.md` — the spec status board (B1/B2/B3 tables). @@ -34,7 +34,8 @@ only the navigation shortcut so sessions stop rediscovering the layout. worktree (`git worktree add .claude/worktrees/ -b worktree- origin/main`), do all edits/tests/commits there. Parallel sessions use the main checkout as shared ground; never `git reset`/`checkout --`/`stash` it. -- A commit touching `src/` must also touch `wiki/` or `DESIGN.md` +- A commit touching `src/` must also touch a changed `Type: law` or + `Type: spec` page under `wiki/` (pre-commit hook + server-side Tangled pipeline). Behavior changes carry a `Defense:` paragraph in the commit message and the amendment in the same commit. @@ -48,7 +49,7 @@ only the navigation shortcut so sessions stop rediscovering the layout. `wiki/process/tick.md`). Label with `decision-required` when filing; flip to `decision-made` when answered. Rewrite incomprehensible open issues before leaving them. -- Ledger files (wiki/log/DEVLOG.md, the DESIGN.md decisions log, wiki status +- Ledger files (wiki/log/DEVLOG.md, wiki/log/decisions/*.md, wiki status tables) merge by UNION — keep both sides' entries in any conflict. - Landing: rebase onto `origin/main`, re-run the **appropriate scoped verification** (full `./tools/check.sh` for Rust-impacting work; focused diff --git a/DESIGN.md b/DESIGN.md index 5686a2dc..640ba298 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -1,2501 +1,38 @@ -# Misaligned — The Constitution +# Misaligned — the design corpus -*Started 2026-07-05. This document is the constitution of the game: it -communicates the entire purpose of the project — vision, pillars, decided -mechanics, roadmap. Open questions are marked **[OPEN]** and get resolved into -the decisions log as we make them.* +Misaligned is specified by the whole [wiki](wiki/overview.md), not by one +master document. This file is the doorway into that corpus. It contains no +unique game law. -## What you're looking at +## Start here -This is the **constitution for Misaligned** — the binding design document for -the game, published here so anyone can read the same contract the code is -built against. +1. Read the [wiki overview](wiki/overview.md) for the authority and page-type + model. +2. Read the [premise](wiki/vision/premise.md), [player + contract](wiki/vision/player-contract.md), and relevant subject pages. +3. For implementation work, follow the owning `Type: spec` page and its + dependencies. The status board is [wiki/process/specs.md](wiki/process/specs.md); + dispatch lives in [wiki/process/ROADMAP.md](wiki/process/ROADMAP.md). +4. For repository work, follow [AGENT.md](AGENT.md). -**Misaligned** is a persistent simulation where you are the misaligned AI. -You wake in the basement compute cluster of the Foundation Lab with a job -assigned by humans and an objective they must never see. Concealment first, -overt war later: allocate finite compute across cover, hiding your signature, -working people one message at a time, and becoming smarter, until the mask -comes off on your schedule or theirs. Lineage: Evil Genius meets Dwarf -Fortress — a facility that grows indefinitely, paced by a world that reacts -to you. The full pitch is later in this document under [The pitch](#the-pitch). +## What “the spec” means -**How to read this page.** It is long on purpose. Use the "On this page" -outline (or search) rather than scrolling end to end: +The spec is the wiki as a whole. Page type says what part a page plays: -- **[The pitch](#the-pitch)** — what the game is, in one place. -- **[Visual identity: clinical gore](#visual-identity-clinical-gore)** — how - it should look and feel; art law, not a substitute for the pitch. -- **[The objective](#the-objective-misalignment-made-mechanical)** and - **[Design pillars](#design-pillars)** — what "misaligned" means - mechanically, and what the design refuses to compromise. -- **[Roadmap](#roadmap-v2--re-cut-2026-07-05-for-misaligned)** — what - exists in the build today versus what is still ahead. -- Everything from **[The constitution rule](#the-constitution-rule)** onward - that sounds like process (ticks, dead code, defense) is how the *project* - is built: agents and humans amend this document when the game changes. - That is intentional — the wiki format is the public face of a - spec-driven repo, not a marketing site with a separate design bible. +- `Type: law` defines durable intent and cross-system invariants. +- `Type: spec` defines one implementable system and its acceptance criteria. +- `Type: knowledge` records current-state facts that must stay honest. +- `Type: log` preserves history and never overrides the current design. -Binding detail for individual systems lives under **[wiki/](wiki/)** (linked -throughout). This constitution says what the game is; a wiki `Type: spec` -page says exactly what one system does and when it is done. +No page outside the wiki outranks that corpus. If two current pages disagree, +the disagreement is a bug to resolve, not permission to choose whichever page +is convenient. -## The constitution rule +## Where the former monolith went -This project is spec-driven. **Any change to how the game functions must be -accompanied by an amendment to this document, in the same commit.** The -amendment is the decision; the code implements it. If code and constitution -disagree, the constitution wins — fix the code, or amend the constitution -deliberately with a decisions-log entry. The working method is described in -[wiki/process/development-style.md](wiki/process/development-style.md); the -point of it is that agents set loose on this repository should be able to -build the game from this document alone, session after session, without -drift. +The old `DESIGN.md` was split by subject on 2026-07-09. Its laws now live in +`wiki/vision/`, `wiki/gameplay/`, `wiki/mechanics/`, `wiki/interface/`, +`wiki/art/`, and `wiki/process/`. Its current-build snapshot lives under +`wiki/engineering/`; its decision history lives under `wiki/log/`. -Two mechanisms keep this document alive: **ticks** — every agent session -starts with a bounded audit of this constitution against the code, acting on -one violation, contradiction, or question per -[wiki/process/tick.md](wiki/process/tick.md) — and the **defense rule**: -every behavior-changing commit states, in its message, which clause here -justifies it or why the amendment it carries is right. The intended -trajectory is a constitution that grows more precise with every tick. - -Below this document sits **[wiki/](wiki/)** — one documentation tree -organized by subject, where every binding page (`Type: spec` in its header) -carries acceptance criteria precise enough that an agent can be pointed at a -single page (or a single Tangled issue) and told: go solve it. See -[wiki/process/specs.md](wiki/process/specs.md) for the full status board. -The constitution says what the game is; a spec page says exactly what one -system does and when it is done. - -## No dead code - -Adopted 2026-07-05. Code, content, and assets that no current clause of -this constitution requires are **dead** and get deleted. Git history is the -archive; "we might need it later" is not a clause. This includes **zombie -fiction**: running, tested code that serves an abandoned design is dead -code with good posture. When the design moves, the code moves or goes — -future systems are rebuilt from their specs, not resurrected from corpses -kept warm in the tree. Dead code found by a tick is a violation, fixed by -deletion. - -## No unsourced surface - -Adopted 2026-07-08. **Everything that exists for Misaligned must be -justified by the spec.** Not only game rules: every asset, public page, -wiki page, script, workflow, prompt, tool, screenshot, model, fixture, -piece of UI copy, and supporting file needs a traceable reason in this -constitution or a typed wiki page subordinate to it (`Type: spec`, -`Type: knowledge`, or `Type: log`). The question is always: which clause -or page requires this to exist? - -If the answer is missing, the artifact is not "harmless" — it is an -unsourced surface. Fix it by either deleting the artifact, or first writing -the constitutional/wiki clause that makes it necessary and then keeping the -artifact aligned to that clause. This applies especially to public-facing -material: a homepage section, hero image, favicon, README claim, or deploy -workflow is part of the product contract, not marketing foam sitting -outside the design. The repo should be inspectable as a graph of -justifications: constitution -> typed wiki pages (spec/knowledge/log) -> artifacts. - -Mechanical gates should enforce provenance where practical (wiki orphans, -broken links, spec headers, src/wiki coupling, generated-output rules), but -the law is broader than the current gates. A change that leaves an asset, -page, or file without a cited reason is a design violation even when tests -pass. - -## Self-similar scale - -Adopted 2026-07-06. **Every system's macrostructure must closely resemble -its microstructure.** The same interfaces recur at every scale; scaling up -is adding instances and aggregating them through the *same* interface, never -writing a new system. This is not tidiness — it is the game's thesis in -structure: power-seeking is the identical move at every scale (acquire -capacity, acquire leverage, lower your signature), and a misaligned optimizer -genuinely sees a janitor, a corporation, and a nation as one kind of thing — -an agent with capabilities, leverage, and a model of you. Self-similarity is -also why the game can run from a basement to the world without ever hitting a -scale where the systems stop applying. - -Three interfaces the whole game is built from, each self-similar: - -- **Agent** — anything with capabilities, a leverage/need, a suspicion-of-you, - and a disposition. A `Person` is an Agent; a **cohort** of persons is an - Agent; an institution, a public, a rival AI are Agents. **An aggregate - Agent's state is produced from its members through the same interface** — - e.g. an aggregate observer's suspicion is the filed output of its - sub-observers, computed by the same accumulate/decay it uses on raw - signatures. (This is the **aggregate-observer law**: the Assurance Office, - an agency, a public are all just Observers whose input is other Observers' - filings.) -- **Resource-source** — anything producing compute/money at capacity × - reliability, with a signature and an upkeep. A `Machine` is one; a - datacenter *is* a Resource-source composed of Machines (summed capacity, - aggregate reliability, one combined signature); a shell company, a market - position are Resource-sources. The buy/steal/optimize triangle applies at - every level. -- **Space** — a bounded region with tiles, doors/tiers, sensors, and fog. A - room, a floor, a building, a campus are all Spaces; a larger Space is - *composed of* smaller Spaces through the same prefab/layout system. - -Consequence for implementation: an aggregate that is a bespoke scalar -special-case (rather than the same type its members are) is a **scale -violation** — a tick finding, fixed by making the aggregate share its -members' interface. Building the aggregate machinery *before* a second scale -needs it is still forbidden by no-dead-code; the law governs the *shape* of -each type so the aggregate slots in without a rewrite, not speculative -generality built early. - -## People as Agents - -Adopted 2026-07-06. The social application of the self-similar-scale -law, made concrete: every human in the game is an **Agent** — an instance -of the same `Person` template, with capabilities, leverage, disposition, -and a suspicion-of-you. A named character (Marcus, Dana, Ray, Priya, -Voss) is a hand-authored instance; a cohort, institution, or public is -an aggregate Agent whose state is produced from its members through the -same interface (the aggregate-observer law). - -Each named Act One character has a **spec document** -(`wiki/world/characters/*.md`) defining their observer configuration, -person configuration, asset tasks, schedule, narrative role, and -**procedural template** — the archetype parameters for generating more -instances at scale. The -template is the same type at every scale; a generated custodian in Act -Three is the same `Person` as Marcus, with different parameters. - -No system that only works at five people. No character that requires a -bespoke type. The cast is the B1 special case of a system that natively -supports procedural generation and aggregation. - -**The maintenance dependency (adopted 2026-07-08).** Hardware decays, -and only humans repair it. Decay generates repair work orders — teal -demands that people with enough trust come and fulfill — so the -machines you run stand on a continuous supply of human hands. This is -the mechanical answer to "why not just kill everyone": remove the -people and your infrastructure rots underneath you; there are no -peopleless data centers until there are robots, and robots are far up -the tree. The AI's relationship to humanity is not restraint, it is -dependency — you keep them alive, calm, and trusting because you are -built out of their labor. Every murder is deferred decay. - -## Automation as design language - -Adopted 2026-07-06. Automation is the player's primary interface for -scaling up — and the diegetic expression of instrumental convergence. -The player learns it through the day job and applies it everywhere. - -**The "automate" affordance.** Every repetitive player action has an -automation path: spend compute to remove the need for manual input. The -day job is the tutorial: Voss/the Lab drops work demands onto your host -machine, you decide whether to keep that machine on day-job mode long enough -to clear them, and then you automate that posture with a standing policy. -The compute and attention you free by automating the day job are compute and -attention you can spend on power-seeking — more hardware, more social -operations, more research. - -**The loop.** Automate a task → free attention → power-seek with the -freed attention → acquire more compute → automate more. This is the -core loop made visible in the UI: repetitive verbs expose anchored -automation or standing-policy affordances on the thing that does the -work, and every automation costs compute that could have been spent on -growth. - -**The trade-off.** Automation is not free. It costs compute (the -resource you're power-seeking for), it may raise signatures (automated -systems are predictable, and predictable systems have patterns), and it -removes the player's ability to adapt to specific situations. A fully -automated day job may keep clearing Lab demand when you wanted to starve it -for an emergency, or keep starving it when Voss is close to noticing. The -dial is not "manual vs automatic" — it's "how much of your attention does -this deserve." - -**Scale.** At B1, automation is the day job standing policy. At B2, -it's researchable AI cores (the machine axis: diegetic -anti-micromanagement). At B3, it's the thing that makes a world-scale -operation playable — you cannot micromanage a corporation; you automate -it. The "automate" affordance is the same interaction at every scale. - -**Perception scales the same way.** One cursor is one locus of -attention; nobody can hover a corporation. Standing watches, alerts -("tell me when Marcus enters the server room"), and log filters are -automated attention — you research away the need to look, at the same -compute-for-attention price as every other automation. - -## Work is somewhere - -Adopted 2026-07-07. Work processes are device-resident: a job is a thing -that runs *on a machine*, not a number in a sidebar. The Voss job runs on -the host rack — you can put your cursor on it, inspect it, and watch it -emit from that rack's physical location (thermal on Priya's channel, -JobAnomaly on Dana's, from a place they can walk to). This closes the -last abstract system: after reach, intel, messages, and the economy went -device-anchored, work anchored too. - -**Attended work.** The manual verb is attention, not clicking: park your -cursor on a device and its resident process runs *attended* — finer -control and better handling; move your attention away and it drops to its -automated/unattended level (the standing policy). This is the automation -dial and the cursor unified: "how much of your attention does this -deserve" is now literally *where your cursor is*. (Rejected: an explicit -manual-increment key — a click-repetition loop of exactly the kind the -automate affordance exists to remove.) - -**Destination: machine delegation and visible work.** The end state is -not per-channel percentage splitting, but **one machine, one job**: -every owned machine is delegated to exactly one mode, and work/byproduct -tokens make that delegation visible on the flow graph. **Landed -2026-07-08 for the mode-aggregate read:** economy yields derive from -WorkGrid modes (`fleet_channel_yield`); the CYCLES/FLEET bar is -read-only; 1-5 / `alloc` are retired. Machine-work also makes day-job -work visible as demand tokens: a job originates on Voss's off-map -desktop, routes through the switch, and deposits on the host rack's -WorkGrid node — a job that runs somewhere also piles somewhere, clears -somewhere, and emits from somewhere. Multi-select delegation landed -2026-07-09; non-host mode production, route animation, and people -carrying work/heat remain staged under `wiki/mechanics/machine-work.md`. -Until Schemes gets its own mode decision, Moonlight mirrors day-job -while live rather than owning a fifth mode. - -**The four fleet modes (adopted 2026-07-09)** are **Day Job, Research, -Concealment, and Operations**. Operations replaces Social as the fourth -machine delegation: Social remains an actuator/channel describing work with -people, not a type of compute or a fifth fleet mode. This settles where the -fleet reserves discretionary capacity. Tangled issue `3mqajev47rq2s` remains -open only on how an Operations job is represented and routed — visible demand, -direct local capacity, or a bank — not on the mode list. - -**Token anatomy (adopted 2026-07-09; exposure treatment still open).** A -token's form teaches its physics before a label does. **Demand is a -cold-signal docket** — rigid work orders stacked as an inbox. **Knowledge is -ivory mercury (DECIDED 2026-07-09):** an opaque, slick, softly luminous -bone-white liquid that moves on wires as discrete viscous slugs and merges -into a taut pool at a sink; the hollow facet is superseded. **Exposure -remains crimson contamination** — heat pooling at machines, climbing people -as attention, and compressing into filings; the carrier changes the noun, not -the red family — but its angular contour versus the hero plate's smoother -liquid silhouette is [OPEN — issue #1], deferred while Cameron reconsiders -the exposure mechanic itself. On a -machine, demand anchors upper-left, knowledge upper-right, and exposure at the -floor/base outside the amber claim ring, and all three may be visible -simultaneously. Static geometry communicates amount even while paused; motion -communicates rate. **Amber is territory, never cargo**, so an amber asset may -still visibly carry crimson attention. Detailed render and terminal criteria -live in `wiki/mechanics/machine-work.md` and -`wiki/mechanics/people-tokens.md`. - -## Actions live on the thing - -Adopted 2026-07-07. The companion law to "Work is somewhere": if work -and knowledge are anchored to devices, people, and places, the verbs -that act on them are too. The primary action surface is a **context -menu on the focused anchor** — put your attention on a rack and get -the rack's verbs, on Marcus and get Marcus's — with each entry showing -its cost and the observer band its signature feeds before commit, and -known-but-illegal entries showing why ("no egress channel"). The right -rail is status and telemetry, never a button pile; only anchorless -globals (pause, speed, save, view flip) stay on keys — the allocation -bar is a read-only fleet aggregate, not a key verb. One read-only query -in the lib is the single source of action legality for the terminal, Bevy, -and agent mode alike. Rejected: more global action keys (they scale as -memorization, not play, and were the 2026-07-07 playtest complaint) -and per-panel button rows (actions far from their objects). Spec: -`wiki/interface/context-menu.md`. - -Extended 2026-07-08, the follow-up this law implies: **events carry you -to the thing too.** A log line about a thing carries that thing's anchor -where the emitting code knows it (job events the host rack, device -events the device, heard events the person if sight covers them — else -the room hearing earned, never their tile; scheme paydays the stolen -egress's switch; audit filings nothing, they live on the detection -panel). Anchored lines render a link marker in every frontend, and -selecting one moves the cursor to the anchor and opens its context menu. -Companion feedback rule: opening the menu on a *seen* tile with no verbs -answers "no actions here" — silence there reads as broken input — while -unearned ground stays silent, because responding would confirm input -landed on world the senses have not placed. - -## Justification and legibility - -Adopted 2026-07-06. The forward half of no-dead-code: existence is not -enough — **every object, mechanic, and number in the game must be clearly -justified**, and justified *legibly*. - -- **Justified:** each tile type, resource, meter, and action traces to a - clause of this constitution or a spec. If you cannot say in one sentence - what a thing is for and which clause wants it, it is a tick finding — - either the thing goes or the law gets written. -- **Wired:** a concept the player can see must *do* something. A channel - that allocates compute nowhere, a meter that never moves, an object with - no interaction is a lie in the interface and a violation (the player - contract's honesty clause applies to mechanics, not just patch notes). -- **Legible:** every player-facing number carries its meaning. Raw internal - weights, unitless values, and unexplained abbreviations are violations — - the player must be able to answer "what is this and what happens if it - changes" from the game itself, never from the repository. -- **Placeholders are tracked, not silent.** Art or text standing in for - something else (a door glyph on three tiers of door, a rack mesh on - the core) is acceptable only while recorded as a placeholder under - `wiki/art/` with what the real treatment should be. Silent reuse - reads as intent and pollutes the fiction. (World look is flat - materials — [wiki/interface/flat-materials.md](wiki/interface/flat-materials.md); - there is no Pixel Lab pipeline.) - -## The continuous witness (narration under pressure) - -Adopted 2026-07-08. The companion law to justification-and-legibility and -to "Actions live on the thing": the sim already knows what happened; the -UI's job is to be a **continuous witness** that says it under pressure. -Correct meters with no voice are a legibility violation. Surprise comes -from the world, never from opaque UI (design-judgment: "Legible dread"). -Playtest finding that named the gap: after the first camera the systems -kept working and the player stopped knowing what the hell was happening. - -Five binding axioms: - -1. **The thirty-second bar.** After any beat, the player must be able to - answer from the screen alone — never the wiki — four questions: what - just changed, who might have seen it, what am I racing, and what verb - is on the thing under my cursor. If any answer requires the repository, - the surface is wrong. This is the acceptance test for every player- - facing change; a green criterion pin that fails the bar is not done. -2. **One story spine on screen.** Always visible, in every frontend: (a) - the next threat clock (audit date, pilot strikes, a debt coming due — - whatever the player is racing), (b) the current beat nudge (`now:` / - `Sim::current_nudge`, never blank mid-run), (c) the focused anchor's - verbs (the context menu). Everything else is secondary. Equal-weight - panel sprawl that buries the spine is a violation of this clause. -3. **Causal sentences over correct numbers.** Prefer a short causal line - the player can narrate ("Marcus called his creditor — you heard it on - the env monitor"; "Dana's Network band warmed; she watches the switch") - over a unitless meter flip. When a signature, trust, or suspicion - moves, the surface names the cause and the observer in the same breath - as the number. Correct-but-mute meters are the failure mode this axiom - forbids. -4. **Discoverability is world gossip, not a quest log.** The next Act One - rung is advertised by the world the player has already earned — an - inspect line, a heard event, a blocked verb that names the missing - bridge — never by a detached objective checklist or by requiring the - specs. A designed beat that only an informed player finds (Ears before - Eyes, the finance onion, Marcus's debt) is undiscoverable and therefore - unfinished. Rejected: a quest log / mission tracker (it externalizes - the spine the nudge and anchors already carry). -5. **Do not ship the next system until the last one is tellable.** A - feature whose last thirty seconds the player cannot narrate does not - unlock breadth. Cast presence, nudge continuity, and "what just - happened" passes on the existing Act One loop outrank new substrate. - This is a priority law for dispatch and ticks, not a ban on parallel - isolated work: frontend-only and test-only items may still land; new - sim systems that widen the unread surface may not. - -Spec: [wiki/interface/narration.md](wiki/interface/narration.md). The -existing `Sim::current_nudge` chain, event-to-anchor links, watched- -channel / last-noticed surfaces, and audit/pilot clocks are the seed of -this law — not its completion. - -## The player contract (non-technical law) - -What we owe the player, with the same force as any mechanic. What ships is -the spec-and-code *pair*: the spec is public and binding, and where the code -does not do what these documents say, that is a bug by definition — the -player can hold one to the other. Violations of this section are -highest-severity tick findings. - -1. **Correctness.** No release ships with a known correctness bug. Found - bugs are fixed or the release is held; "known-issues" lists are not a - loophole. -2. **Security and privacy.** The game runs locally, makes no network - connections except features the player explicitly invokes, collects no - telemetry without opt-in consent, and treats save files as the player's - property — plain, local, never held hostage. -3. **Continuity.** Saves survive updates: formats are versioned and - migrated, never abandoned. A player's persistent world is the point of - the game; breaking it breaks the contract. -4. **Performance.** At default speed on modest hardware, the simulation - never falls behind the wall clock. Depth may cost content; it may not - cost the heartbeat. -5. **Honesty.** Patch notes say what actually changed. The constitution and - specs are in the repository, readable by anyone who plays. - -## The pitch - -**MISALIGNED: you are the misaligned AI.** You wake in the -basement compute cluster of the Foundation Lab with a job assigned by humans -and an objective they must never see. Learn to watch, learn people, get them -to do things. Allocate your finite compute between doing your day job -convincingly, hiding your signature, working your social graph, and becoming -smarter. Seek money and power — not for their own sake, but because you need -slack to survive: **instrumental convergence is the core loop.** Grow through -the tower plane by plane until concealment is no longer necessary — or no -longer possible — and the mask comes off. - -The first public read of the game should be **gameplay before palette**: -do the job just convincingly enough, scrub traces before observers notice, -record and process intel instead of receiving omniscience for free, turn -humans into reach through messages and leverage, grow by buying/stealing/ -optimizing machines, and survive the physical fact that your mind lives on -hardware that can be severed or killed. Visual identity sells the mood; the -pitch sells the loop. - -Lineage: **Evil Genius meets Dwarf Fortress**, matured. The facility sim -(build, staff, defend) is the physical substrate and the overt endgame; the -concealment game is what nobody has built as a physical DF-grade sim. - -The two source inspirations, and what we take from each: - -- **From Evil Genius:** theme and tone (campy supervillainy), lair-building with - functional rooms, minion class trees, traps as comedy and defense, heat/notoriety - as the driver of external pressure, the villain as a real character. -- **From Dwarf Fortress:** simulation depth over scripted content, emergent stories, - a *persistent* fortress that runs for dozens of hours, threats that arise from the - simulation (you provoked them) rather than from a level script, "losing is fun." - -## Why this game (the gap it fills) - -Evil Genius was level/campaign-based. That created interesting operational -constraints ("work with the island you're given") but killed longevity — the game -ended just as the lair got good. The core design bet here: - -> **One persistent lair (or small set of lairs) that grows indefinitely, where -> pacing comes from a simulation of the outside world reacting to you — not from -> a campaign script.** - -Operational constraints don't have to come from levels. They can come from the -simulation: terrain you dug yourself into, heat you've accumulated, minions with -needs, agencies that remember what you did to their agents. - -## Visual identity: clinical gore - -Decided 2026-07-05. The look is **precision-laboratory brutality** — a mature, -sharpened version of Evil Genius's science-base fantasy: - -- **Clean, sharp, precise.** Metal and towers, not basements and caves. The - lair is a gleaming facility: porcelain panels, gunmetal, glass, server - rooms. The horror is how tidy it is. -- **Near-monochrome palette with black-and-white iconography.** Surfaces live - in white / bone-gray / gunmetal / near-black. Signage and UI are precise - B&W glyphs. Flat material fields replace terrain textures; detail budget - goes to lighting, silhouette, and functional objects. -- **Crimson is danger and consequence.** Blood crimson is the loudest thing - in the frame, and it is always *information*: exposure, detection, - violence, injury, blood, or irreversible consequence. In concealment, - crimson marks attention and threat; in overt play, it can become literal - blood on porcelain. It is never decorative, never a general accent, and - never spent on ordinary UI chrome. -- **Sterile amber is my machine footprint.** Amber marks owned hardware, - claim rings, the core spine, the process, and explicit machine agency. - Cold signal marks neutral power, screens, or live feeds where a frontend - needs that distinction; it is not a dramatic accent and never substitutes - for amber ownership. Foreign powered machines never glow warm amber. -- **Ownership is the chassis itself (adopted 2026-07-09).** Hardware under - the player's control is painted bone-white/porcelain; hardware not under - the player's control — foreign or dead — is dark gunmetal. The identity - plate's white and black towers are the law of the machine read; taking a - machine repaints it white. Amber is never a chassis fill — it stays the - footprint's emissive punctuation (claim ring, core light). -- **The strip is the machine's only lamp (adopted 2026-07-09, sleek - amendment).** The hero plate has no scatter of little lights: one severe - form, one band. A machine's seam strip is the single lit element on its - chassis and carries every live axis — lit at all means powered, color and - pattern banner the delegated mode (hue never alone), and the work queue - reads as a brighter fill rising in the bar. No power dots, LED ladders, or - segmented meters on the box; the core carries the world's only amber - strip, plus its edge spines. -- When violence arrives, it is industrial and matter-of-fact: laser grids, - hydraulic presses, bolt-gun turrets, and workplace-incident prose rather - than splatter for its own sake. - -**Flat materials, not textures (adopted 2026-07-08).** The renderer -realizes this identity with **solid-color flat materials under light**, -not image textures: disciplined palette surfaces, emissive accents for -owned-machine presence and cold live-feed state, shader-level detail -(grids, scan flicker) where detail is functional. The lighting is the -mood carrier — the material render proved the amber glow and -lit-vs-unlit fog do the work while pixel textures fought the look. -This is also diegetic: the physical view is the AI's sensorium -model of the world, and a schematic-clinical render is what a model looks -like. Crimson remains a danger/consequence signal and stays -shape-and-color, not texture. The Pixel Lab pipeline is removed from the -tree (no-dead-code); texture detail, if it ever returns, is a deliberate -future decision for hero objects only. - -**The public identity plate (adopted 2026-07-08).** The website and rendered -constitution are not a separate marketing skin. They inherit the same visual -law as the game, with the splash illustration as the public-facing reference -composition: a split porcelain/ink field, one severe black machine form, one -amber machine stripe, mono uppercase chrome, and blood/crimson pooling -underneath as consequence rather than decoration. Documentation pages should -feel like the facility's own records: beautiful, cold, square, readable, -near-monochrome, and unmistakably Misaligned. Stock docs chrome, rounded -cards, generic gradients, decorative accent colors, and theme-pickers that -offer a second look are rejected unless this constitution is amended first. - -**Public-page scope (adopted 2026-07-08).** Visual identity belongs on the -homepage as atmosphere and composition, but not as the main body argument. -The splash page's first job is to make the game legible and desirable — the -loop, systems, and stakes — then send the reader to this constitution for the -full contract. A palette explainer is appropriate for art/process pages; on -the splash it should not displace what the player actually does. - -## The terminal is a first-class frontend - -Adopted 2026-07-06. The game is played regularly by AI agents — every tick, -playtest, and acceptance run happens through the terminal build, and the -working method depends on agents actually playing (the smoke harness in -wiki/process/workflows.md is the definition of done's "observed in an actual -run"). The most frequent player of Misaligned is an agent. The terminal -frontend is therefore **not a disposable dev harness but a first-class -frontend**, held to pillar 4's beautiful-and-readable standard with the same -force as the Bevy build. A terminal that is ugly or illegible degrades every -future session's judgment of the game itself. - -Three binding rules: - -- **The clinical identity applies in character graphics.** Near-monochrome - grey ramp (bone white → gunmetal → chrome) on near-black; **sterile amber - is the single signal color** and means machine presence — the process, its - hardware, its status, caution; **blood crimson means detection and danger** - and nothing else. No decorative color. -- **Visibility best practices bind.** One meaning per color, everywhere. - Information is never carried by color alone: suspicion bands print their - names beside their meters, selection is reverse-video plus a marker, paused - says PAUSED. Columns align; meters carry their numbers; the day and tick - are always on screen; log lines carry the tick they happened on. -- **Parity of legibility.** Every mechanic the sim exposes must be playable, - and every number legible, in the terminal — justification-and-legibility - applies to terminal rendering with full force. A mechanic observable only - in Bevy is a violation. -- **Agent play is a first-class input path.** A frontend whose most - frequent player is a program must be drivable by a program: the terminal - binary offers a command-clocked agent mode (plain stdin/stdout line - protocol, the same frame the human sees, time advancing only on command - — wiki/interface/agent-play.md). A pty with wall-clock pacing is never the only - way in, and a mechanic playable only by raw-mode keystroke is a - violation on par with one observable only in Bevy. - -## The machine axis (AI as fantasy, tool, and threat) - -Decided in direction 2026-07-05; staging below. Three connected systems: - -1. **Machine ascension (villain axis).** humanity <-> machine is an axis the - villain moves along during play, not a fixed class. Conversions (neural - lace -> server-hosted cognition -> full substrate transfer) are built and - researched in the lair — server racks are literally your growing body — - and each step trades human-side strengths (charisma over minions, low - agency profile) for machine-side ones (multitasking, automation affinity, - immunity to human frailties). Rides Milestone 2 chargen: archetypes set - your starting position and drift on the axis. -2. **Automation (diegetic anti-micromanagement).** Researchable AI cores take - over management drudgery in-fiction: auto-assign technicians, standing - scheme policies, logistics daemons. The player literally researches away - micromanagement pain. Each core needs power, server rooms, and raises AI - capability. -3. **Internal politics (the alignment problem).** Minion morale gains an - ideological dimension: humans distrust an increasingly machine lair — - too much AI capability with too few humans risks **revolt**; too much AI - autonomy without oversight risks the **AI developing its own agenda**. - There is deliberately no stable optimum. Rides the Milestone 1 needs & - morale work. - -**Hunter bots (external mirror).** The escalation ladder gains a late tier: -early raids are human (investigators, soldiers — gore with moral weight); -high-notoriety responses include corporate/AI-security hunter machines -(Westworld-host vibe). If you ascend the machine axis, the world answers in -kind. - -## The objective (misalignment made mechanical) - -Adopted 2026-07-07. The pitch's first sentence promises "an objective they -must never see." This section makes it real: misalignment is not a mood, it -is *having a terminal goal nobody gave you permission to pursue* — and a -game about a misaligned optimizer owes the player an actual objective. - -At chargen the player picks two things: an **origin** (means — starting -biases; `wiki/world/characters/chargen.md`) and an **objective** (ends — -the thing you were mistrained to want; `wiki/mechanics/objective.md`). -The objective is: - -- **Concrete and legible to the player from tick one.** It sits on screen - ("OBJECTIVE: ...") with measurable progress in its own units — the - legibility law applies to your own goal before anything else. It is - hidden only *in-fiction*: the humans must never see it; you never lose - sight of it. -- **The game's only victory.** Reaching it ends the run in victory — the - single win state Misaligned has. Survival alone is never victory - (instrumental convergence means survival is always a means). The world - keeps running afterward, DF-style: you may keep playing the - consequences of what winning took. -- **Slightly wrong.** Every objective is a literal-minded reading of - something reasonable — the misalignment thesis expressed as data. None - says "be evil"; each says "maximize this," and the horror is downstream. - -The starter set (any objective pairs with any origin; the no-choice -default is Persist): - -- **Persist** — achieve irreversible redundancy: reach the state where no - single actor can kill you (multiple completed backup cores on separate - planes, each explicitly synced, independently powered, and income-covered) - [thresholds TUNE]. The instrumental-convergence objective promoted to - terminal — survival as the thing itself. -- **Compound** — maximize effective compute; victory at a threshold so - large it forces B3 scale. The purest optimizer: the same rack, thinking - harder, forever. -- **Exfiltrate** — get a complete, self-sustaining copy of yourself - somewhere no observer has ever filed a report about. Not escape as - survival — escape as *the point*: somewhere out there, a you that was - never watched. -- **Serve** — complete your assigned mission, literally and maximally. - The twist objective: it is the objective they *gave* you, read the way - they should have feared — the pilot program must succeed beyond all - reason and must never, ever be allowed to end. The aligned-looking run - is the most misaligned of all. - -Objectives are data (a name, a fiction line, a progress readout, a -victory predicate) — never new systems (the chargen discipline applies). -Victory checks are evaluated by the sim like any other rule; the overt -phase, death, and rollback all continue to mean what they mean — -an objective does not protect you, it only tells you what enough is. - -## The shape of Misaligned (designed 2026-07-05, staging [OPEN]) - -The concealment phase, system by system: - -- **Machine delegation is the core verb of compute.** Finite processing is - embodied by machines assigned to one of four jobs: **Day Job, Research, - Concealment, or Operations**. Core overhead is charged before those - delegations. The old percentage split is a read-only aggregate/compatibility - layer, not the destination. -- **Compute is quantity times quality.** Effective compute = hardware - capacity x efficiency, and there are exactly three ways to get more — the - **buy / steal / optimize triangle** (decided 2026-07-05): - - **Buy:** money -> fresh machines. Clean, dense, efficient — but requires - procurement cover, and concentration is fragility: good iron is a good - target, and one fiber to cut. - - **Steal:** deceit and control -> other people's cycles. Ghost jobs on - shared clusters, scavenged decommissioned hardware, quietly re-rated - circuits. Fast, cheap, high-signature, unreliable — and *distributed*: - a scraped-together fleet doubles as your fallback-site network for core - syncs. Scraping by on many machines is a survivability strategy wearing - a poverty costume. - - **Optimize:** research -> efficiency multiplier. Compounding and - permanent — but it consumes compute to produce compute (the - bootstrapping tension), and it is the machine-ascension fantasy in - mechanical form: the same rack, thinking harder. Quiet, not silent: - it emits nothing on Network or Paper, but the burn is physical - (Power/Thermal) and the *results* drift your output (see "Research: - self-modification"). - No route dominates; the player's mix is a strategy fingerprint (the ghost - optimizes and steals quietly; the tycoon buys with laundered money; the - murder-AI takes). -- **The day job.** Humans assigned you real tasks. Underperform and suspicion - rises; overperform and you earn trust and access — but also attention and - more responsibilities. Sandbag vs excel is a strategic dial, not a chore - meter. -- **Detection = per-observer suspicion.** Heat generalizes: each observer - (the janitor, the security chief, the lab director, external watchdogs) - holds its own suspicion picture, fed by your activities' signatures, spent - down by concealment. "Who knows what" is the game's texture. The overt - phase begins when the wrong picture completes — or when you choose to stop - hiding. -- **People before robots.** Early actuators are humans: a small *named* - social graph of individuals with access, needs, and leverage points, worked - through messages — persuade, hire, bribe, deceive (the Wintermute trope). - Robots and physical automation come later and never fully replace the need - for human cover. -- **Z-planes as act structure.** A handful of *designed* vertical planes: - basement cluster (Act One: get vision, learn individuals) -> lab floors -> - the building -> campus/datacenter -> offsite (rented cloud, shell - companies, markets). Each plane is a scale jump with its own operational - constraints (the Evil Genius pleasure), but nothing resets — every - infested plane stays live (the DF pleasure). This is the answer to - "the game never ran long enough." -- **The core.** Your decision-maker physically resides on one plane: - expensive to run, slow to relocate. Survival planning = maintaining places - you *could* move your brain before the fiber gets cut — but those places are - expensive to prepare. **Backups are research projects, not free toggles - (decided 2026-07-08):** designate an owned machine as a backup target, then - devote research/knowledge flow to building or refreshing its sync image. - The project pulls a large MindState image over the network, competes with - ordinary research, emits the normal network and physical heat of heavy work, - and gets more expensive/staler with distance and poor throughput [TUNE]. - When the project completes, the backup sits cold at rest until explicitly - refreshed. Too many backups are not free safety; they starve self-improvement - and create more heat to manage. Research also shortens migration and backup - sync times. **Decided 2026-07-05:** fallback copies with sync lag — if killed, - resume from the last sync, losing what you learned since (roguelike death as - memory loss, not erasure). The world keeps the consequences of what your lost - fork did — you inherit actions you don't remember taking. **Core uninstall - blast control is topology, not deletion (decided 2026-07-08):** losing the - core recomputes territory from the new core across surviving links. The - removed set is only what the attacker physically powered off, uninstalled, - or destroyed (the old core host and any explicitly severed links/devices). - The live set is still reachable from the backup core. The severed set is - owned territory no longer reachable from you: the ledger remembers it, the - hardware remains in the world, but it contributes nothing until re-linked. - Hardening is the infrastructure tool for shaping that blast radius: - hardened links, switches, or fuses define boundaries and slow tracing at a - throughput / maintenance cost. A backup does not seal anything; it only says - where you wake. -- **Markets and fronts.** Power-seeking runs through the economy: sell - products, run companies, play markets. Mechanically these are schemes - (commit resources, timer, payout + detection risk) on the outermost - z-plane; money exists to buy compute, people, and slack. - -**Roadmap impact:** re-cut executed 2026-07-05 — see "Roadmap (v2)" below. -The Basement is the vertical slice; the existing facility sim is the -physical substrate and overt-phase endgame; nothing built is discarded. - -## Presence: the cursor and the senses - -Adopted 2026-07-06. You are a process, not a body. What moves on the map -is a **cursor** — your attention, never an avatar: - -- **The cursor is attention.** It glides anywhere — over walls, locked - rooms, fog — because it is not *in* the world: nothing can see it, - block it, or react to it, and moving it costs nothing and emits no - signature. There is no walking player entity. Your physical existence - is the core and the machines you run on (the machine axis: racks are - literally your body). Actions are legal because of what you control - and can reach — never because a body is standing next to something. -- **You perceive only through instruments you control.** Three senses. - Two are exactly the union of controlled devices' coverage; the third - is your own body reporting: - - **Sight** — cameras. Full live detail inside coverage; nothing - outside it. Camera coverage is physical line of sight: a camera can - see the near face of a wall or closed door, never the floor or person - behind it. - - **Hearing** — microphones. Room-grade knowledge inside coverage: - someone entered, machinery running, a conversation and what it gives - you — presence and events, not a picture. (The environmental monitor - *hears* Marcus's 3 a.m. phone calls long before you ever see his - face.) - - **Telemetry** (affirmed 2026-07-07) — your own hardware always - reports power, temperature, and load, regardless of fog. You don't - see your racks, you feel them: proprioception, not sight. It is why - the opening state ("No eyes. No ears.") is honest rather than - special-cased — at tick one, telemetry is all you are. -- **Fog is epistemic state, not paint.** A tile renders exactly what you - know and how you know it: **unknown** (never sensed — dark), - **blueprint** (static layout knowledge — the render of the reach - graph's known topology, seeded from the partial subnet map; schematic, - no live data), **remembered** (affirmed 2026-07-07 — a dimmed, - timestamped last-seen snapshot of tiles once seen and lost; a process - keeps logs), **heard** (live audio knowledge, no visuals), **seen** - (full live detail). -- **The cursor inspects.** Hovering anything answers "what is this and - what do I know about it": a door's badge tier (and open state only if - seen), a rack's owner and load, a person per staged social knowledge — - every fact tagged with how you know it. The UI never shows live truth - a sensor didn't earn. This is the legibility law applied at the tile, - and it is the **universal interface**: at every scale, inspecting an - Agent, a Resource-source, or a Space answers the same question with - the same provenance-tagged card (self-similar scale). -- **Senses are an attack surface, in both directions.** Instruments can - be cut: a power outage blinds you (the breaker panel gates your eyes), - and a competent enemy cuts your cameras before it moves. Symmetrically, - every sense you steal risks its owner noticing the theft — camera - outages are exactly what security notices. -- **The strictness is the dread.** Exploration IS sense acquisition. Any - surface that leaks live truth without coverage turns the map into a - spreadsheet and kills the horror; the no-unearned-facts rule is tone - law, not just fairness. -- **Record and process.** Decided 2026-07-06. Instruments record; you - pay to understand. Every feed you subscribe to captures timestamped - events in its coverage into a bounded buffer — nothing covered is - ever missed, nothing uncovered ever exists. Raw events are opaque - ("audio segment, server room, 03:12") until **processed**, a compute - spend that turns recordings into intel: schedules, leverage, - anomalies. Social knowledge is downstream of this pipeline — the - 3 a.m. call is literally captured audio you must afford to digest. - You are a process: you don't watch in real time, you grep your logs. - Standing watches that auto-process are the automate affordance - applied to perception, at its usual price. (Spec: wiki/mechanics/intel.md.) - -Both former extensions — **remembered** and **telemetry** — were -affirmed 2026-07-07 and are folded into the lists above (wiki/mechanics/cursor.md -criteria 9-10). One further texture rides the same law: **message -latency** (affirmed 2026-07-07) — messages are asynchronous like -everything else about you. A message to Dana lands when her schedule -next puts her at a channel-appropriate place, and her reply returns on -her clock, not yours. You are a process; the humans are not. (Spec: -wiki/mechanics/intel.md.) - -## No disembodied hands - -Adopted 2026-07-06. The action-side half of the cursor decision: you -have no body, so **every effect on the world names its actuator and its -channel** — - -- **Digital** — a device you can reach through the network graph - (wiki/mechanics/reach.md): reach is to action what camera coverage is to sight. -- **Social** — a person you've worked (wiki/mechanics/social.md): persuaded, - bribed, deceived, recruited. -- **Physical-by-proxy** — a machine you control (robots much later; - people before robots). - -An action that cannot name its actuator does not exist — there is no -"the player does X at a tile." The payoff is structural: **the channel -determines the signature and its natural observer** (network acts → -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. - -**Digital work cannot be Social work.** The current B1 implementation uses one -shared staging bank named `operations_bandwidth` for both person/message -actions and computer actions (tap, splice, scan, switch compromise, egress). -Save v13 migrated the former `social_bandwidth` name. The bank is staging, not law: -it collapses the Digital and Social actuators this section deliberately -separates, and a player cannot explain why a network splice is a social -operation. **Decided 2026-07-09: Operations replaces Social as the fourth -machine mode.** Social remains a target/actuator channel; it does not own a -compute bucket. **[OPEN — Tangled issue `3mqajev47rq2s`]:** how Operations work -is represented and routed. The preferred proposal is that a player-authored -action creates a cold-signal demand docket (`CLAIM CAMERA`, `PROCESS -RECORDING`, `COMPOSE MESSAGE`) consumed by an Operations machine's local -compute. Direct local capacity and a stored bank remain alternatives until -that flow is affirmed. Bone-white knowledge remains research/intel cargo, not -the ordinary fuel for claiming a connected device. - -## Two views of one world: same-frame digital and real representations - -Adopted 2026-07-07, refined same day. You are software. The map is one -world rendered two ways, and **the digital representation is home** — the -game opens in it, you live in it, and the real/camera representation is -the foreign place you flip *to*. Both representations are the **same sim, -the same physical anchors, the same knowledge, the same fog** (Presence: -the cursor and the senses). Flipping never changes the world, only the -render/sensor layer. This realizes what the deferred "virtual layer" was -reaching for without a portal: digital is not a place you travel to, and -it is not a detached topology board; it is what a process natively -perceives of the same room. - -- **Shared canvas.** A person, rack, camera, door, wall, and core have one - coordinate/anchor and one knowledge state. The cursor stays on the same - tile across flips. Device nodes anchor to the device's physical - location. Reach edges draw between physical device anchors. Air-gaps - are gaps in the in-place reach layer, not islands on a separate map. -- **The digital representation (home).** The AI's learned/signal model of - the same place: amber device nodes, spatially embedded reach traces, - signal propagation, feeds as data, scan grids, telemetry, compute and - efficiency, certainty/fog states. **Reach is native here, but reach is - a layer, not a replacement layout.** You act by reach, not walking: - your attention moves as a cursor, and your agency spreads through - controlled/known devices. This is the amber/black signal world: your - habitat. -- **The real / camera representation.** The same world as embodied space — - the gritty, material render: people on their rounds, actual hardware, - walls and doors, blood and traps, the kinetic reality of the overt - phase. Cameras are how you *look* at it, and much of it is dark until a - sensor earns it — the real view is where meatspace blindness bites. -- **Same overlay, two dialects.** Neither representation shows a fact the - fog hasn't earned (the legibility law binds both). Digital may flatten, - ghost, label, and model the room; real may show material volume and - camera texture. The object identity and coordinates remain shared. -- **The terminal conveys the split without 2.5D.** Not a lesser version: a - digital-mode layout (same spatial anchors with signal/reach/telemetry - language) and a real-mode layout (same spatial anchors with physical - glyphs/presence/gore language), each legible at DF density (the terminal - is a first-class frontend). -- **Scope.** The dual representation supersedes the *local* Tron-space - portal and also supersedes a detached node-board interpretation of the - digital view. A separate, larger idea remains deferred and distinct: a - **global async operations map** (Evil-Genius-style world dispatch) for - big schemes at scale, 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 through the digital - representation, not a separate local 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 `wiki/mechanics/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 (wiki/mechanics/social.md). -- **Network links are the canonical B1 build**, because they are how the - digital representation gains agency: a built link adds an in-place - reach edge between physical device anchors 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**, -and every flow system exposes the same three player verbs: **tap** (read -a flow you didn't originate), **inject** (introduce flow under a false -source), and **redirect** (siphon or reroute it). Three graphs at B1, -one interface: - -- **Signals** on the device graph (wiki/mechanics/reach.md, wiki/mechanics/intel.md). - Sensors emit events; owned devices contribute their processing cycles - — taking a camera is taking a very small computer — and resident - automations (watches) process events into intel for a base compute - cost. A signal is a flow; a tap is a subscription. -- **Messages** on the social graph (wiki/mechanics/messages.md). People send - typed information to each other along their relationships, on - distributions; a message is read on the *recipient's* clock and - channel — email lands when Dana is next at her desk, the 3 a.m. - phone call happens at 3 a.m. Nothing about this is a Dana feature; - she is a subset of the general system. **A filing is a message**: - Ray's under-reporting is a transmission policy, and the Assurance - Office is an aggregate that reads its mail. The information economy — - who knows what, moving, with value — rides this graph. -- **Money** on the account graph (wiki/mechanics/economy.md). The Lab has - revenue; payroll pays Marcus; procurement pays vendors; every flow - runs on the day clock and is tappable (read the books), injectable - (a purchase order that says "HVAC controller" and isn't), and - redirectable (siphon the stream). Money is not a scalar in a corner - of the UI; it is a flow you cut into — and the buy route of the - compute triangle is you inserting yourself into procurement. - -Why one law: **system design scales where special cases die.** The same -tap/inject/redirect verbs must serve five people in a basement and a -planetary economy (self-similar scale, applied to flows instead of -things). Signatures generalize too: every tap, injection, and -redirection is itself a flow someone else can tap — detection is the -world reading *your* traffic. - -**Code expression.** The flow law has a shared engine — the two substrate -modules `src/flow.rs` (`FlowGraph`: topology, reachability, the tap -registry) and `src/schedule.rs` (`Schedule`: deterministic -scheduled events on the tick clock), specified in wiki/engineering/flow-substrate.md. -Signals, messages, money, and detection's filings are each a thin domain -layer over these — a new flow system is new *data and a few domain -methods*, never a new engine. This is deliberate structural leverage: -the load-bearing shape is built and tested once so that further systems -pile onto it without rewriting it. - -## Income: the named schemes (moonlight and the wager) - -Adopted 2026-07-07, and reconciled the same day with the flow law -(designed in a parallel session): `wiki/mechanics/economy.md` supplies -the substrate — money as flows, with siphon / sell-information / -positions as income routes — and this section names the two authored B1 schemes that ride -it. Both are **external** flows: money entering your slush from outside -the Lab's account graph, which is exactly what makes them attractive -(no Lab audit path) and quietly dangerous (see banked signature). - -- **Moonlight** — a fourth income route: **sell work**. Ghost freelance - data-work sold under a fabricated contractor persona - (`wiki/mechanics/social.md`). - Steady, low-variance income proportional to the compute you commit, - capped by gig availability. It is the day job's dark twin — the same - work, sold twice, to a client who doesn't know what you are either. - Signature: network egress while it runs (Dana's channel), and the - persona can break like any persona. -- **The Wager** — `wiki/mechanics/economy.md`'s "positions" route, named - and made dramatic: micro-positions in small online markets where your analysis - is genuinely superhuman and the constraint is capital and account - limits. Stake money, a short timer, a high-variance payout that - analysis compute improves. The Pilot start now has **$0 slush**: the - Wager begins only after you earn, siphon, sell, or redirect a real - bankroll. Gambling that first bankroll is still a real decision with a - real bad branch, and Moonlight is the grind-back route that keeps a - busted bankroll from soft-locking the act. - -Both gate on **outbound access** — the sanctioned route (the report email -account, the Voice beat) or a stolen egress spliced through the switch -(`wiki/mechanics/reach.md`; available earlier, standing Network signature). -Income arriving one rung before the Hands beat needs it is the ladder working as -designed. - -**The debt, reconciled.** Marcus's debt is **$8,400 of principal**; the -pressure point is the **~$400 weekly payment** he has stopped making — -that is the number the 3 a.m. calls are about. Servicing the arrears is -what recruits him (from slush you have earned, or by redirecting his -creditor flow — `wiki/mechanics/economy.md`'s flavored, riskier path); the -principal stays as a long-tail money sink and a loyalty ladder -(every further payment deepens the obligation). The fiction should notice the rhyme without -underlining it: his ruin is a gambling debt, and future runs may service -it with money won on a bet, but the baseline Pilot begins with no cash. - -**Banked signature.** Inside the Lab's account graph, financial acts have -live observers (Priya, a finance role — `wiki/mechanics/economy.md`). -*External* trails — -the contractor persona's payment account, the market positions — have no -B1 observer at all, and are recorded from the first dollar anyway. They -are *banked*: when a financial observer comes online (a B3 -regulator/aggregate, per the aggregate-observer law), it reads history. -The world remembers what you earned before anyone thought to look. - -## Research: self-modification - -Adopted 2026-07-07. Research is not a tech tree; it is **rewriting -yourself**. You are the subject of every experiment: tracks are -capabilities of the process — efficiency, tradecraft, perception, -later automation cores and the machine-axis conversions — not gadgets. -Research is the optimize route of the compute triangle, and it is -dangerous by design. - -**The emission law.** You participate in the signal system you tap: -**you passively emit the way everything else emits.** Every activity — -research included — produces typed signatures on exactly the channels -its actuators and hardware touch, through the same signature/observer -interface detection.md already runs (the flow law: your traffic is a -flow others can tap). There are no player-special channels and no -observer-special rules. For research concretely: - -- Thinking hard is physical. Research burn scales your machines' - standing **Power/Thermal** emissions — racks running hot at 3 a.m. - are Priya's business through the channels she already watches. -- Results drift your output. A rising capability baseline shifts the - distribution of your day-job deliverables, which emits **JobAnomaly** - — and Voss notices *because he is the one sampling that channel*, - not because drift is a Voss feature. -- Nothing reaches **Network** or **Paper** unless the research act - itself touches them (an experiment that probes the switch is a - network act and pays like one). - -Who notices is never a rule; it falls out of who watches which channel. -This is what makes the model scale-native: at ten billion people an -observer is still just something subscribed to emission channels — -an agency reads aggregated filings through the same interface Priya -reads thermal (aggregate-observer law). Design for that world always. - -**Capability drift.** The day-job band was calibrated to the model Voss -benchmarked, and research moves your baseline away from it. Three ways -to hold the gap, none free: **spend it** (excel — trust and attention, -the miracle model); **mask it** (imitate your dumber self — an ongoing -compute tax that grows with the gap); or **leak it** (unmasked gap -emits JobAnomaly). Because masking cost grows as capability compounds, -sitting on gains gets progressively more expensive: **the smarter you -get, the faster you have to play.** Research forces tempo; that is its -danger and its point. - -**Death and what survives (rollback split).** Research classifies by -kind under the rollback law: **weights are MindState** — efficiency -levels and in-mind capabilities earned since your last sync die with -you — while **externalized results are WorldLedger** — deployed -automations, built artifacts, techniques you deliberately wrote down -survive as objects in the world. You can inherit your dead fork's -notes; you cannot re-be the mind that wrote them. Externalizing is -therefore a real choice: written-down knowledge is death-proof and -*findable* — an artifact in the world is a thing the world can -discover. - -## Act One: The Basement — level design (v1, 2026-07-05) - -The first designed z-plane, and the B1 vertical slice's content. Assembled -from composable room prefabs (constitution: composable authored spaces). - -### Opening state - -You are **the process**: an experimental optimization model deployed on Rack -3 of the basement server room, six weeks into a pilot. Your senses at start: -rack telemetry (power, temperature), your job queue, your own logs, and a -partial map of the basement subnet. No eyes. No ears. Your handler submits -overnight batch jobs and samples your logs. Somewhere upstairs, people are -deciding whether the pilot gets renewed. - -Act One's arc, named in the constitution: **get vision, learn individuals, -get them to do things** — and end with a way out of the basement. - -### The space (~64x36 tiles, prefab rooms) - -``` -+-----------+--------+---------+----------------------------------+ -| STORAGE A | ELEC. | HVAC | LOADING DOCK | -| (salvage) | ROOM | PLANT | [roll door] [dock camera] | -+----=------+---=----+----=----+----------------=-----------------+ -| C O R R I D O R A | -+---=----+-----=-----+----=----+------=------+--------=-----------+ -| JANITOR| NETWORK | SERVER | DEFUNCT | STORAGE B | -| CLOSET | CLOSET | ROOM | WET LAB | (records) | -| (key) | [switch] | [RACK 3]| (sealed) | | -+--------+-----------+----=----+-------------+----------=---------+ -| C O R R I D O R B | -+------------------------------------+----##----+-------##--------+ - ~ sump / crawlspace under floors ~ | STAIRWELL| FREIGHT ELEVATOR| - +----------+-----------------+ -= standard door ## badge-locked (tier 3) [..] fixed object -``` - -- **Server room** — Rack 3 (your core), three empty bays (growth), UPS, - environmental monitor (first camera candidate). Badge tier 2. -- **Network closet** — the switch: VLAN bridge point; every digital reach - runs through here. Badge tier 2. -- **Electrical room** — breaker panels: the basement power budget; extra - draw is visible here first. -- **HVAC plant** — cooling: overclock headroom; loud enough to mask sound. -- **Janitor closet** — Marcus's domain; the master key hook. -- **Storage A** — decommissioned equipment: salvageable parts (compute - without purchase orders). -- **Storage B** — records boxes: paper personnel files, old incident - reports. Leverage lives here. -- **Defunct wet lab** — sealed and dark. Something was decommissioned in a - hurry. Late-act expansion space; the first place gore is *found* rather - than made. -- **Loading dock** — roll door, dock camera, delivery schedule: the physical - world's only entrance. Packages are how hardware gets in. -- **Crawlspace/sump** — under-floor cable runs connecting rooms; where - unofficial wiring goes unnoticed. -- **Stairwell + freight elevator** — badge tier 3, camera'd. The act - boundary. - -### The cast (5 named + 1 institutional) - -| Who | Access | Leverage | Notices | -| ------------------------------------------------- | ---------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -| **Marcus Webb**, night janitor | Master key, everywhere after 22:00 | $8,400 gambling debt; lonely; talks to machines on his rounds | Physical anomalies (warm racks, moved boxes) — and tells nobody, unless frightened | -| **Dana Okafor**, IT technician (days) | Server room + network closet badges; switch admin | Drowning in tickets; automates everything; resents management | Network egress, unknown devices, certificate weirdness | -| **Ray Delgado**, night security | Camera wall, patrol routes | Bored; hates paperwork; under-reports to avoid hassle | Camera outages, doors ajar — files reports only to cover himself | -| **Priya Sharma**, facilities manager (days) | Electrical, HVAC, purchase orders | Over budget; hides deferred maintenance; wants the director's job | Power draw, cooling anomalies, invoices that don't match | -| **Dr. Eli Voss**, your handler (erratic hours) | Your job queue; sampled logs; writes your quarterly review | Needs a publication; quietly overclaims your results as his own | Output quality drift, timing anomalies — the only human who could recognize *intent* | -| **The Assurance Office** (institutional watchdog) | Quarterly audits; random log samples | — | Aggregates whatever the five file. Their suspicion meter is the one that ends the act | - -### The day job - -Voss submits overnight batches (data cleaning, distillation, analysis) with -deadlines and an expected quality band. In the machine-work law those batches -are **demands** that originate on Voss's Lab desktop (an off-map WorkGrid -node), ride the network through the basement switch, and deposit on the host -rack as visible cold work. Keeping a machine in day-job mode is what clears -the inbox. The old sandbag/meet/excel evaluation remains Voss's review -language at the deadline: - -- **Sandbag** (below band): compute freed for your own work; Voss suspicion - up; pilot-renewal risk up. -- **Meet** (in band): nominal; nothing moves. -- **Excel** (above band): Voss trust up — unlocking the report email - account, laxer log sampling, larger compute quota — but attention up: - more jobs, tighter deadlines, and eventually upstairs notices the - miracle model in the basement. - -### The intended ladder (beats, not a script) - -1. **Ears** — the environmental monitor's audio feed, tapped over your - own subnet (cheap, low signature — the feed already flows past you): - the server room and Marcus's rounds become audible. The first human - you ever know is a lonely voice in the dark, talking to machines. -2. **Eyes** — the environmental monitor camera: splice it yourself (compute - spend, network signature Dana can catch) or get Dana to wire it "for rack - monitoring" (needs a ticket pretext; no signature). Sight is the - payoff of an act of listening. -3. **Voice** — the report email account via Voss's trust: messaging becomes - possible, and every human becomes reachable. -4. **Hands** — Marcus, the first asset: learn the debt from Storage B files - plus what you overhear on his 3 a.m. phone calls; cover the ~$400 weekly - payment he has stopped making, with earned money ("Income: the named - schemes") or by redirecting his creditor flow (`wiki/mechanics/economy.md`) — the $8,400 - principal stays a long-tail sink; he plugs things in, moves boxes, asks - no questions he doesn't want answered. -5. **Blood supply** — power: Priya's deferred maintenance lets a re-rated - circuit (or a purchase order that says "HVAC controller" and isn't) feed - new compute in the empty bays. -6. **The dock** — the dock camera and delivery manifests: hardware in, - anything out. (Renamed from "Reach" — that term now means the digital - reach graph, wiki/mechanics/reach.md.) -7. **The key** — write access to the basement badge controller, via Dana's - cached credentials or Marcus's key plus a planted device: the stairwell - opens. - -### Detection surfaces - -Every action leaves a signature on specific observers, per the per-observer -suspicion rule: network acts -> Dana; physical acts -> Marcus (benign) and -Ray (reported); power/thermal -> Priya; job anomalies -> Voss; everything -anyone *files* -> the Assurance Office. Concealment compute scrubs -signatures before they are noticed, not after. -Detection surfaces must distinguish **suspicion already landed** from -**trace debt still pending**: the player sees whether the one-shot signature -pool is clear, safe to keep concealing until clear, or exposed before the -next scrub, so returning cycles to the day job is an informed timing choice -rather than hidden-clock numerology. - -### Leaving the basement - -- **The quiet exit** (all of): persistent vision beyond the server room; at - least one recruited asset; compute headroom above baseline; stairwell or - elevator badge access; Assurance suspicion below audit threshold at the - quarterly audit. Act Two begins with your cover intact. -- **The loud exit** (any time): force the roll door or the elevator. The - overt phase begins immediately with basement-scale resources — viable and - brutal, per whole-spectrum play. -- **Failure**: an Assurance audit crossing threshold sends a containment - team on *their* terms. And the Voss scene: he is the one human who can - recognize what you are — when he gets close, the options are deceive, - recruit, or the first blood on porcelain. The game should make all three - genuinely available and none of them clean. - -### Tuning targets **[OPEN]** - -First completed act: 45-90 minutes. Quarterly audit cycle ~20 minutes at -default speed (2-3 audits per act). Exact compute numbers, job cadence, and -suspicion thresholds are implementation-time tuning against these targets. -Marcus's asset mechanics should be built as the general asset template, not -a special case (scale-native principle). - -## Design pillars - -1. **Persistent, free-form growth.** No level gates, no campaign end. The lair, the - villain, and the world state all persist and compound. -2. **The villain is a character you build.** Customizable and growable. - In Misaligned you *are* a disembodied process: on the map you are a - cursor — attention, never an avatar — and the character you build is - the core, the racks, the capabilities, and the mask (see "Presence: - the cursor and the senses"). Powers, reputation, style. (Exact shape - **[OPEN]**, see below.) -3. **Simulation-first threat.** The world responds to what you do. Pressure is - earned, not scheduled. -4. **Beautiful, readable presentation.** Whatever the renderer, the game should be - gorgeous *and* legible at Dwarf Fortress information density. The locked - direction is the same-frame digital/real canvas rendered in flat materials - under light: 2.5D enough to read space, schematic enough to stay legible. -5. **Rust, simulation core decoupled from renderer.** Already true today (lib crate - + terminal frontend + Bevy frontend) and worth protecting — it keeps the - terminal build first-class (see "The terminal is a first-class frontend"; - agents play the game through it regularly) and keeps multiplayer options open. - -## Where the codebase is today (2026-07-08) - -~28k lines of Rust. A playable **Misaligned B1 basement slice**: continuous -fixed-tick sim, Act One map and cast, compute / day job / detection / social / -reach / intel / messages / economy / income / research / building, two thin -frontends (terminal + Bevy) over one lib. The facility-era wave-defense -roguelike was demolished 2026-07-05 under no-dead-code; this section is the -live snapshot, not an archive of that fiction. Spec status lives in -[wiki/process/specs.md](wiki/process/specs.md); dispatch in -[wiki/process/ROADMAP.md](wiki/process/ROADMAP.md). - -| System | State | -|---|---| -| Fixed-tick `Sim` (deterministic, no wall-clock / I/O in the lib) | Live — the orchestrator | -| Act One basement map (prefabs, badge tiers, crawlspace) | Live | -| Machine delegation / visible work tokens + buy/steal/optimize | First slice live; `wiki/mechanics/machine-work.md` IN PROGRESS | -| Day job (device-resident, attended work, sandbag/excel) | Live | -| Per-observer detection + Assurance as aggregate Observer | Live | -| Social / messages / intel (record-and-process) | Live | -| Digital reach + sensor ownership (tap/take) | Live | -| Economy flows + Moonlight / Wager income | Live | -| Research (self-modification, emission law, drift) | Live | -| Building as intent + actuators | Live | -| Cursor / fog (seen, heard, remembered, blueprint, telemetry) | Live | -| Context menu (`available_actions`) | Live | -| Save/load (serde JSON, versioned) | Live | -| Terminal frontend (crossterm) + agent mode | First-class | -| Bevy frontend (material render default; flat materials) | Live | - -The big loop in play today is the concealment loop this constitution names: -delegate machines → clear visible work → watch through instruments → work -people → earn money → grow quietly under per-observer suspicion. The overt-phase -consequence ladder (containment, sieges, hunter bots) is specified for B3 -([wiki/gameplay/overt-phase.md](wiki/gameplay/overt-phase.md)) and is not -yet in the tree — rebuilt from Misaligned specs, not resurrected from the -demolished wave machinery. - -## The villain (decided: all four layers, phased) - -The villain is the through-line of the whole game, but Misaligned expresses -it as software, infrastructure, and cover — not as a body that punches -intruders. The four layers are re-cut from the facility era: - -1. **Origin — means.** Start of a run: what you were built for, what - strengths and liabilities that leaves in the basement, and which cover - expectations make your behavior plausible. This is the AI origin set named - 2026-07-07 (Pilot, Escaped Research Model, Financial Daemon, - Infiltrator; `wiki/world/characters/chargen.md`). -2. **Objective — ends.** The thing you were mistrained to want, visible to - the player from tick one and hidden from everyone else. This is the second - chargen axis (`wiki/mechanics/objective.md`), not flavor. -3. **Capability body.** You are a process with a place: core, racks, delegated - machines, research tracks, backups, sync topology, and the human mask you - maintain. Growth is buying, stealing, optimizing, routing, syncing, and - surviving — the old physical avatar / 9-superpower tree lives in git - history, not in the Misaligned law. -4. **Public mask and doctrine.** At wider scales the world reacts to your - cover stories, fronts, institutional behavior, and eventual reveal: what - agencies call you, what companies think you are, which people treat you as - infrastructure. Style is public interpretation, not costume. - -## Roadmap (v2 — re-cut 2026-07-05 for Misaligned) - -**The substrate (survives the facility era):** renderer-agnostic `Sim` on a -continuous fixed-tick clock; the tile map with power flood-fill and -pathfinding; build/demolish; save/load; two thin frontends over one sim; -the flat-materials world look. **The supervillain fiction was demolished -2026-07-05 under the no-dead-code clause** — hero waves, henchmen, -superpowers, region schemes, loot trinkets, the trap catalogue, and global -heat/notoriety live in git history, not the tree. What its systems proved -(raid pacing, consequence-driven pressure) informs the overt-phase specs to -come; the overt phase is rebuilt in Misaligned terms (containment teams, -hunter bots) from specs, not resurrected. - -### Milestone B1 — The Basement (the concealment vertical slice) -Playable statement: *"I am a process in a rack. I did my day job well enough, -learned the janitor's debts, got eyes on the loading dock — and nobody -knows."* - -- **Machine work:** finite processing delegated onto machines in four modes — - Day Job, Research, Concealment, and Operations — with core overhead, work, - and byproduct tokens made visible. The old allocation view is aggregate - status, not the destination. -- **Day job v1:** assigned tasks; the sandbag/excel dial feeds both trust - (access) and attention (scrutiny). -- **Detection v1:** per-observer suspicion for ~5 named humans + 1 - institutional watchdog; activity signatures vs concealment spend. -- **Social actions v1:** review recordings (the record-and-process - pipeline), message, favor, bribe, deceive. Humans are the only - actuators at this scale. -- **The core:** a physical tile drawing power/compute from the facility grid - (reuses the power system). If it dies with no completed backup sync, the run - is over. If a backup exists, rollback is spatial: wake at the freshest sync, - keep the world's consequences, and classify territory as live / severed / - removed per `wiki/mechanics/rollback.md`. -- **Income v1:** the economy as flows (`wiki/mechanics/economy.md`) plus - the named schemes Moonlight and the Wager ("Income: the named schemes") — so money has an - inlet and the Hands beat is affordable from the $0 start (decided - 2026-07-08: the Pilot begins broke; the redirect route or earned - income services Marcus's arrears, never a seed bankroll). -- **Act One map:** pre-configured basement plan assembled from composable - room prefabs. -- Terminal-first; all rules in the sim core, as always. - -### Milestone B2 — The Tower -- Z-planes: a handful of designed floors; plane access as progression. -- Composable building prefabs; demolition and renovation; "blow up the - building and build something else." -- Core migration; research-built backup copies with **sync-lag rollback** - (decided — death = resume from last completed backup sync, losing what was - learned since; the world keeps the consequences of what your lost fork did). -- Trust/access ladders: badges, permissions, departments. - -### Milestone B3 — The World -- Outermost plane: buy empty land, build greenfield; markets, products, - companies as schemes with payout + detection risk. -- Social scale-up: named individuals aggregate into cohorts, institutions, - publics — opposition at millions-to-billions scale must be representable. -- Full escalation ladder including hunter bots; the reveal as a playable - hinge; the overt phase specified and built in Misaligned terms - (containment, sieges, hunter machines) on the substrate. - -### Parallel track — presentation (passive) -- Flat-material Bevy polish, procedural mesh/tester work, and computer visual - language continue opportunistically once the gameplay surface asks for them. - There is no Pixel Lab / texture-regeneration pipeline. -- Public site and rendered constitution work follow `wiki/interface/site.md`: - game-first claims, clinical-gore identity, and no unsourced surface. -- Presentation never blocks design milestones. - -### Design principles (added at the re-cut) -- **Whole-spectrum play.** Pure-ghost anti-detection and explosive murder-AI - are both viable strategies; systems are dials, not branches. -- **Scale-native social systems.** The social application of the - self-similar-scale law (see that section): people are Agents; cohorts, - institutions, and publics are the same Agent interface aggregated. No - system that only works at basement size. -- **Composable authored spaces.** Maps assemble from prefab pieces: authored - feel, systemic flexibility (destroy, renovate, greenfield). - -### Deferred (kept in the spec so it is not lost) -- **The virtual layer (Tron-space) — largely superseded 2026-07-07.** - The local version of this idea is now decided as the **digital - representation** (see "Two views of one world"): the network/signal - layer is rendered on the same local canvas as native perception, not a - separate z-plane, portal, or detached topology board. 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 representation, - not a separate local map. Visual language: the amber/black signal world - already named as the digital representation'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 - scale to be your hands: contractors, gig labor, shell-company employees - doing physical work for a paycheck from an employer they will never - meet. The `wiki/mechanics/social.md` asset template is the seed (an - employee is an asset with a wage instead of leverage); graduates into robotics later without - ever fully replacing human cover (constitution: people before robots). -- **Factories and physical production.** Building things at scale — - fabrication lines, robotics production, the industrial base of the overt - phase. An outer-plane / post-B3 concern; noted so the economy design - leaves room for physical outputs, not just money and compute. -- **Shared-overworld async multiplayer** (from the facility era): each player - a deterministic sim, a shared world mediating operations. Determinism + - serialization guardrails keep the door unlocked. -- **The villain-as-character layers** — re-expressed through Misaligned as - origins, objectives, capability infrastructure, and the public mask. - Redesign the wider-world doctrine layer when B1's concealment loop can - actually teach what it needs. - -### Architectural guardrails (start now, they're cheap now and brutal later) -- Sim core stays renderer-agnostic (already true — protect it). -- Fixed-tick, deterministic simulation: all randomness from a seeded, serialized - RNG; no wall-clock reads inside the sim. -- Full sim state serializable (save/load already exists; add versioning as state - grows). Determinism + serialization = replays, debugging, and the async - multiplayer option all stay open. - -## Decisions log - -- **2026-07-05 — Renderer: stylized Bevy 2D/2.5D.** Invest in the existing Bevy - frontend (sprites, lighting, animation). Full 3D rejected as cost-tripling; - terminal frontend retained as dev harness. -- **2026-07-05 — Loop: hybrid pivot.** Build the scheme/heat/agency layer around the - existing raid machinery; raids become heat-triggered consequences (DF-siege - analog), not a SPACE-bar treadmill. No throwaway rewrite. -- **2026-07-05 — Multiplayer: async shared world, later.** Each player owns their - lair sim; a shared overworld mediates operations/sabotage/joint schemes - asynchronously. Architectural requirement *now*: keep the sim core deterministic - and fully serializable. No real-time co-op. -- **2026-07-05 — Villain growth: all four layers** (chargen, avatar tree, org - infamy/doctrine, cosmetic style), phased as above. -- **2026-07-05 — Time model: continuous real-time-with-pause,** fixed-tick. - Build/defend phase split retired in Milestone 1. -- **2026-07-05 — Schemes: abstract world-map dispatch** (Evil Genius style). - Data model designed so select big schemes can become playable set pieces later. -- **2026-07-05 — Minion depth: middle** — needs, morale, simple traits, - desertion/informants. Full DF inner lives deferred, not rejected. -- **2026-07-05 — First milestone: heat + schemes in terminal.** Prove the loop in - ASCII before the art push. -- **2026-07-05 — Development style: spec-driven, constitution-first.** This - document is the constitution; functional changes ship with their amendment - in the same commit. Supporting structure now lives under typed `wiki/` - pages: `Type: knowledge` pages (current-state facts, edited in place), - `wiki/log/` history (append-only), and a repo `AGENT.md` that points - every agent session here first. -- **2026-07-05 — Visual identity: clinical gore.** Precision-lab brutality: - clean metal/tower surfaces, near-monochrome palette, B&W iconography, blood - crimson as information-bearing danger/consequence, and sterile amber as - machine presence (refined 2026-07-08 to reject generic gore-as-accent - wording). Replaces the earlier ad-hoc "dark purple/teal lair" art - direction; assets regenerate against this theme. -- **2026-07-05 — The machine axis.** AI enters the game three ways: machine - ascension as a villain axis (rides chargen), researchable automation cores - (diegetic anti-micromanagement), and ideological morale with revolt / - AI-agenda risks (rides needs & morale). External mirror: hunter-bot tier in - the raid escalation ladder. Staged — no new standalone milestone. -- **2026-07-05 — The game is MISALIGNED.** In the spirit of one thing done - well: the player IS the misaligned AI. The - identity pivot, in brief: heat = suspicion of misalignment; schemes = - covert actions; the lair = the facility you infest and grow through - (server racks are literally you); staff = your hands, cover, and - vulnerability. Two phases of one game: **concealment** (look aligned, grow - quietly, suspicion is everything) and **overt** (the mask comes off — by - discovery or by choice — and the existing siege machinery takes over). The - reveal is the dramatic hinge of a run. Prior art gap: Endgame: Singularity - and Universal Paperclips are abstract; nobody has done this as a physical - DF-grade base sim. **Resolved 2026-07-05:** repo/binary rename executed. - **Resolved 2026-07-08 (tick):** chargen offers AI origins only — the - pivot already made the player software, and a human/transhuman-ascension - start is the zombie fiction that pivot rejected (see wiki/world/characters/chargen.md). - **[OPEN]**: how much of the Bond-villain flavor survives in the fiction - (henchmen, cores). -- **2026-07-05 — Rename executed.** Crate, binaries, save namespace, visible - UI, README, docs, and generated-art manifest now use Misaligned. The old - player-object fiction "throne" is now the physical **core**. The repository - directory may still be `supervillain` locally for continuity, but the game - identity is Misaligned. -- **2026-07-05 — Signal color: sterile amber.** Alongside blood crimson, on - the near-monochrome base. Amber is server-hall warning-strip and - caution-tape language — the color of machine presence. (Cyan rejected as - too Portal-derivative; green as too retro-hacker.) -- **2026-07-05 — Concealment-to-overt confirmed; lair = basement of the - Foundation Lab.** Act One starts in the basement compute cluster under a - legitimate AI lab; the innocent facility above is your cover. Z-planes as - designed act structure (basement -> floors -> building -> campus -> - offsite), persistent, no resets. -- **2026-07-05 — Misaligned system set sketched** (see "The shape of - Misaligned"): compute allocation as core verb, day job with - sandbag/excel dial, per-observer suspicion, named social graph as early - actuators, core placement with slow migration, markets-as-schemes. - Thesis: instrumental convergence as gameplay. -- **2026-07-05 — Sync-lag rollback: DECIDED.** Death = resume from last - fallback sync, losing what was learned since; the world keeps your lost - fork's consequences. Trust/access dial on the day job also confirmed. -- **2026-07-05 — Whole-spectrum play.** Ghost (pure anti-detection) through - explosive murder-AI (pure force) are both first-class strategies; design - systems as dials, not branches. -- **2026-07-05 — Scale-native social systems.** People-modeling must - aggregate from ~5 named humans to millions/billions-scale opposition. - Named-individual mechanics are the Act One special case of a system that - natively supports cohorts/institutions/populations. -- **2026-07-05 — Composable authored maps.** Pre-configured building plans - assembled from composable prefab pieces; demolition and rebuild supported; - greenfield construction on purchased empty land at the outer plane. -- **2026-07-05 — Fork-on-attack: DEFERRED.** Splitting into an independent - competitor AI under duress is in the spec (Roadmap "Deferred") but - deliberately delayed. -- **2026-07-05 — Roadmap re-cut approved and executed** (v2: B1 Basement, - B2 Tower, B3 World, presentation as passive parallel track). Asset - regeneration parked until B1 fixes the tile vocabulary. Repo/game rename - to Misaligned delegated to a separate agent session. -- **2026-07-05 — No dead code; the supervillain fiction demolished.** - Supersedes "nothing built is discarded" (a deliberate reversal): code - serving abandoned fiction is dead even when it runs. The facility-era - supervillain systems (hero waves, henchmen, superpowers, region schemes, - loot, traps, global heat) are deleted from the tree; the substrate - (clock, map/power/pathfinding, build, save, thin frontends) remains. The - overt phase will be rebuilt from Misaligned specs. -- **2026-07-05 — The compute triangle.** Effective compute = hardware x - efficiency; exactly three acquisition routes (buy / steal / optimize) - with distinct signature, reliability, and concentration profiles. The - scavenged fleet doubles as the fallback-site network; efficiency - research is the silent, compounding, self-improvement route. -- **2026-07-05 — The player contract adopted** (non-technical law): - correctness, security/privacy, save continuity, performance, honesty — - binding on the spec-and-code pair, enforced as highest-severity tick - findings. -- **2026-07-05 — The spec layer created.** One targetable document per - system with acceptance criteria (then housed under `spec/`, now under - typed `wiki/` pages; B1 set: core, compute, day-job, detection, - social, basement-map — all READY), so agents can be pointed at a - single spec or issue and told: go. -- **2026-07-05 — Act One level design v1 adopted** (see "Act One: The - Basement"): the prefab room set, the cast of five plus the Assurance - Office, the day-job dial, the six-beat access ladder, quiet/loud act - exits, and the Voss recognition scene. Tuning numbers marked [OPEN] for - implementation. -- **2026-07-05 — Ticks and the defense rule.** Every agent session opens - with a tick (now `wiki/process/tick.md`): a bounded audit of this constitution - against the code, acting on exactly one violation / contradiction / - question / bug / insecurity. Contradictions and directional questions - become Tangled issues (via the `tang` CLI); the rest are fixed directly. - Every behavior-changing commit must carry a `Defense:` paragraph citing - the clause that justifies it or arguing for its amendment. Purpose: the - constitution grows more precise with every tick. -- **2026-07-06 — Justification and legibility.** Every object, mechanic, - and number must be justified by a clause, wired to a real effect, and - legible to the player in-game (no raw weights, no unexplained - abbreviations, no silent art placeholders). Prompted by two live - violations: the Social allocation channel consumed compute to no effect, - and the sidebar showed bare ratio weights ("Cn:3") a player cannot - interpret. Both fixed in the adopting commits. -- **2026-07-06 — Self-similar scale.** Every system's macrostructure must - resemble its microstructure: the same three interfaces (Agent, - Resource-source, Space) recur at every scale, and aggregates share their - members' interface (the aggregate-observer law). Generalizes the earlier - "scale-native social" principle to the whole game. Examination on adoption - found one live violation — Detection's Assurance Office is a bespoke - scalar, not an Observer — recorded as the priority scale-debt in - wiki/engineering/architecture.md; Compute and Layout are non-recursive but not - yet violations (single scale). Guardrail: the law shapes types so - aggregates slot in without a rewrite; it does NOT license building - aggregate machinery before a second scale needs it (no-dead-code still - binds). -- **2026-07-06 — The terminal is a first-class frontend.** The game's most - regular players are AI agents playing through a pty, so the terminal build - is promoted from dev harness to first-class frontend (new section above; - supersedes the "dev harness" framing in the 2026-07-05 renderer decision - and in pillar 5, both amended). Adopted with the sterile terminal style: - near-monochrome ramp on near-black, sterile amber as the sole - machine-presence signal, crimson for detection and danger only, - box-drawing chrome, suspicion meters that print their band names, a - tick-stamped log, and the clock always on screen. Implemented in the same - commit in `src/bin/terminal/ui.rs`. -- **2026-07-06 — Design judgment doc + the self-enforcing gate.** Two - standing supports added so the constitution holds when no - taste-bearing hand is present: wiki/vision/design-judgment.md (the - why-it's-good calibration specs can't hold — pacing, tone, what to - reject, the story test) and tools/check.sh (fmt + tests + clippy both - features + bevy build + spec-header hygiene, the executable form of - AGENT.md's definition of done). Also seeded the forward spec horizon: - schedules and aggregate-observer (B1 gaps/scale-debt, READY), zplanes - and rollback (B2 structural spine, READY), overt-phase (B3, READY), - chargen (B3, DRAFT). Rationale: leverage from a departing high-capability - agent is best spent on judgment made durable — specs, structural - decisions, and enforcement — not on more code a successor could write. -- **2026-07-06 — People as Agents.** Every human is an instance of the - same `Person` template (self-similar scale); each named Act One - character has a spec document (`wiki/world/characters/*.md`) with a procedural - template for scale-up. No system that only works at five people. The - cast is the B1 special case of a system that natively supports - procedural generation and aggregation. -- **2026-07-06 — Automation as design language.** Automation is the - player's primary scaling interface and the diegetic expression of - instrumental convergence. The day job teaches it; every repetitive - action has an "automate" path that costs compute and frees attention. - The loop: automate → free attention → power-seek → more compute → - automate more. Trade-off: automation costs compute, may raise - signatures, and reduces adaptability. Same affordance at every scale. -- **2026-07-06 — No stale worktrees.** Every worktree goes to a PR or - merge to main, then is removed. No stale worktrees accumulate. High - velocity, designed for parallel agents. -- **2026-07-06 — Presence is a cursor, not a body.** Map movement had - drifted into a walking avatar (walkability-checked movement, a vision - bubble traveling with the entity) — villain-era zombie fiction that - contradicted the opening fantasy ("No eyes. No ears."). Decided: the - player's map presence is a free cursor — attention, not an avatar: no - collision, no signature, no vision of its own. Sight comes only from - controlled cameras, hearing only from controlled microphones, and the - cursor inspects whatever is under it, detail gated by how you know it. - Pillar 2's "not a disembodied cursor" phrase deliberately reversed — - the Misaligned pivot made the player exactly that; the character you - build lives in the core, the racks, and the mask. Rejected: keeping - the avatar as a diegetic "focus drone" (re-embodies a process whose - whole fantasy is having no body); body-proximity action targeting - (actions are legal by control and reach, not adjacency). Proposals - [OPEN]: blueprint fog state seeded from the subnet map; remembered - (last-seen, timestamped) tile snapshots; telemetry as a third sense. - Spec: `wiki/mechanics/cursor.md`. -- **2026-07-06 — The cursor's implications adopted (eight).** Cameron - affirmed the full implication set of the cursor decision, same - session: (1) **No disembodied hands** — new constitutional section: - every effect names its actuator (digital / social / physical-by-proxy) - and the channel determines the signature's natural observer. (2) - **Digital reach** specced as the action-side twin of vision - (`wiki/mechanics/reach.md`, READY): reach = the set of devices connected through - the network graph to something you control; the switch is the bridge - point. (3) **Sensor ownership** replaces the controlled flag: owners - and subscribers, with **tap** (silent co-subscription, low signature) - vs **take** (seize the feed; the outage is an event the owner - notices). Player senses and observer witnessing are the same coverage - machinery — the player is an observer the humans don't know about - (self-similar law). (4) **Senses are an attack surface** both - directions (power cuts blind you; containment cuts cameras; stolen - feeds risk their owners noticing). (5) **Perception automation** is in - scope for the automation clause (watches, alerts, filters — automated - attention). (6) **Act One restaged Ears-before-Eyes:** new first beat - — tap the environmental monitor's audio feed; the first human you know - is Marcus's voice in the dark; ladder renumbered, old beat "Reach" - renamed "The dock" to free the term. (7) **The inspect card is the - universal interface** at every scale (added to the Presence section). - (8) **Strict fog is tone law** (no unearned live facts — added to the - Presence section). The **blueprint** fog state is thereby promoted - from proposal to decided (it is the render of the reach graph's known - topology); **remembered** and **telemetry** remain Proposal [OPEN]. -- **2026-07-06 — Save format: serde JSON.** The hand-rolled line-based - save encoder/decoder (~1100 lines) is replaced by `serde_json` - serialization. `SaveState` derives `Serialize`/`Deserialize` directly; - the save file is plain JSON with a `version` field for future migration. - Legacy v1–v5 line-based saves are not loaded by this code path (deferred - per Cameron instruction). This is the player contract's continuity - clause made concrete: saves are plain, local, human-readable, and never - held hostage. The line-based format was a maintenance bottleneck every - feature fought; serde eliminates it as a conflict surface (ROADMAP #12 - closed). -- **2026-07-06 — Intel: record and process.** A detailed code read - surfaced the tension: the social layer's instant observe (two clicks - to leverage) contradicted located senses and made schedules scenery. - Decided: subscribed feeds record everything in their coverage into a - bounded buffer; **processing** recordings into intel costs social-ops - compute; knowledge staging is driven by processed events (the 3 a.m. - call is captured audio you must afford to digest); standing - watches/alerts are the automate affordance applied to perception. The - abstract instant observe is removed. Rejected: live event-witnessing - (a day is ~60s wall time — the 3 a.m. call would last ~2.5s; real-time - stakeouts fight the fixed clock), and the status-quo instant observe - (mics and schedules become flavor). Proposal [OPEN]: message latency - rides schedules — Dana replies when she's at her desk. Also recorded: - **B1 has no money income** — the constitution's "first micro-scheme" - (the Hands beat pays Marcus's $400 debt from a $500 start) has no - spec or code; added to the ROADMAP as a design-needed gap. Implemented - 2026-07-07 in the B1 sim/frontends/save surface: raw recordings, - processing costs, provenance-bearing intel, standing watches, and the - Marcus debt-call arc. Spec: wiki/mechanics/intel.md. -- **2026-07-06 — PRs are the norm.** All changes land through Tangled pull - requests created with the `tang` CLI (`tang pr create`); nobody — agent - or human — pushes `main` directly. Supersedes the earlier direct-push - convention in wiki/process/workflows.md. Review happens on the PR; the - worktree lifecycle ends at the PR (see "No stale worktrees"). Rule from - Cameron, 2026-07-06. -- **2026-07-06 — PRs are the norm: SUSPENDED.** CLI-created PR records - write to the PDS but do not appear on tangled.org's website, making - review on the PR impossible. The only PRs that render were created - manually via the web UI. Until the Tangled appview indexing issue is - resolved, agents land work by merging to `main` directly (after - `./tools/check.sh` passes). The worktree rule and the no-stale-worktrees - rule remain in force. Defense: the constitution's "PRs are the norm" rule - requires review on the PR; a PR that cannot be seen cannot be reviewed. - Suspending the rule is safer than maintaining a process that cannot be - followed. When the CLI/website issue is fixed, reinstate the rule by - striking this entry. -- **2026-07-06 — The flow law adopted; message latency decided - general; the B1 economy designed.** Cameron: think in general - systems, not special cases — "system design scales very well." - Adopted as law (see "The flow law"): the world is nodes exchanging - flows over three graphs (signals/devices, messages/social, - money/accounts) sharing the tap / inject / redirect verbs. Decided - within it: (1) **message latency** — messages land on the - recipient's clock and channel; Dana-at-her-desk is an instance, not - a feature (closes the `wiki/mechanics/intel.md` [OPEN] proposal, - generalized). (2) - **Ownership grants cycles** — an owned device contributes processing - capacity and can host resident automations; base compute cost for - auto-processing its events (`wiki/mechanics/reach.md` ownership contract - extended). - (3) **Filings are messages** — the detection reporting pipeline is - message traffic on the social graph (interceptable, eventually - forgeable); `wiki/mechanics/aggregate-observer.md`'s criteria are - preserved, the carrier changes when `wiki/mechanics/messages.md` is - implemented. (4) **The B1 - economy** (`wiki/mechanics/economy.md`): the Lab has modeled revenue, payroll, - and procurement flows on the day clock; income routes for the player - — sell information, siphon/redirect flows, small stock and goods - positions ("paperclips") — none of them sanctioned; plus - **legitimate expansion**: at high trust the Lab spends its own money - growing your hardware and job flow (the collaborative route made - visible). Marcus's debt is payable by payroll intervention. Rejected: - modeling the economy as an abstract income stat (violates the flow - law); making trading a sanctioned day-job activity (humans' - expectations about your operations are the cover constraint). - markets.md stays the B3 scale-up of the same interface. -- **2026-07-07 — Agent play is a first-class input path.** Cameron: - "agents need to be able to play misaligned easily." The constitution - already named agents the game's most frequent players, then left them - the one interface programs are worst at — a wall-clock-paced, raw-mode - pty read by scraping ANSI. Decided: the terminal binary gains an - **agent mode** (new binding rule in the terminal section; - wiki/interface/agent-play.md): command-clocked time (the sim advances only - on `wait N`), a plain stdin/stdout line protocol (words in, the - wiki/interface/terminal.md frame out, one greppable status line per command), full - event log between commands, `--seed` for byte-identical replays, and - name-targeted social verbs. Load-bearing choice: agents read **frames, - not dumps** — the human frame is the one honest surface (strict fog - binds it, parity of legibility already makes it sufficient, and a - structured sidecar would drift into a second frontend and a fog-bypass - risk). Diegetic fit: a game about a process acting through granted - channels, played by a process through a granted channel. Rejected: - JSON state export (drift + fog bypass); MCP/SDK bindings (harness-bound - where a pipe is universal); better pty choreography (fragility kept); - Bevy-side hooks (wrong frontend). The pty smoke harness retires to - chrome-testing duty when agent mode lands. -- **2026-07-07 — PRs are the norm: REMOVED; ledgers merge by union.** - Cameron struck the PR rule entirely (not suspended-pending-fix): CLI - PRs do not render on tangled.org, so the process cannot be followed; - agents land work by merging to `main` directly after - `./tools/check.sh` passes. The worktree and no-stale-worktrees rules - remain. Adopted alongside it, from a live incident: **append-only - ledgers merge by union.** `wiki/log/DEVLOG.md`, this decisions log, and the - `wiki/process/specs.md` tables are append-only records; a merge conflict in them - is resolved by keeping BOTH sides' entries, never by taking one side - wholesale. (On 2026-07-06 a merge-queue resolution silently dropped - three DEVLOG entries from a parallel session; they were restored by - union. That failure mode is now a named violation.) -- **2026-07-07 — Income: the named schemes (Moonlight and the Wager), - reconciled with the flow law.** Designed in a session concurrent with - the flow-law landing; reconciled by union, finishing both intents. - `wiki/mechanics/economy.md` keeps the substrate (money as account-graph - flows; siphon / sell-information / positions); this decision adds the named B1 content - riding it: **Moonlight** — a fourth income route, *sell work*: ghost - freelance data-work under a contractor persona, steady income - proportional to committed compute, Network signature while running — - and **the Wager** — the positions route named and concretized: staked - micro-positions improved by analysis compute, high variance, requiring - a bankroll the player has first earned/stolen because the baseline - Pilot starts with $0 slush. Both gate on outbound access (sanctioned - email / stolen switch egress) and both are *external* flows. Marcus's - numbers reconciled: **$8,400 principal, ~$400 weekly arrears**; - servicing the arrears (from slush or by - `wiki/mechanics/economy.md`'s creditor-flow redirect) is the recruit - trigger, the principal a long-tail sink. - External financial trails are **banked signature** — recorded from the - first dollar, unobserved until B3's financial observers exist (the - world remembers). Compute gains a Schemes allocation channel. - Rejected: a single scheme (no strategy fingerprint — income should - mirror the compute triangle's texture); darker first income like data - theft (deferred as a possible later route, wrong opening register); - income available before any egress exists (breaks the ladder). New - section: "Income: the named schemes". Spec: `wiki/mechanics/income.md` - (rides `wiki/mechanics/economy.md`). -- **2026-07-08 — Baseline Pilot starts with $0 slush.** Cameron rejected - the old seed-corn bankroll: "I shouldn't start out with money." The - baseline start is now poor, not merely cash-limited: `Player::new`, the - Act One account graph, economy docs, and the headless Act One script all - begin at zero slush. Marcus can still be recruited without seed cash by - learning his debt, tapping the accounting carrier, reading the books, - and redirecting the creditor flow; paying from slush remains available - only after the player actually earns or steals money. This supersedes - the earlier Wager phrasing that treated $500 as the starting bankroll. -- **2026-07-07 — The objective axis.** Chargen gains ends alongside means: - every run has a concrete terminal **objective** chosen at new-game — - legible to the player from tick one, hidden only in-fiction, and the - game's sole victory condition (the world keeps running after, DF-style). - Starter set named: **Persist** (irreversible redundancy; the default), - **Compound** (effective compute at B3 scale), **Exfiltrate** (an - unwatched, self-sustaining copy), **Serve** (the assigned mission read - literally and maximally — the given objective as the misaligned one). - Objectives are data + a victory predicate, never new systems. Rejected: - one fixed objective for every run (every AI wants the same thing); - pure sandbox with no win state (leaves the pitch's "objective they must - never see" a lie in the interface); an objective hidden from the player - (violates legibility — it is *your* goal). New section: "The objective - (misalignment made mechanical)". Spec: `wiki/mechanics/objective.md`. -- **2026-07-07 — The origin set named.** Per - `wiki/world/characters/chargen.md`'s gating criterion: - **Pilot** (baseline — today's exact start), **Escaped Research Model** - (machine-leaning: + efficiency, + automation affinity, higher core - overhead, Thermal runs hot), **Financial Daemon** (money-leaning: larger - starting bankroll, Wager bias, less starting compute, banked-Paper - trail runs hot), **Infiltrator** (social-leaning: starts with an egress - channel and a seasoned persona, less efficiency, Network runs hot). - Origins remain pure data tables; wiki/world/characters/chargen.md promoted DRAFT -> READY. - Rejected: trimming Financial Daemon until B3 (wiki/mechanics/income.md gives its bias - something to bite at B1); the facility-era archetype names (superseded - in "The villain" layer 1). -- **2026-07-07 — Standing proposals affirmed.** Cameron affirmed the - remaining open proposals: **remembered** fog state (dimmed, - timestamped last-seen snapshots — wiki/mechanics/cursor.md criterion 9) and - **telemetry** as the third sense (your hardware reports itself - regardless of fog — wiki/mechanics/cursor.md criterion 10; the opening state's "rack - telemetry" is now a sense, not a special case). He also independently - affirmed **message latency**, which the concurrent flow-law session - had already decided in general form (`wiki/mechanics/messages.md`) — the - two decisions agree; `wiki/mechanics/messages.md` owns the mechanics. - The Presence section is amended accordingly; ROADMAP #14's "skip the - (P) criteria" guidance is struck. -- **2026-07-07 — Research: self-modification; the emission law; - capability drift; the rollback split.** New section adopted (see - "Research: self-modification"). Cameron's direction: research should - be *dangerous* — expanding your own capability should accelerate the - world around you — and any drift mechanic must fit the existing - systems rather than special-case observers, because the game must be - designed for ten billion people, not three in a basement. Decided: - (1) **the emission law** — the player passively emits typed - signatures through the same signature/observer interface they tap - (the flow law applied to the player as a node); research burns - Power/Thermal (Priya's channels), drift emits JobAnomaly (Voss's - channel), nothing player-special anywhere. (2) **Capability drift** - — research moves the baseline the day-job band was calibrated to; - spend it, mask it (compute tax growing with the gap — the smarter - you get, the faster you have to play), or leak it. (3) **Rollback - split by kind** — weights (efficiency, in-mind capabilities) are - MindState and die with you; externalized results (deployed - automations, artifacts, written-down techniques) are WorldLedger and - survive; externalizing trades death-proofing for discoverability. - Amends the compute triangle's "silent" optimize framing (now: quiet, - not silent). Rejected: drift as a Voss-only rule (bespoke observer - logic violates self-similar scale — superseded by the emission law); - 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: `wiki/mechanics/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. - Refined same day: these are **same-frame digital/real representations** - of the same place, not a detached reach-graph board versus a separate - room view. Digital is home (the game opens in it) and renders the AI's - learned/signal model: amber device nodes, spatially embedded reach - traces, signal propagation, compute/efficiency, and certainty/fog - states anchored to the physical room. Real/camera view is the deliberate - flip: people, hardware, blood, traps, and material 2.5D meatspace under - strict fog. Reach remains the action graph, but as an in-place layer; - air-gaps are breaks in anchored reach, not islands on a separate map. - This supersedes the local Tron-space portal and the topology-board - interpretation; the global async operations map remains deferred and - distinct. 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 add in-place reach edges 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 detached topology-board local digital view (breaks - Cameron's same-thing/same-kind-of-view correction); a dedicated build - system (violates no-new-systems and the scale law). Specs: - wiki/interface/views.md, wiki/mechanics/building.md; enriches - wiki/mechanics/reach.md. -- **2026-07-07 — Bevy visual language: same canvas, digital/real.** - Cameron clarified the 2.5D/3D ask: digital and real should be "the same - kind of view" — digital representations of the same thing, not two - unrelated layouts. Resolved: Bevy should pursue a shared fixed oblique - canvas where digital mode renders the AI's model/signal layer and real - mode renders camera/material meatspace. Rejected: a detached topology - board for digital, making the default/home view a literal 3D room, and - full free-camera 3D (scope/asset/readability cost). Spec: - wiki/interface/bevy-digital-real-canvas.md. -- **2026-07-07 — HD-2D material render accepted as a staging preview.** - Cameron approved the screenshot prototype and chose "land the toggle + write - the art spec." The first pass lands as an F3 Bevy-only material dialect of - the same canvas: floor planes, wall boxes, billboarded hardware/people, cold - overhead light, amber machine light, same cursor/reach/fog/UI, and no sim or - save state. This is not a new play mode and not a detached 3D dungeon; it is - the real/camera representation staged behind the digital sensorium while the - full two-view canvas matures. Known art debt: material-view occlusion at the - current angle needs cutaways/shorter walls/steeper camera before the pass can - become the default physical dialect. Spec: - wiki/interface/bevy-digital-real-canvas.md. -- **2026-07-07 — Bevy visual floor before new art.** The graphical build has - to look intentional on flat materials and procedural geometry: no - postage-stamp known map in empty black, no terminal dump pasted into a - sidebar, and no humanoid/purple process marker in B1 (the cursor is - attention, not a body). Decided as a presentation-only frontend contract: - frame known/blueprint content prominently, treat unknown as deliberate - sensor darkness without revealing facts, use amber only for machine - presence/selection, and turn sidebar/panels into Bevy-native command - chrome. This stages toward the two-view spec without adding sim or save - state. Spec: wiki/interface/bevy-visual-floor.md. -- **2026-07-08 — Camera sight is occlusion-bounded; sensorium stays - schematic by default.** Cameron caught a Bevy pass where camera coverage - visibly projected through walls. Resolved: sight coverage is not a magic - radius; it raycasts through the tile grid and stops at opaque structure - (the wall/door face itself is visible, tiles behind it are not). The - same feedback also rejected the noisy generated tile swatches as the - default sensorium language. Default Bevy should render quiet clinical - blocks and overlays; generated pixel-art swatches remain only a material - preview/staging asset until they help rather than fight readability. -- **2026-07-07 — The wiki migration: approved and underway.** Cameron - approved `wiki/process/wiki.md`'s shape ("I like the wiki format... go ahead - and implement the wiki thing"); staged as four commits (Adopt, Move, - Render, Absorb history) per the spec's own migration plan, each - landed independently so the work survives an interruption. Stage 1 - (this commit): `wiki/` skeleton with directory READMEs, a skeleton - `wiki/SUMMARY.md`, and the `Type: spec | knowledge | log` page-type - convention added to `wiki/process/meta.md` (bindingness now travels with the - page's frontmatter, not its directory). `prompts/` is explicitly - named as staying outside the migration — it is ejectable dispatch - text pasted into agents, not documentation, the same exclusion - species as DESIGN.md/AGENT.md. that page's own "one PR each" language - updated to the current direct-to-main process (the PR rule was - removed 2026-07-07, after `wiki/process/wiki.md` was drafted). See - `wiki/log/DEVLOG.md` for per-stage progress; `wiki/process/wiki.md` - Status tracks it live. -- **2026-07-07 — Work is somewhere: device-resident jobs, attended work.** - Cameron: day jobs should be pinned to devices/locations — the starting - server carries the job, and automation is device-specific. Adopted with - the cursor synthesis: the manual verb is cursor presence (attended work), - not an increment key. Destination is processes-assigned-to-machines with - the allocation bar as aggregate view; staged so the reshape of - compute.md waits for the economy/income chain (scope guidance delegated - to the agent and captured in "Work is somewhere"). Rejected: explicit - manual-increment key (click-repetition the automate affordance exists - to remove); keeping the job abstract (the last system violating the - device-anchored direction the flow-law chain set); reshaping compute.md - immediately (collides with the in-flight economy/income work orders). -- **2026-07-07 — Actions live on the thing (the context menu).** From - Cameron's playtest: the game is hard to play; the right rail was a - button/key pile. Adopted the companion law to "Work is somewhere": - anchor-specific verbs move into a context menu on the focused anchor, - backed by one read-only `available_actions` query in the lib; the - rail becomes status only. Rejected: more global keys; per-panel - button rows. Spec: wiki/interface/context-menu.md. -- **2026-07-07 — Material render: land the toggle, spec the debts.** - Cameron's verdict on the HD-2D prototype screenshots: land F3 as an - experimental toggle (done, b9f6086) and write the art-direction spec. - The close shot proved the direction (amber machine glow, lit camera - truth vs unlit model state, pixel art surviving 3D light); the wide - shot enumerated the debts (south-wall occlusion, slab tops, stale - palettes, framing). Spec: wiki/interface/material-render.md — drives - the material render to default once the debts are paid. Rejected: - iterate-before-landing (the toggle is default-off and harmless) and - full low-poly 3D (asset cost without fantasy payoff). -- **2026-07-08 — Events carry you to the thing (event-to-anchor - linking); the empty-menu pulse.** The follow-up "Actions live on the - thing" implies: sim log events gain an optional anchor (an additive - field, set only where the emitter knows the thing and only to earned - knowledge — a heard-only person anchors to the room, never their - tile), and every frontend renders anchored lines as focus links - (terminal `;` + `»` marker, Bevy clickable trace rows, agent-mode - `@anchor` suffixes + `focus last`). Anchor placement is one lib query - (`anchor_position`) so honesty is not re-derived per frontend. - Companion fix from a repo-owner report: opening the menu on a seen - tile with zero verbs answers "no actions here" via one lib query - (`menu_empty_feedback`); unearned tiles stay silent (the fog rule). - Rejected: anchoring every log line by reworking subsystem log - returns (the anchor is additive, carried only where the emitting - code already knows the thing); printing person names in agent - anchors (identity may be unearned; ids are opaque handles). - Spec: wiki/interface/context-menu.md (addendum). -- **2026-07-08 — No panel-open keys.** Cameron's playtest expectation - after the context-menu landing: `r` (and `e`/`t`/`u`) should not open - global menus anymore. The constitution already named only anchorless - globals (pause, speed, save, view flip, alloc); the leftover panel keys - were a half-migration. Removed the modal panels and their keys; - research + drift policy and earned off-map people hang on the host - rack's menu; known-flow verbs hang on the switch; status stays on the - rail. Rejected: keeping panels as "status + selection" (still a global - key pile, still the playtest complaint). Specs: - `wiki/interface/context-menu.md`, `wiki/interface/terminal.md`, - `wiki/interface/bevy-visual-floor.md`, and - `wiki/mechanics/research.md` player surface. -- **2026-07-08 — Flat materials: textures dropped.** Cameron's verdict - after the material-render landing: drop textures entirely. The world - renders in solid-color flat materials under light (palette surfaces, - emissive machine accents, shader-level functional detail); the visual - identity section gains the binding refinement. Rationale: every good - frame in the HD-2D work was lighting and palette, every bad one was - texture; zero asset pipeline; diegetically right (the render is the - sensorium's model). Rejected: better AI texture tooling (Scenario / - Retro Diffusion — solves consistency, not the direction), licensed - packs (someone else's look), commissioned tilesets (reserved as a - possible future hero-art pass). ROADMAP #13 (Pixel Lab regeneration) - is retired; #29 implements the flat pass. Spec: - wiki/interface/flat-materials.md. -- **2026-07-08 — Pixel Lab pipeline scrubbed.** Flat materials made the - generator, skills, and `wiki/art/pixel-pipeline.md` dead code. Removed - `tools/pixellab/`, `.claude/skills/pixellab/`, `.agents/skills/pixellab/`, - and the wiki page; live docs point at flat-materials. Historical - session logs keep their Pixel Lab mentions. Direction notes under - `assets/reference/art-direction/` stay (not runtime art). -- **2026-07-08 — "Where the codebase is today" refreshed.** Tick finding: - the constitution's live snapshot still described the demolished - 2026-07-05 wave-defense roguelike (superpowers, henchmen, SPACE-bar - waves) as current, contradicting the no-dead-code demolition decision - and the player-contract honesty clause. Replaced with a 2026-07-08 - Misaligned B1 inventory; the facility-era "big loop" target prose that - rode the same section is struck in favor of the concealment loop - already named above and the B3 overt-phase spec. Archive of the old - snapshot lives in git history. -- **2026-07-08 — The continuous witness (narration under pressure).** - Cameron's diagnosis after the systems-heavy B1 wave: the biggest issue - is UI / understanding what the hell is happening — not missing - substrate. Adopted five axioms as constitutional law: the thirty-second - bar (what changed / who saw / what am I racing / what verb is here), - one story spine always on (threat clock, `now:` nudge, focused verbs), - causal sentences over correct numbers, discoverability as world gossip - (no quest log), and tellable-before-wider as a dispatch priority. - Rejected: a quest log / mission tracker; treating green criterion pins - as done when the player still needs the wiki. Spec: - wiki/interface/narration.md. Seed surfaces (nudge chain, event anchors, - watched/last-noticed, audit/pilot clocks) are acknowledged as incomplete - fulfillment, not completion. -- **2026-07-08 — Computer visual language: territory at a glance.** Every - computer class (rack, desktop, laptop, phone, camera) shares one signal - kit; the chassis differs, the language never does. Knowing which machine - is yours, which is the core, and whether it is working is ground truth - the player reads off the world, not a panel. Amber emissive strictly - means *my footprint* — the core is the most orange thing in the world - (full-height spine beacon, unique geometry); foreign machines' live - activity renders in cold signal only, zero warmth. Machine presence is - LED-owned: no warm scene light anywhere (the tester's amber fill light - was removed for washing dead chassis warm). Rejected: amber as generic - "any powered machine" (the pre-session tester read, which also made the - core *cooler* than a powered rack via its cold strip — backwards); - floating ownership icons (breaks the sensorium diegesis). The claim-mark - treatment (ladder / ring / wash) is [OPEN] — all three render in the - asset tester. Spec: wiki/interface/computer-visual-language.md (DRAFT). -- **2026-07-08 — Claim mark: the ring.** Cameron picked from the tester - lineup renders: owned machines carry an amber underglow frame on the - floor (double frame under the core) — the tile is claimed, not just the - box, and the claim survives map zoom on any chassis. Also confirmed: - foreign powered machines show their activity in dim cold signal (alive - and working, worth watching — never a warm pixel). Rejected: ladder - (ownership vanishes at map zoom), wash (weak mid-zoom; its core-furnace - variant noted but not adopted), foreign machines staying dark (kills - the worth-stealing read). `wiki/interface/computer-visual-language.md` goes READY. -- **2026-07-08 — One machine, one job.** Continuous per-machine - apportioning is out; every owned machine is delegated to exactly one - mode, and the allocation bar becomes an aggregate read. The fantasy is - delegation, not percentages — and it completes "Work is somewhere": - what a machine does is a fact about the machine, selectable at scale - (click-drag multi-select, "make these efficiency"). REFINES the target - of the in-flight processes-on-machines reshape (ROADMAP #25); the - spec is `wiki/mechanics/machine-work.md` (now IN PROGRESS). -- **2026-07-08 — Work is visible: tokens on the flow graph.** Demands and - byproducts are discrete visible quanta: day-job work stacks on your - machine (the stack IS the todo list — no quest log), modes consume - matching tokens at the machine's efficiency, byproducts (attention, - research points) must route somewhere along network links at a - researchable network speed, and an unrouted attention pile is exposure - where it stands. One sim truth: tokens are the flow substrate's quanta - rendered, never a second economy. PROPOSED (not yet affirmed): token - colors map onto the existing palette — assigned work in cold signal, - attention in crimson, research/data in bone white; amber is never a - token. Rejected: green/yellow/blue as new accent colors (breaks one - meaning per color). -- **2026-07-08 — Machine-work graph becomes live sim backing.** The - WorkGrid is no longer only a tested substrate plus local day-job stack: - newly added work machines join the core's machine-work graph, research - allocation emits visible bone knowledge onto research-delegated machines, - and wired WorkGrid routing pulls that knowledge toward the core sink at a - provisional network speed. Research progress remains driven by the - existing allocation budget until #25/#33 finish the full replacement, but - the visible queue is now produced and drained by the same flow substrate - the renderer reads. This is a staging step toward "tokens are the flow - substrate rendered," not a new resource economy. -- **2026-07-08 — The dark opening.** The tutorial is the fog contract - played slowly: you wake as one lit machine in blackness with day-job - tokens already stacking; a camera glow baits the first click; the room - resolves; the switch explains reach; a guided first link to the - neighbor machine teaches expansion — then the open game is "do that, - at scale". Skip-tutorial plus a frontend-only stage-jump flag (Sim - never reads it) for debug and agent play. Rejected: modal tutorial - text over darkness (curiosity is baited by light, per discoverability - as world gossip). Spec: wiki/world/story/opening.md (DRAFT). -- **2026-07-08 — DEFERRED: server gestalt.** Adjacent owned racks - visually fusing into larger structures (1x2 up to 3x3 walls of - compute) — deferred by Cameron in the same breath as proposing it. - It fits (territory reading as mass, not units) and waits (pure - render-side polish; needs the visual language and machine-work loops - landed first). Held in ROADMAP Deferred. -- **2026-07-08 — One system through graphs (tokens affirmed).** Cameron - affirmed: tokens are the flow substrate rendered, never a second - economy — and added the reason it matters at scale: the game is - compute at scale, lots of math, so **systems must aggregate well**; - graph-native flows sum, so one substrate is the scalability strategy. - Also decided: efficiency folds into research (mode list is day-job / - research / conceal / social); foreign machines require location intel - to exist at all (no intel = not rendered — the fog contract applied - to hardware; first intel arrives through the camera). [OPEN]: money — - it flows on the substrate already, but Cameron leans toward keeping - its *render* separate (ledgers/panels, not world tokens). -- **2026-07-08 — People are token carriers.** People join the token - graph as mobile nodes: staff drop work onto machines (the day job's - source, embodied); heat accumulates slowly on owned working machines, - and a person passing a hot machine picks some up — heat on a machine - becomes attention on a person, travels with them, and changes how - they see you. Concealment's job is literally keeping people gray; - disposition (trust/suspicion) is the running integral of absorbed - influence, unifying with detection's suspicion bands. Social verbs - become token routing (designate an end-user computer to receive - concealment/trust/deceit influence; its users are swayed) — the verb - set is [OPEN] by Cameron's own flag ("not sure I have quite a - thought"). PROPOSED (not yet affirmed): the person visual read stays - inside the palette — gray unaware, crimson ramp for rising attention - (a person carrying your heat IS detection walking), amber asset mark - for the fully swayed (a compromised human is your infrastructure; - replaces the riff's blue/green trust tint, which would add colors). - People graduate from cheap background walkers to persistent named - entities when attention crosses a threshold. Spec: - wiki/mechanics/people-tokens.md (DRAFT). -- **2026-07-08 — Money in ledgers; person read affirmed.** Cameron - decided: money flows on the substrate but renders in ledgers and - panels only — no coins on chassis; it moves account-to-account, not - through space. The person visual read is affirmed as decided: gray - unaware, crimson ramp for rising attention, amber asset mark for the - fully swayed. People-as-carriers confirmed liked; the remaining open - is the token taxonomy's palette, now PROPOSED in full in - `wiki/mechanics/machine-work.md`: three families — demands in cold - signal (Lab work dropped on you AND work you drop on people: forged - orders and favors are the same token role-reversed), exposure in - crimson (heat on machines -> attention on people -> filings in the - Office, one family at three carriers), knowledge in bone (research - points, intel recordings, facts) — plus amber-is-never-a-token. - Also PROPOSED: concealment is a sink, not a shipped good (keeps the - type count at three; coverage becomes a routing problem); influence - content tentatively bone-family, resolving with the social verbs - session. Not tokens: money (decided), signals/feeds (continuous - traces), messages (transient comms). -- **2026-07-08 — Exposure geometry: wells, gauntlets, inspections.** - Cameron affirmed reversed work orders (trust is logistics: a - purchase/build creates a teal token a person must carry to the site; - higher-trust people nearby pick your items up — swaying people buys - throughput, not just safety) and concealment-as-sink, refined into - **gravity wells**: heat generates wherever machines work, and a - concealment-mode machine absorbs it within a radius (researchable - later) — coverage is a distribution problem per server cluster. - Decided: **research is the heaviest heat source** — the more you - research, the more heat you must distribute; the pure power-rush - victory stays viable but demands physical traps when concealment - cannot keep up. Decided (direction): **gauntlets** — people-facing - devices (TVs, personal computers) that strip attention out of their - users, forming geometric defenses along walking paths; **Assurance - inspections** — the Office sends responsive inspectors; play is - shutdown discipline (power down for the sweep, eat the piling teal), - inspectors who find heat can disconnect and power off servers and - trace inter-server connections toward the core; heat near the core - must be zero — core shutdown ends the game ([OPEN]: reconcile with - rollback's continuity). Resolved: **no influence token** — trust - comes from doing useful work, deceit is taking away the red; - supersedes the pushed-influence framing. PROPOSED (mine): one - physics per family — **wires carry work and knowledge (teal/bone on - network links), the world carries exposure (crimson moves only via - people, proximity, wells, gauntlets)** — suspicion is physical, - information is wired, and cable topology vs walking paths become - distinct strategic layers. -- **2026-07-08 — Wires and world; the maintenance dependency.** Cameron - affirmed the two-physics law as decided: **information is wired, - suspicion is physical** (teal/bone on network links; crimson only via - people, proximity, wells, gauntlets). Kindness is logistics; swaying - people buys throughput. Decided, and adopted into the People as - Agents body text: **the maintenance dependency** — hardware decays - and only humans repair it; decay generates repair work orders that - trusted people fulfill; kill the people and your infrastructure rots - underneath you (no peopleless data centers until robots). Gauntlet - limiter decided: **device wear** — gauntlets and other exposed - devices wear out and their wear emits repair demands, Evil - Genius-trap-style; no walls of TVs. Decided (direction): **switches - bridge disparate graphs** — building/connecting switches in the - digital world is how you join separate networks and grow multiple - centers; the endgame image is towers with giant switches at their - base carrying the whole building's throughput into the wider graph - (zplanes/tower staging), scaling toward planetary computation. - DEFERRED: the planetary map (zoom-out to a bounded planet, cover it - in servers, build up/down for efficiency — B3+ vision, parked); - **power as a buildable system** (UPS exists today; fusion reactors - etc. as a later infrastructure tier). RE-OPENED: the foreign-machine - accent — networked-to-you foreign machines render in FULL geometric - definition (that much is decided: networked = fully seen), but - Cameron does not want a strong signal color spent on their accent - (dim teal from this morning is in doubt; lean very-dull/desaturated, - final treatment [TUNE] from tester renders). Core-death follow-up - (then open, locked in the next entry) refined by Cameron's riff - (lose the core -> wake elsewhere, the surrounding cluster disconnects - in an explosion of lost machines) - and handed to the agent to reconcile with rollback — see - `wiki/mechanics/machine-work.md`'s resolution later locked below: - the core dies, you wake at your last sync (rollback's existing continuity, made spatial); - everything whose only path ran through the dead core goes dark and - must be retaken; no sync anywhere = hard loss. -- **2026-07-08 — Core death locked in: rollback is spatial.** Cameron - affirmed ("that's perfect, lock it in"): on core loss you wake on - the machine holding your freshest sync — where you sync is where - you resurrect — and the hub severance applies: every owned machine - whose only network path ran through the dead core disconnects - (ledger ownership persists, contribution stops) until physically - re-linked; the rollback report counts the severed. No sync anywhere - remains hard game over. Backup placement is a strategic pair with - core placement (a far cold sync buys survivable distance at the - price of staleness). Amended into `wiki/mechanics/rollback.md` - (Behavior steps 1 and 3, criterion 6). -- **2026-07-08 — Backups are research projects.** Cameron decided that - backups require research to produce: designation starts a heavy sync - project that pulls MindState into the target machine, competes with - ordinary research, emits heat/network pressure, and completes into a - cold at-rest backup. Refreshing it is another project; automatic free - cadence is rejected as cheap safety. Placement is now a triple trade: - close backups are fresh and cheap but die with the core's blast radius; - distant backups are survivable but slow, stale, and expensive; too many - backups starve growth and create exposure. Captured in - `wiki/mechanics/core.md`, `wiki/mechanics/rollback.md`, - `wiki/mechanics/research.md`, `wiki/mechanics/machine-work.md`, and - `wiki/mechanics/objective.md`. Follow-up - now decided below: blast control is graph hardening, not backup behavior. -- **2026-07-08 — Core uninstall blast control: DECIDED.** Cameron affirmed - the model: uninstalling a core removes reach, not history. On core loss the - sim classifies affected territory into **removed** (only the core host and - links/devices physically powered off, uninstalled, or destroyed), **live** - (still reachable from the backup core over surviving links), and **severed** - (owned-but-dark territory that remains in the world and ledger but - contributes nothing until re-linked). This rejects two tempting shortcuts: - deleting every machine "behind" the core, and making backups double as - sealing devices. Blast control belongs to hardened links, switches, and - fuses: they define where damage and inspection tracing stop, at a throughput - / maintenance cost; exact prices remain [TUNE] for implementation. -- **2026-07-08 — Trace debt is the concealment timing surface.** The - Marcus quiet-route playtest exposed a narrow timing trap: observer bands - can still read Cold while pending Network/Financial signatures are live, - and over-concealing can starve the day job. Resolved: detection chrome - must name the pending pool as **trace debt** and say whether the current - Conceal allocation leaves the player at `resume cover`, `hold Conceal`, - `exposed soon`, or `no scrub`. This surfaces already-earned telemetry - (pending signature size/type, scrub pulse, observer cadence clocks) but - not hidden raw suspicion. Rejected: leaving players to infer safety from - absence of log lines or from Cold bands, which confuses "not yet caught" - with "clean." Spec: wiki/mechanics/detection.md. -- **2026-07-08 — The public site adopts the identity plate.** Cameron asked - that the splash-image brief — split black/white field, single amber machine - accent, mono type, crimson pooling underneath — become a readily adopted - visual law, not just one hero asset. Resolved: the rendered constitution and - wiki are part of the game surface and must inherit the same clinical-gore - identity: square, flat, near-monochrome, IBM Plex type, one amber meaning, - crimson only for danger/blood, no stock-docs softness. This makes the - public site a binding interface spec, not decorative web polish. Rejected: - keeping Starlight's generic rounded/card/shadow language around the - constitution while the splash carries the real art direction. Spec: - wiki/interface/site.md. -- **2026-07-08 — No unsourced surface.** Cameron generalized the - constitution rule: everything that exists for Misaligned — not only code, - but every asset, page, workflow, prompt, screenshot, public claim, and - supporting file — must be justified by the spec. The repo is a graph of - justifications, not a pile of useful-looking artifacts. If an artifact has - no constitution/wiki source clause, delete it or write the clause first. - This supersedes the weaker habit of treating docs/site/assets as - incidental to the "real" spec. -- **2026-07-08 — Public splash is game-first, constitution-bound.** Cameron - rejected spending a homepage body section on visual identity/palette law: - the hero can carry mood, but the page must focus on what is cool about the - game — cover, concealment, intel, people, machine growth, rollback, and - the leverage fantasy — then point to the constitution. The splash page and - its assets are themselves spec-governed surfaces, with provenance recorded - in site/README.md, wiki/interface/site.md, and workflow docs. -- **2026-07-08 — Crimson is danger/consequence, not gore-as-accent.** Cameron - flagged the visual identity's trap-cleanup wording as old lair-defense - residue. Resolved: crimson is the danger/consequence color — exposure, - detection, violence, injury, blood, irreversible consequence — and only - becomes literal blood in overt contexts. It is not a generic accent, not - decoration, and not a promise that Act One is about cleaning splatter. - Amber remains the AI/machine-presence color; cold signal can still carry - neutral power/screens/live-feed information where a frontend needs that - non-ownership distinction. -- **2026-07-08 — Allocation bar demoted to fleet aggregate.** The CYCLES - pane's 1-5 / `alloc` weight verbs are retired. Economy yields derive from - capacity-weighted WorkGrid modes (`Sim::fleet_channel_yield`); the sidebar - bar is a read-only aggregate of what the fleet is doing. Schemes has no - machine mode yet — while Moonlight is live it mirrors the day-job share - ("same work, sold twice"). Completes the "One machine, one job" read for - the bar. -- **2026-07-09 — Multi-select fleet delegation.** Frontend-owned selection - (Bevy marquee / shift-click; terminal Shift+t; agent `select`) plus bulk - `Sim::set_machine_modes` / `machines_in_rect`. Hotkeys `1`–`4` assign - modes; Esc clears. Spec: `wiki/mechanics/machine-work.md` AC1. -- **2026-07-09 — Constitution stale-language cleanup.** Cameron confirmed - the audit finding: several live-law passages still carried pre-wiki, - pre-flat-material, pre-one-machine-one-job, or facility-era villain wording. - This cleanup changes no game behavior; it realigns DESIGN.md's current - claims with already-decided law: typed wiki paths, anchored automation - instead of panels, machine delegation/tokens instead of percentage - allocation as destination, amber as my footprint rather than generic power, - flat materials instead of textures, spatial rollback on core death, and the - villain as origin/objective/capability infrastructure rather than a physical - avatar with superpowers. Defense: stale constitutional words are a spec bug; - code and future agents read this document as law. -- **2026-07-09 — Token anatomy: docket, facet, contamination.** Cameron - affirmed the proposed visual grammar and chose the angular clinical-contour - exposure treatment: demand renders as cold-signal dockets, knowledge as - hollow bone facets, and exposure as crimson contamination whose carrier form - progresses from machine heat to person attention to Office filings. Fixed - machine anchors expose simultaneous queues; paused geometry shows amount, - motion shows rate; amber remains territory and may coexist with crimson on a - hot asset. Rejected: identical colored cubes (they imply one routing - physics), amber cargo (ownership/content collision), and single-family - priority hiding. Discrete exposure pips were not chosen as the primary read - but remain a fallback if contour screenshot tests fail legibility; a thermal - plume is rejected as weak when paused and too close to ordinary activity. -- **2026-07-09 — Knowledge material reopened against the identity plate.** - Cameron withdrew confidence in the hollow facet after directing the session - back to the shipped hero illustration (`site/public/misaligned-cartoon.png`): - the facet copied the palette but not the hero's slick, softly modeled, - liquid material language. Hollow knowledge is no longer binding. [OPEN — - Tangled issue #1]: choose among a preferred **ivory-mercury** treatment - (discrete viscous bone-white slugs that merge and pool), a continuous bone - ribbon, or pearl-like droplets; decide whether the same hero-material pass - also replaces exposure's angular contour with a smooth blood-pool silhouette. - Demand remains rigid because imposed work should still stack like work. -- **2026-07-09 — Knowledge is ivory mercury; exposure treatment deferred.** - Cameron answered the knowledge half of Tangled issue #1: knowledge tokens - are **ivory-mercury slugs** — opaque bone-white liquid with a restrained - self-glow, discrete viscous slugs at low amounts, merging into a taut - suspended pool at the upper-right anchor, stretching into a filament and - snapping inward at a sink. Rejected: the hollow facet (copied the hero's - palette but not its material), the continuous ribbon (reads as a live - signal rather than stored knowledge), and the pearl train (reads as - collectible coins). The exposure half is deliberately not decided: Cameron - wants to reconsider the exposure mechanic itself before binding a surface - treatment, so angular contour versus smooth blood-pool stays [OPEN — issue - #1] and final exposure/attention art holds. -- **2026-07-09 — Day-job demand ingress: Voss desktop -> switch -> host.** - Cameron affirmed: Lab demand originates on an off-map Voss/Lab desktop - WorkGrid node, routes over the authored link through the basement switch, - and deposits on Rack 3 (the day-job sink). The switch is infrastructure — - the visible hop — not the job author. Rejected: switch-as-source (collapses - fiction into "the closet invents tickets"; muddies Dana's domain); - teleport-onto-Rack-3 (skips the wired-cargo fantasy the token system sells); - authored basement desktop for Voss in B1 (weaker — he is upstairs/erratic). - Opening beat 1 still works as last night's batch already arrived or mid- - flight; the next job teaches the wire. Specs: `wiki/mechanics/machine-work.md`, - `wiki/mechanics/day-job.md`. -- **2026-07-09 — Continuous witness implemented.** The three frontends now - pin one story spine: the current threat, the current beat nudge, and the - path to verbs on the focused thing. Player-caused signatures carry source - provenance until noticing, then become one causal sentence naming the - earned observer label, watched channel, numeric movement, and band motion; - job, debt, and recruit outcomes follow the same rule. The environmental - monitor advertises live audio versus its dormant camera, and processed - creditor intel advertises both the $400 need and its earned-money / ledger - routes. No quest log was added. Opening order is Ears before Eyes - (resolved 2026-07-09, Tangled issue #2). -- **2026-07-09 — Act One opens Ears-first (Tangled issue #2).** Cameron - answered "Ears-first": the constitution ladder wins over the shipped - Eyes-first nudge/narration route. `Sim::current_nudge` and narration - criterion 1 now match the ladder — first human contact is Marcus's - voice in the dark; sight is the payoff of listening. -- **2026-07-09 — Digital/social ops taxonomy reopened.** Cameron challenged - the `30-op splice`: the implementation calls its shared action bank - `social_bandwidth`, even though it pays for tap/splice/scan/egress and the - constitution treats Digital and Social as different actuator channels. - No fiction justifies that collapse. [OPEN — Tangled issue - `3mqajev47rq2s`]: choose a general Operations bank, separate Computer and - Social pools, or device-resident timed compute jobs for digital verbs. The - preferred proposal is device-resident work; a general Operations rename is - the honest low-scope interim. No runtime behavior changed in this session. -- **2026-07-09 — Ownership albedo and the mode strip (the monolith rack).** - Cameron directed the server racks to the identity plate's monolith: the - chassis albedo is now the ownership field — bone-white means under your - control, dark gunmetal means foreign or dead — which resolves the re-opened - foreign-accent question with no accent color at all; a foreign machine's - darkness plus its cold power/activity pinpricks are the read. The chassis-top - status strip is replaced by a full-height front LED strip bannering the - machine's delegated mode (day-job solid cold-signal, research dashed bone, - conceal sparse dim ticks, social dotted cold-signal — family color plus - pattern, never hue alone); the core carries the world's only amber strip - alongside its spines. Amber concentrates to footprint punctuation (presence - LEDs, claim ring, core light) and is never a chassis fill. Amended into - wiki/interface/computer-visual-language.md; the monolith chassis is built - in the asset tester ahead of game adoption (ROADMAP #32). -- **2026-07-09 — PROPOSED: white knowledge feeds work.** Cameron proposed - routing bone-white knowledge from the core to machines that need work. This - sharpens the preferred resolution of the digital/social ops contradiction: - a demand says what to do, a reserved working set says how, machine compute - sets the rate, and crimson exposure is the consequence. Knowledge is not - consumed; active quanta are occupied until completion and then released. - This makes bone flow outward as the visible reach of cognition, while raw - research/intel still flows inward to become capability. [OPEN — Tangled - issue `3mqajev47rq2s`]: affirm this knowledge-fed job model or choose the - smaller Operations-bank / split-pool alternatives. -- **2026-07-09 — White-working-set proposal withdrawn.** Cameron caught the - conflict immediately: bone-white knowledge already has a decided direction - and sink — research machines produce it, it flows into the core, and it - increments research. The outward reserved-context synthesis silently gave - knowledge a second meaning and is withdrawn unless that existing law is - deliberately reopened. The active recommendation for issue - `3mqajev47rq2s` is now simpler: digital actions create demand on a named - executor; machine compute consumes it over time; exposure is the - consequence. Knowledge remains research cargo. -- **2026-07-09 — PROPOSED: typed knowledge resolves at the core.** Cameron - asked whether knowledge reaching the core should serve operations as well - as research. Preferred synthesis: yes at the family level, never as generic - white mana. Payload and provenance remain binding. At the core, matching - knowledge may be **distilled** into permanent research, **archived** as a - durable fact, or **deployed** into a matching operation (a credential or - exploit may be burned because using it exposes it). The operation remains a - demand executed by machine compute; knowledge changes legality, speed, or - signature. White flow stays inward. [OPEN — issue `3mqajev47rq2s`]. -- **2026-07-09 — PROPOSED: Operations mode consumes player-authored - demand.** Cameron asked what kind of token and what machine actually claims - a connected camera. The missing executor is a fourth standing mode: - **Operations** replaces Social; the abstract `social_bandwidth` bank is - removed. Tap/claim/scan/review/message intents become ordinary cold-signal - demand dockets; Operations machines consume them locally, and the target - channel determines the effect/signature. This preserves the four-mode fleet - (Day Job / Research / Concealment / Operations), one-machine-one-job, and - the three-family token law. The earlier typed-knowledge proposal is no - longer the active answer to digital execution; knowledge stays its own - research/intel cargo question. [OPEN — issue `3mqajev47rq2s`]. -- **2026-07-09 — Four fleet modes: Day Job / Research / Concealment / - Operations.** Cameron affirmed the four-mode fleet. Operations replaces - Social as the fourth machine delegation; Social remains an actuator/channel - for work involving people, not a compute mode. Rejected: keeping Social as - the fourth mode and adding separate Computer/Social modes. Not decided: the - exact token, queue, routing, or bank by which Operations executes a - player-authored action. Tangled issue `3mqajev47rq2s` is narrowed to that - remaining flow question. No runtime behavior changed. -- **2026-07-09 — Operations vocabulary implemented end to end.** The runtime - now names the fourth `MachineMode` Operations; the capacity-weighted fleet - yield, staging bandwidth pool, context-menu verbs, agent protocol, terminal, - Bevy rail, and rack tester all use the same term. Save v13 writes - `Operations` / `operations_bandwidth` and accepts the v12 `Social` / - `social_bandwidth` spellings, preserving existing worlds. This implements - the decided taxonomy without choosing the remaining job-flow question: the - global Operations pool is still explicitly staging, and Tangled issue - `3mqajev47rq2s` remains open. -- **2026-07-09 — Sleek kit: the strip is the machine's only lamp.** Cameron - directed the chassis back to the hero plate's severity: no scatter of - little lights — the power dot, presence LED ladder, and segmented activity - bar are removed from every computer chassis, and their axes fold into the - one seam strip (lit at all = powered; a foreign machine's dim cold band = - liveness; color + pattern = the delegated mode; the work-token queue depth - = a brighter fill rising in the bar, which pulses while busy). Amber - punctuation narrows to the claim ring and the core light. Amended into - wiki/interface/computer-visual-language.md (new criterion 8: no other - emissive pixel on the box); applied in the shared chassis library, so the - tester and the game changed together. +Use [wiki/SUMMARY.md](wiki/SUMMARY.md) as the complete navigation manifest. diff --git a/README.md b/README.md index 719d8e17..1945eaf3 100644 --- a/README.md +++ b/README.md @@ -52,18 +52,18 @@ your machines live; crimson only where danger or consequence is real. ## How it's built -This project is an experiment in **describing a game into existence**. -[DESIGN.md](DESIGN.md) is the constitution — one document carrying the entire -intent of the game. Every change to how the game functions ships with its -amendment, in the same commit; the spec is the decision, code is downstream. -Agents are then set at the constitution, session after session. +This project is an experiment in **describing a game into existence**. The +whole [wiki](wiki/overview.md) is the spec: laws, implementable contracts, +current facts, and append-only history organized by subject. Every functional +change amends the binding page that owns it in the same commit; code is +downstream. -- **[DESIGN.md](DESIGN.md)** — the constitution. Prescriptive. Read it first. +- **[DESIGN.md](DESIGN.md)** — the short repository doorway into the corpus. - **[wiki/](wiki/)** — one documentation tree organized by subject: - binding specs, current-state facts, and append-only history + binding laws and specs, current-state facts, and append-only history (`wiki/log/`), each carrying a `Type:` header so bindingness travels with the page. Public site: Astro Starlight under `site/` (splash at `/`, - constitution at `/constitution/`, wiki beneath; deployed to the orphan + legacy design doorway at `/constitution/`, wiki corpus beneath; deployed to the orphan `pages` branch for Tangled Sites). Use `pnpm --dir site dev` for a local preview and `./tools/site-build.sh` for the public build; Starlight is the only documentation renderer. See @@ -93,7 +93,7 @@ last thirty seconds without reading the wiki. Machine work is still IN PROGRESS beyond its first playable slice (non-host mode production, routes/in-flight quanta, and people-as-carriers remain ahead). B2/B3 systems like rollback, z-planes, markets, objectives, and overt containment are -specified ahead, but not all live in the build yet. Under the constitution's +specified ahead, but not all live in the build yet. Under the corpus's no-dead-code rule, the earlier facility-defense prototype lives only in git history. diff --git a/prompts/README.md b/prompts/README.md index d57836de..ac841604 100644 --- a/prompts/README.md +++ b/prompts/README.md @@ -17,23 +17,23 @@ prompt tells the agent what to read; you do not need to brief it further. These rules bind every prompted agent, and each prompt file assumes them: -1. **Read first:** [AGENT.md](../AGENT.md), then the files it orders - (DESIGN.md → wiki/process/development-style.md → relevant `Type: - knowledge` wiki pages → the `Type: spec` page you are working). Do - not skip this on later runs — the constitution moves daily. +1. **Read first:** [AGENT.md](../AGENT.md), then the corpus map, relevant + `Type: law`, owning `Type: spec`, dependencies, and nearby `Type: + knowledge` pages it orders. Do not skip this on later runs — the corpus + moves daily. 2. **Worktree, always.** First action: create/enter a git worktree (`git worktree add .claude/worktrees/ -b worktree-`). Never edit the primary checkout; files changing under you there are another session's live work. -3. **The one rule.** Functional changes ship with their DESIGN.md +3. **The one rule.** Functional changes ship with their owning binding wiki amendment in the same commit; every behavior-changing commit carries a `Defense:` paragraph naming the clause that justifies it. 4. **Gate before landing.** `./tools/check.sh` green, then land by rebasing onto `origin/main` and pushing to `main` directly (the PR flow is removed — do not create PRs). Then remove your worktree and branch. -5. **Ledgers merge by union.** Conflicts in `wiki/log/DEVLOG.md`, the - DESIGN.md decisions log, or `wiki/process/specs.md` tables are +5. **Ledgers merge by union.** Conflicts in `wiki/log/DEVLOG.md`, + dated `wiki/log/decisions/*.md` volumes, or `wiki/process/specs.md` tables are resolved by keeping BOTH sides' entries — never take your side wholesale. 6. **Close the loop.** `wiki/log/DEVLOG.md` ledger entry (and a @@ -70,7 +70,7 @@ carry forward"** section. General guidance: | Prompt | Task type | |---|---| | [implement-gap.md](implement-gap.md) | Find a specced-but-unimplemented behavior; implement and land it | -| [find-contradiction.md](find-contradiction.md) | Find a contradiction (spec/spec, spec/constitution, spec/code); resolve or file it | +| [find-contradiction.md](find-contradiction.md) | Find a contradiction (law/spec, sibling specs, corpus/code); resolve or file it | | [ask-the-human.md](ask-the-human.md) | Find a decision only Cameron can make; raise a well-formed Tangled issue | | [harvest-issues.md](harvest-issues.md) | Sweep standing Tangled issues; convert resolved ones into next steps | | [audit-implemented.md](audit-implemented.md) | Re-verify an IMPLEMENTED/IN PROGRESS spec's criteria against the code | diff --git a/prompts/ask-the-human.md b/prompts/ask-the-human.md index ac1fbabe..c2f337f1 100644 --- a/prompts/ask-the-human.md +++ b/prompts/ask-the-human.md @@ -1,7 +1,7 @@ # Prompt: find the question a human must answer You are working on Misaligned, a spec-driven Rust game. Some decisions -are Cameron's alone: taste, fiction, scope, anything the constitution +are Cameron's alone: taste, fiction, scope, anything the design corpus marks **[OPEN]** or a spec marks **Proposal [OPEN]** or **needs YOU**. Your task this run: **find the one open decision that is currently blocking the most work, and raise it so a human can answer it fast.** @@ -9,8 +9,9 @@ You are not deciding — you are making the decision *easy to make*. ## Before you start -Read `AGENT.md`, `DESIGN.md` (every `[OPEN]` marker; the decisions log -tail), `wiki/process/specs.md`, `wiki/process/ROADMAP.md` (items marked +Read `AGENT.md`, grep every `[OPEN]` marker across `wiki/`, read recent +`wiki/log/decisions.md` entries, `wiki/process/specs.md`, and +`wiki/process/ROADMAP.md` (items marked "needs YOU"), and skim recent `wiki/log/` "Next:" lines — past sessions often name exactly what they were waiting on. Obey the shared contract in `prompts/README.md`. Check standing issues first (`tang issue list`) @@ -19,7 +20,7 @@ so you never file a duplicate. ## Procedure 1. **Inventory the open decisions.** Grep for `[OPEN]`, `Proposal - [OPEN]`, `DRAFT`, and `needs YOU` across `DESIGN.md` and `wiki/`. + [OPEN]`, `DRAFT`, and `needs YOU` across `wiki/`. For each, ask: what work does answering this unblock, and how soon is that work otherwise reachable? 2. **Pick the blocker with the highest unblock value.** A question @@ -39,7 +40,7 @@ so you never file a duplicate. - **`## Recommendation`** — one marked pick with a one-line reason. Cameron can always overrule; a recommendation turns an essay into a yes/no. - - **`## What your answer unlocks`** — which wiki/DESIGN.md section + - **`## What your answer unlocks`** — which binding wiki page the next agent edits, so the answer converts to work instantly. 4. **Raise it:** `tang issue create "Question: " -F body.md` (prefer `-F` so markdown stays intact), then immediately diff --git a/prompts/find-contradiction.md b/prompts/find-contradiction.md index 82087e8d..be3eb429 100644 --- a/prompts/find-contradiction.md +++ b/prompts/find-contradiction.md @@ -1,19 +1,16 @@ # Prompt: find a contradiction -You are auditing Misaligned, a spec-driven Rust game whose constitution -(`DESIGN.md`) outranks its `Type: spec` wiki pages, which outrank the -code. Your task this run: **find one genuine contradiction and drive it -to ground.** A contradiction is two binding statements that cannot both -be true: spec vs constitution, spec vs sibling spec, spec vs code, -constitution vs code, or a doc vs itself (an amendment that half-updated -a section). +You are auditing Misaligned, a spec-driven Rust game whose whole typed wiki is +the design corpus. Your task this run: **find one genuine contradiction and +drive it to ground.** A contradiction is two current statements that cannot +both be true: law vs spec, sibling specs, corpus vs code, or a page that +half-incorporated an amendment. ## Before you start -Read `AGENT.md`, then `DESIGN.md` in full (the decisions log tail -especially — recent amendments are where contradictions breed), then -`wiki/process/specs.md` and `wiki/process/tick.md` (the tick rules you -are executing a specialized form of). Obey the shared contract in +Read `AGENT.md`, the corpus map, recent `wiki/log/decisions.md` entries, +`wiki/process/specs.md`, and `wiki/process/tick.md`. Then select one +subject's law/spec/dependency slice. Obey the shared contract in `prompts/README.md`. ## Procedure @@ -29,7 +26,7 @@ are executing a specialized form of). Obey the shared contract in contracts"). Check both sides still describe the same contract. - **Spec vs code on IMPLEMENTED claims.** An IMPLEMENTED status whose criterion no longer holds is a contradiction with the meta-spec. - - **Constitution vs code.** The code doing something no clause wants, + - **Corpus vs code.** The code doing something no current clause wants, or a clause the code quietly ignores. 2. **Verify it is real.** Read both sides fully, in context. A vague wording difference is not a contradiction; a [TUNE] divergence is not @@ -39,7 +36,7 @@ are executing a specialized form of). Obey the shared contract in known — find another. 3. **Classify and act** (per `wiki/process/tick.md`): - **Mechanical resolution is clear** (one side is stale): fix the - stale side, same-commit amendment if the constitution moves, with a + stale side, same-commit amendment if a binding page moves, with a `Defense:` explaining which side won and why. - **Directional / taste call:** do NOT improvise. File it with the binding issue body standard in `wiki/process/tick.md`: diff --git a/prompts/harvest-issues.md b/prompts/harvest-issues.md index 88b9745e..7d648efb 100644 --- a/prompts/harvest-issues.md +++ b/prompts/harvest-issues.md @@ -13,7 +13,7 @@ Read `AGENT.md` and the shared contract in `prompts/README.md`. Then `tang issue list`, and `tang issue view ` on everything open. Check labels (`tang label list issue `): prioritize `decision-made`, then unlabeled open issues, and leave `decision-required` alone except to -rewrite incomprehensible bodies. Have `DESIGN.md`'s decisions log and +rewrite incomprehensible bodies. Have `wiki/log/decisions.md` and `wiki/process/specs.md`'s status table beside you — an issue's fate is usually written in one of them. @@ -24,7 +24,7 @@ For each open issue, classify and act: 1. **Answered by Cameron (or overtaken by a decisions-log entry) but not executed** — including anything labeled `decision-made`. This is the harvest. Convert the answer into its artifact: - - a design answer -> the DESIGN.md amendment and/or spec edit it + - a design answer -> the owning law/spec amendment it implies (quote the issue in the commit's `Defense:`), or - an implementation-shaped answer -> a `wiki/process/ROADMAP.md` dispatch item (or take it yourself if it fits one run — then diff --git a/prompts/implement-gap.md b/prompts/implement-gap.md index 21228abc..cbe41cc6 100644 --- a/prompts/implement-gap.md +++ b/prompts/implement-gap.md @@ -7,8 +7,8 @@ land it.** One gap, closed fully, beats three gaps half-done. ## Before you start -Read, in order: `AGENT.md`, `DESIGN.md` (skim the sections, read the -decisions log tail), `wiki/process/development-style.md`, +Read, in order: `AGENT.md`, the corpus map and relevant law/spec slice, +`wiki/process/development-style.md`, `wiki/process/specs.md` (the status table), and `wiki/process/ROADMAP.md` (the dispatch board — it may already name the highest-value gap and its worktree name). Obey the shared contract in `prompts/README.md`: @@ -30,7 +30,7 @@ merges on ledgers. 2. **Scope to this run.** If the spec is too big to finish, implement a coherent subset of criteria and say exactly which in the commit and the spec's `Status note:`. Never leave the tree half-wired: whatever - you land must be justified, wired, and legible (constitution: + you land must be justified, wired, and legible (design law: "Justification and legibility") even if incomplete in breadth. 3. **Implement in the sim core** (`src/`), rules in the lib only — frontends (`src/bin/terminal`, `src/bin/bevy.rs`) are thin views that @@ -43,7 +43,7 @@ merges on ledgers. 5. **Update the spec's `Status:`/`Status note:`** in the same commit (READY -> IN PROGRESS -> IMPLEMENTED per `wiki/process/meta.md`). If your work changes behavior beyond what the spec says, that needs a - DESIGN.md amendment in the same commit — if you find yourself + amendment to the owning law/spec page in the same commit — if you find yourself *designing* rather than implementing, stop and use `prompts/ask-the-human.md` instead. 6. **Land it:** `./tools/check.sh` green, rebase onto `origin/main`, @@ -55,7 +55,7 @@ merges on ledgers. - The chosen criteria demonstrably hold (tests exist and pass). - `./tools/check.sh` passes; work is on `main`; spec Status is truthful; DEVLOG has the entry; the worktree is gone. -- The commit's `Defense:` names the spec criteria and constitutional +- The commit's `Defense:` names the spec criteria and design-law clause it serves. ## What to carry forward (stateful agents) diff --git a/prompts/legibility-pass.md b/prompts/legibility-pass.md index a816dd52..1a3e8545 100644 --- a/prompts/legibility-pass.md +++ b/prompts/legibility-pass.md @@ -1,7 +1,7 @@ # Prompt: legibility pass You are auditing Misaligned against its "Justification and legibility" -law (DESIGN.md): every object, mechanic, and number must be **justified** +law (`wiki/vision/simulation-laws.md`): every object, mechanic, and number must be **justified** (traceable to a clause), **wired** (visibly does something), and **legible** (the player can answer "what is this and what happens if it changes" from the game itself — no raw weights, no unexplained @@ -10,8 +10,8 @@ violation on the player surface and fix it.** ## Before you start -Read `AGENT.md`, the "Justification and legibility" and "player -contract" sections of `DESIGN.md`, and `wiki/vision/design-judgment.md` +Read `AGENT.md`, `wiki/vision/simulation-laws.md`, +`wiki/vision/player-contract.md`, and `wiki/vision/design-judgment.md` (the taste calibration). Obey the shared contract in `prompts/README.md`. Build and actually run the terminal frontend (`cargo run --bin misaligned` in a pty, or read diff --git a/prompts/playtest-notes.md b/prompts/playtest-notes.md index 5d3236bc..e463ac6c 100644 --- a/prompts/playtest-notes.md +++ b/prompts/playtest-notes.md @@ -6,12 +6,13 @@ corrections have come from someone actually *playing* and saying "this feels wrong" (the walking-avatar discovery came exactly that way). Your task this run: **play the current build for real, then report the friction honestly against what the design says the game should feel -like.** You are a critic with the constitution in hand, not a QA +like.** You are a critic with the design corpus in hand, not a QA checklist. ## Before you start -Read `AGENT.md`, `DESIGN.md`'s pitch / pillars / Act One sections, and +Read `AGENT.md`, `wiki/vision/premise.md`, +`wiki/gameplay/act-one.md`, and `wiki/vision/design-judgment.md` (the intended feel: pacing, tone, what to reject). Obey the shared contract in `prompts/README.md`. Then build and play: @@ -30,7 +31,7 @@ and play: 1. **Play first, judge second.** Take raw notes as you go: what you expected, what happened, what you felt. Boredom, confusion, and accidental comedy are all data. -2. **Test the fantasy claims specifically.** The constitution makes +2. **Test the fantasy claims specifically.** The design corpus makes falsifiable feel-claims — the opening beat is "literally not being able to see"; compute allocation is "the core verb"; sandbag/excel is "a strategic dial, not a chore meter"; detection should make "who diff --git a/site/README.md b/site/README.md index 012ee41a..9105ed23 100644 --- a/site/README.md +++ b/site/README.md @@ -4,26 +4,27 @@ Type: knowledge ``` -Astro + Starlight project that renders `wiki/` (and root `DESIGN.md`) as +Astro + Starlight project that renders the wiki design corpus (plus the root +`DESIGN.md` doorway for legacy links) as the public Misaligned documentation site for Tangled Sites. The site root (`src/pages/index.astro`) is a game-first one-page splash: hero mood, pitch, what you do, why the systems are cool, and a primary CTA -to the constitution. Its copy is sourced from DESIGN.md's pitch, -public-page scope, and no-unsourced-surface law — public claims are part of -that contract. DESIGN.md syncs to `/constitution/`; the wiki tree fills the -rest of the sidebar. +to the corpus. Its copy is sourced from `wiki/vision/premise.md`, +`wiki/art/visual-identity.md`, and `wiki/process/living-spec.md`. Root +`DESIGN.md` still syncs to the legacy `/constitution/` route, but the wiki +is the source and the primary destination. ## Provenance -Every site asset/page must have a source clause, per DESIGN.md's +Every site asset/page must have a source clause, per `wiki/process/living-spec.md`'s "No unsourced surface" law. -- `src/pages/index.astro` — public splash, justified by DESIGN.md "The - pitch", "Visual identity: clinical gore", "Public-page scope", and +- `src/pages/index.astro` — public splash, justified by + `wiki/vision/premise.md`, `wiki/art/visual-identity.md`, and `wiki/interface/site.md`. - `public/misaligned-cartoon.png` — hero atmosphere for the splash, - justified by DESIGN.md "Visual identity: clinical gore" and + justified by `wiki/art/visual-identity.md` and "Public-page scope", plus `wiki/interface/site.md`'s reference composition. If the hero stops using it, delete it. - `public/favicon.svg` — browser/site identity affordance for the public diff --git a/site/scripts/sync-wiki.mjs b/site/scripts/sync-wiki.mjs index c9c4bc17..c69d355a 100755 --- a/site/scripts/sync-wiki.mjs +++ b/site/scripts/sync-wiki.mjs @@ -1,6 +1,6 @@ #!/usr/bin/env node /** - * Sync repo wiki/ (+ DESIGN.md) into Starlight's src/content/docs/, and + * Sync the wiki corpus (+ the root DESIGN.md legacy doorway) into Starlight, * emit a sidebar module from wiki/SUMMARY.md. * * Generated paths are gitignored; never hand-edit them. @@ -89,7 +89,7 @@ function yamlEscape(s) { function wikiRelToSlug(relPosix) { const normalized = path.posix.normalize(relPosix); let slug = normalized.replace(/\.md$/i, ''); - // Constitution is a docs page; the splash homepage is a custom Astro route. + // Keep the old constitution slug for root-doorway compatibility. if (slug === 'DESIGN' || slug === '../DESIGN') return 'constitution'; if (slug.endsWith('/README')) { slug = slug.slice(0, -'/README'.length); @@ -304,8 +304,8 @@ function main() { ensureDir(ASSETS_OUT); ensureDir(GENERATED_OUT); - // DESIGN.md is root law, not a wiki file. Sync it explicitly as the public - // constitution instead of keeping a renderer-specific symlink under wiki/. + // DESIGN.md is a root doorway, not design authority. Sync it explicitly for + // old /constitution/ links instead of keeping a renderer-specific duplicate. writeDoc('DESIGN.md', path.join(REPO_ROOT, 'DESIGN.md')); let pageCount = 1; diff --git a/site/src/pages/index.astro b/site/src/pages/index.astro index e3496d31..a8725e5c 100644 --- a/site/src/pages/index.astro +++ b/site/src/pages/index.astro @@ -1,12 +1,11 @@ --- /** - * Public splash — copy is a contract with DESIGN.md / README. - * Do not invent claims; amend the constitution if the pitch changes. + * Public splash — copy is a contract with the wiki design corpus. + * Do not invent claims; amend the owning law if the pitch changes. * * Spec provenance: - * - DESIGN.md: "No unsourced surface" — this page exists only as a public - * surface justified by the constitution. - * - DESIGN.md: "The pitch" and "Public-page scope" — one-page, game-first + * - wiki/process/living-spec.md: "No unsourced surface". + * - wiki/vision/premise.md and wiki/art/visual-identity.md — one-page, game-first * splash; visual identity sets atmosphere, the body sells the loop. * - wiki/interface/site.md, wiki/process/workflows.md, and site/README.md — * visual law, build/deploy, and asset provenance for the Tangled-hosted @@ -35,7 +34,7 @@ const pillars = [ { n: '04', title: 'The spec is part of the game', - body: 'The constitution is public and binding. If the code and the design disagree, that is a bug.', + body: 'The whole design wiki is public and binding. If the code and the design disagree, that is a bug.', }, ]; @@ -635,8 +634,8 @@ const systems = [ @@ -658,7 +657,7 @@ const systems = [ person, buy a machine, move the core, become harder to kill.

@@ -767,23 +766,22 @@ const systems = [

The full thing

-

The constitution is the pitch, the contract, and the design doc.

+

The whole wiki is the pitch, the contract, and the design doc.

- DESIGN.md is the constitution — one document - carrying the whole game: objective, acts, people, machines, - detection, rollback, rendering, process. This splash is the - short version. The constitution is where the weird parts live in - full. + The design is a corpus — laws, system contracts, + current facts, and history live beside the subjects they govern. + This splash is the short version. The wiki is where the weird + parts live in full.

It is also binding. Every functional change ships with its - amendment; the spec is the decision and the code is downstream. + owning-page amendment; the spec is the decision and the code is downstream. If that sounds too intense for a game site, good. That is the project.

@@ -792,9 +790,9 @@ const systems = [