Screens

Every screen below was generated from this object by OODS Foundry 0.10.1, in React and Vue, and shows the calls that made it and its content hash. Each runs as its generated app runs, in this site's brand, Aquex, in the theme you choose, with the sample records this object's own file carries. A value no record gives shows as a neutral one, such as an empty value or "Not recorded"; OODS Foundry invents none.

React app · sample recordsMaturity: not declaredsha256:2b1c273af032…Open full size: Product detail screen generated by OODS Foundry in React
The calls that made the Product detail apps, in React and Vue
3 calls, as the pipeline sent them
design_compose {
  "object": "Product",
  "context": "detail",
  "preferences": {
    "brand": "Aquex",
    "theme": "light"
  }
}

code_generate {
  "schemaRef": "compose-7c9240cb",
  "framework": "react",
  "profile": "build",
  "options": {
    "output": "application",
    "brand": "Aquex",
    "theme": "light",
    "payloadMode": "file"
  }
}

code_generate {
  "schemaRef": "compose-7c9240cb",
  "framework": "vue",
  "profile": "build",
  "options": {
    "output": "application",
    "brand": "Aquex",
    "theme": "light",
    "payloadMode": "file"
  }
}

The React app's content hash: sha256:2b1c273af03264916b588e4da283b125c1b58b3ad31bc92e0d92ab796a93e490. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css

The Vue app's content hash: sha256:3aaef40d4608b5af66dfa7e76f70a2a6ba691cfb09581b28a3964c8d0c6ec985. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css

Fields

FieldTypeDescription
labelrequired string Human-readable display name rendered in primary surfaces.
description string Supporting description used in detail and card contexts.
placeholder string Hint copy surfaced in form fields when the label is empty.
statusrequired string Canonical lifecycle state derived from the states parameter.
More

This is the single source of truth for the entity's current lifecycle position. Consumed by Colorized to resolve visual tokens, and by view extensions to render StatusBadge and StatusTimeline.

state_history StateTransition[] Chronological log of state transitions.
More

Each entry records the before/after states, timestamp, and (when governance is enabled) the actor, reason, and transition metadata. Rendered by StatusTimeline in the detail and timeline views. Entry structure: - from: string (previous state) - to: string (new state) - timestamp: ISO 8601 datetime - actor_id: string (user/system who triggered the transition, optional) - reason: string (human-readable justification, required when requireTransitionReason is true) - transition_metadata: Record<string, unknown> (arbitrary context, optional)

allowed_transitions string[] Materialized list of valid next states from the current status, computed from the transitionRules parameter.
More

When transitionRules is null (open model), this contains all states except the current one. Used by StatusSelector to disable invalid options and by StatusBadge to indicate available paths.

created_atrequired datetime Timestamp recording when the entity was first created.
updated_at datetime Timestamp for the most recent modification, when available.
last_eventrequired string Lifecycle event associated with the most recent timestamp mutation.
last_event_at datetime Timestamp for the lifecycle event captured in last_event.
unit_amount_centsrequired number Base unit price expressed in the smallest currency denomination.
currencyrequired string ISO currency code for the unit amount.
pricing_modelrequired string Monetization model applied to the entity.
billing_interval string Billing cadence when pricing_model indicates recurring revenue.
tax_behaviorrequired string (exclusive, inclusive) Defines whether taxes are included in the displayed price.
classification_metadatarequired ClassificationMetadata Operational metadata describing mode, storage model, governance rules, and audit timestamps.
categories CategoryNode[] Ordered taxonomy nodes scoped to the object.
primary_category_id string Identifier of the canonical taxonomy node.
primary_category_path string Human-readable breadcrumb path (Electronics > Mobile > Android).
tags Tag[] Canonical tag collection after synonym collapse.
tag_count number Number of canonical tags assigned to the object.
tag_preview string Denormalized comma-delimited preview for list renders.
searchQuery string The current search query string entered by the user.
searchActive boolean Whether the search input is currently focused or has a non-empty query.
filters object[] Array of available filter descriptors.
More

