{
  "format": "vercy-model-allocation-candidate/v1",
  "contourId": "EM-WRK-06",
  "proposedName": "Impact Scenario",
  "modelId": null,
  "registryId": null,
  "allocationState": "unassigned",
  "decision": "NEW MODEL",
  "canonicalPublishable": false,
  "candidateRevision": 2,
  "identityTest": {
    "stableIdentity": "A frozen candidate-exposure projection remains identifiable across later graph, registry and licence changes.",
    "versionIdentity": "Trigger, seed, snapshot, registry, propagation profile, horizon or assumption changes create a new immutable scenario.",
    "independentLifecycle": [
      "draft",
      "executed",
      "reviewed",
      "released",
      "withdrawn"
    ],
    "mastership": "impact-analysis authority"
  },
  "boundary": {
    "owns": [
      "scenario identity",
      "trigger and seeds",
      "read-only snapshot verification pins",
      "projection configuration",
      "candidate exposure and frontier outputs"
    ],
    "references": [
      {
        "target": "WM-XCT-037",
        "purpose": "dependency edges and minted graph snapshot"
      },
      {
        "target": "WM-ACT-034",
        "purpose": "external affectedness or criticality assessment"
      },
      {
        "target": "WM-KNW-008",
        "purpose": "external evidence citation"
      },
      {
        "target": "WM-MAT-008",
        "purpose": "external observation"
      },
      {
        "target": "WM-KNW-007",
        "purpose": "external claim only"
      },
      {
        "target": "WM-KNW-015",
        "purpose": "external risk only"
      }
    ],
    "excludes": [
      "edge, endpoint or snapshot mastership",
      "evidence payload",
      "assessment, claim or risk identity",
      "automatic negative conclusion from missing edges"
    ]
  },
  "objects": {
    "ImpactScenario": {
      "identity": [
        "impactScenarioId"
      ],
      "required": [
        "trigger",
        "seeds",
        "graphSnapshotRef",
        "snapshotDigest",
        "digestAlgorithm",
        "canonicalizationMethod",
        "typeRegistryReleaseRef",
        "propagationProfileRef",
        "analysisMode",
        "horizon",
        "codeListRefs",
        "conclusionPolarity"
      ],
      "optional": [
        "baselineRef",
        "assumptions",
        "completenessRef"
      ],
      "conclusionPolarity": [
        "positive",
        "negative",
        "indeterminate"
      ],
      "conditionalRequirements": [
        "negative requires completenessRef",
        "executed onward requires exposureSet, stopReasons, cycleWitnesses and unexpandedFrontier"
      ]
    },
    "ScenarioSupersession": {
      "identity": [
        "predecessorRef",
        "successorRef"
      ],
      "required": [
        "reason",
        "decidedAt"
      ]
    },
    "ScenarioStatusEvaluation": {
      "identity": [
        "scenarioRef",
        "evaluatedAt"
      ],
      "required": [
        "evaluatedStatus",
        "basis"
      ]
    },
    "CompletenessCoverage": {
      "required": [
        "coveredSubjectSet",
        "dependencyKinds",
        "phases",
        "validityInterval",
        "coveragePredicate"
      ]
    },
    "ScenarioOutputs": {
      "required": [
        "candidateExposureSet",
        "stopReasons",
        "suppressedEdges",
        "cycleWitnesses",
        "unexpandedFrontier"
      ],
      "rule": "every suppression and stop has a reason code"
    }
  },
  "epistemicMapping": {
    "known": "known",
    "unknown": "unknown",
    "not-assessed": "unknown-unexamined",
    "unresolved": "incomplete-conflicting",
    "incomplete": "incomplete",
    "asserted-absent": "absent"
  },
  "invariants": [
    "Released scenario bytes are immutable; status and supersession are overlays.",
    "Every scenario pins snapshot, digest algorithm, canonicalization, registry release, propagation profile, horizon and code lists.",
    "Two scenarios over one graph state pin the same snapshot reference and digest.",
    "Counter-canonical traversal requires inverse permission on every edge.",
    "Different hop types require composition rules and per-edge licences.",
    "Propagation terminates under explicit depth, type, phase, lag, frontier and cycle policies.",
    "Unknown, not-assessed, unresolved and incomplete block traversal and lower completeness.",
    "Asserted-absent terminates its branch.",
    "A scenario without completenessRef is indeterminate and never negative.",
    "Negative completeness covers subject set, kinds, phases and validity interval.",
    "Outputs are candidate exposure, never affectedness, causality or risk.",
    "No path is promoted to a claim.",
    "Live graph mutation never rewrites a pinned scenario.",
    "Every output stop or suppression has a reason code.",
    "No analysis writes to an endpoint or edge master."
  ],
  "holds": [
    "Registry allocation is pending and no identifier may be guessed.",
    "Base publication and relation-contract holds remain."
  ]
}
