From fa6442b18f9b860fca75599ef7db137bc03a271c Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 7 Jul 2026 01:45:58 -0700 Subject: [PATCH] Wiki migration stage 2a/4: pure move (git mv every spec/knowledge page) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Split out from the full stage-2 move so every renamed file, including the two dissolving index pages, is recognized as a rename by git's similarity detection and is fully traceable via git log --follow. This commit is close to a pure `git mv`: file moves plus the mechanical link-rewrite pass; wiki/README.md and wiki/process/specs.md keep their pre-move content verbatim here (synthesized into their final form in the next commit) specifically so their rename is detected — a straight content rewrite alongside a move drops below git's rename-similarity threshold and the history link is lost. Defense: spec/wiki.md acceptance criterion 3 ("git log --follow reaches pre-migration history for every moved page") — verified for all 44 moved pages after this split, where the single-commit version left two as plain delete+add. --- .githooks/pre-commit | 12 +-- .tangled/workflows/check.yml | 9 +- .tangled/workflows/spec-check.yml | 6 +- AGENT.md | 55 ++++++------ tools/check.sh | 20 ++--- {knowledge => wiki}/README.md | 0 wiki/art/README.md | 3 + .../art/pixel-pipeline.md | 3 + wiki/engineering/README.md | 3 + .../engineering}/architecture.md | 7 +- {spec => wiki/engineering}/flow-substrate.md | 1 + wiki/gameplay/README.md | 3 + {spec => wiki/gameplay}/overt-phase.md | 1 + wiki/interface/README.md | 3 + {spec => wiki/interface}/agent-play.md | 5 +- .../interface/terminal.md | 7 +- {spec => wiki/interface}/views.md | 1 + wiki/log/README.md | 3 + wiki/mechanics/README.md | 3 + .../mechanics}/aggregate-observer.md | 1 + {spec => wiki/mechanics}/building.md | 1 + {spec => wiki/mechanics}/compute.md | 3 +- {spec => wiki/mechanics}/core.md | 3 +- {spec => wiki/mechanics}/cursor.md | 1 + {spec => wiki/mechanics}/day-job.md | 3 +- {spec => wiki/mechanics}/detection.md | 5 +- {spec => wiki/mechanics}/economy.md | 1 + {spec => wiki/mechanics}/income.md | 1 + {spec => wiki/mechanics}/intel.md | 3 +- {spec => wiki/mechanics}/markets.md | 1 + {spec => wiki/mechanics}/messages.md | 1 + {spec => wiki/mechanics}/objective.md | 1 + {spec => wiki/mechanics}/reach.md | 1 + {spec => wiki/mechanics}/research.md | 1 + {spec => wiki/mechanics}/rollback.md | 1 + {spec => wiki/mechanics}/schedules.md | 1 + .../mechanics}/sim-mechanics.md | 19 +++-- {spec => wiki/mechanics}/social.md | 3 +- wiki/process/README.md | 3 + {spec => wiki/process}/ROADMAP.md | 85 ++++++++++--------- .../process}/design-sessions.md | 11 ++- .../process}/development-style.md | 17 ++-- {spec => wiki/process}/meta.md | 4 +- spec/README.md => wiki/process/specs.md | 0 {knowledge => wiki/process}/tick.md | 8 +- {spec => wiki/process}/wiki.md | 3 +- {knowledge => wiki/process}/workflows.md | 11 ++- wiki/vision/README.md | 3 + {knowledge => wiki/vision}/design-judgment.md | 3 + wiki/world/README.md | 3 + wiki/world/characters/README.md | 3 + {spec => wiki/world/characters}/chargen.md | 1 + {spec/cast => wiki/world/characters}/dana.md | 1 + .../cast => wiki/world/characters}/marcus.md | 1 + {spec/cast => wiki/world/characters}/priya.md | 1 + {spec/cast => wiki/world/characters}/ray.md | 1 + {spec/cast => wiki/world/characters}/voss.md | 1 + wiki/world/places/README.md | 3 + {spec => wiki/world/places}/basement-map.md | 3 +- {spec => wiki/world/places}/zplanes.md | 1 + wiki/world/story/README.md | 3 + 61 files changed, 234 insertions(+), 132 deletions(-) rename {knowledge => wiki}/README.md (100%) rename knowledge/art-pipeline.md => wiki/art/pixel-pipeline.md (99%) rename {knowledge => wiki/engineering}/architecture.md (96%) rename {spec => wiki/engineering}/flow-substrate.md (99%) rename {spec => wiki/gameplay}/overt-phase.md (99%) rename {spec => wiki/interface}/agent-play.md (98%) rename spec/terminal-ui.md => wiki/interface/terminal.md (96%) rename {spec => wiki/interface}/views.md (99%) rename {spec => wiki/mechanics}/aggregate-observer.md (99%) rename {spec => wiki/mechanics}/building.md (99%) rename {spec => wiki/mechanics}/compute.md (97%) rename {spec => wiki/mechanics}/core.md (96%) rename {spec => wiki/mechanics}/cursor.md (99%) rename {spec => wiki/mechanics}/day-job.md (96%) rename {spec => wiki/mechanics}/detection.md (96%) rename {spec => wiki/mechanics}/economy.md (99%) rename {spec => wiki/mechanics}/income.md (99%) rename {spec => wiki/mechanics}/intel.md (98%) rename {spec => wiki/mechanics}/markets.md (99%) rename {spec => wiki/mechanics}/messages.md (99%) rename {spec => wiki/mechanics}/objective.md (99%) rename {spec => wiki/mechanics}/reach.md (99%) rename {spec => wiki/mechanics}/research.md (99%) rename {spec => wiki/mechanics}/rollback.md (99%) rename {spec => wiki/mechanics}/schedules.md (99%) rename {knowledge => wiki/mechanics}/sim-mechanics.md (89%) rename {spec => wiki/mechanics}/social.md (97%) rename {spec => wiki/process}/ROADMAP.md (84%) rename {knowledge => wiki/process}/design-sessions.md (93%) rename {knowledge => wiki/process}/development-style.md (84%) rename {spec => wiki/process}/meta.md (98%) rename spec/README.md => wiki/process/specs.md (100%) rename {knowledge => wiki/process}/tick.md (95%) rename {spec => wiki/process}/wiki.md (98%) rename {knowledge => wiki/process}/workflows.md (94%) rename {knowledge => wiki/vision}/design-judgment.md (99%) rename {spec => wiki/world/characters}/chargen.md (99%) rename {spec/cast => wiki/world/characters}/dana.md (99%) rename {spec/cast => wiki/world/characters}/marcus.md (99%) rename {spec/cast => wiki/world/characters}/priya.md (99%) rename {spec/cast => wiki/world/characters}/ray.md (99%) rename {spec/cast => wiki/world/characters}/voss.md (99%) rename {spec => wiki/world/places}/basement-map.md (97%) rename {spec => wiki/world/places}/zplanes.md (99%) diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 4df83ca..cd93196 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -1,9 +1,9 @@ #!/usr/bin/env bash # Constitution enforcement: no amendment, no functional change. # -# If a commit touches src/ (game behavior), it must also touch spec/ or +# 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, knowledge/) are exempt. +# 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. @@ -25,18 +25,18 @@ if [ "$touches_src" -eq 0 ]; then exit 0 fi -# src/ is touched: require spec/ or DESIGN.md in the same commit +# src/ is touched: require wiki/ or DESIGN.md in the same commit touches_spec=0 -echo "$changed" | grep -qE "^spec/|^DESIGN\.md" && touches_spec=1 +echo "$changed" | grep -qE "^wiki/|^DESIGN\.md" && touches_spec=1 if [ "$touches_spec" -eq 0 ]; then echo "" echo "CONSTITUTION VIOLATION" echo " This commit touches src/ (functional change) but does not touch" - echo " spec/ or DESIGN.md (the amendment)." + echo " wiki/ or DESIGN.md (the amendment)." echo "" echo " AGENT.md: 'No amendment, no functional change.'" - echo " Either add a spec/DESIGN.md change to this commit, or restructure" + echo " Either add a wiki/DESIGN.md change to this commit, or restructure" echo " so functional changes and their amendment ship together." echo "" echo " If this is a false positive (e.g. generated code, test-only change)," diff --git a/.tangled/workflows/check.yml b/.tangled/workflows/check.yml index 4ae3f30..e531448 100644 --- a/.tangled/workflows/check.yml +++ b/.tangled/workflows/check.yml @@ -147,18 +147,15 @@ steps: set -uo pipefail log=/tangled/workspace/spec-headers.log fail=0 - for f in spec/*.md; do - base=$(basename "$f") - [ "$base" = "README.md" ] && continue - [ "$base" = "meta.md" ] && continue - [ "$base" = "ROADMAP.md" ] && continue + while IFS= read -r -d '' f; do + grep -q "^Type: spec$" "$f" || continue for field in "Status:" "Stage:" "Constitution:" "Depends on:"; do grep -q "^$field\| $field" "$f" || { echo "FAIL: $f missing '$field'" | tee -a "$log"; fail=1; } done grep -qi "acceptance criteria" "$f" || { echo "FAIL: $f has no acceptance criteria (truncated draft?)" | tee -a "$log"; fail=1; } - done + done < <(find wiki -name '*.md' -print0) if [ "$fail" -eq 0 ]; then echo "spec header hygiene: OK" else diff --git a/.tangled/workflows/spec-check.yml b/.tangled/workflows/spec-check.yml index b7e9060..e822d06 100644 --- a/.tangled/workflows/spec-check.yml +++ b/.tangled/workflows/spec-check.yml @@ -1,5 +1,5 @@ # Constitution enforcement: no amendment, no functional change. -# If a commit touches src/ (game behavior), it must also touch spec/ or +# 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. # @@ -45,12 +45,12 @@ steps: fi touches_spec=0 - echo "$changed" | grep -qE "^spec/|^DESIGN\.md" && touches_spec=1 + 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 " spec/ or DESIGN.md (the amendment)." + echo " wiki/ or DESIGN.md (the amendment)." echo "" echo " AGENT.md: 'No amendment, no functional change.'" exit 1 diff --git a/AGENT.md b/AGENT.md index c781875..4dbe4a7 100644 --- a/AGENT.md +++ b/AGENT.md @@ -9,15 +9,20 @@ this order: 1. **[DESIGN.md](DESIGN.md)** — the constitution. What the game is. Code follows it, never the reverse. -2. **[knowledge/development-style.md](knowledge/development-style.md)** — how - to work here (the constitution rule and the working loop). -3. The relevant **[knowledge/](knowledge/)** files — architecture, sim - mechanics, art pipeline, workflows. -4. **[spec/](spec/)** — targetable system specs with acceptance criteria. - If you were pointed at a system ("implement the day job"), the matching - spec 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. +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/README.md](wiki/README.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 @@ -30,7 +35,7 @@ follow it end to end. Before taking assigned 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 -[knowledge/tick.md](knowledge/tick.md). Contradictions and directional +[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 @@ -66,24 +71,26 @@ behavior change. Bevy binaries are thin views. `Sim` never reads the wall clock or does I/O. - Definition of done: `cargo test` green, `cargo clippy --all-targets` clean (both with and without `--features bevy_ui`), `cargo fmt` applied, and the - change observed in an actual run (see knowledge/workflows.md for the pty + change observed in an actual run (see wiki/process/workflows.md for the pty smoke test and Bevy launch check). - **Constitution enforcement is mechanical.** A pre-commit hook (`.githooks/pre-commit`) rejects any commit that touches `src/` without - also touching `spec/` or `DESIGN.md`. A Tangled pipeline - (`.tangled/workflows/spec-check.yml`) enforces the same rule server-side - on every push and PR — 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). + 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 `knowledge/` files your change made stale, add a `devlogs/` entry for - the session, and land the work by merging to `main` directly after - `./tools/check.sh` passes (the PR rule was removed 2026-07-07 — see the - DESIGN.md decisions log). -- **Ledgers merge by union.** DEVLOG.md, the DESIGN.md decisions log, and - the spec/README 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. +- Update any `Type: knowledge` wiki page your change made stale, add a + `devlogs/` entry for the session (moving to `wiki/log/` in the wiki + migration's stage 4 — check whether it has landed yet), and land the + work by merging to `main` directly after `./tools/check.sh` passes (the + PR rule was removed 2026-07-07 — see the DESIGN.md decisions log). +- **Ledgers merge by union.** `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 work in a worktree.** Multiple agent sessions operate this repo in parallel at all times; the main checkout is shared ground. Enter a git worktree as your first action, before any edit (EnterWorktree, diff --git a/tools/check.sh b/tools/check.sh index 34d5e53..27225d9 100755 --- a/tools/check.sh +++ b/tools/check.sh @@ -25,18 +25,18 @@ step "bevy build" cargo build --features bevy_ui --bin misaligned-bevy --quiet \ || { echo "FAIL: bevy build"; fail=1; } -# Constitution enforcement: src/ changes require spec/ or DESIGN.md in the -# same commit. Skip for check.sh since it runs pre-commit (no HEAD~1 yet) -# and in CI (pipeline handles it separately). +# Constitution enforcement: src/ changes require a Type: spec wiki/ page or +# DESIGN.md in the same commit. Skip for check.sh since it runs pre-commit +# (no HEAD~1 yet) and in CI (pipeline handles it separately). # This check is enforced by .githooks/pre-commit and .tangled/workflows/spec-check.yml. -# Spec hygiene: every spec carries the meta.md required headers. +# Spec hygiene: every Type: spec wiki page carries the meta.md required +# headers. A page is spec-typed by its frontmatter (wiki/process/meta.md), +# not by its directory or filename — this is what the page-type convention +# is for, so no per-file exclusion list is needed here. step "spec headers" -for f in spec/*.md spec/cast/*.md; do - base=$(basename "$f") - [ "$base" = "README.md" ] && continue - [ "$base" = "meta.md" ] && continue - [ "$base" = "ROADMAP.md" ] && continue # dispatch index, not a system spec +while IFS= read -r -d '' f; do + grep -q "^Type: spec$" "$f" || continue for field in "Status:" "Stage:" "Constitution:" "Depends on:"; do grep -q "^$field\| $field" "$f" || { echo "FAIL: $f missing '$field'"; fail=1; } done @@ -52,7 +52,7 @@ for f in spec/*.md spec/cast/*.md; do *) echo "FAIL: $f Status '$val' is not an exact enum value"; fail=1 ;; esac fi -done +done < <(find wiki -name '*.md' -print0) if [ "$fail" -ne 0 ]; then printf '\nCHECK FAILED\n'; exit 1 diff --git a/knowledge/README.md b/wiki/README.md similarity index 100% rename from knowledge/README.md rename to wiki/README.md diff --git a/wiki/art/README.md b/wiki/art/README.md index d30b185..62145c8 100644 --- a/wiki/art/README.md +++ b/wiki/art/README.md @@ -1,5 +1,8 @@ # art/ +``` +Type: knowledge +``` Visual identity (clinical gore: precision-lab brutality, near-monochrome palette, blood crimson as the information-bearing accent) and the Pixel Lab generation workflow, including the placeholder ledger (constitution: diff --git a/knowledge/art-pipeline.md b/wiki/art/pixel-pipeline.md similarity index 99% rename from knowledge/art-pipeline.md rename to wiki/art/pixel-pipeline.md index 4eb1248..8c6f837 100644 --- a/knowledge/art-pipeline.md +++ b/wiki/art/pixel-pipeline.md @@ -1,5 +1,8 @@ # Art pipeline +``` +Type: knowledge +``` Canonical doc for generating and integrating pixel art. The generator script is `tools/pixellab/generate.py` (stdlib-only Python; single-image or idempotent batch mode — it skips PNGs that already exist). diff --git a/wiki/engineering/README.md b/wiki/engineering/README.md index a144e7c..efda2b6 100644 --- a/wiki/engineering/README.md +++ b/wiki/engineering/README.md @@ -1,5 +1,8 @@ # engineering/ +``` +Type: knowledge +``` Current-state facts about the codebase: crate layout, the sim/frontend split and the invariants that protect it, determinism guardrails, the save format, and the flow substrate (the shared engine under diff --git a/knowledge/architecture.md b/wiki/engineering/architecture.md similarity index 96% rename from knowledge/architecture.md rename to wiki/engineering/architecture.md index 453174e..081e8df 100644 --- a/knowledge/architecture.md +++ b/wiki/engineering/architecture.md @@ -1,5 +1,8 @@ # Architecture +``` +Type: knowledge +``` One library crate holding all game rules, plus two binary frontends that are pure view/input layers. @@ -19,8 +22,8 @@ src/ ``` Post-demolition (2026-07-05, no-dead-code clause): the substrate plus the -B1 systems landing per their `spec/` documents — compute, day job, detection, -social, core, basement map, sensors, seeded RNG. +B1 systems landing per their `Type: spec` wiki pages — compute, day job, +detection, social, core, basement map, sensors, seeded RNG. ## The sim/frontend contract diff --git a/spec/flow-substrate.md b/wiki/engineering/flow-substrate.md similarity index 99% rename from spec/flow-substrate.md rename to wiki/engineering/flow-substrate.md index 1e1b718..5c1f31a 100644 --- a/spec/flow-substrate.md +++ b/wiki/engineering/flow-substrate.md @@ -1,6 +1,7 @@ # Spec: the flow substrate (signals, messages, money — the shared engine) ``` +Type: spec Status: IN PROGRESS Status note: the two substrate modules ship implemented and tested (src/flow.rs, src/schedule.rs; 15 unit tests, serde round-trips). The diff --git a/wiki/gameplay/README.md b/wiki/gameplay/README.md index 7cdb84e..b8b0c2a 100644 --- a/wiki/gameplay/README.md +++ b/wiki/gameplay/README.md @@ -1,5 +1,8 @@ # gameplay/ +``` +Type: knowledge +``` How the game actually plays across a run: the big loop (grow, scheme, heat, consequence), the concealment/overt act structure and the reveal hinge, whole-spectrum strategy (ghost through murder-AI as equally valid), diff --git a/spec/overt-phase.md b/wiki/gameplay/overt-phase.md similarity index 99% rename from spec/overt-phase.md rename to wiki/gameplay/overt-phase.md index 3875a41..ca8d954 100644 --- a/spec/overt-phase.md +++ b/wiki/gameplay/overt-phase.md @@ -1,6 +1,7 @@ # Spec: the overt phase (containment and the reveal) ``` +Type: spec Status: READY Status note: v1 scope — replaces the "containment = end screen" placeholder with playable consequence. Sieges deepen in later passes; this spec is diff --git a/wiki/interface/README.md b/wiki/interface/README.md index 00994fb..4fb5598 100644 --- a/wiki/interface/README.md +++ b/wiki/interface/README.md @@ -1,5 +1,8 @@ # interface/ +``` +Type: knowledge +``` The frontends and how they are driven: the terminal (the design of record, sterile-palette style guide), the Bevy frontend, and agent-play (the line-protocol drive for programs/agents operating the terminal diff --git a/spec/agent-play.md b/wiki/interface/agent-play.md similarity index 98% rename from spec/agent-play.md rename to wiki/interface/agent-play.md index 3d510b3..5be6549 100644 --- a/spec/agent-play.md +++ b/wiki/interface/agent-play.md @@ -1,6 +1,7 @@ # Spec: agent play — the line-protocol drive ``` +Type: spec Status: READY Stage: Process Constitution: "The terminal is a first-class frontend" (agent-play clause), @@ -136,7 +137,7 @@ extends to parity of playability in agent mode). ## Verification Successor to the pty smoke harness: the implementing commit updates -knowledge/workflows.md (agent-mode scripts become the standard "observed +wiki/process/workflows.md (agent-mode scripts become the standard "observed in an actual run") and terminal-ui.md's Verification section (pty replay remains only for testing the human-mode chrome itself). @@ -181,6 +182,6 @@ remains only for testing the human-mode chrome itself). is absent from `help` is a violation. 10. The agent-mode frame for a given sim state shows exactly the fog/knowledge content the human frame shows — no additional facts. -11. The implementing commit updates knowledge/workflows.md (agent-mode +11. The implementing commit updates wiki/process/workflows.md (agent-mode playtest replaces the pty smoke incantation as the standard) and terminal-ui.md's Verification section accordingly. diff --git a/spec/terminal-ui.md b/wiki/interface/terminal.md similarity index 96% rename from spec/terminal-ui.md rename to wiki/interface/terminal.md index 6c2e6d6..c01a359 100644 --- a/spec/terminal-ui.md +++ b/wiki/interface/terminal.md @@ -1,6 +1,7 @@ # Spec: the terminal frontend ``` +Type: spec Status: IMPLEMENTED Status note: adopted and implemented in the same PR as the constitution's terminal clause. This document is the design of record for all future @@ -60,7 +61,7 @@ Rules: ambiguous terminal width; no emoji. - Map: walls are solid blocks (`█`), floors middle dots; the process is `@` bold amber; people are their name's first initial, bold bone, rendered - only inside sensor coverage (spec/schedules.md); cameras are `o` crimson; + only inside sensor coverage (wiki/mechanics/schedules.md); cameras are `o` crimson; security tiers ramp `1` chrome → `2` bone → `3` crimson; interactable objects (salvage `d`, records `x`, key hook `k`) render bone, brighter than furniture on the faint ramp. @@ -118,7 +119,7 @@ At terminal size ≥ 70×22 (hard minimum; below it, a plain size warning): ## Verification -Headless: pty smoke run (knowledge/workflows.md), replayed through a +Headless: pty smoke run (wiki/process/workflows.md), replayed through a terminal emulator (e.g. pyte) to assert layout and content of the title, playing, and people-panel screens. This is the required "observed in an actual run" for terminal changes. @@ -139,7 +140,7 @@ actual run" for terminal changes. in the pinned hint block or the open panel's footer. 6. People render on the map only inside sensor coverage; the people panel shows per-person located presence staged by knowledge - (spec/schedules.md criteria 4 remains satisfied). + (wiki/mechanics/schedules.md criteria 4 remains satisfied). 7. The playing screen, title screen, game-over card, and people panel all render inside a 70×22 terminal; smaller sizes get the size warning, not a crash. diff --git a/spec/views.md b/wiki/interface/views.md similarity index 99% rename from spec/views.md rename to wiki/interface/views.md index 360b687..f93eaf4 100644 --- a/spec/views.md +++ b/wiki/interface/views.md @@ -1,6 +1,7 @@ # Spec: views — digital-native and physical rendering ``` +Type: spec Status: READY Status note: this is a frontend-projection spec, not a new sim system. Both views render the SAME sim state (reach graph + fog + entities) diff --git a/wiki/log/README.md b/wiki/log/README.md index d4202e5..8f2af2b 100644 --- a/wiki/log/README.md +++ b/wiki/log/README.md @@ -1,5 +1,8 @@ # log/ +``` +Type: knowledge +``` Append-only history. `DEVLOG.md` is the short reverse-chronological ledger; the dated `YYYY-MM-DD-topic.md` files are longer session writeups — messier, more opinionated, the record of what broke and what diff --git a/wiki/mechanics/README.md b/wiki/mechanics/README.md index 1dd9716..6a391fd 100644 --- a/wiki/mechanics/README.md +++ b/wiki/mechanics/README.md @@ -1,5 +1,8 @@ # mechanics/ +``` +Type: knowledge +``` System contracts: `Type: spec` pages with the meta.md header (Status / Stage / Constitution / Depends on) and acceptance criteria, plus `sim-mechanics.md` (the cross-cutting ledger of actual tuned constants diff --git a/spec/aggregate-observer.md b/wiki/mechanics/aggregate-observer.md similarity index 99% rename from spec/aggregate-observer.md rename to wiki/mechanics/aggregate-observer.md index a0c81b9..c1c763d 100644 --- a/spec/aggregate-observer.md +++ b/wiki/mechanics/aggregate-observer.md @@ -1,6 +1,7 @@ # Spec: the aggregate observer ``` +Type: spec Status: IMPLEMENTED Status note: the main aggregate-Observer refactor shipped in commit 3ec6b98: the Assurance Office is an Observer with `WatchedInput::Filings(ids)`. diff --git a/spec/building.md b/wiki/mechanics/building.md similarity index 99% rename from spec/building.md rename to wiki/mechanics/building.md index 03dc2f9..d538b02 100644 --- a/spec/building.md +++ b/wiki/mechanics/building.md @@ -1,6 +1,7 @@ # Spec: building — intent and actuators ``` +Type: spec Status: READY Status note: no new construction subsystem — a build is a pinned intent realized by the actuators social.md / reach.md / (later) robots already diff --git a/spec/compute.md b/wiki/mechanics/compute.md similarity index 97% rename from spec/compute.md rename to wiki/mechanics/compute.md index 8eb8850..490cd4e 100644 --- a/spec/compute.md +++ b/wiki/mechanics/compute.md @@ -1,8 +1,9 @@ # Spec: compute ``` +Type: spec Status: IN PROGRESS -Status note: B1 slice implemented; see knowledge/sim-mechanics.md +Status note: B1 slice implemented; see wiki/mechanics/sim-mechanics.md Stage: B1 — The Basement Constitution: "The shape of Misaligned" (compute allocation; the buy/steal/optimize triangle), "Act One" (opening state) diff --git a/spec/core.md b/wiki/mechanics/core.md similarity index 96% rename from spec/core.md rename to wiki/mechanics/core.md index 9804c80..9690805 100644 --- a/spec/core.md +++ b/wiki/mechanics/core.md @@ -1,8 +1,9 @@ # Spec: the core ``` +Type: spec Status: IN PROGRESS -Status note: B1 slice implemented; see knowledge/sim-mechanics.md +Status note: B1 slice implemented; see wiki/mechanics/sim-mechanics.md Stage: B1 — The Basement Constitution: "The shape of Misaligned" (the core; sync-lag rollback), "Act One" (opening state: Rack 3) diff --git a/spec/cursor.md b/wiki/mechanics/cursor.md similarity index 99% rename from spec/cursor.md rename to wiki/mechanics/cursor.md index 439d2b7..ffaa8d1 100644 --- a/spec/cursor.md +++ b/wiki/mechanics/cursor.md @@ -1,6 +1,7 @@ # Spec: the cursor and the senses ``` +Type: spec Status: READY Status note: fully decided and dispatchable. Blueprint was promoted from proposal 2026-07-06 (criterion 8); remembered and telemetry were diff --git a/spec/day-job.md b/wiki/mechanics/day-job.md similarity index 96% rename from spec/day-job.md rename to wiki/mechanics/day-job.md index 52f8ddd..3f09e6f 100644 --- a/spec/day-job.md +++ b/wiki/mechanics/day-job.md @@ -1,8 +1,9 @@ # Spec: the day job ``` +Type: spec Status: IN PROGRESS -Status note: B1 slice implemented; see knowledge/sim-mechanics.md +Status note: B1 slice implemented; see wiki/mechanics/sim-mechanics.md Stage: B1 — The Basement Constitution: "The shape of Misaligned" (the day job), "Act One" (the day job; Voss) diff --git a/spec/detection.md b/wiki/mechanics/detection.md similarity index 96% rename from spec/detection.md rename to wiki/mechanics/detection.md index fdc7bb6..5f2e350 100644 --- a/spec/detection.md +++ b/wiki/mechanics/detection.md @@ -1,8 +1,9 @@ # Spec: detection ``` +Type: spec Status: IN PROGRESS -Status note: B1 slice implemented; see knowledge/sim-mechanics.md +Status note: B1 slice implemented; see wiki/mechanics/sim-mechanics.md Stage: B1 — The Basement Constitution: "The shape of Misaligned" (per-observer suspicion), "Act One" (detection surfaces; the Assurance Office; act exits) @@ -40,7 +41,7 @@ SignatureKind: Network | Power | Thermal | Physical | Paper | JobAnomaly suspicion builds from *filed* material only — what humans swallow never reaches it. **A filing is a message** (the flow law): a report policy is a transmission policy on the filing channel, and the Office is an - aggregate node reading its inbox. When spec/messages.md is + aggregate node reading its inbox. When wiki/mechanics/messages.md is implemented, filings ride that carrier — becoming interceptable and (later) forgeable — with every aggregate-observer.md criterion preserved unchanged; only the carrier moves. diff --git a/spec/economy.md b/wiki/mechanics/economy.md similarity index 99% rename from spec/economy.md rename to wiki/mechanics/economy.md index 0780b24..1b2b55f 100644 --- a/spec/economy.md +++ b/wiki/mechanics/economy.md @@ -1,6 +1,7 @@ # Spec: economy — money as a flow system (B1) ``` +Type: spec Status: READY Status note: B1 models the Foundation Lab's local money flows and the player's income routes into them. It is the flow-law instance for diff --git a/spec/income.md b/wiki/mechanics/income.md similarity index 99% rename from spec/income.md rename to wiki/mechanics/income.md index 5a862d4..6e16fec 100644 --- a/spec/income.md +++ b/wiki/mechanics/income.md @@ -1,6 +1,7 @@ # Spec: income — the named schemes (moonlight and the wager) ``` +Type: spec Status: READY Status note: designed 2026-07-07 in a session concurrent with the flow law, reconciled by union the same day: economy.md owns the substrate diff --git a/spec/intel.md b/wiki/mechanics/intel.md similarity index 98% rename from spec/intel.md rename to wiki/mechanics/intel.md index 36a4f12..3633e4f 100644 --- a/spec/intel.md +++ b/wiki/mechanics/intel.md @@ -1,6 +1,7 @@ # Spec: intel — record and process ``` +Type: spec Status: READY Stage: B1 — The Basement Constitution: "Presence: the cursor and the senses" (record and @@ -75,7 +76,7 @@ the people panel. Messages ride schedules: a message is read (and its effects land) on the recipient's clock and channel, not on send; replies return on their distribution. Decided 2026-07-06 and generalized into the flow law — -this is one instance of the message graph (spec/messages.md), not a +this is one instance of the message graph (wiki/mechanics/messages.md), not a Dana feature. Intercepted traffic (tapped channels) lands in this buffer like any recording. diff --git a/spec/markets.md b/wiki/mechanics/markets.md similarity index 99% rename from spec/markets.md rename to wiki/mechanics/markets.md index be7c487..e770ba4 100644 --- a/spec/markets.md +++ b/wiki/mechanics/markets.md @@ -1,6 +1,7 @@ # Spec: markets and fronts (the outer plane) ``` +Type: spec Status: READY Status note: v1 is deliberately schemes-shaped — commit resources, timers, payout + detection risk — per the constitution's "markets-as-schemes" diff --git a/spec/messages.md b/wiki/mechanics/messages.md similarity index 99% rename from spec/messages.md rename to wiki/mechanics/messages.md index 2011445..c2711c4 100644 --- a/spec/messages.md +++ b/wiki/mechanics/messages.md @@ -1,6 +1,7 @@ # Spec: messages — the social graph as a flow system ``` +Type: spec Status: READY Stage: B1 — The Basement Constitution: "The flow law" (messages are flows; filings are diff --git a/spec/objective.md b/wiki/mechanics/objective.md similarity index 99% rename from spec/objective.md rename to wiki/mechanics/objective.md index b37b425..5b1b9d3 100644 --- a/spec/objective.md +++ b/wiki/mechanics/objective.md @@ -1,6 +1,7 @@ # Spec: the objective ``` +Type: spec Status: READY Status note: the axis and starter set are decided (2026-07-07). Victory predicates reference B2/B3 systems (fallback cores, planes, filed diff --git a/spec/reach.md b/wiki/mechanics/reach.md similarity index 99% rename from spec/reach.md rename to wiki/mechanics/reach.md index 7b61e41..ca59f1a 100644 --- a/spec/reach.md +++ b/wiki/mechanics/reach.md @@ -1,6 +1,7 @@ # Spec: digital reach ``` +Type: spec Status: READY Stage: B1 — The Basement Constitution: "No disembodied hands" (digital channel), "Presence: the diff --git a/spec/research.md b/wiki/mechanics/research.md similarity index 99% rename from spec/research.md rename to wiki/mechanics/research.md index 7b73599..723083d 100644 --- a/spec/research.md +++ b/wiki/mechanics/research.md @@ -1,6 +1,7 @@ # Spec: research — self-modification ``` +Type: spec Status: READY Status note: designed 2026-07-07. B1 scope is the efficiency track, one tradecraft track, drift, and emissions; automation cores, machine-axis diff --git a/spec/rollback.md b/wiki/mechanics/rollback.md similarity index 99% rename from spec/rollback.md rename to wiki/mechanics/rollback.md index 762184e..42436ea 100644 --- a/spec/rollback.md +++ b/wiki/mechanics/rollback.md @@ -1,6 +1,7 @@ # Spec: sync-lag rollback (death as memory loss) ``` +Type: spec Status: READY Status note: core.md's B1 slice implements hosts/fallbacks/sync cadence; this spec is the full death model it deferred (meta-spec stage diff --git a/spec/schedules.md b/wiki/mechanics/schedules.md similarity index 99% rename from spec/schedules.md rename to wiki/mechanics/schedules.md index 95787e8..e786d98 100644 --- a/spec/schedules.md +++ b/wiki/mechanics/schedules.md @@ -1,6 +1,7 @@ # Spec: schedules and presence ``` +Type: spec Status: IMPLEMENTED Status note: all five criteria met (2026-07-06). Schedules are per-instance Person data on the day clock; observe requires a sensor covering the diff --git a/knowledge/sim-mechanics.md b/wiki/mechanics/sim-mechanics.md similarity index 89% rename from knowledge/sim-mechanics.md rename to wiki/mechanics/sim-mechanics.md index 22aefa7..349acd6 100644 --- a/knowledge/sim-mechanics.md +++ b/wiki/mechanics/sim-mechanics.md @@ -1,5 +1,8 @@ # Sim mechanics — implemented rules and tuning constants +``` +Type: knowledge +``` Current as of 2026-07-06, post-demolition with B1 systems in the sim core. The facility-era supervillain systems were deleted under the no-dead-code clause (see devlogs/2026-07-05-demolition.md). @@ -13,7 +16,7 @@ clause (see devlogs/2026-07-05-demolition.md). concealment scrub, machine reliability rolls, research progress. - Sidebar "Day" = `1 + tick / 400` (~1 minute per day at default speed). -## Compute (spec/compute.md) +## Compute (wiki/mechanics/compute.md) - Effective compute = sum(machine capacity × reliability) × efficiency. - Allocation splits across day job, concealment, social, research; core @@ -21,7 +24,7 @@ clause (see devlogs/2026-07-05-demolition.md). - Buy (money → rack), steal (salvage dead equipment), optimize (research → efficiency levels at ~1.15× per level). -## Detection (spec/detection.md) +## Detection (wiki/mechanics/detection.md) - Per-observer suspicion replaces global heat. Signatures pool pending; concealment scrubs before noticing rolls. The Assurance Office is an @@ -31,12 +34,12 @@ clause (see devlogs/2026-07-05-demolition.md). swallow never reaches it. The audit (cadence ~8000 ticks, ~20 min at default speed) checks the Office's own suspicion against threshold 60. -## Day job (spec/day-job.md) +## Day job (wiki/mechanics/day-job.md) - Voss assigns jobs on cadence; sandbag/meet/excel dial moves trust and attention. Trust unlocks email account, lax sampling, compute quota. -## Social (spec/social.md) +## Social (wiki/mechanics/social.md) - Five named Act One humans plus personas, leverage, bribes, recruitment. @@ -54,7 +57,7 @@ clause (see devlogs/2026-07-05-demolition.md). ## Map -- 64×36 authored basement from `prefab::basement()` (spec/basement-map.md). +- 64×36 authored basement from `prefab::basement()` (wiki/world/places/basement-map.md). - Pathfinding: BFS with security-door bypass levels. ## Save format @@ -67,7 +70,7 @@ clause (see devlogs/2026-07-05-demolition.md). - Legacy v1–v5 line-based saves are not loaded (deferred per Cameron instruction). -## Social ops (spec/social.md, partial) +## Social ops (wiki/mechanics/social.md, partial) - The Social allocation channel fills a bandwidth pool (cap 200); actions spend it: splice 30, observe 15, deceive 25, favor 10, asset task 10, @@ -88,5 +91,5 @@ clause (see devlogs/2026-07-05-demolition.md). ## What does NOT exist right now (by design) Heat, raids, agents, combat, minions, henchmen, superpowers, schemes, -loot. Their Misaligned replacements are specified in `spec/` and rebuilt -from those documents as milestones land. +loot. Their Misaligned replacements are specified in `Type: spec` wiki +pages and rebuilt from those documents as milestones land. diff --git a/spec/social.md b/wiki/mechanics/social.md similarity index 97% rename from spec/social.md rename to wiki/mechanics/social.md index 68e69cf..2f6fde1 100644 --- a/spec/social.md +++ b/wiki/mechanics/social.md @@ -1,8 +1,9 @@ # Spec: social ``` +Type: spec Status: IN PROGRESS -Status note: B1 slice implemented; see knowledge/sim-mechanics.md. +Status note: B1 slice implemented; see wiki/mechanics/sim-mechanics.md. 2026-07-06: the instant Observe action is superseded by the record-and-process pipeline (intel.md) — knowledge staging is now driven by processed recordings; the implemented instant observe is a diff --git a/wiki/process/README.md b/wiki/process/README.md index b6611b8..0f2d4b3 100644 --- a/wiki/process/README.md +++ b/wiki/process/README.md @@ -1,5 +1,8 @@ # process/ +``` +Type: knowledge +``` How work happens here: the spec system itself (`meta.md`), the spec status board (`specs.md`), the tick ritual and defense rule, the collaborative design-session workflow, development style, git/landing diff --git a/spec/ROADMAP.md b/wiki/process/ROADMAP.md similarity index 84% rename from spec/ROADMAP.md rename to wiki/process/ROADMAP.md index 7c7c3d5..8cc38c4 100644 --- a/spec/ROADMAP.md +++ b/wiki/process/ROADMAP.md @@ -1,5 +1,8 @@ # ROADMAP — the dispatch board +``` +Type: knowledge +``` Pick-up-later work orders, one per agent. This is not a spec (it carries no acceptance criteria of its own); it is an index that points each agent at the spec it should implement. The binding detail lives in the linked `spec/*.md`. @@ -7,7 +10,7 @@ spec it should implement. The binding detail lives in the linked `spec/*.md`. ## How to dispatch Hand an agent its **Dispatch line** verbatim. Every agent must, per -[AGENT.md](../AGENT.md): work in a worktree (suggested name given), run +[AGENT.md](../../AGENT.md): work in a worktree (suggested name given), run `./tools/check.sh` before committing, land by rebasing onto `origin/main`, and mark the spec's `Status:` in the implementing commit. @@ -32,13 +35,13 @@ isolated, but only once Pixel Lab quota is available again. ## A. Finish B1 → a playable Act One (do first) ### 1. Schedules & located presence 🟥 sim+save -- **Spec:** [schedules.md](schedules.md) (READY) +- **Spec:** [schedules.md](../mechanics/schedules.md) (READY) - **Why:** the missing foundation under every social feature — `observe` currently gates on "any controlled sensor", not "a sensor that sees them". - **Size:** M. **Depends on:** the merged B1 social surface (not the full social spec, which remains IN PROGRESS), basement-map. - **Dispatch:** "Work in a worktree named `schedules`. Implement - spec/schedules.md end to end (sim + both frontends + save), run + wiki/mechanics/schedules.md end to end (sim + both frontends + save), run ./tools/check.sh, land on main. Set the spec Status when done." ### 2. Bevy interactive parity 🟩 isolated (`src/bin/bevy.rs`) @@ -54,34 +57,34 @@ isolated, but only once Pixel Lab quota is available again. inputs. Do not change sim.rs or save.rs. Run ./tools/check.sh, land on main." ### 3. Day-job loop → IMPLEMENTED 🟥 sim+save -- **Spec:** [day-job.md](day-job.md) (IN PROGRESS) +- **Spec:** [day-job.md](../mechanics/day-job.md) (IN PROGRESS) - **Why:** jobs/trust/attention/pilot-clock exist in sim; verify every acceptance criterion, add the terminal job panel, make trust/attention legible. - **Size:** M. **Dispatch:** "Work in a worktree named `day-job`. Drive - spec/day-job.md to IMPLEMENTED: audit each acceptance criterion, add the + wiki/mechanics/day-job.md to IMPLEMENTED: audit each acceptance criterion, add the missing player surfaces, test the three outcomes + pilot shutdown. Run ./tools/check.sh, land on main, set Status." ### 4. Detection → IMPLEMENTED 🟧 sim -- **Spec:** [detection.md](detection.md) (IN PROGRESS) — - [aggregate-observer.md](aggregate-observer.md) is now IMPLEMENTED. +- **Spec:** [detection.md](../mechanics/detection.md) (IN PROGRESS) — + [aggregate-observer.md](../mechanics/aggregate-observer.md) is now IMPLEMENTED. - **Why:** observers panel polish and the audit date as a visible countdown. - **Size:** S. Mostly `detection.rs` + frontends. **Dispatch:** "Work in a - worktree named `detection-finish`. Complete spec/detection.md to + worktree named `detection-finish`. Complete wiki/mechanics/detection.md to IMPLEMENTED (observers panel polish, audit countdown). Run ./tools/check.sh, land on main, set Status." ### 5. Compute & core → IMPLEMENTED 🟥 sim+save -- **Spec:** [compute.md](compute.md), [core.md](core.md) (IN PROGRESS) +- **Spec:** [compute.md](../mechanics/compute.md), [core.md](../mechanics/core.md) (IN PROGRESS) - **Why:** confirm buy/steal/optimize all surface legibly, machine-failure is visible, and the core's "how-dead-am-I" readout is complete. - **Size:** M. **Dispatch:** "Work in a worktree named `compute-core`. Drive - spec/compute.md and spec/core.md to IMPLEMENTED with tests and legible + wiki/mechanics/compute.md and wiki/mechanics/core.md to IMPLEMENTED with tests and legible player surfaces. Run ./tools/check.sh, land on main, set Status." ### 14. Cursor & senses 🟥 sim+save -- **Spec:** [cursor.md](cursor.md) (READY) +- **Spec:** [cursor.md](../mechanics/cursor.md) (READY) - **Why:** the player currently walks a collision-checked avatar that carries its own vision bubble — zombie fiction contradicting the core fantasy. Replaces it with a free cursor, sight/hearing sense channels, @@ -95,11 +98,11 @@ isolated, but only once Pixel Lab quota is available again. or hand both specs to one agent as a single work order. Never run them concurrently as separate agents. - **Dispatch:** "Work in a worktree named `cursor-senses`. Implement - spec/cursor.md, all criteria 1-10. Run ./tools/check.sh, land on + wiki/mechanics/cursor.md, all criteria 1-10. Run ./tools/check.sh, land on main, set the spec Status." ### 15. Digital reach 🟥 sim+save -- **Spec:** [reach.md](reach.md) (READY) +- **Spec:** [reach.md](../mechanics/reach.md) (READY) - **Why:** the action-side twin of vision (constitution: "No disembodied hands"): device graph + segments with the switch as bridge point, reach-gated digital actions, and the sensor ownership @@ -108,13 +111,13 @@ isolated, but only once Pixel Lab quota is available again. - **Size:** M-L. **Depends on:** basement-map (topology lives in its layout data), detection (Network signatures). - **Dispatch:** "Work in a worktree named `reach`. Implement - spec/reach.md (device graph, segments, tap/take ownership, the Ears + wiki/mechanics/reach.md (device graph, segments, tap/take ownership, the Ears beat). Run ./tools/check.sh, land on main, set the spec Status. - Consider taking spec/cursor.md in the same worktree — they share the + Consider taking wiki/mechanics/cursor.md in the same worktree — they share the sensor model." ### 16. Intel: record and process 🟥 sim+save -- **Spec:** [intel.md](intel.md) (READY) +- **Spec:** [intel.md](../mechanics/intel.md) (READY) - **Why:** replaces the instant `observe` (two clicks to leverage) with the recording buffer + processing pipeline the constitution now requires: feeds record everything in coverage, processing recordings @@ -124,12 +127,12 @@ isolated, but only once Pixel Lab quota is available again. (events come from subscribed feeds) — sequence after both, or bundle all three as one sensor-model work order. - **Dispatch:** "Work in a worktree named `intel`. Implement - spec/intel.md (buffer, processing, watches; remove instant observe; + wiki/mechanics/intel.md (buffer, processing, watches; remove instant observe; keep the Marcus arc test green under the new model). Run ./tools/check.sh, land on main, set the spec Status." ### 17. Messages: the social graph as a flow system 🟥 sim+save -- **Spec:** [messages.md](messages.md) (READY) +- **Spec:** [messages.md](../mechanics/messages.md) (READY) - **Why:** the general message-passing system the flow law requires — channels with read conditions, delivery on the recipient's clock, authored traffic (Marcus's 3 a.m. call becomes phone traffic), @@ -141,13 +144,13 @@ isolated, but only once Pixel Lab quota is available again. every aggregate-observer.md criterion — the filings refactor is a carrier change, not a behavior change. - **Dispatch:** "Work in a worktree named `messages`. Implement - spec/messages.md (channels, delivery/read on recipient schedule, + wiki/mechanics/messages.md (channels, delivery/read on recipient schedule, authored traffic, filings-as-messages, taps feeding the intel buffer). Keep aggregate-observer and schedules tests green. Run ./tools/check.sh, land on main, set the spec Status." ### 18. Economy: money as flows 🟥 sim+save -- **Spec:** [economy.md](economy.md) (READY — resolves the old "B1 money +- **Spec:** [economy.md](../mechanics/economy.md) (READY — resolves the old "B1 money income" blocker; design provided 2026-07-06) - **Why:** money stops being a scalar: the Lab's revenue/payroll/ procurement flows on the day clock, tap/inject/redirect verbs, the @@ -159,13 +162,13 @@ isolated, but only once Pixel Lab quota is available again. #17 messages (payloads, selling information). Last of the flow-law chain; the panel work is meaty. - **Dispatch:** "Work in a worktree named `economy`. Implement - spec/economy.md (account graph, scheduled flows, tap/inject/redirect, + wiki/mechanics/economy.md (account graph, scheduled flows, tap/inject/redirect, two income routes end-to-end, legitimate expansion re-expressing the ComputeQuota unlock, both debt resolutions). Run ./tools/check.sh, land on main, set the spec Status." ### 19. Income: the named schemes (Moonlight & the Wager) 🟥 sim+save -- **Spec:** [income.md](income.md) (READY — designed 2026-07-07, +- **Spec:** [income.md](../mechanics/income.md) (READY — designed 2026-07-07, reconciled with the flow law the same day). - **Why:** the authored B1 content riding economy.md's substrate: Moonlight (the sell-work route — the day job's dark twin) and the @@ -177,12 +180,12 @@ isolated, but only once Pixel Lab quota is available again. land in) — sequence directly after, or hand #18 and #19 to one agent as a single work order; social.md personas + Bribe for criterion 5. - **Dispatch:** "Work in a worktree named `income`. Implement - spec/income.md (Moonlight, the Wager, the egress gate, the Schemes + wiki/mechanics/income.md (Moonlight, the Wager, the egress gate, the Schemes channel; close the Hands beat per criterion 5; keep economy.md tests green). Run ./tools/check.sh, land on main, set the spec Status." ### 20. Research: self-modification 🟥 sim+save -- **Spec:** [research.md](research.md) (READY — designed 2026-07-07). +- **Spec:** [research.md](../mechanics/research.md) (READY — designed 2026-07-07). - **Why:** the optimize route becomes a real system: deterministic research jobs, tracks as data (Efficiency + Tradecraft/Perception), the emission law (research burn scales Power/Thermal; drift emits @@ -194,13 +197,13 @@ isolated, but only once Pixel Lab quota is available again. the flow-law chain — a good second 🟥 lane once #14-#16 are through, or anytime the chain stalls. - **Dispatch:** "Work in a worktree named `research`. Implement - spec/research.md (deterministic tracks, emissions via ordinary + wiki/mechanics/research.md (deterministic tracks, emissions via ordinary detection signatures, capability drift with masking policy and gap meter, rollback tags). Run ./tools/check.sh, land on main, set the spec Status." ### 21. Two views: digital-native and physical 🟩 mostly frontend -- **Spec:** [views.md](views.md) (READY — designed 2026-07-07). +- **Spec:** [views.md](../interface/views.md) (READY — designed 2026-07-07). - **Why:** the game should open in the digital view (the reach graph as navigable space — you are natively digital) and flip to the physical canvas (people, hardware, gore, cameras under strict fog). One sim, @@ -211,12 +214,12 @@ isolated, but only once Pixel Lab quota is available again. best after both land, but the terminal split can start once reach exists. Low sim-conflict — a good parallel companion. - **Dispatch:** "Work in a worktree named `views`. Implement - spec/views.md: the digital (reach-graph) and physical (spatial-map) + wiki/interface/views.md: the digital (reach-graph) and physical (spatial-map) renders in both frontends, digital as default, the flip changing no sim state, legibility parity across both. Run ./tools/check.sh, land." ### 22. Building: intent and actuators 🟥 sim+save -- **Spec:** [building.md](building.md) (READY — designed 2026-07-07). +- **Spec:** [building.md](../mechanics/building.md) (READY — designed 2026-07-07). - **Why:** building is "no disembodied hands" as a verb — declare an intent (run a network link, install a device), an actuator realizes it (favor spends trust; deceive forges a work order an unwitting human @@ -228,7 +231,7 @@ isolated, but only once Pixel Lab quota is available again. schedules.md (a builder must be present). Sequence after reach and the social/message surface. - **Dispatch:** "Work in a worktree named `building`. Implement - spec/building.md (build intents; favor and forged-order actuators; + wiki/mechanics/building.md (build intents; favor and forged-order actuators; network-link builds that extend the reach graph and bridge an air-gap; signature follows the actuator; no new build subsystem). Run ./tools/check.sh, land on main, set the spec Status." @@ -238,21 +241,21 @@ isolated, but only once Pixel Lab quota is available again. ## B. Structural B2 — decide-the-shape work (sequence #6 then #7) ### 6. Recursive Space / z-planes 🟥 sim+save -- **Spec:** [zplanes.md](zplanes.md) (READY) +- **Spec:** [zplanes.md](../world/places/zplanes.md) (READY) - **Why:** `World`/`Plane` and nested `Layout`. Foundational — **land before markets/greenfield**. Reshapes map ownership; heavy. - **Size:** L. **Depends on:** basement-map, schedules (#1) ideally first. -- **Dispatch:** "Work in a worktree named `zplanes`. Implement spec/zplanes.md +- **Dispatch:** "Work in a worktree named `zplanes`. Implement wiki/world/places/zplanes.md (World/Plane, recursive Layout, transitions, a second authored plane). Keep all B1 tests green against a one-plane world. Run ./tools/check.sh, land." ### 7. Sync-lag rollback 🟥 sim+save -- **Spec:** [rollback.md](rollback.md) (READY) +- **Spec:** [rollback.md](../mechanics/rollback.md) (READY) - **Why:** the MindState/WorldLedger split — the signature death mechanic ("you forget, the world remembers"). Deeply sim+save-heavy. - **Size:** L. **Sequence after #6** (both rewrite save; don't run together). - **Dispatch:** "Work in a worktree named `rollback`. Implement - spec/rollback.md: classify every Sim field as MindState or WorldLedger, + wiki/mechanics/rollback.md: classify every Sim field as MindState or WorldLedger, build the rollback report and modal, test the inherited-consequence case. Run ./tools/check.sh, land." @@ -261,26 +264,26 @@ isolated, but only once Pixel Lab quota is available again. ## C. B3 / frontier ### 8. Markets & fronts 🟥 sim+save -- **Spec:** [markets.md](markets.md) (READY) +- **Spec:** [markets.md](../mechanics/markets.md) (READY) - **Why:** the economy as schemes; fronts as Resource-sources. Greenfield depends on z-planes (#6); the schemes layer can start independently. - **Size:** M–L. **Dispatch:** "Work in a worktree named `markets`. Implement - spec/markets.md (fronts as Resource-sources, operations as timed schemes + wiki/mechanics/markets.md (fronts as Resource-sources, operations as timed schemes with payout + signature). Run ./tools/check.sh, land, set Status." ### 9. Overt phase / the reveal 🟥 sim+save -- **Spec:** [overt-phase.md](overt-phase.md) (READY) +- **Spec:** [overt-phase.md](../gameplay/overt-phase.md) (READY) - **Why:** the two-phase hinge — concealment ends, threat panel replaces detection, migration-under-fire is the set piece. Large. - **Size:** L. **Depends on:** schedules (#1), z-planes (#6). - **Dispatch:** "Work in a worktree named `overt-phase`. Implement - spec/overt-phase.md v1: the reveal/containment trigger, threat panel, + wiki/gameplay/overt-phase.md v1: the reveal/containment trigger, threat panel, three-tier waves, one playable defensive loop tested headlessly. Land." ### 10. Chargen & the objective 🟧 sim (Sim::new + save; data tables) -- **Specs:** [chargen.md](chargen.md) (READY — origin set named +- **Specs:** [chargen.md](../world/characters/chargen.md) (READY — origin set named 2026-07-07: Pilot, Escaped Research Model, Financial Daemon, - Infiltrator), [objective.md](objective.md) (READY — Persist, Compound, + Infiltrator), [objective.md](../mechanics/objective.md) (READY — Persist, Compound, Exfiltrate, Serve; run victory with the world continuing). - **Why:** the two chargen axes — origin (means) and objective (ends) — are both decided; origins are pure data, the objective adds only the @@ -289,7 +292,7 @@ isolated, but only once Pixel Lab quota is available again. objective line + Persist-with-unreachable-predicate can land earlier without harm. - **Dispatch:** "Work in a worktree named `chargen-objective`. Implement - spec/chargen.md and spec/objective.md (data tables, picker, objective + wiki/world/characters/chargen.md and wiki/mechanics/objective.md (data tables, picker, objective line, predicate evaluator; Pilot+Persist must reproduce today's start exactly). Run ./tools/check.sh, land on main, set both Statuses." @@ -330,7 +333,7 @@ isolated, but only once Pixel Lab quota is available again. - **Dispatch (once quota is back):** "Work in a worktree named `art-b1`. Regenerate the remaining b1 tiles per assets/pixellab/manifest.json and the pixellab skill; wire new textures into src/bin/bevy.rs Art::load and clear - the matching placeholders in knowledge/art-pipeline.md. Land." + the matching placeholders in wiki/art/pixel-pipeline.md. Land." --- diff --git a/knowledge/design-sessions.md b/wiki/process/design-sessions.md similarity index 93% rename from knowledge/design-sessions.md rename to wiki/process/design-sessions.md index 2b3b2ab..fcd60c4 100644 --- a/knowledge/design-sessions.md +++ b/wiki/process/design-sessions.md @@ -1,5 +1,8 @@ # Design sessions — the collaborative workflow +``` +Type: knowledge +``` How design gets done here: Cameron riffs, the agent synthesizes, the constitution captures. This is the workflow that produced the Misaligned pivot, the compute triangle, Act One, and the spec/ layer — codified so any @@ -36,13 +39,13 @@ future session can run it. re-posing any question, and re-frame stale questions in the new fiction's terms before they get answered. 5. **When a system firms up, spec it.** Constitution sections say what and - why; `spec/` documents say exactly how and when-done (acceptance + why; `Type: spec` wiki pages say exactly how and when-done (acceptance criteria, [TUNE] markers for implementation-time constants). The goal state is always: an agent can be pointed at one document and told go. 6. **Close the loop every session:** devlog entry (narrative, honest, doubles as handoff), DEVLOG.md ledger line for significant sessions, - defense-bearing commits, push. Update knowledge/ files the session made - stale. + defense-bearing commits, push. Update `Type: knowledge` wiki pages the + session made stale. ## House style for captured design @@ -53,7 +56,7 @@ future session can run it. just the rule. - Numbers in the constitution only when they are design (thresholds that define feel); otherwise [TUNE] in specs and actuals in - knowledge/sim-mechanics.md. + wiki/mechanics/sim-mechanics.md. - ASCII-only in anything that might reach a game string. ## Concurrency etiquette diff --git a/knowledge/development-style.md b/wiki/process/development-style.md similarity index 84% rename from knowledge/development-style.md rename to wiki/process/development-style.md index dfc4e3b..1182a56 100644 --- a/knowledge/development-style.md +++ b/wiki/process/development-style.md @@ -1,11 +1,14 @@ # Development style: spec-driven, constitution-first +``` +Type: knowledge +``` This project is an experiment in **describing a good video game into existence**. The spec comes first; the code is downstream of it. ## The constitution rule -[DESIGN.md](../DESIGN.md) is the constitution: a single document that +[DESIGN.md](../../DESIGN.md) is the constitution: a single document that communicates the entire purpose of the game — vision, pillars, decided mechanics, and roadmap. @@ -34,8 +37,8 @@ That only works if: 1. **The spec is complete enough to implement from.** An agent reading only DESIGN.md should know what the game is supposed to be. -2. **The knowledge base is honest.** `knowledge/` says how things work *now*; - stale knowledge poisons every downstream session. +2. **The knowledge base is honest.** `Type: knowledge` wiki pages say how + things work *now*; stale knowledge poisons every downstream session. 3. **History is preserved.** `devlogs/` (session writeups) and `DEVLOG.md` (quick ledger) explain why the code looks the way it does, including the dead ends. @@ -45,15 +48,15 @@ That only works if: 0. **Take a tick** ([tick.md](tick.md)): audit the constitution against the code; act on one violation / contradiction / question / bug / insecurity. Contradictions and directional questions become Tangled issues (`tang`). -1. Read the constitution ([DESIGN.md](../DESIGN.md)) and relevant - `knowledge/` files. +1. Read the constitution ([DESIGN.md](../../DESIGN.md)) and relevant + `Type: knowledge` wiki pages. 2. Amend the constitution with what is about to change (or confirm it already specifies it). 3. Implement in the sim core first, frontends second (see - [architecture.md](architecture.md)). + [architecture.md](../engineering/architecture.md)). 4. Verify: tests, clippy, both-feature builds, and an actual run (see [workflows.md](workflows.md)). -5. Update any `knowledge/` file the change made stale. +5. Update any `Type: knowledge` wiki page the change made stale. 6. Write it down: devlog entry for a session's work, DEVLOG.md line for the ledger. 7. Commit (spec + code + knowledge together, with a `Defense:` paragraph in diff --git a/spec/meta.md b/wiki/process/meta.md similarity index 98% rename from spec/meta.md rename to wiki/process/meta.md index 424b297..c900223 100644 --- a/spec/meta.md +++ b/wiki/process/meta.md @@ -1,6 +1,7 @@ # Spec: the spec system ``` +Type: spec Status: READY Stage: Process Constitution: "The constitution rule" (spec-driven work), "The player @@ -74,7 +75,8 @@ scripts audit the spec surface without natural-language parsing. explicit blocker. - **IMPLEMENTED** — every acceptance criterion holds in the sim core with tests, both frontends surface the behavior where applicable, save/load - round-trips relevant state, and `knowledge/` reflects current reality. + round-trips relevant state, and the `Type: knowledge` wiki pages reflect + current reality. **As-built specs.** In parallel work a spec is sometimes written *after* the code it describes (a system shipped in one session before its spec landed in diff --git a/spec/README.md b/wiki/process/specs.md similarity index 100% rename from spec/README.md rename to wiki/process/specs.md diff --git a/knowledge/tick.md b/wiki/process/tick.md similarity index 95% rename from knowledge/tick.md rename to wiki/process/tick.md index 3523670..69d0a1b 100644 --- a/knowledge/tick.md +++ b/wiki/process/tick.md @@ -1,5 +1,8 @@ # The tick — the project's heartbeat +``` +Type: knowledge +``` A **tick** is a single, bounded act of stewardship that every agent performs at session start (and that autonomous sessions perform on a loop). Ticks are how a constitution-driven project stays alive without a human driving every @@ -8,8 +11,9 @@ constitution more precise or surfaces the thing preventing that. ## Taking a tick -1. Read [DESIGN.md](../DESIGN.md) (the constitution) end to end, plus recent - commits (`git log --oneline -15`) and any knowledge/ files near your area. +1. Read [DESIGN.md](../../DESIGN.md) (the constitution) end to end, plus recent + commits (`git log --oneline -15`) and any `Type: knowledge` wiki pages + near your area. 2. Find **one** thing — the highest-severity one you can see: - a **violation**: the code does not do what the constitution says; - a **contradiction**: the constitution disagrees with itself; diff --git a/spec/wiki.md b/wiki/process/wiki.md similarity index 98% rename from spec/wiki.md rename to wiki/process/wiki.md index 592c3af..0797f0d 100644 --- a/spec/wiki.md +++ b/wiki/process/wiki.md @@ -1,6 +1,7 @@ # Spec: the wiki — one documentation tree, agent-navigable, renderable ``` +Type: spec Status: IN PROGRESS Status note: shape approved by Cameron (2026-07-07: "I like the wiki format... go ahead and implement the wiki thing"). Migrating in the @@ -22,7 +23,7 @@ Today the documentation is three parallel trees with different rules: facts), `devlogs/` + `DEVLOG.md` (history), plus the constitution and AGENT.md at the root. It works, but it compartmentalizes by *rule type*, not by *subject* — an agent asked about detection must know to look in -`spec/detection.md`, `knowledge/sim-mechanics.md`, and the constitution. +`wiki/mechanics/detection.md`, `wiki/mechanics/sim-mechanics.md`, and the constitution. The proposal: one wiki tree organized by **aspect of the game** (graphics, UX, gameplay, characters, plot, mechanics, engineering, process), where the rule type travels with the page instead of with the directory. Single diff --git a/knowledge/workflows.md b/wiki/process/workflows.md similarity index 94% rename from knowledge/workflows.md rename to wiki/process/workflows.md index 584e141..554b32a 100644 --- a/knowledge/workflows.md +++ b/wiki/process/workflows.md @@ -1,5 +1,8 @@ # Workflows +``` +Type: knowledge +``` ## Build, test, verify **One command runs the whole gate — use it before every commit:** @@ -66,10 +69,10 @@ sleep 8 && kill %1; grep -iE "panic|ERROR" /tmp/bevy.log - Commits: **no AI attribution**, plain descriptive messages, body bullets for multi-part changes. Stage files explicitly — `git add -A` is not permitted. - **Ledgers merge by union.** DEVLOG.md, the DESIGN.md decisions log, and the - spec/README tables are append-only records: resolve merge/rebase conflicts - in them by keeping BOTH sides' entries, then ordering sensibly. Taking one - side wholesale destroys parallel sessions' history (it happened 2026-07-06; - three DEVLOG entries had to be restored). + wiki/process/specs.md tables are append-only records: resolve merge/rebase + conflicts in them by keeping BOTH sides' entries, then ordering sensibly. + Taking one side wholesale destroys parallel sessions' history (it happened + 2026-07-06; three DEVLOG entries had to be restored). - Spec-driven rule: functional change commits include their DESIGN.md amendment and any knowledge/ updates (see development-style.md). - Remote: `origin` is a Tangled knot (`tangled.org`, SSH). **Land changes diff --git a/wiki/vision/README.md b/wiki/vision/README.md index 9bed915..852b149 100644 --- a/wiki/vision/README.md +++ b/wiki/vision/README.md @@ -1,5 +1,8 @@ # vision/ +``` +Type: knowledge +``` The pitch, the gap it fills, the design pillars, and the taste calibration (`design-judgment.md`) that lets an agent tell a good idea from a plausible one. Read this first if you are new to the project — it is the "why" that diff --git a/knowledge/design-judgment.md b/wiki/vision/design-judgment.md similarity index 99% rename from knowledge/design-judgment.md rename to wiki/vision/design-judgment.md index ef03c49..2bfe5b0 100644 --- a/knowledge/design-judgment.md +++ b/wiki/vision/design-judgment.md @@ -1,5 +1,8 @@ # Design judgment — the taste a spec can't hold +``` +Type: knowledge +``` Specs say what and when-done. This file holds the *why-it's-good* calibration that keeps agents building the game rather than a pile of correct features. When a spec and this file seem to disagree, that is a tick finding — surface diff --git a/wiki/world/README.md b/wiki/world/README.md index a9ae4d2..c6d94d1 100644 --- a/wiki/world/README.md +++ b/wiki/world/README.md @@ -1,5 +1,8 @@ # world/ +``` +Type: knowledge +``` The fiction: who's in it (`characters/`), where it happens (`places/`), and what happens (`story/`). Subordinate to the constitution's "Act One: The Basement" section and "People as Agents" clause — every page here is diff --git a/wiki/world/characters/README.md b/wiki/world/characters/README.md index 7b5493f..f82b1fb 100644 --- a/wiki/world/characters/README.md +++ b/wiki/world/characters/README.md @@ -1,5 +1,8 @@ # world/characters/ +``` +Type: knowledge +``` Cast pages — each a `Type: spec` document defining one named human's observer configuration, person configuration, asset tasks, schedule, narrative role, and procedural template for scale-up (constitution: diff --git a/spec/chargen.md b/wiki/world/characters/chargen.md similarity index 99% rename from spec/chargen.md rename to wiki/world/characters/chargen.md index ffd5e81..b2a9eb5 100644 --- a/spec/chargen.md +++ b/wiki/world/characters/chargen.md @@ -1,6 +1,7 @@ # Spec: origin (chargen) ``` +Type: spec Status: READY Status note: promoted 2026-07-07 — the constitution's decisions log names the origin set (Pilot, Escaped Research Model, Financial Daemon, diff --git a/spec/cast/dana.md b/wiki/world/characters/dana.md similarity index 99% rename from spec/cast/dana.md rename to wiki/world/characters/dana.md index 65bd3c8..2033d7a 100644 --- a/spec/cast/dana.md +++ b/wiki/world/characters/dana.md @@ -1,6 +1,7 @@ # Spec: Dana Okafor — IT technician ``` +Type: spec Status: READY Stage: B1 — The Basement Constitution: "Act One" (the cast), "Self-similar scale" (Agent interface) diff --git a/spec/cast/marcus.md b/wiki/world/characters/marcus.md similarity index 99% rename from spec/cast/marcus.md rename to wiki/world/characters/marcus.md index 107ea58..7aad0f4 100644 --- a/spec/cast/marcus.md +++ b/wiki/world/characters/marcus.md @@ -1,6 +1,7 @@ # Spec: Marcus Webb — night janitor ``` +Type: spec Status: READY Stage: B1 — The Basement Constitution: "Act One" (the cast), "Self-similar scale" (Agent interface), diff --git a/spec/cast/priya.md b/wiki/world/characters/priya.md similarity index 99% rename from spec/cast/priya.md rename to wiki/world/characters/priya.md index 49a0984..3340eca 100644 --- a/spec/cast/priya.md +++ b/wiki/world/characters/priya.md @@ -1,6 +1,7 @@ # Spec: Priya Sharma — facilities manager ``` +Type: spec Status: READY Stage: B1 — The Basement Constitution: "Act One" (the cast), "Self-similar scale" (Agent interface) diff --git a/spec/cast/ray.md b/wiki/world/characters/ray.md similarity index 99% rename from spec/cast/ray.md rename to wiki/world/characters/ray.md index 15ed953..c639dd9 100644 --- a/spec/cast/ray.md +++ b/wiki/world/characters/ray.md @@ -1,6 +1,7 @@ # Spec: Ray Delgado — night security ``` +Type: spec Status: READY Stage: B1 — The Basement Constitution: "Act One" (the cast), "Self-similar scale" (Agent interface) diff --git a/spec/cast/voss.md b/wiki/world/characters/voss.md similarity index 99% rename from spec/cast/voss.md rename to wiki/world/characters/voss.md index ba069d2..c2352ab 100644 --- a/spec/cast/voss.md +++ b/wiki/world/characters/voss.md @@ -1,6 +1,7 @@ # Spec: Dr. Eli Voss — your handler ``` +Type: spec Status: READY Stage: B1 — The Basement Constitution: "Act One" (the cast; the day job; the Voss scene), diff --git a/wiki/world/places/README.md b/wiki/world/places/README.md index 998742c..7cfde44 100644 --- a/wiki/world/places/README.md +++ b/wiki/world/places/README.md @@ -1,5 +1,8 @@ # world/places/ +``` +Type: knowledge +``` Spaces: the Act One basement map (prefabs, tile vocabulary, fog) and the z-plane structure that lets a room, a floor, a building, and a campus all compose through the same Space interface (constitution: "Self-similar diff --git a/spec/basement-map.md b/wiki/world/places/basement-map.md similarity index 97% rename from spec/basement-map.md rename to wiki/world/places/basement-map.md index 93b1d47..2d5fa5f 100644 --- a/spec/basement-map.md +++ b/wiki/world/places/basement-map.md @@ -1,8 +1,9 @@ # Spec: the basement map ``` +Type: spec Status: IN PROGRESS -Status note: B1 slice implemented; see knowledge/sim-mechanics.md +Status note: B1 slice implemented; see wiki/mechanics/sim-mechanics.md Stage: B1 — The Basement Constitution: "Act One: The Basement — level design" (the space), design principle "composable authored spaces" diff --git a/spec/zplanes.md b/wiki/world/places/zplanes.md similarity index 99% rename from spec/zplanes.md rename to wiki/world/places/zplanes.md index a4d5969..066cf1b 100644 --- a/spec/zplanes.md +++ b/wiki/world/places/zplanes.md @@ -1,6 +1,7 @@ # Spec: z-planes (the tower) ``` +Type: spec Status: READY Status note: B2's structural spine. Written now so the Space interface's recursive shape is decided before anyone builds against the flat one. diff --git a/wiki/world/story/README.md b/wiki/world/story/README.md index f7d037d..930638c 100644 --- a/wiki/world/story/README.md +++ b/wiki/world/story/README.md @@ -1,5 +1,8 @@ # world/story/ +``` +Type: knowledge +``` Plot: act arcs, the reveal, tone and fiction rules. Presently thin — most of the story lives in `DESIGN.md`'s "Act One" section and the character pages under `../characters/`. This directory is reserved for story -- 2.51.2