Each entry defines a filterable dimension: - field: string (the schema field to filter on) - label: string (display label) - type: "select" | "multi-select" | "range" | "boolean" | "date-range" - options: array of { value, label } for select/multi-select types

activeFilters object[] Array of currently applied filter values: - field: string (matches a filter descriptor field) - operator: "eq" | "in" | "range" | "gt" | "lt" | "between" - value: unknown (the selected filter value or values)
filterCountrequired number Computed count of currently active filters.
pagerequired number Current page number (1-based).
pageSizerequired number Number of items displayed per page.
totalItems number Total number of items across all pages.
More

Used to compute total page count.

totalPages number Computed total number of pages (ceil(totalItems / pageSize)).
product_idrequired uuid Primary identifier for the product listing.
skurequired string Merchandising SKU exposed to commerce systems.
inventory_statusrequired string (in_stock, low_stock, backorder, discontinued) Availability state synchronized with inventory service.
release_channelrequired string (alpha, beta, limited, general_availability) Channel describing how the product is released to customers.
requires_subscriptionrequired boolean Indicates whether access to the product requires an active subscription.
support_level string (standard, premium, enterprise) SLA tier associated with the product.
summary_blurb string Short merchandising description surfaced in marketing contexts.

Traits

Each trait adds fields and behaviour. Every object with the trait gets the same.

Relationships

These arrows show declared relationships between object types. They don't join live records.

Relationships: Product1 object types and 0 declared associations. Arrows point from source to target. Labels state source-relative cardinality and the via field; they do not assert live referential integrity. Canonical catalog entry combining pricing, lifecycle, and merchandising metadata.ProductTraits: Labelled, Stateful,Timestampable, Priceable,Classifiable, Searchable, Filterable,PageableKey fields (6 of 29)product_id: uuid *label: string *inventory_status: string *release_channel: string *requires_subscription: boolean *sku: string *

The object file

The Product object definition in YAML: objects/core/Product.object.yaml
object:
  name: Product
  version: 1.1.0
  domain: core.catalog
  description: Canonical catalog entry combining pricing, lifecycle, and merchandising metadata.
  tags:
    - universal
    - product
    - commerce
    - taxonomy

traits:
  - name: content/Labelled
    alias: ProductLabel
  - name: lifecycle/Stateful
    parameters:
      states:
        - draft
        - in_review
        - active
        - retired
      initialState: draft
  - name: lifecycle/Timestampable
    parameters:
      recordedEvents:
        - created
        - spec_updated
        - price_changed
        - retired
      timezone: UTC
  - name: financial/Priceable
    parameters:
      supportedCurrencies:
        - USD
        - EUR
        - GBP
        - AUD
      defaultCurrency: USD
      pricingModels:
        - one_time
        - subscription
        - usage_based
      billingIntervals:
        - one_time
        - month
        - year
      taxBehavior: exclusive
  - name: core/Classifiable
    alias: ProductClassification
    parameters:
      classification_mode: taxonomy
      hierarchy_storage_model: materialized_path
      tag_policy: locked
      max_tags: 8
      require_primary_category: true
  - name: behavioral/Searchable
    parameters:
      placeholder: "Search products..."
      debounceMs: 300
  - name: behavioral/Filterable
    parameters:
      filterMode: immediate
      showFilterCount: true
  - name: behavioral/Pageable
    parameters:
      defaultPageSize: 25
      pageSizeOptions: [10, 25, 50, 100]

