Every node and edge, live from Neo4j
This is the actual writ-project knowledge graph, snapshotted from the running database and complete: 468 nodes and 1,268 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 via the same query the daemon's /graph endpoint uses (get_graph_nodes_and_edges in writ/graph/db/node_store.py). Completeness check: the per-type census printed by the exporter (scripts/export-graph-snapshot.py) matches this snapshot exactly: 468 nodes, 1,268 edges, all project "writ". Re-run that script after the corpus changes.
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: RELATED_TO (512, from rule-id mentions in prose) forms the rule-to-rule cross-reference layer, BELONGS_TO (401) radiating from the 22 Category hubs creates the spatial organization, and ABSTRACTS (186) ties the 62 generated summary nodes to their members. The layer that would get lost is the opposite one: only 169 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 (512), 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 (the
AdjacencyCachequery in writ/retrieval/traversal.py), 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 | 169 | 13.3% | Front-matter edges: lists and RULE-START ### Edges sections |
| RELATED_TO (derived) | 512 | 40.4% | Rule-id mentions in prose (derive_edges) |
| BELONGS_TO (derived) | 401 | 31.6% | Every node's category field plus the category tree |
| ABSTRACTS (derived) | 186 | 14.7% | The compression run (chapter 4) |
Counts are from this snapshot and match the exporter's census of the database exactly: 468 nodes, 1,268 edges, every one of them project "writ" (decision-memory record nodes are scoped per project and do not appear here). Node population: 288 Rules, 62 Abstractions, 22 Categories, and 96 methodology nodes across ten types. The takeaway for the "is our graph a hairball" question: it is not one. At average degree 5.4 with hub-and-spoke organization, the full graph still reads clearly; the derived layers are what create that visible structure. The real risk was the reverse, the 169 hand-authored edges disappearing under 1,099 derived ones, which is why the curated layer renders on top and has its own preset.