Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Architecture Decision Records

Ported from sq-2 (Python), adapted for the Rust rewrite (~2026-03-30 to 2026-04-19), then carried back to Python per ADR-082. Game design decisions preserved across both language transitions.

Port-era context

The backend was Rust (sidequest-api) from ~2026-03-30 to 2026-04-19, then ported back to Python (sidequest-server) per ADR-082. Cutover completed 2026-04-23. The Rust tree is preserved read-only at https://github.com/slabgorb/sidequest-api but no longer exists in the working tree. ADR-085 governed tracker hygiene through the port window.

How to read older ADRs

Rust code samples and type declarations appear in ADRs throughout the 001–081 range — these were written while Rust was the live backend. Treat them as historical illustration, not current implementation. The design decisions carried forward; the language-specific mechanism descriptions did not. Quick translation reference:

Rust artifact in an ADR Current Python reality
crates/sidequest-<X>/src/<Y>.rs sidequest-server/sidequest/<X>/<Y>.py
#[derive(Serialize, Deserialize)] pub struct class X(pydantic.BaseModel)
tokio::spawn, tokio::select! asyncio.create_task, asyncio.wait
Arc<RwLock<T>> asyncio.Lock guarding a mutable
rusqlite stdlib sqlite3 (DB work via asyncio.to_thread)
serde_yaml pyyaml
axum router FastAPI app
cargo test pytest

Decomposition ADRs (060–065, 072) carry "Post-port mapping" notes at their tails that translate crate layouts to the current Python package structure. ADR-007 (character model) has a header note pointing to the Python home. Narrative and game-system ADRs (014, 017–025, 041–043, etc.) describe language-agnostic design and are unaffected by the port.

ADRs whose status changed at cutover

The 2026-04-23 cutover audit moved these ADRs from Proposed to Accepted because the Python port executed their plans:

  • ADR-060 (Genre Models Decomposition) — realized as sidequest/genre/models/ package
  • ADR-061 (Lore Module Decomposition) — realized as sibling lore_*.py modules under sidequest/game/
  • ADR-062 (Server lib.rs Extraction) — realized as separate modules under sidequest/server/
  • ADR-063 (Dispatch Handler Splitting) — realized as sidequest/server/dispatch/ package
  • ADR-064 (Game Crate Domain Modules) — partially accepted; most files flat, only projection/ promoted to subdirectory
  • ADR-082 itself — moved from "Proposed (quick-look draft)" to Accepted (cutover completed 2026-04-23)

ADR-065 (protocol message decomposition) and ADR-072 (system/milieu split) remain Proposed — the Python port did not execute them; the 1:1 port rule forbade structural refactors during cutover.

Current backend reference documents: docs/architecture.md, docs/tech-stack.md, docs/api-contract.md. An abbreviated index of this document is reproduced in CLAUDE.md for agent activation context.

Generated. Do not edit this section by hand. Update frontmatter on the individual ADR files and rerun scripts/regenerate_adr_indexes.py. The preamble above the BEGIN marker and any prose below the END marker are preserved.

Core Architecture

ADR Status Impl
ADR-001: Claude CLI Only ✓ accepted live
ADR-002: SOUL Principles ✓ accepted
ADR-003: Genre Pack Architecture ✓ accepted live
ADR-004: Lazy Genre Binding ✓ accepted live
ADR-005: Background-First Pipeline ✓ accepted live
ADR-006: Graceful Degradation ✓ accepted live
ADR-007: Unified Character Model ✓ accepted live

Prompt Engineering

ADR Status Impl
ADR-008: Three-Tier Rule Taxonomy ✓ accepted live
ADR-009: Attention-Aware Prompt Zones ✓ accepted live

Agent System

ADR Status Impl
ADR-011: World State JSON Patches ✓ accepted live
ADR-012: Agent Session Management ✓ accepted live
ADR-066: Persistent Opus Narrator Sessions ✓ accepted live
ADR-067: Unified Narrator Agent — Collapse Multi-Agent into Single Persistent Session ✓ accepted live

Game Systems

ADR Status Impl
ADR-014: Diamonds and Coal ✓ accepted
ADR-015: Character Builder State Machine ✓ accepted live
ADR-016: Three-Mode Character Creation ✓ accepted live
ADR-018: Trope Engine ✓ accepted drift → ADR-087
ADR-019: Cartography Discovery ✓ accepted live
ADR-020: NPC Disposition System ✓ accepted drift → ADR-087
ADR-021: Progression System ✓ accepted live
ADR-022: WorldBuilder Maturity ✓ accepted live
ADR-023: Session Persistence ✓ accepted live
ADR-024: Dual-Track Tension Model ✓ accepted live
ADR-025: Pacing Detection ✓ accepted live
ADR-074: Dice Resolution Protocol — Player-Facing Rolls via WebSocket ◇ proposed deferred
ADR-077: Dogfight Subsystem via StructuredEncounter Extension ◇ proposed deferred → ADR-087
ADR-078: Edge / Composure Combat, Mechanical Advancement, and Push-Currency Rituals ◇ proposed deferred → ADR-087
ADR-080: Unified Narrative Weight Trait ✓ accepted
ADR-081: Advancement Effect Variant Expansion (v1) ◇ proposed deferred → ADR-087

