# Data Model: Workspace, Tenant & Managed Object Lifecycle Governance v1

## Overview

This slice introduces no product persistence. Its data model is a governance contract that classifies existing repo-real lifecycle truth and names reserved follow-up values without implementing them.

`contracts/lifecycle-governance-taxonomy.yaml` is the canonical machine-readable source for this package. `docs/product/standards/lifecycle-governance.md` is the reviewer-facing standard that future specs must cite. This document explains the same lifecycle matrix in prose and must stay aligned with both artifacts.

## Entity: LifecycleDimensionDefinition

**Persistence**: none; governance contract only

| Field | Type | Meaning |
|---|---|---|
| `name` | string | One of the six lifecycle dimensions |
| `purpose` | string | What question this dimension answers |
| `authoritative_sources` | list | Repo-real models, commands, config, or specs that currently own the meaning |
| `current_repo_real_values` | list | Values or states already evidenced in the repo |
| `reserved_follow_up_values` | list | Values named for future work but not yet repo-real |
| `forbidden_proxies` | list | Meanings this dimension must not borrow from another dimension |

## Canonical Lifecycle Dimensions

### 1. Local Record Lifecycle

- **Purpose**: whether a local TenantPilot record is active, onboarding, archived, or otherwise locally present/removed.
- **Authoritative sources**:
  - `specs/143-tenant-lifecycle-operability-context-semantics/spec.md`
  - `specs/091-backupschedule-retention-lifecycle/spec.md`
  - `apps/platform/app/Models/Tenant.php`
- **Current repo-real values**:
  - `tenant.draft`
  - `tenant.onboarding`
  - `tenant.active`
  - `tenant.archived`
  - `backup_schedule.active`
  - `backup_schedule.archived`
  - `backup_schedule.force_deleted`
- **Reserved follow-up values**:
  - `locally_removed`
  - `local_purge_scheduled`
  - `locally_purged`
- **Forbidden proxies**:
  - `provider_presence`
  - `commercial_state`
  - `retention_expiry`

### 2. Provider Presence Lifecycle

- **Purpose**: whether a managed object is currently observed in the supported provider-backed result set.
- **Authoritative sources**:
  - `specs/261-provider-missing-policy-visibility/spec.md`
  - `apps/platform/app/Models/Policy.php`
- **Current repo-real values**:
  - `present`
  - `provider_missing`
- **Reserved follow-up values**:
  - `provider_deleted`
  - `provider_reappeared`
- **Forbidden proxies**:
  - `local_delete`
  - `local_suppression`
  - `restoreability`

### 3. Operator Suppression Lifecycle

- **Purpose**: whether an operator intentionally hid or restored visibility for a local record.
- **Authoritative sources**:
  - `specs/261-provider-missing-policy-visibility/spec.md`
  - `apps/platform/app/Models/Policy.php`
- **Current repo-real values**:
  - `visible`
  - `ignored`
  - `restored_to_visibility`
- **Reserved follow-up values**:
  - `scoped_suppression_reason_families`
- **Forbidden proxies**:
  - `provider_missing`
  - `retention`
  - `commercial_state`

### 4. Commercial / Workspace Lifecycle

- **Purpose**: whether a workspace is in trial, active paid use, grace, or suspended read-only posture.
- **Authoritative sources**:
  - `specs/251-commercial-entitlements-billing-state/spec.md`
- **Current repo-real values**:
  - `trial`
  - `active_paid`
  - `grace`
  - `suspended_read_only`
- **Reserved follow-up values**:
  - `closed`
- **Forbidden proxies**:
  - `tenant_archive`
  - `provider_missing`
  - `purge_due`

### 5. Retention / Compliance Lifecycle

- **Purpose**: whether an artifact must be retained, has export requested, is expiring, or is eligible for later purge.
- **Authoritative sources**:
  - `apps/platform/app/Models/ReviewPack.php`
  - `apps/platform/app/Console/Commands/PruneReviewPacksCommand.php`
  - `apps/platform/config/tenantpilot.php`
- **Current repo-real values**:
  - `review_pack.expired`
  - `configured_retention_days`