schema:
  product_id:
    type: uuid
    required: true
    description: Primary identifier for the product listing.
  sku:
    type: string
    required: true
    description: Merchandising SKU exposed to commerce systems.
  inventory_status:
    type: string
    required: true
    default: in_stock
    description: Availability state synchronized with inventory service.
    validation:
      enum:
        - in_stock
        - low_stock
        - backorder
        - discontinued
  release_channel:
    type: string
    required: true
    default: general_availability
    description: Channel describing how the product is released to customers.
    validation:
      enum:
        - alpha
        - beta
        - limited
        - general_availability
  requires_subscription:
    type: boolean
    required: true
    default: false
    description: Indicates whether access to the product requires an active subscription.
  support_level:
    type: string
    required: false
    description: SLA tier associated with the product.
    validation:
      enum:
        - standard
        - premium
        - enterprise
  summary_blurb:
    type: string
    required: false
    description: Short merchandising description surfaced in marketing contexts.
    validation:
      maxLength: 160

semantics:
  # The one-line summary under the product's name in lists (content/Labelled's description, marked as the summary).
  description:
    semantic_type: text.summary
    token_mapping: tokenMap(text.body.*)
    ui_hints:
      component: TextBody
      maxLengthParameter: maxDescriptionLength
  product_id:
    semantic_type: product.id
    token_mapping: tokenMap(product.id.primary)
  sku:
    semantic_type: product.sku
    token_mapping: tokenMap(product.sku.primary)
  inventory_status:
    semantic_type: product.inventory.status
    token_mapping: tokenMap(inventory.status.*)
  release_channel:
    semantic_type: product.release.channel
    token_mapping: tokenMap(product.release.channel)
  requires_subscription:
    semantic_type: product.access.requires_subscription
    token_mapping: tokenMap(product.access.subscription)

tokens:
  product.sku.primary: "var(--text-strong)"
  inventory.status.low_stock: "var(--status-warning)"
  inventory.status.discontinued: "var(--status-danger)"

metadata:
  owners:
    - product@oods.systems
    - commerce@oods.systems
  steward: merchandising@oods.systems
  changelog:
    - version: 1.1.0
      date: "2025-11-18"
      description: Added Classifiable trait (taxonomy mode) for hierarchical categories + breadcrumbs.
    - version: 1.0.0
      date: "2025-10-16"
      description: Initial Universal Quintet baseline.