Frontend / Protocol

ADR Status Impl
ADR-026: Client-Side State Mirror ✓ accepted live
ADR-027: Reactive State Messaging ✓ accepted live
ADR-075: 3D Dice Rendering — Three.js + Rapier Physics Overlay ◇ proposed deferred
ADR-079: Genre Theme System Unification ✓ accepted live

Multiplayer

ADR Status Impl
ADR-028: Perception Rewriter ✓ accepted live
ADR-029: Guest NPC Players ◇ proposed deferred
ADR-030: Scenario Packs ◇ proposed deferred
ADR-036: Multiplayer Turn Coordination ✓ accepted live
ADR-037: Shared-World / Per-Player State Split ✓ accepted live

Transport / Infrastructure

ADR Status Impl
ADR-035: Unix Socket IPC for Python Sidecar ✓ accepted live
ADR-038: WebSocket Transport Architecture ✓ accepted live
ADR-046: GPU Memory Budget Coordinator ✓ accepted live
ADR-047: Prompt Injection Sanitization Layer ✓ accepted live

Narrator / Text

ADR Status Impl
ADR-040: Narrative Character Sheet (No Raw Stats) ✓ accepted live
ADR-049: Narrator Verbosity and Vocabulary (Two-Axis Text Tuning) ✓ accepted live
ADR-052: Narrative Axis System (/tone Command) ✓ accepted live
ADR-057: Narrator Crunch Separation — LLM Narrates, Scripts Crunch ✓ accepted partial → ADR-059

NPC / Character Systems

ADR Status Impl
ADR-041: Genie Wish / Consequence Engine ✓ accepted drift → ADR-087
ADR-042: OCEAN Personality Live Evolution ✓ accepted drift → ADR-087
ADR-043: Conlang Morpheme System ✓ accepted drift → ADR-087
ADR-053: Scenario System (Clue Graph, Belief State, Gossip Propagation) ✓ accepted drift → ADR-087

Media / Audio / Rendering

ADR Status Impl
ADR-044: Speculative Prerendering During TTS Playback ✓ accepted drift → ADR-087
ADR-045: Client Audio Engine ✓ accepted partial → ADR-076
ADR-048: Lore RAG Store with Cross-Process Embedding ✓ accepted live
ADR-050: Image Pacing Throttle ✓ accepted live
ADR-070: MLX Image Renderer — Replace PyTorch/diffusers with Apple MLX ✓ accepted live
ADR-083: Multi-LoRA Stacking and Verification Pipeline ◇ proposed deferred
ADR-086: Image-Composition Taxonomy — Portraits, POIs, Illustrations ◇ proposed deferred
ADR-089: Pre-Rendered Cavern Battle Maps via Ported Cellular Automata ◇ proposed drift

Turn Management

ADR Status Impl
ADR-051: Two-Tier Turn Counter (Interaction vs. Round) ✓ accepted live

Room Graph / Dungeon Crawl

ADR Status Impl
ADR-055: Room Graph Navigation ◇ proposed deferred

Code Generation / Tooling

ADR Status Impl
ADR-059: Monster Manual — Server-Side Pre-Generation via Game-State Injection ✓ accepted drift → ADR-087
ADR-069: Scenario Fixtures — Pre-configured World States for Testing ✓ accepted drift → ADR-087

Observability

ADR Status Impl
ADR-058: Claude Subprocess OTEL Passthrough ◇ proposed deferred
ADR-090: OTEL Dashboard Restoration after Python Port ✓ accepted live

Codebase Decomposition

ADR Status Impl
ADR-060: Genre Models Decomposition — Split models.rs by Domain ✓ accepted live
ADR-061: Lore Module Decomposition — Split lore.rs by Responsibility ✓ accepted live
ADR-062: Server lib.rs Extraction — Route Groups, State, and Watcher Events ✓ accepted live
ADR-063: Dispatch Handler Splitting — By Pipeline Stage ✓ accepted live
ADR-064: Game Crate Domain Modules — Organize 69 Flat Files ✓ accepted live
ADR-065: Protocol Message Decomposition — Split message.rs by Domain ◇ proposed deferred
ADR-068: Magic Literal Extraction — Domain-Scoped Constants ✓ accepted live
ADR-072: System/Milieu Decomposition — Separating Mechanics from Aesthetic ◇ proposed deferred
ADR-088: ADR Frontmatter Schema and Auto-Generated Indexes ✓ accepted live