- **Reserved follow-up values**:
  - `retained`
  - `export_requested`
  - `deletion_requested`
  - `deletion_scheduled`
  - `legal_hold`
  - `purge_due`
  - `purged`
- **Forbidden proxies**:
  - `workspace_suspension`
  - `local_archive`
  - `provider_missing`

### 6. Restoreability Lifecycle

- **Purpose**: whether historical evidence or backup truth is still restorable and what kind of continuity remains.
- **Authoritative sources**:
  - `specs/261-provider-missing-policy-visibility/spec.md`
  - `apps/platform/app/Models/BackupSet.php`
  - `apps/platform/app/Models/RestoreRun.php`
- **Current repo-real values**:
  - `historical_restore_continuity_available`
- **Reserved follow-up values**:
  - `metadata_only`
  - `blocked_by_dependency`
  - `not_restorable`
  - `expired_by_retention`
- **Forbidden proxies**:
  - `provider_presence`
  - `commercial_state`
  - `local_suppression`

## Entity: TransitionGovernanceRule

**Persistence**: none; governance contract only

| Field | Type | Meaning |
|---|---|---|
| `dimension` | string | Which lifecycle dimension owns the transition |
| `transition` | string | Human-readable transition |
| `transition_owner` | string | Repo authority or future owner class that owns the transition decision |
| `execution_path` | string | Whether the transition stays direct/local, observation-derived, derived/passive, or must use shared `OperationRun` semantics |
| `requires_confirmation` | enum | `never`, `sometimes`, or `always` depending on whether the transition is passive, conditional, or irreversible |
| `requires_audit` | boolean | Whether audit evidence is mandatory |
| `requires_operation_run` | enum | `never`, `sometimes`, or `always` based on transition class |
| `requires_export_precondition` | boolean | Whether export-before-delete or similar preconditions must be satisfied |
| `requires_retention_review` | boolean | Whether retention rules must be resolved first |

## Transition Guidance (v1)

| Dimension | Example transition | Transition owner | Execution path | Confirmation | Audit | OperationRun | Export / Retention Preconditions |
|---|---|---|---|---|---|---|---|
| Local record lifecycle | archive a locally managed record or force-delete a backup schedule | TenantPilot local domain owner | direct local mutation, or shared `OperationRun` when long-running, cross-resource, or externally mediated | always | yes | sometimes; always if long-running or cross-resource | yes before irreversible deletion |
| Provider presence | object becomes provider missing or reappears | provider observation / sync process | observation-derived update | never | yes | no, unless wrapped in a broader long-running reconciliation flow | no |
| Operator suppression | ignore / restore local visibility | TenantPilot local domain owner | direct local mutation | always | yes | no | no |
| Commercial/workspace lifecycle | enter suspended read-only or close workspace | platform workspace/commercial owner | direct local mutation for bounded state changes, or shared `OperationRun` for closure-class / multi-artifact flows | always | yes | sometimes; closure-class flows are likely `always` | yes |
| Retention/compliance lifecycle | mark export requested, delete requested, hold, purge due, or purge | compliance / retention owner | shared `OperationRun` for purge-class automation and long-running/export-coupled flows | always | yes | always for purge-class automation | yes |
| Restoreability lifecycle | mark metadata-only or expired-by-retention | backup / restore / evidence owner | derived status when passive; guarded mutation or shared `OperationRun` when an operator reduces restoreability | sometimes; never for passive derived status, always for irreversible operator action | yes | sometimes | yes |

## Entity: FollowUpSliceBoundary

**Persistence**: none; governance contract only

| Follow-up slice | Why it stays separate |
|---|---|
| Provider-Missing Managed Object Truth v1 | broader provider-presence rollout beyond policies |
| Workspace & Tenant Closure Lifecycle v1 | workspace or tenant close/remove behavior |
| Data Export Before Deletion v1 | customer-owned export workflow that fulfills the reserved `export requested` lifecycle value before irreversible deletion |
| Retention & Purge Governance v1 | retention periods, holds, purge eligibility, irreversible deletion |
| Restoreability Expiry & Evidence Retention v1 | distinction between retained evidence and restorable payload |
