{
  "format": "vercy-model-allocation-candidate/v1",
  "contourId": "EM-WRK-01",
  "proposedName": "Iteration",
  "modelId": null,
  "registryId": null,
  "allocationState": "unassigned",
  "decision": "DEFERRED NON-NORMATIVE VIEW",
  "canonicalPublishable": false,
  "identityTest": {
    "stableIdentity": "Independent Iteration identity is not demonstrated; source correlation is retained as a view key only.",
    "versionIdentity": "View snapshots or Plan revisions preserve scoped facts without minting a new aggregate identity.",
    "independentLifecycle": [
      "not-established",
      "deferred"
    ],
    "mastership": "scoped view facts only; no independent aggregate master"
  },
  "boundary": {
    "owns": [
      "timebox, commitment and membership facts on a WM-ACT-008 Plan view",
      "source correlation and snapshot provenance"
    ],
    "references": [
      {
        "target": "WM-ACT-006",
        "purpose": "Committed or added WorkItems"
      },
      {
        "target": "WM-ACT-005",
        "purpose": "Project delivery context"
      },
      {
        "target": "WM-ACT-029",
        "purpose": "Program or portfolio delivery context"
      },
      {
        "target": "WM-ORG-005",
        "purpose": "Employment or team context used in capacity declarations"
      }
    ],
    "excludes": [
      "work-item identity and workflow state",
      "backlog ordering and rank",
      "project or programme identity",
      "actual effort and time-entry mastership",
      "automatic acceptance or requirement satisfaction",
      "independent iteration identity",
      "mandatory iteration for Kanban"
    ]
  },
  "objects": {
    "Iteration": {
      "identity": [
        "iterationId"
      ],
      "required": [
        "name",
        "ownerRef",
        "startsAt",
        "endsAt",
        "status"
      ],
      "optional": [
        "planningContextRef",
        "successorRef"
      ],
      "lifecycle": [
        "planned",
        "open",
        "planning-closed",
        "active",
        "closed",
        "cancelled",
        "superseded"
      ]
    },
    "IterationCommitment": {
      "identity": [
        "iterationId",
        "commitmentRevision"
      ],
      "required": [
        "sealedAt",
        "workItemRefs",
        "capacitySnapshot",
        "contentDigest"
      ],
      "optional": [
        "planningAssumptions",
        "supersedesRevision"
      ]
    },
    "IterationScopeChange": {
      "identity": [
        "iterationId",
        "scopeChangeId"
      ],
      "required": [
        "occurredAt",
        "actorRef",
        "reason",
        "changeKind"
      ],
      "optional": [
        "addedWorkItemRefs",
        "removedWorkItemRefs",
        "capacityDelta"
      ]
    }
  },
  "invariants": [
    "Iteration identity is independent of backlog, project, board and any member WorkItem.",
    "Every iteration states offset-qualified timebox bounds and an accountable owner.",
    "Planning close seals one immutable commitment baseline with work items and capacity snapshot.",
    "Post-close membership or capacity changes are append-only scope-change records.",
    "WorkItem state changes never rewrite iteration commitment history.",
    "Rollover creates explicit successor membership and never erases incomplete prior commitment.",
    "Cancellation records reason and disposition without claiming delivered result.",
    "Capacity is a declared planning input and never inferred from velocity alone.",
    "Actual effort and elapsed time remain externally mastered and never overwrite estimates or capacity.",
    "Iteration closure never proves WorkItem acceptance or Requirement satisfaction.",
    "One WorkItem may appear in successor iterations only through explicit rollover or new commitment records.",
    "Closed and retired iteration identifiers remain resolvable and are never recycled.",
    "No registry or runtime identifier is allocated until independent identity and lifecycle are proven."
  ],
  "holds": [
    "Identifier allocation is prohibited until independent identity and lifecycle are demonstrated.",
    "This vocabulary is non-normative and cannot be published as a model."
  ],
  "normativeState": "specified-deferred-non-normative"
}