Narrator Architecture

ADR Status Impl
ADR-073: Local Fine-Tuned Model Architecture ✓ accepted live
ADR-076: Narration Protocol Collapse Post-TTS Removal ◇ proposed deferred

Genre Mechanics

ADR Status Impl
ADR-031: Game Watcher — Semantic Telemetry for AI Agent Observability ✓ accepted live
ADR-033: Genre Mechanics Engine — Confrontations & Resource Pools ✓ accepted partial → ADR-087

Project Lifecycle / Meta

ADR Status Impl
ADR-082: Port sidequest-api from Rust back to Python ✓ accepted live
ADR-085: Tracker hygiene during the Rust→Python port — handling port-drift ✓ accepted live
ADR-087: Post-Port Subsystem Restoration Plan ◇ proposed deferred

Superseded / Historical

Retired ADRs. See SUPERSEDED.md for the grouped view.

ADR Status Successor
ADR-010: Intent-Based Agent Routing ✗ superseded ADR-067
ADR-013: Lazy JSON Extraction ✗ superseded ADR-057
ADR-017: Cinematic Chase Engine ✗ superseded ADR-033
ADR-032: Genre-Specific LoRA Style Training for Flux Image Generation ✗ superseded ADR-070
ADR-034: Portrait Identity Consistency — Tiered Character Recognition Pipeline ✗ superseded ADR-086
ADR-039: Narrator Structured Output (JSON Sidecar Block) ✗ superseded ADR-057
ADR-054: WebRTC Voice Chat (Disabled — Echo Feedback Loop) ✗ historical
ADR-056: Script Tool Generators — Offloading Structured Generation from LLM to Rust Binaries ✗ superseded ADR-059
ADR-071: Tactical ASCII Grid Maps — Deterministic Room Layout via ASCII Art ✗ superseded ADR-086
ADR-084: Compositional-Dimension Specialization for Style LoRAs ✗ superseded ADR-070

Implementation Drift

ADRs whose implementation is absent, partial, or deferred. See DRIFT.md for priority-tier details.

ADR Impl Pointer
ADR-029: Guest NPC Players deferred
ADR-030: Scenario Packs deferred
ADR-055: Room Graph Navigation deferred
ADR-058: Claude Subprocess OTEL Passthrough deferred
ADR-065: Protocol Message Decomposition — Split message.rs by Domain deferred
ADR-072: System/Milieu Decomposition — Separating Mechanics from Aesthetic deferred
ADR-074: Dice Resolution Protocol — Player-Facing Rolls via WebSocket deferred
ADR-075: 3D Dice Rendering — Three.js + Rapier Physics Overlay deferred
ADR-076: Narration Protocol Collapse Post-TTS Removal deferred
ADR-077: Dogfight Subsystem via StructuredEncounter Extension deferred ADR-087
ADR-078: Edge / Composure Combat, Mechanical Advancement, and Push-Currency Rituals deferred ADR-087
ADR-081: Advancement Effect Variant Expansion (v1) deferred ADR-087
ADR-083: Multi-LoRA Stacking and Verification Pipeline deferred
ADR-086: Image-Composition Taxonomy — Portraits, POIs, Illustrations deferred
ADR-087: Post-Port Subsystem Restoration Plan deferred
ADR-018: Trope Engine drift ADR-087
ADR-020: NPC Disposition System drift ADR-087
ADR-041: Genie Wish / Consequence Engine drift ADR-087
ADR-042: OCEAN Personality Live Evolution drift ADR-087
ADR-043: Conlang Morpheme System drift ADR-087
ADR-044: Speculative Prerendering During TTS Playback drift ADR-087
ADR-053: Scenario System (Clue Graph, Belief State, Gossip Propagation) drift ADR-087
ADR-059: Monster Manual — Server-Side Pre-Generation via Game-State Injection drift ADR-087
ADR-069: Scenario Fixtures — Pre-configured World States for Testing drift ADR-087
ADR-089: Pre-Rendered Cavern Battle Maps via Ported Cellular Automata drift
ADR-033: Genre Mechanics Engine — Confrontations & Resource Pools partial ADR-087
ADR-045: Client Audio Engine partial ADR-076
ADR-057: Narrator Crunch Separation — LLM Narrates, Scripts Crunch partial ADR-059