# Proposal: Layered Map Protocol ## Status | Field | Value | |---|---| | Phase | **Proposal** | | Based on | User interview + current design doc | | Next | Spec | ## Problem The current design centers consumption on discovering all `.pi-map.md` files and loading them at session start, with pruning for larger repositories. That scales poorly and frames maps as bulk context instead of as a navigation system. The repo currently lacks: 1. a clear root routing artifact, 2. an explicit trust/use protocol, 3. a layered loading model, 4. fast per-directory navigation artifacts, 5. a clean split between routing metadata and richer orientation metadata. ## Proposed change Adopt a layered navigation model built around a **paired artifact** for every non-ignored directory: - `.pi-map.index.md` → fast routing - `.pi-map.md` → richer orientation ### Tier model - **Tier 0 — always injected:** Project Map Protocol + root `.pi-map.index.md` - **Tier 1 — task-start load:** likely relevant directory indexes first, then rich maps for strongest matches - **Tier 2 — exact verification:** source files, tests, configs, and docs ### Paired artifacts per directory Every non-ignored directory should generate both: - a rich `.pi-map.md` - a lightweight `.pi-map.index.md` The index is for movement. The map is for understanding. Source remains the final authority. This change stays self-contained: it does not add a vector store, Engram dependency, or other external memory/retrieval backend. ### Operating model - Root `.pi-map.md` remains rich, but points to root `.pi-map.index.md` for traversal. - Each index points to its sibling rich map. - Each rich map points back to its sibling index. - If map and index disagree, trust neither blindly; verify from source and regenerate the pair. ## In scope - [ ] Generate `.pi-map.index.md` for every non-ignored directory - [ ] Keep `.pi-map.md` as the richer sibling artifact for every non-ignored directory - [ ] Emit a Project Map Protocol in docs/prompt guidance and in generated root artifacts - [ ] Replace eager "read all maps" guidance with layered retrieval guidance - [ ] Define fixed index/map responsibilities and section order - [ ] Cascade freshness and repair logic across changed directory pairs and affected ancestors - [ ] Add strict validation for missing/stale/broken index-map pairs - [ ] Update docs and skill guidance to reflect the new model ## Out of scope - [ ] Add a query-driven retrieval command such as `project-map context ` - [ ] Preserve backward compatibility for agents that only understand the old preload-only model - [ ] Replace source verification with map-based authority - [ ] Redesign the core AST/LLM extraction pipeline beyond what is needed to feed the new artifacts ## Decisions from grilling | Topic | Decision | |---|---| | Change split | Two specs | | This change slug | `layered-map-protocol` | | Follow-up change slug | `map-context-retrieval` | | Backward compatibility required | No | | Artifact model | Every non-ignored directory gets both `.pi-map.md` and `.pi-map.index.md` | | Root Tier 0 | Project Map Protocol + root `.pi-map.index.md` | | Root rich map | Auto-read for architecture/system questions and ambiguous tasks | | Root relationship | Root map points to root index | | Retrieval mode | Hybrid auto-load, indexes first | | Patch strategy | Changed dir updates both; ancestors refresh by size/structure rules | | Validation | Hard-fail on missing/stale indexes, repair via `validate --fix` | | Prompt trust boundary | index routes, map orients, source decides | | Extra retrieval backends | None in this change | | SDD mode | Interactive | | Artifact store | OpenSpec | | PR strategy | Auto-forecast | | Review budget | 400 lines | ## Success criteria - [ ] Every non-ignored directory has both a fast index and a richer map - [ ] The root artifacts clearly tell an agent how to navigate and when to read source - [ ] The documented consumption model no longer requires reading every `.pi-map.md` up front - [ ] Validation fails on stale or missing paired artifacts and offers a repair path - [ ] Patch/refresh behavior keeps routing trustworthy without requiring full reinit for small changes