# Dynamic Product Registry > **Contracts only.** Unlimited future products via registry entries — no architecture edits required. > Catalog shapes: [product-catalog.md](product-catalog.md) > Contract version: `product-registry.v1` --- ## 1. Purpose The **Platform Product Registry** is the authoritative, append-only logical registry of all PlatformProducts. When a new commercial product is introduced, operators/agents add a **registry entry** (+ docs + optional capability/bundle mapping). Core commercial architecture remains unchanged. --- ## 2. Registry entry | Field | Type | Required | Meaning | | --- | --- | --- | --- | | `product_code` | string | yes | Unique open key | | `display_name` | string | yes | | | `category_code` | string | yes | Open category | | `capabilities[]` | `{ capability_code, role, required }` | yes | Refs only | | `dependencies[]` | PlatformProductDependency | no | | | `visibility` | PlatformProductVisibility | yes | | | `commercial_status` | enum | yes | planned/preview/ga/deprecated/retired | | `maturity` | enum | yes | concept→mature | | `documentation_ref` | string | yes | | | `required_services[]` | string[] | no | Service identifiers | | `optional_services[]` | string[] | no | | | `reserved_features[]` | string[] | no | Not yet implemented keys | | `marketplace` | MarketplaceCompatibilityDeclaration | no | See §4 | | `version_code` | string | yes | Current version | | `tags[]` | string[] | no | | | `future_product` | bool | no | Marks conceptual / not sellable yet | | `ext` | object | no | Additive | Logical record: ``` PlatformProductRegistryEntry { product_code display_name category_code capabilities[] dependencies[] visibility commercial_status maturity documentation_ref required_services[] optional_services[] reserved_features[] marketplace? version_code tags[] future_product? ext? } ``` --- ## 3. Registry operations (logical) | Operation | Effect | Architecture change? | | --- | --- | --- | | `register` | Insert new entry | **No** | | `update_version` | Add PlatformProductVersion | **No** | | `deprecate` | Set status + optional replacement | **No** | | `retire` | Hide from sellable catalogs | **No** | | `map_bundle` | Optional Business Bundle refs | **No** | There is **no predefined limit** on entry count. --- ## 4. Marketplace Compatibility Declaration Marketplace is an **independent** PlatformProduct. Other products declare compatibility only: | Field | Type | Meaning | | --- | --- | --- | | `stance` | enum | `requires_marketplace` \| `marketplace_optional` \| `marketplace_compatible` \| `none` | | `roles[]` | enum[] | Open multi-select: `marketplace_publisher` \| `marketplace_consumer` \| `marketplace_plugin` \| `marketplace_extension` \| `marketplace_integration` | | `marketplace_product_code` | string | Default `product.marketplace` (or future fork codes) | | `notes` | string? | | ### Rules 1. Marketplace owns marketplace domain data and engines (when implemented). 2. Declaring `marketplace_plugin` does **not** transfer ownership to Marketplace. 3. `requires_marketplace` blocks activation recommendations unless Marketplace is licensed (future evaluator). 4. Core commercial architecture never embeds Marketplace internals. --- ## 5. Future products Entries with `future_product: true` or `maturity: concept` / `commercial_status: planned`: - Appear in admin registry - MAY appear in documentation matrices - MUST NOT imply implementation authorization - MAY reserve capability and feature codes --- ## 6. Extensibility guarantee > **Architecture must never require modification when a new product is added. Only registry entries.** Validators of this contract FAIL if a change request proposes: - Hardcoding product enums in Core commercial aggregates - Forking commercial architecture per vertical - Embedding product implementations inside Business Bundles