# Data Model — 094 Assignment Operations Observability Hardening

This feature introduces **no new entities**. It strengthens how existing operational artifacts are created, deduplicated, and displayed.

## Entities (existing)

### OperationRun

Represents a single observable operation for Monitoring.

- Ownership:
  - `workspace_id` required.
  - `tenant_id` present for tenant-bound runs.
- Key fields:
  - `type`: operation type identifier (string).
  - `status`: queued/running/completed.
  - `outcome`: pending/succeeded/failed/etc.
  - `run_identity_hash`: stable identity used for active-run dedupe.
  - `context`: structured details for Monitoring (inputs, progress, counters).
  - `failures`: array of failure items with stable `code`, normalized `reason_code`, and sanitized `message`.
  - Counter-like fields may be stored in `context` depending on existing conventions.

### AuditLog

Immutable audit record for security/ops-relevant mutations.

- Scope invariant: if `tenant_id` is present, `workspace_id` must also be present.
- This spec requires exactly one audit entry per assignment restore execution.

### RestoreRun

Represents a restore execution request and its lifecycle. Assignment restores are performed under an existing restore run.

### BackupItem

Represents an item within a backup set; assignment fetch/enrichment is performed for a specific backup item.

## Relationships (conceptual)

- One tenant has many operation runs.
- One restore run should be associated with one or more operation runs depending on orchestration; this spec requires that assignment restore execution is observable via at least one operation run.
- One backup item can have a related fetch/enrichment operation run.

## State transitions

### OperationRun lifecycle

- `queued` → `running` → `completed`
- Outcome set on completion to indicate success or failure.

