Skip to content

Directed Acyclic Graph

Prime #
799
Origin domain
Mathematics
Subdomain
graph theory combinatorics → Mathematics
Aliases
Dag

Core Idea

A directed acyclic graph is a set of nodes joined by directed edges such that no sequence of edges leads back to its origin. Two structural facts do all the work. Each edge has a direction, so the relation it encodes is asymmetric at every step; and a global no-return constraint forbids cycles. Together these impose a one-way structure on the whole graph: pick any node, follow edges forward as far as you like, and you can never revisit yourself. This is the abstract shape of prerequisite order, causal flow, and irreversibility lifted to the scope of an entire network.

Acyclicity is not a decorative side-condition; it is what makes an entire class of operations well-defined. It licenses topological sort — a linear ordering consistent with every arrow — well-founded induction — guaranteed base cases from which to build — and terminating dependency resolution — the assurance that leaves can always be evaluated first and the rest in order. Remove the constraint and none of these procedures is even definable. A DAG is therefore not merely a network that happens to lack loops; it is the structural precondition for ordering, finite evaluation, and bottom-up reasoning. The substrate is irrelevant: the nodes may be files, tasks, commits, random variables, species, or courses, and the directed-and-acyclic skeleton confers the same powers regardless of what they are.

How would you explain it like I'm…

Arrows That Never Loop

Imagine arrows connecting dots, where every arrow points one way only — like 'you must put on socks BEFORE shoes.' The special rule is that if you keep following arrows forward, you can never end up back where you started. So everything lines up in an order with a real beginning, and nothing ever loops around.

One-Way Map, No Loops

A Directed Acyclic Graph is a bunch of dots connected by one-way arrows, with one big rule: no matter which arrows you follow forward, you can never get back to where you started — no loops allowed. Two facts do all the work: every arrow points one direction (so the relationship is one-way at each step), and the whole thing forbids cycles. Together they force everything into a one-way order, which is exactly the shape of 'this must come before that' — like course prerequisites or steps in a recipe. Because there are no loops, you can always lay everything out in a valid order and figure out what has to be done first.

One-Way Order Network

A Directed Acyclic Graph is a set of nodes joined by directed edges such that no sequence of edges leads back to its origin. Two structural facts do all the work: each edge has a direction, so the relation it encodes is asymmetric at every step, and a global no-return constraint forbids cycles. Together they impose a one-way structure on the whole graph — pick any node, follow edges forward as far as you like, and you can never revisit yourself. This is the abstract shape of prerequisite order, causal flow, and irreversibility lifted to the scope of an entire network. The acyclicity isn't decorative: it's what makes operations like topological sort (a linear ordering consistent with every arrow), well-founded induction (guaranteed base cases), and terminating dependency resolution well-defined. Remove the constraint and none of those procedures is even definable, and the substrate doesn't matter — the nodes may be files, tasks, commits, random variables, species, or courses.

 

A directed acyclic graph is a set of nodes joined by directed edges such that no sequence of edges leads back to its origin. Two structural facts do all the work: each edge has a direction, so the relation it encodes is asymmetric at every step, and a global no-return constraint forbids cycles. Together these impose a one-way structure on the whole graph — pick any node, follow edges forward as far as you like, and you can never revisit yourself. This is the abstract shape of prerequisite order, causal flow, and irreversibility lifted to the scope of an entire network. Acyclicity is not a decorative side-condition; it is what makes an entire class of operations well-defined. It licenses topological sort — a linear ordering consistent with every arrow — well-founded induction — guaranteed base cases from which to build — and terminating dependency resolution — the assurance that leaves can always be evaluated first and the rest in order. Remove the constraint and none of these procedures is even definable. A DAG is therefore not merely a network that happens to lack loops; it is the structural precondition for ordering, finite evaluation, and bottom-up reasoning. The substrate is irrelevant: the nodes may be files, tasks, commits, random variables, species, or courses, and the directed-and-acyclic skeleton confers the same powers regardless of what they are.

Structural Signature

the set of nodesthe directed (asymmetric) edgesthe global no-return (acyclicity) constraintthe induced one-way order (topological sort)the well-founded base casesthe forward-closure locality of change

