{
  "format": "vercy-world-model-candidate/v1",
  "contourId": "EM-WRK-01",
  "modelId": "WM-ACT-006",
  "registryId": "vr.wm-act-006",
  "name": "Task / Work Item",
  "version": "0.1.0-candidate.2",
  "entryKind": "work-item-aggregate",
  "status": "research-candidate-audited",
  "canonicalPublishable": false,
  "purpose": "Represent a bounded unit of work using canonical WM-ACT-006 identity, immutable source-natural keys, governed lifecycle mappings, append-only evidence and loss-aware round-trip integration.",
  "boundary": {
    "owns": [
      "canonical task or work-item identity",
      "source aliases and import observations",
      "native status snapshots",
      "canonical state mapping assertions",
      "append-only transition history",
      "assignment history",
      "revisioned estimate assertions",
      "open-world outcome assertions",
      "deletion tombstones, loss and conflict records"
    ],
    "delegates": [
      "lifecycle definitions and permitted transitions to WM-XCT-021",
      "process-shaped alignment to deferred WM-ACT-003",
      "requirement and acceptance criteria to WM-REC-006",
      "project to WM-ACT-005",
      "program or portfolio to WM-ACT-029",
      "plan or schedule to WM-ACT-008",
      "actual effort to an explicitly named external authority"
    ],
    "excludes": [
      "independent Backlog or Iteration identity",
      "project, program, portfolio or requirement mastership",
      "acceptance inference from closure",
      "actual effort or payroll mastership",
      "silent remapping or overwrite",
      "human-readable tracker keys as canonical identity"
    ]
  },
  "identityResolutionRules": [
    "taskId is the canonical WM-ACT-006 identity.",
    "A source natural key is source namespace plus immutable internal native item identifier and resolves to exactly one taskId.",
    "Human-readable keys and container paths are effective-dated aliases and may change without changing taskId.",
    "Alias roles use a pinned scheme/version/code and at most one alias may assert master for an interval."
  ],
  "objects": {
    "Task": {
      "identity": [
        "taskId"
      ],
      "required": [
        "sourceSystemRef",
        "immutableSourceItemId",
        "sourceAliasSet",
        "workItemTypeRef",
        "lifecycleDefinitionRef",
        "nativeStatus",
        "canonicalState",
        "status"
      ],
      "optional": [
        "title",
        "description",
        "priorityAssertionRef",
        "projectRef",
        "programRef",
        "requirementRefs",
        "planRef"
      ],
      "lifecycle": [
        "proposed",
        "ready",
        "active",
        "blocked",
        "completed",
        "cancelled",
        "rejected",
        "archived"
      ]
    },
    "StateTransition": {
      "identity": [
        "transitionId"
      ],
      "required": [
        "taskRef",
        "sourceTransitionKey",
        "nativeFromState",
        "nativeToState",
        "occurredAt",
        "observedAt",
        "sourceOrdinal",
        "lifecycleDefinitionVersionRef",
        "crosswalkVersionRef",
        "mappingMode",
        "observingScopeRef"
      ],
      "optional": [
        "sourceEventId",
        "actorRef",
        "reason",
        "canonicalFromState",
        "canonicalToState",
        "writeProvenanceRef",
        "supersedesMappingAssertionRef"
      ],
      "lifecycle": [
        "recorded",
        "mapping-superseded",
        "redacted"
      ]
    },
    "Assignment": {
      "identity": [
        "assignmentId"
      ],
      "required": [
        "taskRef",
        "assigneeRef",
        "responsibilityRole",
        "validFrom",
        "authorityRef",
        "status",
        "observingScopeRef"
      ],
      "optional": [
        "validTo",
        "allocationRef",
        "reason"
      ],
      "lifecycle": [
        "proposed",
        "effective",
        "ended",
        "withdrawn"
      ]
    },
    "EstimateAssertion": {
      "identity": [
        "estimateId"
      ],
      "required": [
        "taskRef",
        "value",
        "unitSchemeVersionRef",
        "estimateKind",
        "grain",
        "basis",
        "method",
        "assertedBy",
        "effectiveAt",
        "revision"
      ],
      "optional": [
        "supersedesEstimateId",
        "confidence",
        "actualEffortAuthorityRef"
      ],
      "lifecycle": [
        "asserted",
        "superseded",
        "withdrawn"
      ]
    },
    "OutcomeAssertion": {
      "identity": [
        "outcomeAssertionId"
      ],
      "required": [
        "taskRef",
        "outcome",
        "assertedAt",
        "assertedBy",
        "authorityRef",
        "assertionBasis",
        "evidenceRefs",
        "observingScopeRef"
      ],
      "optional": [
        "criteriaRevisionRef",
        "supersedesOutcomeAssertionId",
        "retractsOutcomeAssertionId",
        "reason"
      ],
      "lifecycle": [
        "asserted",
        "superseded",
        "retracted"
      ]
    },
    "ImportObservation": {
      "identity": [
        "importObservationId"
      ],
      "required": [
        "sourceRef",
        "observedAt",
        "credentialScopeRef",
        "sourceRevision",
        "contentDigest"
      ],
      "optional": [
        "writeProvenanceRef",
        "sourceOrdinalRange"
      ]
    },
    "LossRecord": {
      "identity": [
        "lossRecordId"
      ],
      "required": [
        "taskRef",
        "sourceField",
        "nativeValue",
        "crosswalkVersionRef",
        "reason",
        "retentionClassRef",
        "observedAt"
      ],
      "optional": [
        "candidateMappingRefs"
      ]
    },
    "ConflictRecord": {
      "identity": [
        "conflictRecordId"
      ],
      "required": [
        "taskRef",
        "assertionRefs",
        "conflictKind",
        "surfacedAt",
        "status"
      ],
      "optional": [
        "resolutionRef"
      ]
    },
    "DeletionTombstone": {
      "identity": [
        "tombstoneId"
      ],
      "required": [
        "taskRef",
        "sourceRef",
        "observedDeletionAt",
        "evidenceRef",
        "retentionClassRef"
      ],
      "optional": [
        "redactedActorRef"
      ]
    }
  },
  "outcomes": [
    "done",
    "accepted",
    "cancelled",
    "rejected"
  ],
  "relations": [
    {
      "target": "WM-XCT-021",
      "relation": "REFERENCE",
      "required": true,
      "purpose": "Pin occurrence-time-valid lifecycle definition and permitted transition semantics."
    },
    {
      "target": "WM-ACT-003",
      "relation": "REFERENCE",
      "required": false,
      "purpose": "Deferred process-shaped alignment only; it is not current lifecycle authority."
    },
    {
      "target": "WM-REC-006",
      "relation": "REFERENCE",
      "required": false,
      "purpose": "Trace immutable requirement and acceptance-criteria revisions."
    },
    {
      "target": "WM-ACT-005",
      "relation": "REFERENCE",
      "required": false,
      "purpose": "Resolve authoritative project identity."
    },
    {
      "target": "WM-ACT-029",
      "relation": "REFERENCE",
      "required": false,
      "purpose": "Resolve authoritative program or portfolio containment."
    },
    {
      "target": "WM-ACT-008",
      "relation": "REFERENCE",
      "required": false,
      "purpose": "Resolve governing plan or schedule identity and timeboxed view facts."
    }
  ],
  "operations": [
    {
      "id": "resolve-task",
      "effect": "Resolve immutable source natural key to one canonical taskId while retaining effective-dated aliases.",
      "authority": "producing tracker or work authority"
    },
    {
      "id": "record-transition",
      "effect": "Append a source-native transition, then append its version-stamped canonical mapping.",
      "authority": "source lifecycle authority"
    },
    {
      "id": "revise-estimate",
      "effect": "Append a typed estimate revision without overwriting prior assertions or actual effort.",
      "authority": "authorized estimator"
    },
    {
      "id": "assert-outcome",
      "effect": "Append, supersede or retract an open-world evidence-bearing outcome assertion.",
      "authority": "performer or acceptance authority"
    },
    {
      "id": "import-observation",
      "effect": "Apply a scoped source observation idempotently, recording loss, conflict, provenance and tombstones.",
      "authority": "authorized integration"
    }
  ],
  "crosswalkRules": [
    "Every mapped value stores the producing crosswalk version.",
    "Crosswalk succession declares compatible or breaking change.",
    "A version change appends a superseding mapping assertion and never changes source-event identity.",
    "Unmapped values create queryable LossRecord entries and never default to a canonical state."
  ],
  "deferredPlanningTerms": {
    "Backlog": "Non-normative ordered-selection view; rank is mastered per context and item without independent identity.",
    "Iteration": "Non-normative timeboxed Plan view; membership, dates and commitment are Plan facts without independent identity.",
    "Plan": "Lexical reference to WM-ACT-008; Kanban flows need no Iteration."
  },
  "invariants": [
    "WM-ACT-006 taskId is canonical; immutable native IDs are natural keys resolving to it.",
    "Human-readable keys are historical aliases and project moves never fork identity.",
    "Alias roles are governed, effective-dated and allow at most one master per interval.",
    "Transition identity uses source-native terms; canonical mapped states never participate in its key.",
    "Occurrence and observation times are distinct and source ordinal breaks timestamp ties.",
    "Historical transitions use the lifecycle version valid at occurrence or are marked retrospective.",
    "Native status, canonical state and outcome assertion remain distinct.",
    "Outcome assertions are append-only and open-world; absence of evidence is not a negative outcome.",
    "Closed never implies accepted; reopen supersedes or retracts prior outcomes explicitly.",
    "Crosswalk remapping preserves source event identity and records versioned supersession and loss.",
    "Omission from an export is not deletion; only observed deletion creates a tombstone.",
    "Actor redaction preserves event identity and retention metadata.",
    "Every assertion records observing credential scope; absent data is never treated as empty.",
    "Mirror aliases inherit origin access policy.",
    "Write provenance suppresses echo and equal-authority conflicts create surfaced ConflictRecord entries.",
    "Estimate revisions name unit scheme version, estimate kind, grain and asserter.",
    "Actual effort remains under a named external authority and never overwrites estimates.",
    "Backlog rank is context-item scoped and Iteration facts are Plan-view facts; neither implies independent identity.",
    "Kanban flows derive full task state and outcome without Iteration.",
    "Tracker containers never become project, program, portfolio or requirement masters by inference."
  ],
  "holds": [
    "WM-ACT-006 and referenced parent specifications retain canonical publication holds.",
    "Backlog and Iteration remain deferred non-normative terms without registry allocation.",
    "Actual-effort authority must be named by each adapter.",
    "Canonical publication and live HTTP/runtime/search/package verification remain pending base readiness."
  ]
}
