Knowledge is formalized as typed graphs: acyclicity belongs to a relation that carries order, and a check holds it
Accepted
Context
The axiom dag-formalized (.ontoref/ontology/core.ncl:46-49, invariant = true) says: "All project knowledge — concepts, tensions, decisions, state — is formalized as directed acyclic graphs." No ADR is linked to it, and the base glossary seed repeats it word for word as the term dag-knowledge (.ontoref/reflection/defaults/glossary.ncl:440-459), which every consumer inherits and /concepts publishes.
The protocol's own declarations contradict it. The glossary says of the dependency axis that "unlike the governance DAG, the dependency graph permits cycles": a mutual bond is a 2-cycle that constitutes a plane (glossary.ncl:738-742; bond.ncl:21-25). Four edge kinds are symmetric by vocabulary (code/ontology/defaults/edge-inverses.ncl: Complements, Contradicts, SpiralsWith, TensionWith), so any edge of them is a cycle by definition.
Measured on 2026-10-27 over this project's core.ncl (69 nodes, 207 edges), counting only the directed kinds (121 edges): two cyclic components. One has 18 nodes and runs through the axiom itself — dag-formalized ManifestsIn level-hierarchy-resolution ManifestsIn manifest-self-description ManifestsIn describe-query-layer DependsOn dag-formalized — and through both tensions ontology-vs-reflection and enforcement-vs-emergence, by Resolves and ManifestsIn. The other has 3 nodes: ontoref-daemon Contains search-bookmarks and unified-auth-model, and each of them ManifestsIn ontoref-daemon.
Nothing verifies the axiom. `validate ontology` checks dangling endpoints, self-edges, the edge vocabulary, reciprocity, axiom invariants and isolated nodes, and no acyclicity (core.ncl node validate-ontology). The query engine is built to terminate on cycles (ontoref-query/src/engine.rs:65). Acyclicity IS held where a relation carries order: governance bonds refuse a cycle (reflection/modules/bond.nu:181-188, adr-117), the level.parent chain fails Hard on a cycle (validate.nu:1723-1730), the ladder's rungs are a line (reflection/schemas/ladder.ncl:103-122). A mode's steps are declared as a DAG and no static check refuses a cycle among them; a cycle only blocks at run time (reflection/modules/run.nu:432-440).
So the axiom claims of the whole what is true, and checked, of some relations. An invariant that is false of its own project and verified by nothing is the shape adr-072 names: a claim that reads as enforcement.
Decision
KNOWLEDGE IS FORMALIZED AS TYPED GRAPHS; ACYCLICITY IS A PROPERTY OF A RELATION THAT CARRIES ORDER, AND A CHECK HOLDS IT.
The axiom keeps its id, dag-formalized, so every edge, alias and origin that names it still resolves. Its name becomes "Graph-Formalized Knowledge" and its description:
"All project knowledge — concepts, tensions, decisions, state — is formalized as typed graphs. Where a relation carries order — governance, the level chain, the ladder, a mode's steps — it is acyclic, and a check refuses a cycle. Where a relation carries mutuality — a dependency plane, a symmetric or spiralling relation between nodes — it may cycle. This enables transversal queries, impact analysis, and ecosystem-level visibility."
The seed term dag-knowledge takes the same wording in English and Spanish, keeps its aliases and adds graph-formalized. The text changes in the same act as this ADR is accepted; /concepts picks it up when it is regenerated.
What this ADR does not decide: whether the 3-node component (a containment stated both as Contains and as ManifestsIn) is a data error to repair. That is a review of core.ncl, recorded as an anti-pattern below, not part of the axiom.
Constraints
- Hard Neither the axiom nor the seed glossary says that all project knowledge is formalized as directed acyclic graphs.
- Soft A mode's steps form a DAG: no step depends, directly or through others, on itself.
Alternatives considered
- Keep the axiom as written — rejected: False of this project's own graph, measured, and verified by nothing.
- Remove the axiom — rejected: Transversal queries and impact analysis rest on knowledge being graph-formalized; the error is the acyclicity claimed of the whole, not the graph.
- Make the whole core.ncl graph acyclic and add a validator that refuses any cycle — rejected: It would refuse the symmetric kinds by definition and the Resolves/ManifestsIn spiral between a tension and its practices, which the Spiral concept requires.
- Rename the id to graph-formalized — rejected: Edges, aliases and the glossary's origin reference name dag-formalized; a renamed id breaks them for a gain the name already gives.
Anti-patterns
- Acyclicity claimed of a graph that spirals — A text calls all of a project's knowledge acyclic while its relations include symmetric kinds, spirals and mutual planes.
- One containment stated in both directions — The same relation between two nodes is written once as Contains and once as ManifestsIn in the opposite direction, which adds a cycle and says nothing new.
Related ADRs
· reads
Perspectives