{
"id": "page:process-gaps",
"_kind": "Page",
"_file": "wiki/process/gaps/README.md",
"_cluster": "wiki",
"attributes": {
"title": "`process/gaps/`",
"displayName": "`process/gaps/`",
"slug": "process/gaps",
"articlePath": "wiki/process/gaps/README.md",
"article": "# `process/gaps/`\n\nHuman-readable form of every tracked gap. Each file in this directory mirrors a `Gap` node in the graph (see `graph/02-node-kinds/catalog-meta.md`, NodeKind `Gap`).\n\n## How files relate to graph entries\n\n- The **YAML form** of a gap lives under `graph/schema/examples/catalog-meta/gaps/<id>.yaml` — same as every other graph entity.\n- The **markdown form** lives here, at `process/gaps/GAP-<level>-<priority>-<slug>.md`.\n- The two are kept in sync by a Phase-3 generator (added as the eleventh entry in `06-derivation-spec.md`). The markdown file's path is recorded on the `Gap` node's `markdownRef` attribute.\n\n## Authoring rules\n\n- Always create the YAML node first; the markdown file is a projection (or co-authored alongside, then verified by the sync generator).\n- The filename must match the `id` slug exactly: `GAP-<level>-<priority>-<slug>.md` ↔ `gap:<slug>`.\n- Use [`_template.md`](./_template.md) verbatim. Do not invent extra sections; the sync generator only knows the template's structure.\n\n## Lifecycle\n\n| `status` | Meaning |\n|---|---|\n| `open` | Discovered, not yet picked up. |\n| `in-progress` | Implementer assigned; one or more `propagationStatus` levels are `in-progress`. |\n| `closed` | Adversarial review signed off; every applicable level is `done` or `not-applicable`. |\n| `deferred` | Acknowledged but intentionally postponed (P2/P3 only); requires a date and a reason in `notes`. |\n\n## Index\n\nThe full index of open / in-progress / closed gaps is **derived** from the graph (Phase 3 generator emits `process/gaps/INDEX.md` from `Gap` nodes). Do not author an index by hand — it would drift.\n",
"documents": []
},
"outgoingEdges": [],
"incomingEdges": []
}