{
  "code": "DAG",
  "collection": "architecture",
  "href": "https://banes-lab.com/ontology#architecture-directed-acyclic-graph",
  "id": "directed-acyclic-graph",
  "kind": "constraint",
  "layer": {
    "href": "https://banes-lab.com/ontology/schema#layer-causality-core",
    "json": "https://banes-lab.com/json/records/layer/causality-core",
    "label": "Causality Core",
    "markdown": "https://banes-lab.com/records/layer/causality-core.md",
    "ref": "layer:causality-core"
  },
  "name": "Directed Acyclic Graph",
  "ref": "architecture:directed-acyclic-graph",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-layering",
          "json": "https://banes-lab.com/json/records/lexicon/layering",
          "label": "Layering",
          "markdown": "https://banes-lab.com/records/lexicon/layering.md",
          "ref": "lexicon:layering"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-build-order",
          "json": "https://banes-lab.com/json/records/lexicon/build-order",
          "label": "Build Order",
          "markdown": "https://banes-lab.com/records/lexicon/build-order.md",
          "ref": "lexicon:build-order"
        }
      ],
      "relation": "reinforces"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-topological-ordering",
          "json": "https://banes-lab.com/json/records/lexicon/topological-ordering",
          "label": "Topological Ordering",
          "markdown": "https://banes-lab.com/records/lexicon/topological-ordering.md",
          "ref": "lexicon:topological-ordering"
        }
      ],
      "relation": "enables"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-circular-dependency",
          "json": "https://banes-lab.com/json/records/architecture/circular-dependency",
          "label": "Circular Dependency",
          "markdown": "https://banes-lab.com/records/architecture/circular-dependency.md",
          "ref": "architecture:circular-dependency"
        }
      ],
      "relation": "conflicts-with"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-bidirectional-collaboration",
          "json": "https://banes-lab.com/json/records/lexicon/bidirectional-collaboration",
          "label": "Bidirectional Collaboration",
          "markdown": "https://banes-lab.com/records/lexicon/bidirectional-collaboration.md",
          "ref": "lexicon:bidirectional-collaboration"
        }
      ],
      "relation": "tensions-with"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/schema#tension-bidirectional-collaboration-directed-acyclic-graph-dag",
          "json": "https://banes-lab.com/json/records/tension/bidirectional-collaboration-directed-acyclic-graph-dag",
          "label": "Directed Acyclic Graph (DAG) / Bidirectional Collaboration",
          "markdown": "https://banes-lab.com/records/tension/bidirectional-collaboration-directed-acyclic-graph-dag.md",
          "ref": "tension:bidirectional-collaboration-directed-acyclic-graph-dag"
        }
      ],
      "relation": "tensions"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/algorithms#algorithms-checklist-creation-kernel",
          "json": "https://banes-lab.com/json/records/algorithms/checklist-creation-kernel",
          "label": "Checklist Creation Kernel",
          "markdown": "https://banes-lab.com/records/algorithms/checklist-creation-kernel.md",
          "ref": "algorithms:checklist-creation-kernel"
        }
      ],
      "relation": "contracts"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-circular-dependency",
          "json": "https://banes-lab.com/json/records/architecture/circular-dependency",
          "label": "Circular Dependency",
          "markdown": "https://banes-lab.com/records/architecture/circular-dependency.md",
          "ref": "architecture:circular-dependency"
        }
      ],
      "relation": "violated-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-invert-dependency",
          "json": "https://banes-lab.com/json/records/lexicon/invert-dependency",
          "label": "Invert Dependency",
          "markdown": "https://banes-lab.com/records/lexicon/invert-dependency.md",
          "ref": "lexicon:invert-dependency"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-extract-interface",
          "json": "https://banes-lab.com/json/records/lexicon/extract-interface",
          "label": "Extract Interface",
          "markdown": "https://banes-lab.com/records/lexicon/extract-interface.md",
          "ref": "lexicon:extract-interface"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-split-module",
          "json": "https://banes-lab.com/json/records/lexicon/split-module",
          "label": "Split Module",
          "markdown": "https://banes-lab.com/records/lexicon/split-module.md",
          "ref": "lexicon:split-module"
        }
      ],
      "relation": "refactored-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/schema#vocabulary-severity-contextual",
          "json": "https://banes-lab.com/json/records/vocabulary/severity-contextual",
          "label": "contextual",
          "markdown": "https://banes-lab.com/records/vocabulary/severity-contextual.md",
          "ref": "vocabulary:severity-contextual"
        }
      ],
      "relation": "severity"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-category-causality-ordering-distributed-time",
          "json": "https://banes-lab.com/json/records/architecture-category/causality-ordering-distributed-time",
          "label": "Causality / Ordering / Distributed Time",
          "markdown": "https://banes-lab.com/records/architecture-category/causality-ordering-distributed-time.md",
          "ref": "architecture-category:causality-ordering-distributed-time"
        }
      ],
      "relation": "category"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-closure-no-import-cycles-eslint-rule-ts",
          "json": "https://banes-lab.com/json/source/governance/rules/eslint/closure-no-import-cycles.eslint.rule.ts",
          "label": "rules/eslint/closure-no-import-cycles.eslint.rule.ts",
          "markdown": "https://banes-lab.com/source/governance/rules/eslint/closure-no-import-cycles.eslint.rule.ts.md",
          "ref": "anatomy:file-governance-rules-eslint-closure-no-import-cycles-eslint-rule-ts"
        },
        {
          "href": "https://banes-lab.com/anatomy/content#file-content-runtime-entrypoints-coverage-entrypoint-ts",
          "json": "https://banes-lab.com/json/source/content/runtime/entrypoints/coverage.entrypoint.ts",
          "label": "runtime/entrypoints/coverage.entrypoint.ts",
          "markdown": "https://banes-lab.com/source/content/runtime/entrypoints/coverage.entrypoint.ts.md",
          "ref": "anatomy:file-content-runtime-entrypoints-coverage-entrypoint-ts"
        }
      ],
      "relation": "enforced-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/pag/guide#node-design",
          "json": "https://banes-lab.com/json/pag/guide/node-design",
          "label": "Node design",
          "markdown": "https://banes-lab.com/pag/guide/node-design.md",
          "ref": "chapter:/pag/guide#node-design"
        },
        {
          "href": "https://banes-lab.com/pag/orchestration#declared-structure",
          "json": "https://banes-lab.com/json/pag/orchestration/declared-structure",
          "label": "Orchestration as declared structure",
          "markdown": "https://banes-lab.com/pag/orchestration/declared-structure.md",
          "ref": "chapter:/pag/orchestration#declared-structure"
        },
        {
          "href": "https://banes-lab.com/disciplined-methodology/plan#the-flat-checklist",
          "json": "https://banes-lab.com/json/disciplined-methodology/plan/the-flat-checklist",
          "label": "The plan is a graph",
          "markdown": "https://banes-lab.com/disciplined-methodology/plan/the-flat-checklist.md",
          "ref": "chapter:/disciplined-methodology/plan#the-flat-checklist"
        },
        {
          "href": "https://banes-lab.com/disciplined-methodology/verify#counting-copies",
          "json": "https://banes-lab.com/json/disciplined-methodology/verify/counting-copies",
          "label": "Counting copies",
          "markdown": "https://banes-lab.com/disciplined-methodology/verify/counting-copies.md",
          "ref": "chapter:/disciplined-methodology/verify#counting-copies"
        },
        {
          "href": "https://banes-lab.com/disciplined-methodology/collaborate#the-board-and-the-venue",
          "json": "https://banes-lab.com/json/disciplined-methodology/collaborate/the-board-and-the-venue",
          "label": "The board and the venue",
          "markdown": "https://banes-lab.com/disciplined-methodology/collaborate/the-board-and-the-venue.md",
          "ref": "chapter:/disciplined-methodology/collaborate#the-board-and-the-venue"
        },
        {
          "href": "https://banes-lab.com/software-architecture#a-system-is-a-graph",
          "json": "https://banes-lab.com/json/software-architecture/model/a-system-is-a-graph",
          "label": "A system is a graph",
          "markdown": "https://banes-lab.com/software-architecture/model/a-system-is-a-graph.md",
          "ref": "chapter:/software-architecture#a-system-is-a-graph"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-anti-patterns",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-anti-patterns",
          "label": "Anti-patterns",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md",
          "ref": "chapter:/ontology#architecture-category-anti-patterns"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-causality-ordering-distributed-time",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-causality-ordering-distributed-time",
          "label": "Causality / Ordering / Distributed Time",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-causality-ordering-distributed-time.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-causality-ordering-distributed-time"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-core-modular-design",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-core-modular-design",
          "label": "Core Modular Design",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-core-modular-design.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-core-modular-design"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-solid-object-oriented-design",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-solid-object-oriented-design",
          "label": "SOLID / Object-Oriented Design",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-solid-object-oriented-design.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-solid-object-oriented-design"
        },
        {
          "href": "https://banes-lab.com/ontology/algorithms#algorithms-domain-checklist-creation",
          "json": "https://banes-lab.com/json/ontology/algorithms/algorithms-domain-checklist-creation",
          "label": "Checklist creation",
          "markdown": "https://banes-lab.com/ontology/algorithms/algorithms-domain-checklist-creation.md",
          "ref": "chapter:/ontology/algorithms#algorithms-domain-checklist-creation"
        },
        {
          "href": "https://banes-lab.com/ontology/schema#the-vocabulary-severity",
          "json": "https://banes-lab.com/json/ontology/schema/the-vocabulary-severity",
          "label": "Severity levels",
          "markdown": "https://banes-lab.com/ontology/schema/the-vocabulary-severity.md",
          "ref": "chapter:/ontology/schema#the-vocabulary-severity"
        },
        {
          "href": "https://banes-lab.com/ontology/schema#the-resolutions",
          "json": "https://banes-lab.com/json/ontology/schema/the-resolutions",
          "label": "The resolutions",
          "markdown": "https://banes-lab.com/ontology/schema/the-resolutions.md",
          "ref": "chapter:/ontology/schema#the-resolutions"
        }
      ],
      "relation": "linked-from"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-closure-no-import-cycles-eslint-rule-ts",
          "json": "https://banes-lab.com/json/source/governance/rules/eslint/closure-no-import-cycles.eslint.rule.ts",
          "label": "rules/eslint/closure-no-import-cycles.eslint.rule.ts",
          "markdown": "https://banes-lab.com/source/governance/rules/eslint/closure-no-import-cycles.eslint.rule.ts.md",
          "ref": "anatomy:file-governance-rules-eslint-closure-no-import-cycles-eslint-rule-ts"
        }
      ],
      "relation": "evidence"
    }
  ],
  "summary": "A rule or precondition that every dependency points one way and the graph they form has no cycle, so its nodes can be put in topological order.",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/ontology#architecture-vector-clocks",
      "json": "https://banes-lab.com/json/records/architecture/vector-clocks",
      "label": "Vector Clocks",
      "markdown": "https://banes-lab.com/records/architecture/vector-clocks.md",
      "ref": "architecture:vector-clocks"
    },
    "previous": {
      "href": "https://banes-lab.com/ontology#architecture-dependency-graph",
      "json": "https://banes-lab.com/json/records/architecture/dependency-graph",
      "label": "Dependency Graph",
      "markdown": "https://banes-lab.com/records/architecture/dependency-graph.md",
      "ref": "architecture:dependency-graph"
    }
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/records/architecture",
    "label": "Architecture principles",
    "markdown": "https://banes-lab.com/api/records/architecture.md",
    "ref": "api:records/architecture"
  },
  "aliases": [
    "Directed Dependencies"
  ],
  "exemplar": {
    "after": "const dag = new Dag();\ndag.addEdge(\"foo\", \"bar\");\nif (dag.wouldCreateCycle(\"bar\", \"foo\")) throw new Error(\"cycle rejected\");",
    "before": "graph.addEdge(\"foo\", \"bar\");\ngraph.addEdge(\"bar\", \"foo\");",
    "lang": "ts",
    "medium": "code"
  },
  "formedBy": null,
  "scope": [
    "dependency graph",
    "workflow",
    "build"
  ],
  "severity": "contextual"
}
