{
  "code": null,
  "collection": "architecture",
  "href": "https://banes-lab.com/ontology#architecture-manifest-based-design",
  "id": "manifest-based-design",
  "kind": "pattern",
  "layer": {
    "href": "https://banes-lab.com/ontology/schema#layer-declarative-core",
    "json": "https://banes-lab.com/json/records/layer/declarative-core",
    "label": "Declarative Core",
    "markdown": "https://banes-lab.com/records/layer/declarative-core.md",
    "ref": "layer:declarative-core"
  },
  "name": "Manifest-Based Design",
  "ref": "architecture:manifest-based-design",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-manifest-schema",
          "json": "https://banes-lab.com/json/records/lexicon/manifest-schema",
          "label": "Manifest Schema",
          "markdown": "https://banes-lab.com/records/lexicon/manifest-schema.md",
          "ref": "lexicon:manifest-schema"
        }
      ],
      "relation": "requires"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-self-describing-architecture",
          "json": "https://banes-lab.com/json/records/architecture/self-describing-architecture",
          "label": "Self-Describing Architecture",
          "markdown": "https://banes-lab.com/records/architecture/self-describing-architecture.md",
          "ref": "architecture:self-describing-architecture"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-runtime-discovery",
          "json": "https://banes-lab.com/json/records/architecture/runtime-discovery",
          "label": "Runtime Discovery",
          "markdown": "https://banes-lab.com/records/architecture/runtime-discovery.md",
          "ref": "architecture:runtime-discovery"
        }
      ],
      "relation": "reinforces"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-plugin-loading",
          "json": "https://banes-lab.com/json/records/lexicon/plugin-loading",
          "label": "Plugin Loading",
          "markdown": "https://banes-lab.com/records/lexicon/plugin-loading.md",
          "ref": "lexicon:plugin-loading"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-capability-declaration",
          "json": "https://banes-lab.com/json/records/architecture/capability-declaration",
          "label": "Capability Declaration",
          "markdown": "https://banes-lab.com/records/architecture/capability-declaration.md",
          "ref": "architecture:capability-declaration"
        }
      ],
      "relation": "enables"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-hardcoded-registration",
          "json": "https://banes-lab.com/json/records/lexicon/hardcoded-registration",
          "label": "Hardcoded Registration",
          "markdown": "https://banes-lab.com/records/lexicon/hardcoded-registration.md",
          "ref": "lexicon:hardcoded-registration"
        }
      ],
      "relation": "conflicts-with"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-manifest-drift",
          "json": "https://banes-lab.com/json/records/lexicon/manifest-drift",
          "label": "Manifest Drift",
          "markdown": "https://banes-lab.com/records/lexicon/manifest-drift.md",
          "ref": "lexicon:manifest-drift"
        }
      ],
      "relation": "tensions-with"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/schema#tension-manifest-based-design-manifest-drift",
          "json": "https://banes-lab.com/json/records/tension/manifest-based-design-manifest-drift",
          "label": "Manifest-Based Design / Manifest Drift",
          "markdown": "https://banes-lab.com/records/tension/manifest-based-design-manifest-drift.md",
          "ref": "tension:manifest-based-design-manifest-drift"
        }
      ],
      "relation": "tensions"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-implicit-capability",
          "json": "https://banes-lab.com/json/records/lexicon/implicit-capability",
          "label": "Implicit Capability",
          "markdown": "https://banes-lab.com/records/lexicon/implicit-capability.md",
          "ref": "lexicon:implicit-capability"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-hidden-dependency",
          "json": "https://banes-lab.com/json/records/lexicon/hidden-dependency",
          "label": "Hidden Dependency",
          "markdown": "https://banes-lab.com/records/lexicon/hidden-dependency.md",
          "ref": "lexicon:hidden-dependency"
        }
      ],
      "relation": "violated-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-discovery-validation",
          "json": "https://banes-lab.com/json/records/lexicon/discovery-validation",
          "label": "Discovery Validation",
          "markdown": "https://banes-lab.com/records/lexicon/discovery-validation.md",
          "ref": "lexicon:discovery-validation"
        }
      ],
      "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-metadata-self-description-declarative-systems",
          "json": "https://banes-lab.com/json/records/architecture-category/metadata-self-description-declarative-systems",
          "label": "Metadata / Self-Description / Declarative Systems",
          "markdown": "https://banes-lab.com/records/architecture-category/metadata-self-description-declarative-systems.md",
          "ref": "architecture-category:metadata-self-description-declarative-systems"
        }
      ],
      "relation": "category"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/quality#file-quality-runtime-entrypoints-manifest-entrypoint-ts",
          "json": "https://banes-lab.com/json/source/quality/runtime/entrypoints/manifest.entrypoint.ts",
          "label": "runtime/entrypoints/manifest.entrypoint.ts",
          "markdown": "https://banes-lab.com/source/quality/runtime/entrypoints/manifest.entrypoint.ts.md",
          "ref": "anatomy:file-quality-runtime-entrypoints-manifest-entrypoint-ts"
        }
      ],
      "relation": "enforced-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-opaque-runtime-behavior",
          "json": "https://banes-lab.com/json/records/architecture/opaque-runtime-behavior",
          "label": "Opaque Runtime Behavior",
          "markdown": "https://banes-lab.com/records/architecture/opaque-runtime-behavior.md",
          "ref": "architecture:opaque-runtime-behavior"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-self-describing-structures",
          "json": "https://banes-lab.com/json/records/architecture/self-describing-structures",
          "label": "Self-Describing Structures",
          "markdown": "https://banes-lab.com/records/architecture/self-describing-structures.md",
          "ref": "architecture:self-describing-structures"
        }
      ],
      "relation": "refactors"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/disciplined-methodology/verify#documentation-is-code",
          "json": "https://banes-lab.com/json/disciplined-methodology/verify/documentation-is-code",
          "label": "Documentation is code",
          "markdown": "https://banes-lab.com/disciplined-methodology/verify/documentation-is-code.md",
          "ref": "chapter:/disciplined-methodology/verify#documentation-is-code"
        },
        {
          "href": "https://banes-lab.com/software-architecture#definitions-own-what",
          "json": "https://banes-lab.com/json/software-architecture/model/definitions-own-what",
          "label": "Definitions own what, code owns how",
          "markdown": "https://banes-lab.com/software-architecture/model/definitions-own-what.md",
          "ref": "chapter:/software-architecture#definitions-own-what"
        },
        {
          "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#architecture-category-runtime-discovery-dynamic-binding",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-runtime-discovery-dynamic-binding",
          "label": "Runtime Discovery / Dynamic Binding",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-runtime-discovery-dynamic-binding.md",
          "ref": "chapter:/ontology#architecture-category-runtime-discovery-dynamic-binding"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-metadata-self-description-declarative-systems",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-metadata-self-description-declarative-systems",
          "label": "Metadata / Self-Description / Declarative Systems",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md",
          "ref": "chapter:/ontology#architecture-category-metadata-self-description-declarative-systems"
        },
        {
          "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-metadata-self-description-declarative-systems",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-metadata-self-description-declarative-systems",
          "label": "Metadata / Self-Description / Declarative Systems",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-metadata-self-description-declarative-systems.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-metadata-self-description-declarative-systems"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-runtime-discovery-dynamic-binding",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-runtime-discovery-dynamic-binding",
          "label": "Runtime Discovery / Dynamic Binding",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-runtime-discovery-dynamic-binding.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-runtime-discovery-dynamic-binding"
        },
        {
          "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/docs#file-docs-core-plugins-manifest-readme-plugin-ts",
          "json": "https://banes-lab.com/json/source/docs/core/plugins/manifest.readme.plugin.ts",
          "label": "core/plugins/manifest.readme.plugin.ts",
          "markdown": "https://banes-lab.com/source/docs/core/plugins/manifest.readme.plugin.ts.md",
          "ref": "anatomy:file-docs-core-plugins-manifest-readme-plugin-ts"
        }
      ],
      "relation": "evidence"
    }
  ],
  "summary": "A design pattern that loads modules or plugins from a validated manifest listing each entry, version and dependency.",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/ontology#architecture-homoiconicity",
      "json": "https://banes-lab.com/json/records/architecture/homoiconicity",
      "label": "Homoiconicity",
      "markdown": "https://banes-lab.com/records/architecture/homoiconicity.md",
      "ref": "architecture:homoiconicity"
    },
    "previous": {
      "href": "https://banes-lab.com/ontology#architecture-capability-declaration",
      "json": "https://banes-lab.com/json/records/architecture/capability-declaration",
      "label": "Capability Declaration",
      "markdown": "https://banes-lab.com/records/architecture/capability-declaration.md",
      "ref": "architecture:capability-declaration"
    }
  },
  "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": [],
  "exemplar": {
    "after": "const manifest = {\n  name: \"foo-suite\",\n  plugins: [\n    { name: \"foo\", entry: \"./foo.js\", version: \"1.0.0\" },\n    { name: \"bar\", entry: \"./bar.js\", version: \"1.0.0\" },\n  ],\n} as const;\nloadManifest(manifest);",
    "before": "loadPlugin(\"./foo.js\");\nloadPlugin(\"./bar.js\");",
    "lang": "ts",
    "medium": "code"
  },
  "formedBy": null,
  "scope": [
    "plugin",
    "module",
    "deployment"
  ],
  "severity": "contextual"
}