A configuration is a directed acyclic graph when each of the following holds:

  • A set of nodes. There are elements — tasks, files, commits, variables, courses, events — among which a dependency or precedence relation can hold.
  • Directed edges. Each relation declares a direction, so it is asymmetric at every step; "A depends on B" is distinct from its reverse.
  • A no-return constraint. No sequence of forward edges leads back to its origin; acyclicity is a global property, not a local one, and a single offending edge destroys it.
  • An induced linear order. Acyclicity licenses a topological sort — a linear ordering consistent with every arrow — converting unstructured interdependence into an explicit schedule along which to plan, parallelize, or cache.
  • Well-founded base cases. Source nodes (no prerequisites) are guaranteed starting points, so evaluation can proceed bottom-up and properties can be proved by well-founded induction from the leaves.
  • Forward-closure locality. Changing one node invalidates exactly its forward closure (its downstream descendants) and nothing upstream, so the cost of a change is bounded by the affected subgraph — the structural basis of incremental recomputation.

These compose into an ordering-and-evaluation precondition: direct every edge, enforce global acyclicity, and gain a meaningful order of operations, a finite bottom-up evaluation strategy, and localized invalidation — a cycle, when found, being not noise but a diagnosis that a new node or a redesign is needed to break it.

What It Is Not

  • Not hierarchy. A hierarchy (a tree) gives each node at most one parent and a single root; a DAG permits multiple parents and multiple sources. Many real "hierarchies" (a file depending on several libraries, a class implementing several interfaces) are actually DAGs whose tree assumption silently fails (see hierarchy).
  • Not dependency itself. A dependency is a single directed relation between two nodes; a DAG is the global structure of many dependencies plus the no-return constraint. The DAG adds acyclicity, topological order, and forward-closure locality that a lone dependency edge does not carry (see dependency).
  • Not cycle. A cycle is the very thing a DAG forbids; the DAG is defined by its absence. When a cycle appears in a would-be DAG it is a diagnosis (genuine feedback or a missing intermediate node), not a feature — the two are structural opposites (see cycle).
  • Not causality. A causal DAG is one interpretation of the shape (edges = "directly causes"), but the same acyclic skeleton equally encodes prerequisite order, temporal precedence, or citation. Causal-intervention machinery is licensed only when edges are causal; a build or citation DAG cannot answer "what if I changed A?" (see causality).
  • Not branching_and_merging. Branching and merging describe operations that grow a version DAG; the DAG is the resulting structure. One is the activity on the history graph, the other the acyclic graph it produces (see branching_and_merging).
  • Common misclassification. Reading any directed-acyclic structure as causal, and applying do-calculus where edges only encode order. The catch: ask what the directed edge actually means — prerequisite, precedence, or genuine causation; the same shape carries all three, and interventional reasoning is valid only for the causal reading.

Broad Use

The DAG skeleton recurs wherever dependency, precedence, or one-way flow appears. Software builds (make, Bazel, Nix, module imports) treat files as nodes and dependencies as edges, with cycles flagged as errors. Project planning runs critical-path methods over task DAGs. Version control encodes commit history as a DAG in which merges combine parents but history never loops. Causal inference uses directed acyclic graphs of cause-before-effect, where a cycle would imply backward causation, and probabilistic graphical models factor joint distributions along such graphs. Compilers build expression and control-flow DAGs and static single-assignment forms. Type and subtype hierarchies are DAGs; cycles would break substitutability. Phylogenies, pedigrees, and cladograms are DAGs on lineage. Data-pipeline schedulers (Airflow, dbt, Dagster) are literal DAGs. Citation networks are DAGs in time, since papers cite only earlier work. Foundationalist accounts of justification demand a DAG to avoid infinite regress. Bills of materials, assembly sequences, and curriculum prerequisite structures are all DAGs. In each, the same two facts — directed edges and no return paths — buy the same things: a meaningful order of operations, a finite evaluation strategy, and the right to reason inductively from the bottom up.

Clarity

The prime cuts through several frequent confusions. A tree is a DAG with at most one parent per node; DAGs permit multiple parents, so many real "hierarchies" (a file depending on many libraries, a class implementing several interfaces) are actually DAGs whose tree assumption silently fails. A general graph with cycles cannot be topologically ordered at all, so a dependency graph that accidentally acquires a cycle renders its scheduling algorithm undefined. A merely directed graph without acyclicity buys little — direction alone does not guarantee that forward walks terminate. And acyclicity is a global property: a graph can look locally tree-like at every node yet still be a DAG rather than a tree, while a single offending edge can flip a DAG into a cyclic graph. Naming the shape makes the constraint visible. Every time one encounters a "build order," a "prerequisite list," or a "causal chain," the prime prompts the load-bearing question: is acyclicity actually enforced here, or merely assumed?

