{
  "format": "vercy-model-allocation-candidate/v1",
  "contourId": "EM-WRK-06",
  "proposedName": "Dependency Type Registry",
  "modelId": null,
  "registryId": null,
  "allocationState": "unassigned",
  "decision": "NEW MODEL",
  "canonicalPublishable": false,
  "candidateRevision": 2,
  "identityTest": {
    "stableIdentity": "A governed dependency vocabulary and its released propagation profiles remain identifiable independently of edges and scenarios.",
    "versionIdentity": "Every semantic change creates an immutable type, registry or propagation-profile version.",
    "independentLifecycle": [
      "draft",
      "reviewed",
      "approved",
      "published",
      "effective",
      "deprecated",
      "retired"
    ],
    "mastership": "enterprise dependency-semantics authority"
  },
  "boundary": {
    "owns": [
      "registry identity",
      "DependencyType identity and versions",
      "RegistryRelease bindings",
      "PrerequisiteGroup",
      "TypeCompositionRule",
      "PropagationProfile releases"
    ],
    "references": [
      {
        "target": "WM-XCT-037",
        "purpose": "Dependency edge semantics"
      },
      {
        "target": "WM-KNW-008",
        "purpose": "external evidence citation"
      },
      {
        "target": "WM-MAT-008",
        "purpose": "external observation evidence"
      }
    ],
    "excludes": [
      "edge or endpoint identity",
      "graph snapshot mastership",
      "impact scenario or projection",
      "assessment, claim or risk"
    ]
  },
  "objects": {
    "DependencyTypeRegistry": {
      "identity": [
        "dependencyTypeRegistryId"
      ],
      "required": [
        "name",
        "ownerRef",
        "status"
      ],
      "status": [
        "draft",
        "reviewed",
        "approved",
        "published",
        "effective",
        "deprecated",
        "retired"
      ]
    },
    "DependencyType": {
      "identity": [
        "dependencyTypeId"
      ],
      "required": [
        "name",
        "status",
        "introducedInRelease",
        "typeVersion",
        "relationClass",
        "directionality",
        "compositionEligibility",
        "cycleRule"
      ],
      "optional": [
        "inverseOfTypeRef",
        "successorTypeRef",
        "deprecatedInRelease",
        "lag"
      ],
      "relationClass": [
        "dependency",
        "adjacency",
        "correlation"
      ],
      "directionality": [
        "directed",
        "symmetric"
      ]
    },
    "RegistryRelease": {
      "identity": [
        "dependencyTypeRegistryId",
        "releaseVersion"
      ],
      "required": [
        "typeDefinitions",
        "validFrom",
        "timeAxis",
        "contentDigest",
        "digestAlgorithm",
        "canonicalizationMethod",
        "status"
      ],
      "optional": [
        "validTo"
      ],
      "transitionRule": "published to effective requires an explicit effective decision"
    },
    "ReleaseSupersession": {
      "identity": [
        "predecessorRef",
        "successorRef"
      ],
      "required": [
        "reason",
        "decidedAt"
      ]
    },
    "PrerequisiteGroup": {
      "identity": [
        "prerequisiteGroupId"
      ],
      "required": [
        "groupSemantics",
        "memberEdgeRefs"
      ],
      "optional": [
        "k"
      ],
      "groupSemantics": [
        "all",
        "any",
        "k-of-n"
      ]
    },
    "TypeCompositionRule": {
      "identity": [
        "antecedentTypeRef",
        "consequentTypeRef"
      ],
      "required": [
        "licensed",
        "basis"
      ]
    },
    "PropagationProfile": {
      "identity": [
        "propagationProfileId",
        "profileVersion"
      ],
      "required": [
        "typeFilter",
        "phaseWindow",
        "traversalDirection",
        "depthLimit",
        "lagBound",
        "unknownEdgePolicy",
        "stopConditions",
        "evidenceThreshold",
        "status",
        "contentDigest",
        "digestAlgorithm",
        "canonicalizationMethod"
      ],
      "rule": "released versions are immutable"
    },
    "Lag": {
      "required": [
        "duration",
        "lagCalendarRef",
        "ianaZone",
        "tzdbRelease",
        "timeAxis"
      ]
    }
  },
  "invariants": [
    "An edge pins dependencyTypeId, typeVersion and registry releaseVersion.",
    "Inverse derivation requires symmetric directionality or declared inverseOfTypeRef; a stored inverse duplicate is rejected.",
    "A counter-canonical traversal is valid only when every pinned type permits inverse derivation.",
    "Edges are binary; multi-party prerequisites use PrerequisiteGroup and arity violations are invalid.",
    "Heterogeneous path composition requires a TypeCompositionRule for every adjacent pair.",
    "Heterogeneous cycle permission is the conjunction of every participating type rule.",
    "Adjacency and correlation are never traversed and are stop conditions.",
    "Every traversed edge has a released, version-pinned PropagationProfile licence.",
    "Unknown, not-assessed, unresolved and incomplete edges block traversal and appear on the frontier; asserted-absent terminates the branch.",
    "Known, unknown, not-assessed, unresolved and incomplete never collapse.",
    "Event, observation and ingestion time axes remain distinct.",
    "Lag pins calendar, zone, tzdb release and time axis.",
    "Registry and profile releases are byte-immutable; supersession uses external link records.",
    "Graph paths never become claims or risks.",
    "Every reference has a stated boundary purpose."
  ],
  "holds": [
    "Registry allocation is pending and no identifier may be guessed.",
    "Base publication and relation-contract holds remain."
  ]
}