# Eight authored sample products from one point-of-sale catalog: card readers, printers, supplies, software and support.
# Each follows the catalog lifecycle from draft through review; the last event is the latest recorded catalog change.
samples:
  - label: Counter Card Reader
    description: Tap, chip and swipe reader for counters
    sku: HW-CR-200
    unit_amount_cents: 14900
    currency: USD
    pricing_model: one_time
    billing_interval: one_time
    tax_behavior: exclusive
    inventory_status: in_stock
    release_channel: general_availability
    requires_subscription: true
    support_level: standard
    summary_blurb: Accepts contactless, chip and swipe payments and pairs with the till over Bluetooth.
    primary_category_id: hardware-payments
    primary_category_path: Hardware > Payments
    tag_preview: contactless, bluetooth
    status: active
    state_history:
      - { title: Created, from: null, to: draft, at: '2025-11-03T16:00:00Z', reason: Added from the supplier spec sheet }
      - { title: In review, from: draft, to: in_review, at: '2025-11-17T16:00:00Z', reason: Submitted for launch review }
      - { title: On sale, from: in_review, to: active, at: '2025-12-01T15:00:00Z', reason: Approved for sale }
    created_at: '2025-11-03T16:00:00Z'
    updated_at: '2026-06-01T15:00:00Z'
    last_event: price_changed
    last_event_at: '2026-06-01T15:00:00Z'
  - label: Thermal Receipt Printer
    description: 80 mm printer with an automatic cutter
    sku: HW-RP-80
    unit_amount_cents: 22900
    currency: USD
    pricing_model: one_time
    billing_interval: one_time
    tax_behavior: exclusive
    inventory_status: low_stock
    release_channel: general_availability
    requires_subscription: false
    support_level: standard
    summary_blurb: Prints 250 mm of receipt a second over USB-C, Ethernet or Wi-Fi.
    primary_category_id: hardware-printers
    primary_category_path: Hardware > Printers
    tag_preview: receipts, usb-c
    status: active
    state_history:
      - { title: Created, from: null, to: draft, at: '2025-08-04T09:00:00Z', reason: Added from the supplier spec sheet }
      - { title: In review, from: draft, to: in_review, at: '2025-08-18T09:00:00Z', reason: Submitted for launch review }
      - { title: On sale, from: in_review, to: active, at: '2025-09-01T09:00:00Z', reason: Approved for sale }
    created_at: '2025-08-04T09:00:00Z'
    updated_at: '2026-08-12T09:00:00Z'
    last_event: spec_updated
    last_event_at: '2026-08-12T09:00:00Z'
  - label: Label Printer K2
    description: Shipping-label printer for UK carriers
    sku: HW-LP-K2
    unit_amount_cents: 18900
    currency: GBP
    pricing_model: one_time
    billing_interval: one_time
    tax_behavior: inclusive
    inventory_status: backorder
    release_channel: limited
    requires_subscription: false
    support_level: premium
    summary_blurb: Prints Royal Mail and DPD labels from the order screen; back in stock in October.
    primary_category_id: hardware-printers
    primary_category_path: Hardware > Printers
    tag_preview: labels, shipping
    status: active
    state_history:
      - { title: Created, from: null, to: draft, at: '2026-03-02T10:00:00Z', reason: Added for the UK launch }
      - { title: In review, from: draft, to: in_review, at: '2026-03-16T10:00:00Z', reason: Submitted for launch review }
      - { title: On sale, from: in_review, to: active, at: '2026-04-01T09:00:00Z', reason: Approved for a limited UK release }
    created_at: '2026-03-02T10:00:00Z'
    updated_at: '2026-04-01T09:00:00Z'
    last_event: price_changed
    last_event_at: '2026-04-01T09:00:00Z'
  - label: Thermal Paper Rolls (50 pack)
    description: BPA-free 80 mm rolls, 50 per case
    sku: SUP-TP-50
    unit_amount_cents: 3900
    currency: USD
    pricing_model: one_time
    billing_interval: one_time
    tax_behavior: exclusive
    inventory_status: in_stock
    release_channel: general_availability
    requires_subscription: false
    support_level: null
    summary_blurb: Fits every receipt printer we sell; ships in two days.
    primary_category_id: supplies-paper
    primary_category_path: Supplies > Paper
    tag_preview: consumables
    status: active
    state_history:
      - { title: Created, from: null, to: draft, at: '2025-08-04T09:30:00Z', reason: Added with the receipt printer }
      - { title: In review, from: draft, to: in_review, at: '2025-08-18T09:30:00Z', reason: Submitted for launch review }
      - { title: On sale, from: in_review, to: active, at: '2025-09-01T09:30:00Z', reason: Approved for sale }
    created_at: '2025-08-04T09:30:00Z'
    updated_at: '2026-02-02T09:30:00Z'
    last_event: price_changed
    last_event_at: '2026-02-02T09:30:00Z'
  - label: Handheld Barcode Scanner
    description: Wireless 2D scanner for stock counts
    sku: HW-BS-10
    unit_amount_cents: 7900
    currency: EUR
    pricing_model: one_time
    billing_interval: one_time
    tax_behavior: inclusive
    inventory_status: in_stock
    release_channel: beta
    requires_subscription: false
    support_level: standard
    summary_blurb: Scans shelf labels and QR codes into stock counts, with a 12-hour battery.
    primary_category_id: hardware-scanners
    primary_category_path: Hardware > Scanners
    tag_preview: inventory, wireless
    status: in_review
    state_history:
      - { title: Created, from: null, to: draft, at: '2026-08-24T08:00:00Z', reason: Added for the beta programme }
      - { title: In review, from: draft, to: in_review, at: '2026-09-14T08:00:00Z', reason: Spec updated with beta feedback }
    created_at: '2026-08-24T08:00:00Z'
    updated_at: '2026-09-14T08:00:00Z'
    last_event: spec_updated
    last_event_at: '2026-09-14T08:00:00Z'
  - label: Point of Sale Software
    description: Checkout, stock and reports in one app
    sku: SW-POS-STD
    unit_amount_cents: 4900
    currency: USD
    pricing_model: subscription
    billing_interval: month
    tax_behavior: exclusive
    inventory_status: in_stock
    release_channel: general_availability
    requires_subscription: true
    support_level: premium
    summary_blurb: Runs checkout on any tablet, keeps stock in sync and emails the day's takings.
    primary_category_id: software-point-of-sale
    primary_category_path: Software > Point of sale
    tag_preview: subscription, tablets
    status: active
    state_history:
      - { title: Created, from: null, to: draft, at: '2025-06-02T09:00:00Z', reason: Packaged the checkout app for sale }
      - { title: In review, from: draft, to: in_review, at: '2025-06-16T09:00:00Z', reason: Submitted for launch review }
      - { title: On sale, from: in_review, to: active, at: '2025-07-01T09:00:00Z', reason: Approved for sale }
    created_at: '2025-06-02T09:00:00Z'
    updated_at: '2026-09-01T09:00:00Z'
    last_event: spec_updated
    last_event_at: '2026-09-01T09:00:00Z'
  - label: Priority Support
    description: 24/7 phone support, named engineer
    sku: SVC-SUP-PRI
    unit_amount_cents: 99000
    currency: USD
    pricing_model: subscription
    billing_interval: year
    tax_behavior: exclusive
    inventory_status: in_stock
    release_channel: limited
    requires_subscription: true
    support_level: enterprise
    summary_blurb: A named support engineer, one-hour response and quarterly health checks.
    primary_category_id: services-support
    primary_category_path: Services > Support
    tag_preview: services
    status: draft
    state_history:
      - { title: Created, from: null, to: draft, at: '2026-09-01T14:00:00Z', reason: Drafted from the support team proposal }
      - { title: In review, from: draft, to: in_review, at: '2026-09-15T14:00:00Z', reason: Submitted for pricing review }
      - { title: Back to draft, from: in_review, to: draft, at: '2026-09-22T14:00:00Z', reason: Price sent back for a margin check }
    created_at: '2026-09-01T14:00:00Z'
    updated_at: '2026-09-22T14:00:00Z'
    last_event: spec_updated
    last_event_at: '2026-09-22T14:00:00Z'
  - label: Cash Drawer CD-1
    description: Steel cash drawer, replaced by the CD-2
    sku: HW-CD-01
    unit_amount_cents: 12900
    currency: AUD
    pricing_model: one_time
    billing_interval: one_time
    tax_behavior: inclusive
    inventory_status: discontinued
    release_channel: general_availability
    requires_subscription: false
    support_level: standard
    summary_blurb: Five-note, eight-coin steel drawer that opens from the receipt printer.
    primary_category_id: hardware-cash-handling
    primary_category_path: Hardware > Cash handling
    tag_preview: legacy
    status: retired
    state_history:
      - { title: Created, from: null, to: draft, at: '2024-03-04T09:00:00Z', reason: Added from the supplier spec sheet }
      - { title: In review, from: draft, to: in_review, at: '2024-03-18T09:00:00Z', reason: Submitted for launch review }
      - { title: On sale, from: in_review, to: active, at: '2024-04-01T09:00:00Z', reason: Approved for sale }
      - { title: Retired, from: active, to: retired, at: '2026-07-31T09:00:00Z', reason: Replaced by the CD-2 }
    created_at: '2024-03-04T09:00:00Z'
    updated_at: '2026-07-31T09:00:00Z'
    last_event: retired
    last_event_at: '2026-07-31T09:00:00Z'