"$comment":"CANONICAL machine-readable routing manifest for the ECHO vault. This is the single source of truth for 'what paths may be written to'. The human-readable tables in SKILL.md, references/routing-map.md, and references/api-reference.md are DERIVED views of this file — when they disagree, this file wins. vault_lint.py consumes it to enforce the core rule (if a vault path matches no route here, and is not retired, nothing should be written to it); check_routing.py consumes it to verify the human routing docs stay in sync with this manifest. Patterns are Python regexes matched against vault-root-relative paths (no leading slash, no /vault/ prefix).",
{"id":"inbox-captures","pattern":"^inbox/captures/inbox\\.md$","method":"POST","trigger":"Destination unknown at capture time","distinct_because":"Only path whose contract is deferred routing"},
{"id":"inbox-imports","pattern":"^inbox/imports/[^/]+\\.md$","method":"PUT","trigger":"Raw external material dropped wholesale","distinct_because":"Bulk un-triaged material vs single-line captures"},
{"id":"inbox-processing-log","pattern":"^inbox/processing-log/\\d{4}-\\d{2}-\\d{2}\\.md$","method":"POST","trigger":"An inbox item is routed to its real home","distinct_because":"Audit trail of moves, not memory itself"},
{"id":"journal-daily","pattern":"^journal/daily/\\d{4}-\\d{2}-\\d{2}\\.md$","method":"PATCH","trigger":"First agent activity on a given day","distinct_because":"Finest grain; PATCHed repeatedly within its period"},
{"id":"journal-weekly","pattern":"^journal/weekly/\\d{4}-W\\d{2}\\.md$","method":"PUT","trigger":"First substantive session of a new ISO week (opt-in)","distinct_because":"ISO-week grain"},
{"id":"journal-monthly","pattern":"^journal/monthly/\\d{4}-\\d{2}\\.md$","method":"PUT","trigger":"First substantive session of a new month","distinct_because":"Month grain"},
{"id":"journal-quarterly","pattern":"^journal/quarterly/\\d{4}-Q[1-4]\\.md$","method":"PUT","trigger":"Manual / on request only","distinct_because":"Strategic grain; never auto-fires"},
{"id":"journal-annual","pattern":"^journal/annual/\\d{4}\\.md$","method":"PUT","trigger":"Manual / on request only","distinct_because":"Coarsest grain; never auto-fires"},
{"id":"journal-templates","pattern":"^journal/templates/.+\\.md$","method":"PUT","trigger":"Bootstrap seed only","distinct_because":"Holds templates, not journal content"},
{"id":"projects-active","pattern":"^projects/active/[^/]+\\.md$","method":"PUT","trigger":"Work in motion now","distinct_because":"Default state for anything being worked","status":"active"},
{"id":"projects-incubating","pattern":"^projects/incubating/[^/]+\\.md$","method":"PUT","trigger":"Idea captured, work not started","distinct_because":"Pre-work","status":"incubating"},
{"id":"projects-on-hold","pattern":"^projects/on-hold/[^/]+\\.md$","method":"PUT","trigger":"Paused but still tracked","distinct_because":"Resumable; not terminal","status":"on-hold"},
{"id":"projects-archived","pattern":"^projects/archived/[^/]+\\.md$","method":"PUT","trigger":"Done, abandoned, or rolled up","distinct_because":"Terminal; kept for history","status":"archived"},
{"id":"projects-template","pattern":"^projects/project-template\\.md$","method":"PUT","trigger":"Bootstrap seed only","distinct_because":"Template, not a project"},
{"id":"areas","pattern":"^areas/(business|personal|learning|systems)/[^/]+\\.md$","method":"PUT","trigger":"Ongoing domain with no finish line","distinct_because":"No end state — disqualifies it from projects/"},
{"id":"resources-people","pattern":"^resources/people/[^/]+\\.md$","method":"PUT","trigger":"A fact about a specific person","distinct_because":"Keyed to a person"},
{"id":"resources-companies","pattern":"^resources/companies/[^/]+\\.md$","method":"PUT","trigger":"A fact about an organization","distinct_because":"Keyed to an organization, not an individual"},
{"id":"resources-concepts","pattern":"^resources/concepts/[^/]+\\.md$","method":"PUT","trigger":"A reusable concept/idea","distinct_because":"An idea vs an external source"},
{"id":"resources-meetings","pattern":"^resources/meetings/\\d{4}-\\d{2}-\\d{2}-[^/]+\\.md$","method":"PUT","trigger":"Notes tied to a specific meeting","distinct_because":"Event-anchored to a meeting"},
{"id":"decisions-by-date","pattern":"^decisions/by-date/\\d{4}-\\d{2}-\\d{2}-[^/]+\\.md$","method":"PUT","trigger":"A non-obvious decision worth recording","distinct_because":"Chronological system of record for decisions"},
{"id":"decisions-template","pattern":"^decisions/decision-template\\.md$","method":"PUT","trigger":"Bootstrap seed only","distinct_because":"Template, not a decision"},
{"id":"agent-marker","pattern":"^_agent/echo-vault\\.md$","method":"PUT","trigger":"Bootstrap / schema migration only","distinct_because":"Plugin-owned probe; never hand-edited"},
{"id":"agent-episodic","pattern":"^_agent/memory/episodic/[^/]+\\.md$","method":"PUT","trigger":"A record of what happened, when","distinct_because":"Anchored to an event in time"},
{"id":"agent-working","pattern":"^_agent/memory/working/[^/]+\\.md$","method":"PUT","trigger":"Short-lived state for the current effort","distinct_because":"Explicitly transient"},
{"id":"agent-sessions","pattern":"^_agent/sessions/\\d{4}-\\d{2}-\\d{2}(-\\d{4})?-[^/]+\\.md$","method":"PUT","trigger":"A substantive session ends","distinct_because":"Per-session record (new ones require HHMM)"},
{"id":"agent-health","pattern":"^_agent/health/\\d{4}-\\d{2}-vault-health\\.md$","method":"PUT","trigger":"First substantive session of a month","distinct_because":"Vault integrity, not work narrative"},
{"id":"agent-heartbeat","pattern":"^_agent/heartbeat/[^/]+\\.md$","method":"PUT","trigger":"End of every session","distinct_because":"O(1) orientation pointer; overwritten, never grows"},
{"id":"agent-templates","pattern":"^_agent/templates/.+\\.md$","method":"PUT","trigger":"Bootstrap seed only","distinct_because":"Holds templates, not memory"},
{"id":"agent-skills-active","pattern":"^_agent/skills/active/[^/]+\\.md$","method":"PUT","trigger":"A skill/plugin catalogued as a capability","distinct_because":"Catalogs a capability vs the build effort"},
{"id":"agent-skills-archived","pattern":"^_agent/skills/archived/[^/]+\\.md$","method":"PUT","trigger":"A catalogued skill is retired","distinct_because":"Terminal state of the skill catalog"},
{"id":"agent-locks","pattern":"^_agent/locks/[^/]+\\.lock$","method":"PUT","trigger":"Advisory multi-writer lock acquire/release","distinct_because":"Concurrency coordination, not memory"},
{"id":"agent-index","pattern":"^_agent/index/[^/]+\\.json$","method":"PUT","trigger":"Entity index rebuilt on write/sweep","distinct_because":"Machine-maintained routing/recall registry, not a note"},
{"id":"leaf-readme","pattern":"^(.+/)?README\\.md$","method":"PUT","trigger":"Bootstrap leaf signpost / vault root README","distinct_because":"Human signpost, not read for routing"}
],
"retired":[
{"pattern":"^reviews/","retired_in_schema":2,"replacement":"journal/{weekly,monthly,quarterly,annual}/ and _agent/health/"},
{"pattern":"^decisions/by-project/","retired_in_schema":1,"replacement":"[[wikilink]] under the project's ## Key Decisions"},
{"pattern":"^archive/","retired_in_schema":0,"replacement":"projects/archived/ and _agent/skills/archived/"},
{"pattern":"^(CLAUDE|BOOTSTRAP|STRUCTURE|index)\\.md$","retired_in_schema":1,"replacement":"All control logic lives in the plugin references/, not the vault"}