# ADR-027: Three-Layer Documentation System **Status**: Accepted | Implemented **Date**: 2024-11-01 **Deciders**: Documentation & Architecture Team **Technical Story**: Separating session work from permanent documentation to avoid confusion --- ## Decision Implementar **three-layer documentation system**: `.coder/` (session), `.claude/` (operational), `docs/` (product). --- ## Rationale 1. **Session Work ≠ Permanent Docs**: Claude Code sessions are temporary, not product docs 2. **Clear Boundaries**: Different audiences (devs, users, operations) 3. **Git Structure**: Natural organization via directories 4. **Maintainability**: Easy to distinguish what's authoritative --- ## Alternatives Considered ### ❌ Single Documentation Folder - **Pros**: Simple - **Cons**: Session files mixed with product docs, confusion ### ❌ Documentation Only (No Session Tracking) - **Pros**: Clean product docs - **Cons**: No record of how decisions were made ### ✅ Three Layers (CHOSEN) - Separates concerns, clear boundaries --- ## Trade-offs **Pros**: - ✅ Clear separation of concerns - ✅ Session files don't pollute product docs - ✅ Different retention/publication policies - ✅ Audit trail of decisions **Cons**: - ⚠️ More directories to manage - ⚠️ Naming conventions required - ⚠️ NO cross-layer links allowed (complexity) --- ## Implementation **Layer 1: Session Files (`.coder/`)**: ``` .coder/ ├── 2026-01-10-agent-coordinator-refactor.plan.md ├── 2026-01-10-agent-coordinator-refactor.done.md ├── 2026-01-11-bug-analysis.info.md ├── 2026-01-12-pr-review.review.md └── 2026-01-12-backup-recovery-automation.done.md ``` **Naming Convention**: `YYYY-MM-DD-description.{plan|done|info|review}.md` **Content**: Claude Code interaction records, not product documentation. ```markdown # Agent Coordinator Refactor - COMPLETED **Date**: January 10, 2026 **Status**: ✅ COMPLETE **Task**: Refactor agent coordinator to reduce latency --- ## What Was Done 1. Analyzed current coordinator performance 2. Identified bottleneck: sequential task assignment 3. Implemented parallel task dispatch 4. Benchmarked: 50ms → 15ms latency --- ## Key Decisions - Use `tokio::spawn` for parallel dispatch - Keep single source of truth (still in Arc) ## Next Steps (User's choice) ``` **Layer 2: Operational Files (`.claude/`)**: ``` .claude/ ├── CLAUDE.md # Project-specific Claude Code instructions ├── guidelines/ │ ├── rust.md │ ├── nushell.md │ └── nickel.md ├── layout_conventions.md ├── doc-config.toml └── project-settings.json ``` **Content**: Claude Code configuration, guidelines, conventions. ```markdown # CLAUDE.md - Project Guidelines Senior Rust developer mode. See guidelines/ for language-specific rules. ## Mandatory Guidelines @guidelines/rust.md @guidelines/nushell.md ``` **Layer 3: Product Documentation (`docs/`)**: ``` docs/ ├── README.md # Main documentation index ├── architecture/ │ ├── README.md │ ├── overview.md │ └── design-patterns.md ├── adrs/ │ ├── README.md # ADRs index │ ├── 0001-cargo-workspace.md │ └── ... (all 27 ADRs) ├── operations/ │ ├── README.md │ ├── deployment.md │ └── monitoring.md ├── api/ │ ├── README.md │ └── endpoints.md └── guides/ ├── README.md └── getting-started.md ``` **Content**: User-facing, permanent, mdBook-compatible documentation. ```markdown # VAPORA Architecture Overview This is permanent product documentation. ## Core Components - Backend: Axum REST API - Frontend: Leptos WASM - Database: SurrealDB ``` **Linking Rules**: ``` ✅ ALLOWED: - docs/ → docs/ (internal links) - docs/ → external sites - .claude/ → .claude/ - .coder/ → .coder/ ❌ FORBIDDEN: - docs/ → .coder/ (product docs can't reference session files) - docs/ → .claude/ (product docs shouldn't reference operational files) - .coder/ → docs/ (session files can reference product docs though) ``` **Files and Locations**: ```rust // crates/vapora-backend/src/lib.rs //! Product documentation in docs/ //! Operational guidelines in .claude/guidelines/ //! Session work in .coder/ // Example in code: // See: docs/adrs/0002-axum-backend.md (✅ OK: product doc) // See: .claude/guidelines/rust.md (✅ OK: within operational layer) // See: .coder/2026-01-10-notes.md (❌ WRONG: session file in product context) ``` **Documentation Naming**: ``` docs/ ├── README.md ← UPPERCASE (GitHub convention) ├── guides/ │ ├── README.md │ ├── installation.md ← lowercase kebab-case │ ├── deployment-guide.md ← lowercase kebab-case │ └── multi-agent-workflows.md .coder/ ├── 2026-01-12-description.done.md ← YYYY-MM-DD-kebab-case.extension .claude/ ├── CLAUDE.md ← Mixed case (project instructions) ├── guidelines/ │ ├── rust.md ← lowercase (language-specific) │ └── nushell.md ``` **mdBook Configuration**: ```toml # mdbook.toml [book] title = "VAPORA Documentation" authors = ["VAPORA Team"] language = "en" src = "docs" [build] create-missing = true [output.html] default-theme = "light" ``` **Key Files**: - `.claude/CLAUDE.md` (project instructions) - `.claude/guidelines/` (language guidelines) - `docs/README.md` (documentation index) - `docs/adrs/README.md` (ADRs index) - `.coder/` (session files) --- ## Verification ```bash # Check for broken doc layer links grep -r "\.coder" docs/ 2>/dev/null # Should be empty (❌ if not) grep -r "\.claude" docs/ 2>/dev/null # Should be empty (❌ if not) # Verify session files don't pollute docs/ ls docs/ | grep -E "^[0-9]" # Should be empty (❌ if not) # Check documentation structure [ -f docs/README.md ] && echo "✅ docs/README.md exists" [ -f .claude/CLAUDE.md ] && echo "✅ .claude/CLAUDE.md exists" [ -d .coder ] && echo "✅ .coder directory exists" # Verify naming conventions ls .coder/ | grep -v "^[0-9][0-9][0-9][0-9]-" # Check format ``` **Expected Output**: - No links from docs/ to .coder/ or .claude/ - No session files in docs/ - All documentation layers present - Naming conventions followed --- ## Consequences ### Documentation Maintenance - Session files: temporary (can be archived/deleted) - Operational files: stable (part of Claude Code config) - Product docs: permanent (published via mdBook) ### Publication - Only `docs/` published to users - `.claude/` and `.coder/` never published - mdBook builds from docs/ only ### Collaboration - Team knows where to find what - No confusion between session work and permanent docs - Clear ownership: product docs vs operational ### Scaling - Add new documents naturally - Layer separation doesn't break as project grows - mdBook generation automatic --- ## References - `.claude/layout_conventions.md` (comprehensive layout guide) - `.claude/CLAUDE.md` (project-specific guidelines) - [mdBook Documentation](https://rust-lang.github.io/mdBook/) --- **Related ADRs**: ADR-024 (Service Architecture), All ADRs (documentation)