Manages Complexity

A DAG converts unstructured interdependence into a schedule. Topological sort produces an explicit linear order along which one can plan, parallelize, cache, or verify. Layered DAGs compress further: a height function partitions nodes into layers that can each be processed in parallel, and the graph's height bounds the critical path. The acyclicity invariant replaces the open question "where do I start?" with the constructive answer "at any source node." Crucially, DAGs make change tractable. Modifying one node invalidates exactly its forward closure — its downstream descendants — and nothing else; everything upstream remains valid and cached. This is the structural reason incremental compilation, incremental view maintenance, and incremental re-derivation are even possible: the cost of a change is bounded by the size of the affected subgraph rather than the whole structure. The DAG thereby localizes both scheduling and invalidation, two otherwise global problems.

Abstract Reasoning

The DAG offers three reusable moves. The first is to direct the edges: force every dependency to declare which way it runs, since many bug-prone relational tangles become well-ordered DAGs once direction is made explicit. The second is to detect cycles: a cycle is not noise but a diagnosis — it points to a genuine bidirectional coupling, a missing intermediate concept, or a bootstrapping paradox, and so triggers a redesign rather than a workaround. A recurring pattern is that a putative DAG turns out to contain a cycle whose content reveals where a new node must be introduced — a stub, placeholder, or fixed point — to break the loop; the DAG framing surfaces this need by name. The third move is to sort topologically and then exploit the order: this single operation underlies build schedulers, course planners, synthesis-route planners, and proof checkers. The reasoner asks, of any interdependent system: are the edges directed, is the graph acyclic, and what does a topological order over it license?

Knowledge Transfer

The intervention catalog drops out cleanly and transfers without translation. The moves are: add direction to undirected relations (decide which side is the prerequisite); locate and break cycles (a cycle either signals genuine feedback — a different prime — or needs a structural fix such as factoring a stub or introducing a level); topologically order to schedule, parallelize, and cache; reason about forward closure to determine what must be recomputed when something changes (just the descendants); and use well-founded induction to prove properties from the leaves upward. These transfer between software builds, curriculum design, audit trails, and clinical pathways with no substrate-specific adjustment. The role mappings are direct: node ↔ task / file / commit / variable / course, edge ↔ depends-on / precedes / causes / cites, source ↔ starting point with no prerequisites, sink ↔ terminal deliverable, forward closure ↔ everything downstream that a change invalidates, height ↔ critical-path length. A practitioner who has internalized "a change invalidates exactly its forward closure" in a build system reads a data-lineage pipeline and immediately knows which downstream tables must be refreshed; one who has learned to break import cycles by introducing a shared third module recognizes the identical maneuver when a research plan reveals that "method selection requires preliminary analysis" — introduce a pilot-study node to break the loop. The same cycle-detection reflex that catches an undefined build also catches a circular justification in an epistemological argument or a backward-causation error in a causal model. Because the vocabulary is already domain-neutral, the transfer is recognition rather than analogy: the shape is literally the same object in every substrate.

Examples

Formal/abstract

A software build system is the paradigm formal instance, with files as the set of nodes and "compiles-from" dependencies as directed edges: main.o depends on main.c and util.h; util.o depends on util.c and util.h; the executable app depends on main.o and util.o. Each edge is asymmetric — "main.o depends on util.h" is not its reverse. The no-return constraint holds: no chain of dependencies loops back, so the graph is a DAG. This licenses the operations that define a build. Topological sort yields a valid one-way order — e.g. util.h, main.c, util.c, main.o, util.o, app — a schedule consistent with every arrow, along which the build can proceed and parallelize (the two .o compilations are independent and run concurrently). The well-founded base cases are the source nodes (the .c/.h files with no prerequisites), the guaranteed starting points for bottom-up evaluation. The forward-closure locality is the structural payoff: editing util.h invalidates exactly its forward closuremain.o, util.o, and app — and nothing upstream, which is precisely why incremental compilation is possible (rebuild the affected subgraph, not the world). Now inject a cycle — make util.h somehow depend on app — and every one of these operations becomes undefined: no topological order exists, no source to start from, no bounded invalidation. The cycle is not noise but a diagnosis that the dependency structure is broken and needs a new node or a redesign to break it.

