A multi-layer debug/review harness that reuses the real client UI so a human and an automated agent can inspect deterministic server-computed state by attaching to the live (auto-pausing) server. Supersedes the offline file-dump idea from the D-225 discussion — the review tool is the production tool, no divergence, no stale dumps. Stack (bottom-up): live-pause substrate (TickRate::Paused + paused-allowlist, triggered by gameplay_occluded; freezes world phases, keeps the bridge/gen-drain alive) -> layer-stream proxy (D-225) -> human-visual viewer (#960, additive overlays; shape=attractor type, color=sub-biome) -> agent channel (AtlasAgentInterface: JSON observe + named-intent act, headless) -> interactive capture (reuses the existing tests/run-visual primitive; complements, does not supersede, the visual-golden regression role). Consumers: Layer-1 geography now; economics + save-state inspection adopt the pattern in their phases. Designed with Tyre (channel/pause/headless) + Araminta (overlay encoding + affordance UX). Rides existing seams — a naming-and-contract exercise, not a new subsystem. Tickets: #970 auto-pause, #969 proxy, #960 viewer, #971 agent channel, #972 capture (build order bottom-up). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Decisions
Confirmed decisions, open questions, and rejected alternatives for The Settled Reach.
Decisions are split by domain. Each agent's briefing indicates which files to read. When in doubt about where a decision belongs: if it constrains how we build, it's architecture. If it defines what we build, it's scope. If it defines what the player experiences, it's content or perception. If it defines how the team works, it's process.
Cross-domain decisions live in one file with cross-reference notes in related files. Split threshold: when any file exceeds ~350 lines, review whether it should split.
Domain Files
| File | Domain | Decisions |
|---|---|---|
| architecture.md | Technical foundation | D-008, D-009, D-010, D-012, D-020, D-026, D-030, D-031, D-041, D-042, D-054, D-055, D-066, D-068, D-073, D-085, D-088, D-094, D-096, D-097, D-099, D-100, D-101, D-102, D-103, D-106, D-108, D-109, D-113, D-133, D-134, D-135, D-136, D-137, D-141, D-148, D-149, D-150, D-151, D-152, D-188, D-191, D-192, D-194–D-218, D-220 |
| perception.md | Player observation | D-011, D-015, D-016, D-017, D-018, D-019, D-033, D-035, D-043, D-044, D-045, D-046, D-047, D-048, D-049, D-052, D-056, D-057, D-058, D-059, D-060, D-061, D-067, D-069, D-070, D-071, D-072, D-076, D-077, D-078, D-086 |
| content.md | NPC, dialogue, templates | D-023, D-024, D-025, D-028, D-029, D-032, D-034, D-035, D-036, D-037, D-050, D-062, D-063, D-064, D-074, D-075, D-084, D-090, D-092, D-093, D-095, D-098, D-104, D-105, D-107, D-121, D-122, D-123, D-124, D-125, D-126, D-127, D-128, D-129, D-130, D-131, D-132, D-138, D-139, D-140, D-142, D-147 |
| scope.md | Game concept, prototype | D-001, D-003, D-005, D-006, D-007, D-013, D-014, D-027, D-038, D-039, D-051, D-053, D-065, D-087, D-089, D-091, D-114, D-115, D-116, D-117, D-118, D-119, D-120, D-145, D-146, D-153, D-154, D-155, D-156, D-157 |
| economics.md | Economics layer, currencies, corporations, simulation | D-171, D-172, D-173, D-174, D-175, D-176, D-177, D-178, D-179, D-180, D-181, D-182, D-183, D-184, D-185, D-186, D-187, D-189, D-190 |
| process.md | Team, workflow | D-004, D-021, D-022, D-040, D-221 |
| questions.md | Open questions (index) | Q-001 through Q-094 |
| questions-architecture.md | Technical questions | Q-001, Q-006, Q-009, Q-018–Q-023, Q-029, Q-030, Q-046, Q-059, Q-060, Q-063–Q-094 |
| questions-perception.md | Observation questions | Q-003, Q-014, Q-016, Q-024–Q-026, Q-051, Q-053, Q-054 |
| questions-content.md | Narrative questions | Q-010, Q-012–Q-015, Q-017, Q-028, Q-031, Q-033, Q-040–Q-045, Q-047–Q-050, Q-052, Q-056, Q-057, Q-WTF-039, Q-WTF-040, Q-WTF-041 |
| questions-scope.md | Scope questions | Q-002, Q-004, Q-005, Q-007, Q-008, Q-011, Q-027, Q-032, Q-034–Q-039, Q-058, Q-061, Q-062 |
| rejected.md | Rejected alternatives | R-001 through R-011 |
Querying Decisions
The SQLite database contains a decisions table synced from these files. Common queries:
# All active architecture decisions
tooling/db/sqlite-query "SELECT id, title FROM decisions WHERE domain='architecture' AND status='active'"
# Decisions without implementing tickets
make decisions-orphan
# Decision coverage by domain
make decisions-coverage
Adding a Decision
- Edit the appropriate domain file
- Follow the existing format (
### D-NNN: Titleheading) - Commit — the pre-commit hook runs
decisions-syncautomatically - Update relevant agent briefings if needed
Maintained by Qatux.