--- name: context-maintenance description: How to maintain .context.md files and docs/FEATURE-MAP.md as the project evolves. usedBy: [coder, contextualizer] version: 0.3.0 lastUpdated: 2026-09-12 --- ## Purpose Every directory in a project has a `.context.md` that orients whoever arrives next — human or agent. The project also keeps a single `docs/FEATURE-MAP.md` — a feature index that maps every user-facing feature to the code path that implements it. Together, `.context.md` files answer "what lives here" and the feature map answers "how does this feature work end-to-end." This skill defines when and how to keep both accurate as the project evolves, and the schemas they must follow. ## Procedure ### .context.md 1. **Scan.** List directories that need a `.context.md` created or updated: ```bash bash .agents/skills/assets/context-scan-directories.sh ``` The script prefers `src/` as root, skips hidden and vendored directories, and outputs only directories where `.context.md` is missing or stale (files newer than the existing `.context.md`). Pass an explicit root to narrow the scan: `bash .agents/skills/assets/context-scan-directories.sh path/to/root`. 2. **Write or update the `.context.md`** using this schema: ```markdown One to two sentences describing what this directory contains and why it exists. ## Summary - filename.ext — short description of what this file does - filename.ext — short description of what this file does - subdirectory/ — short description of what this subdirectory contains ## Constraints - MUST / MUST NOT statements. Non-negotiable constraints specific to this directory. ## Guidance - SHOULD / SHOULD NOT statements. Recommendations that may be deviated from with justification. ``` **Schema notes:** - The opening `` tag carries the relative path and a last updated date. - The description is prose, not a list. Answer "what is here" and "why does it exist." - Summary covers every file and subdirectory. One line each. - Constraints and Guidance are optional — only include them when the directory has rules worth stating. Use RFC-style language. - Keep it short. This file will be read frequently by multiple agents. ### docs/FEATURE-MAP.md 3. **Determine if a feature map update is needed.** An update is required when a change: - Adds, removes, or renames a user-facing feature. - Alters the information flow of an existing feature (new layer, different service, changed entry point). - Moves or renames files that appear in an existing feature path. An update is NOT required for: - Bug fixes that do not change the flow. - Internal refactors that preserve the same entry points and layers. - Style, formatting, or test-only changes. 4. **If `docs/FEATURE-MAP.md` does not exist yet, create it** using this schema. If it exists, update only the affected entries. ```markdown # Feature Map > Auto-maintained index of every user-facing feature and the code path that implements it. Updated alongside the code — not after the fact. ## [Feature Name] Brief description of what this feature does from the user's perspective. **Flow:** 1. `path/to/entry-point.ext` — what happens here (e.g., route handler, CLI command) 2. `path/to/service.ext` — what happens here (e.g., validation, orchestration) 3. `path/to/repository.ext` — what happens here (e.g., persistence, external call) 4. `path/to/presenter.ext` — what happens here (e.g., response formatting, template rendering) --- ``` **Schema notes:** - One section per feature, separated by horizontal rules. - The feature name is the user-visible name, not an internal module name. - The flow lists files in the order information travels — from entry point to final output. - Each step is a file path plus a short phrase describing that file's role in the flow. - Keep descriptions to one line. If a step needs more, the code or its `.context.md` should explain. - If a feature branches (e.g., sync vs async path), show the primary path and note the branch. ## Guardrails - Never invent purpose. If a directory's role is unclear after reading its contents, say so. - If a constraint looks like it should apply project-wide rather than to this directory alone, flag it to the user but do not modify the `.agents/` directory. That directory is managed via git. - Never add a feature to the map that you cannot trace end-to-end through the code. If the path is unclear, say so. - Never update the `updated` date in a `.context.md` `` tag unless the content of that file actually changed. Touching the date without a content change creates false drift signals.