# Registry Versioning Contracts > **Version contracts only.** Applies across Commercial Foundation registries. > Contract version: `registry-versioning.v1` --- ## 1. Purpose All commercial registries support explicit versions so catalogs can evolve without breaking historical subscriptions, installs, or policy decisions. --- ## 2. Versioned kinds | Registry object | Version field | Notes | | --- | --- | --- | | Products | `version_code` on PlatformProductVersion | | | Bundles | `version_code` on BusinessBundleVersion | | | Capabilities | optional `version_code` on CapabilityDefinition | Additive | | Extensions | optional `version_code` | Additive | | Assets | `version_code` + AssetVersion records | | | Automation Packs | `version_code` | | | Policies | `version_code` on PolicyDefinition | | | Metadata | `version_code` on MetadataBag | | --- ## 3. RegistryVersionRecord (logical) | Field | Type | Meaning | | --- | --- | --- | | `registry_object_id` | uuid | Version record id | | `parent_id` | uuid | Versioned object id | | `parent_kind` | string | product/bundle/asset/… | | `version_code` | string | Opaque commercial version string | | `changelog` | string? | | | `status` | enum | `draft` \| `published` \| `deprecated` \| `retired` | | `effective_from` / `effective_to` | datetime? | | | `supersedes_version_code` | string? | | | `content_snapshot_ref` | string? | Opaque | | `ext` | object | | --- ## 4. Rules 1. Publishing a new version MUST NOT rewrite historical binding snapshots (future engines pin versions at subscribe/install time). 2. `version_code` is an open string (e.g. `2026.07.1`, semver-like) — not a forced semver parser in contracts. 3. Deprecation of a version is independent of parent object lifecycle. 4. Unlimited versions per object — architecture unchanged.