Mapped back: The build DAG instantiates the full signature — nodes, directed asymmetric edges, global acyclicity, an induced topological order enabling scheduling and parallelism, well-founded source nodes, and forward-closure locality underwriting incremental rebuilds — with a cycle as a structural diagnosis.

Applied/industry

Causal inference uses a directed acyclic graph of cause-before-effect, instantiating the prime in a statistical-modeling substrate where the vocabulary is already domain-neutral. The nodes are random variables (smoking, tar deposits, lung cancer, a confounder like socioeconomic status); the directed edges encode "directly causes," asymmetric by nature. The no-return constraint is load-bearing: a cycle would imply backward causation (an effect causing its own cause), which the acyclicity invariant forbids — the same cycle-detection-as-diagnosis reflex that catches an undefined build catches an incoherent causal model. The induced order lets the analyst read off which variables precede which, and the forward-closure reasoning identifies which downstream variables an intervention affects (do-calculus traces exactly the descendants of the manipulated node). The well-founded structure (exogenous source variables) grounds the factorization of the joint distribution along the graph — a probabilistic graphical model. The identical structural maneuver — introduce a new node to break a cycle — transfers directly: a research plan revealing that "method selection requires preliminary analysis" which itself "requires method selection" is a cycle broken by introducing a pilot-study node, exactly as an import cycle in code is broken by factoring a shared third module. And a data-lineage pipeline (Airflow/dbt) is a literal DAG where a practitioner who internalized "a change invalidates exactly its forward closure" immediately knows which downstream tables a source-schema change forces to refresh.

Mapped back: Causal DAGs, research-plan cycle-breaking, and data-lineage pipelines all rest on directed edges plus global acyclicity to gain ordering, forward-closure invalidation, and cycle-as-diagnosis — instantiating the DAG prime in causal-inference, project-planning, and data-engineering substrates by recognition rather than analogy.

Structural Tensions

T1 — Acyclic Order versus Genuine Feedback (sign/direction). The DAG buys ordering, termination, and bottom-up evaluation by forbidding cycles, but many real systems contain genuine feedback that is not an error to be removed. The failure mode is forcing acyclicity onto a feedback structure — modeling a regulatory loop or a mutual dependency as a DAG by deleting the back-edge, discarding the very dynamics that matter. Diagnostic: when a cycle appears, ask whether it signals a fixable design flaw (break it with a new node) or genuine bidirectional coupling (a different prime — feedback — applies); treating real feedback as a DAG violation engineers out the loop the system depends on.

T2 — Global Acyclicity versus Local Tree-Likeness (scalar/local-global). Acyclicity is a global property; a graph can look tree-like at every node yet a single distant back-edge makes it cyclic, and conversely a node with many parents is still a DAG, not a tree. The failure mode is assuming local structure determines global status — applying tree algorithms (single parent, simple recursion) to a multi-parent DAG, or trusting that no local loop means no global cycle. Diagnostic: ask whether acyclicity has been verified across the whole graph, not inspected node by node; a single offending edge anywhere flips the global verdict, and tree assumptions silently fail on the multi-parent DAGs that most "hierarchies" actually are.

T3 — Acyclicity Assumed versus Acyclicity Enforced (frame-honesty). Every benefit — topological sort, terminating resolution, well-founded induction — presupposes the no-return constraint actually holds, but nothing guarantees it unless enforced. The failure mode is building a scheduler, build system, or proof checker on an assumed DAG that accidentally acquires a cycle, rendering the algorithm undefined at runtime rather than at design time. Diagnostic: ask whether a cycle-detection check runs on every mutation of the graph; "it's a DAG" is a claim that decays as edges are added, and a dependency structure without enforced acyclicity is one bad edge away from an undefined operation with no warning.

T4 — Static Structure versus Edge Churn (temporal). Forward-closure locality bounds the cost of a change to the affected descendants, which underwrites incremental recomputation — but only if the graph's shape is stable enough that the closure is meaningful. The failure mode is treating invalidation as cheap when edges themselves churn: adding or removing dependencies reshapes forward closures, so a change that looks local under the old topology cascades under the new one. Diagnostic: ask whether the edge set is stable or itself mutating; forward-closure reasoning assumes the dependency structure is fixed while node values change, and a graph whose edges are in flux can invalidate far more than the descendant set computed against a stale topology.

