# Asset Lifecycle

> **Contracts only.**  
> Registry: [asset-registry.md](asset-registry.md)  
> Contract version: `asset-lifecycle.v1`

---

## 1. Lifecycle states

| State | Meaning |
| --- | --- |
| `draft` | Editable; not generally installable |
| `review` | Submitted for commercial/content review |
| `published` | Generally available per visibility/policies |
| `deprecated` | Discouraged for new installs; existing may continue |
| `archived` | Retained for history; not installable |
| `deleted` | Soft-deleted / tombstoned (hard delete is operational policy) |
| `versioned` | Marker that a new version exists / versioning in progress *(also a versioning event)* |
| `cloned` | Derived from another asset (see lineage) |
| `installed` | Tenant/workspace installation record exists |
| `shared` | Shared within org / partner scope |
| `marketplace_ready` | Eligible for marketplace listing (no marketplace engine implied) |

States may combine with orthogonal flags (e.g. `published` + `marketplace_ready`). Primary `lifecycle_state` on AssetDefinition is the governance state (`draft`…`deleted`); installation/sharing/marketplace readiness MAY also appear as boolean/status fields on marketplace declaration and install records.

---

## 2. Logical transitions (normative intent)

```
draft → review → published → deprecated → archived → deleted
                ↘ marketplace_ready (flag)
published → cloned → draft (new asset)
published → installed / shared (tenant-scoped records)
any → versioned (new AssetVersion)
```

Invalid transitions are rejected by future engines; this document does not implement them.

---

## 3. AssetInstallRecord (logical)

| Field | Meaning |
| --- | --- |
| `registry_object_id` | Install record id |
| `asset_id` | Asset `registry_object_id` |
| `tenant_id` | |
| `workspace_id` | Optional |
| `version_code` | Installed version |
| `source` | `catalog` \| `clone` \| `share` \| `marketplace` \| `admin` |
| `status` | `installed` \| `removed` |
| `installed_at` | |

---

## 4. Lineage

| Field | Meaning |
| --- | --- |
| `cloned_from_asset_id` | Parent asset |
| `cloned_from_version_code` | |

Cloning creates a **new** asset with its own `registry_object_id` and typically `draft` state.
