Every node and edge, live from Neo4j
This is the actual writ-project knowledge graph, snapshotted from the running database and complete: 464 nodes and 731 edges, verified 1:1 against a full census of the store. Pan, zoom, search, and click any node to inspect its rules and relationships. The view opens on the full graph; presets isolate each edge layer.
Snapshot exported from Neo4j on 2026-08-01 via the same query the daemon's /graph endpoint uses (writ/graph/db/node_store.py:204). Completeness check: the per-type census printed by the exporter (scripts/export-graph-snapshot.py) matches this snapshot exactly: 464 nodes, 731 edges, all project "writ". Re-run that script to refresh.The full view is legible, not a hairball: two major bodies (the methodology and process cluster at top, the coding-rule corpus below) organized by readable radial hubs. That structure is mostly the work of the machine-derived layers, which are 80 percent of the edges: BELONGS_TO (331) radiating from the 22 Category hubs creates the spatial organization, ABSTRACTS (186) ties the 62 generated summary nodes to their members, and RELATED_TO (69, from rule-id mentions in prose) forms the rule-to-rule cross-reference layer. The layer that would get lost is the opposite one: only 145 edges are hand-authored knowledge, so they are drawn on top in dark teal at full strength, and the Curated skeleton preset isolates them entirely.
E.1How to read what you see
- Everything (the default) is the complete graph. The dark teal lines drawn on top are the hand-authored edges; the lighter washes underneath are the derived layers, colored by type (tan BELONGS_TO, grey-green RELATED_TO, lilac ABSTRACTS). Selecting a node dims everything outside its neighborhood.
- Curated skeleton isolates the 14 hand-authored edge types (TEACHES, COUNTERS, GATES, DISPATCHES, and the rest). This is the knowledge people deliberately wrote down. It is sparse on purpose: most coding-rule relationships live in the derived layers, so expect the methodology teaching structure plus small rule clusters, not one connected body.
- + cross-references adds RELATED_TO (69), derived from one rule mentioning another's id in its prose: the rule-to-rule cross-reference layer.
- + abstractions adds the ABSTRACTS ties from the 62 generated summary nodes (chapter 4) to the rules they cover.
- Node size is degree (connections in the current view), color is node type, and the 20 highest-degree nodes keep their labels at every zoom level.
- One retrieval parallel worth knowing: the pipeline's adjacency cache also excludes BELONGS_TO (
writ/retrieval/traversal.py:58), because category co-membership through a degree-70 hub is too weak a signal for the graph-proximity ranking. The narrow lesson from this one edge type: being a good spatial organizer is not sufficient grounds for being a relevance signal. The two roles have to be judged separately per edge type; RELATED_TO, for instance, stays in the cache and may serve both.
E.2The edge census behind the presets
| Edge layer | Count | Share | Where it comes from |
|---|---|---|---|
| Hand-authored typed edges (14 types) | 145 | 19.8% | Front-matter edges: lists and RULE-START ### Edges sections |
| RELATED_TO (derived) | 69 | 9.4% | Rule-id mentions in prose (ingest.py:41) |
| BELONGS_TO (derived) | 331 | 45.3% | Every node's category field plus the category tree |
| ABSTRACTS (derived) | 186 | 25.4% | The compression run (chapter 4) |
Counts are from this snapshot and match the exporter's census of the database exactly: 464 nodes, 731 edges, every one of them project "writ" (decision-memory record nodes would also appear here, and none exist in the store yet). Node population: 287 Rules, 62 Abstractions, 22 Categories, and 93 methodology nodes across ten types. The takeaway for the "is our graph a hairball" question: it is not one. At average degree 3.2 with hub-and-spoke organization, the full graph reads clearly; the derived layers are what create that visible structure. The real risk was the reverse, the 145 hand-authored edges disappearing under 586 derived ones, which is why the curated layer renders on top and has its own preset.