T5 — One Valid Order versus Many (scopal). A topological sort produces a linear order consistent with the arrows, but usually many such orders exist, and they are not interchangeable for every purpose. The failure mode is treating the chosen order as canonical — assuming a particular build sequence, schedule, or evaluation order is the order when the DAG only constrains it partially, so a downstream step that depends on a specific tie-break behaves differently under a different valid sort. Diagnostic: ask whether the task needs any consistent order or a specific one; the DAG guarantees only partial order, and any logic that relies on the particular sequence among incomparable nodes has imported an assumption the acyclicity does not license.

T6 — Edges as Dependency versus Edges as Causation (frame). The DAG skeleton is substrate-neutral, which tempts reading any directed-acyclic structure as causal. The failure mode is conflating a dependency or precedence DAG with a causal one — treating "A is built before B" or "A is cited before B" as "A causes B," importing causal-inference machinery (do-calculus, intervention) where the edges only encode order. Diagnostic: ask what the directed edge actually means — prerequisite, temporal precedence, or genuine causation; the same acyclic shape carries all three, and interventional reasoning is licensed only when the edges are causal, so a build or citation DAG cannot answer "what if I had changed A?" the way a causal DAG can.

Structural–Framed Character

Directed Acyclic Graph sits at the structural pole of the structural–framed spectrum: a pure graph-theoretic shape — directed edges with a global no-return constraint — with a zero aggregate and every diagnostic reading the same way.

The pattern carries no home vocabulary that must travel with it: the rationale notes the lexicon is already domain-neutral, so the same directed-and-acyclic skeleton is told in a build engineer's "dependency graph," a statistician's "causal DAG," a version-control system's "commit history," a biologist's "phylogeny," and a curriculum designer's "prerequisite structure," each in its own terms, with node/edge/source/sink being substrate-blind labels rather than imported baggage — the entry stresses the transfer is "recognition rather than analogy" because the shape is literally the same object everywhere. It carries no evaluative weight: acyclicity is neither good nor bad — a cycle is a "diagnosis" rather than a defect, and whether it signals genuine feedback or a fixable design flaw is value-neutral until the substrate supplies meaning. Its origin is formal, a property of nodes and directed edges, with no institutional pedigree. It is not bound to a human practice: a phylogeny is a DAG on lineage and a causal structure is a DAG on cause-before-effect, facts about those systems holding with no observer present. And invoking it recognizes structure already present — the topological order and forward closures exist the moment the edges are directed and acyclic — rather than importing an interpretive frame; the entry warns precisely against over-importing the causal reading onto a shape that is bare ordering. Every diagnostic points one way, which is why the grade is a clean structural zero.

Substrate Independence

Directed Acyclic Graph is about as substrate-independent as a prime can be — composite 5 / 5 on the substrate-independence scale. Its signature is a pure graph-theoretic shape — directed edges with a global no-return constraint — and the entry's own claim is that its lexicon is already domain-neutral, so the transfer is recognition rather than analogy: the shape is literally the same object in every substrate. The breadth is maximal: software builds, project critical paths, version-control commit history, causal inference and probabilistic graphical models, compiler expression and control-flow graphs, type and subtype hierarchies, phylogenies and pedigrees, data-pipeline schedulers, citation networks, foundationalist justification, bills of materials, and curriculum prerequisites all are DAGs, with node/edge/source/sink as substrate-blind labels. The abstraction is maximal — acyclicity is value-neutral (a cycle is a diagnosis, not a defect), the structure is formal, and a phylogeny is a DAG on lineage and a causal structure a DAG on cause-before-effect as facts holding with no observer present. The transfer is heavily documented and load-bearing: the same two facts (directed edges, no return paths) buy the same powers everywhere — topological order, well-founded induction, forward-closure locality — so a practitioner who internalized "a change invalidates exactly its forward closure" in a build system reads a data-lineage pipeline and immediately knows which tables to refresh, and the cycle-breaking maneuver (introduce a new node) ports from import cycles to research-plan loops to causal-model coherence. Maximal abstraction, maximal breadth, and recognition-level transfer all line up at the ceiling.

  • Composite substrate independence — 5 / 5
  • Domain breadth — 5 / 5
  • Structural abstraction — 5 / 5
  • Transfer evidence — 5 / 5

Relationships to Other Primes

One-hop neighborhood: parents above, mutual partners to the right, children below.DirectedAcyclic Graphsubsumption: NetworkNetwork

Parents (1) — more general patterns this builds on

  • Directed Acyclic Graph is a kind of Network

    A DAG is a specific KIND of network/graph — directed edges plus a global no-return (acyclicity) constraint. A specialization of the general network with the added direction + acyclicity invariants.

Path to root: Directed Acyclic GraphNetworkReservoir-Flux Network

Neighborhood in Abstraction Space

Directed Acyclic Graph sits in a moderately populated region (47th percentile for distinctiveness): it has near-neighbors but no dense thicket of synonyms.

Family — Graphs, Networks & Connectivity (12 primes)

Nearest neighbors

Computed from structural-signature embeddings · 2026-06-14

Not to Be Confused With

The DAG is most commonly confused with hierarchy (the tree), and the confusion is consequential because tree assumptions silently fail on DAGs all the time. A hierarchy gives every node at most one parent and a single root, which makes for clean recursion, unambiguous paths, and simple containment. A DAG relaxes exactly the single-parent constraint: a node may have many parents and the graph may have many sources, while still forbidding cycles. The difference is not cosmetic. Algorithms written for trees — assuming one parent, a unique path to the root, no shared subtrees — break or silently over-count on a DAG, where a node can be reached by several paths and a "subtree" can be shared by multiple parents. The trap is that most real "hierarchies" are actually DAGs: a source file depending on several libraries, a class implementing multiple interfaces, a task with several prerequisites, a concept with multiple intellectual ancestors. A practitioner who models these as trees imports a single-parent assumption the structure does not satisfy, and the failure shows up as duplicated work, incorrect path reasoning, or an exponential blow-up when a shared DAG node is visited once per path instead of once total. The discipline is to ask whether any node legitimately has two parents; if so, it is a DAG, and the tree machinery does not apply.

A second confusion is with cycle, and here the relationship is one of direct opposition rather than overlap. A cycle is a closed path returning to its origin; a DAG is defined by the global absence of any such path. They are confused not because they resemble each other but because cycles are what one is constantly checking for when working with DAGs — the cycle is the DAG's characteristic failure, and "is this still acyclic?" is the load-bearing question on every mutation of a dependency graph. The structural relationship the prime emphasizes is that a cycle appearing in a would-be DAG is a diagnosis, not noise: it signals either genuine bidirectional feedback (which is a different prime — feedback — and must be modeled as such, not engineered away) or a missing intermediate node whose introduction breaks the loop (a stub, a pilot study, a shared third module). Conflating the two leads to two errors: treating real feedback as a DAG violation to be deleted (engineering out the loop the system depends on), or treating a fixable accidental cycle as irreducible feedback (failing to introduce the node that would restore acyclicity). The DAG and the cycle are the two sides of the acyclicity verdict, and which one is present determines the entire repertoire of available operations.

The DAG is also worth separating from causality, because the causal DAG is the most prominent application of the shape and the two are routinely spoken of as one. The DAG is a substrate-neutral skeleton: directed edges plus global acyclicity, with no commitment about what the edges mean. Causality is one interpretation of that skeleton, in which edges read "directly causes" and acyclicity rules out backward causation. But the identical shape equally encodes build prerequisites ("compiles before"), temporal precedence ("happened before"), citation ("references earlier work"), and subtype relationships — none of which are causal. The distinction is load-bearing precisely because interventional reasoning (do-calculus, counterfactuals, "what if I had changed A?") is licensed only when the edges are genuinely causal. A practitioner who reads any DAG as causal will try to compute the effect of intervening on a node in a build graph or a citation network, where the edges encode order, not causation, and the intervention question is meaningless. The same acyclic structure supports ordering, evaluation, and forward-closure invalidation regardless of interpretation, but only the causal reading supports asking what would happen under manipulation — so the meaning of the edges must be established before the causal machinery is imported.

For a practitioner the cluster resolves by asking three questions in order. Does any node have more than one parent (DAG, not hierarchy)? Is the graph globally acyclic, or has a cycle crept in that must be diagnosed as feedback or broken with a new node? And what do the directed edges mean — prerequisite or precedence (ordering only) versus genuine causality (which alone licenses intervention)? The recurring failures are importing single-parent tree logic onto a multi-parent DAG, deleting genuine feedback to preserve acyclicity, and running causal-intervention reasoning over edges that merely encode order. The DAG's power — topological order, bottom-up induction, forward-closure locality — is real in every interpretation, but the kind of question it can answer depends entirely on which of these neighbors it is correctly distinguished from.

Solution Archetypes

No catalogued solution archetypes reference this prime yet.