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:466706866746…Open full size: Organization detail screen generated by OODS Foundry in React
The calls that made the Organization detail apps, in React and Vue
3 calls, as the pipeline sent them
design_compose {
  "object": "Organization",
  "context": "detail",
  "preferences": {
    "brand": "Aquex",
    "theme": "light"
  }
}

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

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

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

The Vue app's content hash: sha256:41ee692d951a25392685af6bc0937726daba0b527b7750384670ada1a4183155. 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.

owner_idrequired string Identifier of the owning principal scoped by owner_type.
owner_typerequired string Categorical owner type sourced from the ownerTypes parameter.
ownership_role string Optional role name describing how the owner governs the entity.
ownership_transferred_at datetime Timestamp recording when ownership was last transferred.
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.
tags string[] Ordered list of tags assigned to the entity.
tag_countrequired number Computed number of tags assigned to the entity.
tag_metadata object[] Per-tag governance metadata.
More

Each entry corresponds to a tag in the tags array and tracks provenance and usage for taxonomy health monitoring. Entry structure: - tag: string (the tag value, matches entry in tags array) - created_at: ISO 8601 datetime - created_by: string (user ID or "system" for allow-list tags) - usage_count: number (how many entities use this tag, computed) - moderation_status: "approved" | "pending" | "rejected" (when allowTagModeration is true) - canonical_form: string (resolved synonym target, when synonymResolution is enabled)

address_rolesrequired string[] Ordered list of roles that currently have address entries.
default_address_role string Role surfaced in UI contexts when one address must be highlighted.
addresses AddressableEntry[] Collection of { role, address, metadata } entries keyed by role.
preference_documentrequired PreferenceDocument Normalized preference payload captured by PreferenceStore (version, preferences map, metadata).
preference_metadatarequired PreferenceMetadata Tracks schema version, lastUpdated timestamp, migration records, and source.
preference_versionrequired string SemVer mirror of preference_document.version for indexing and analytics.
preference_namespacesrequired string[] Materialized namespace list resolved from parameters/registry for auditing.
preference_mutations number Monotonic counter incremented whenever preferences mutate (invalidates caches).
role_catalogrequired AuthzRoleDocument[] Canonical RBAC roles (R21.2 Part 4.2 TABLE 1).
permission_catalogrequired AuthzPermissionDocument[] Atomic permissions following resource:action notation (TABLE 2).
role_permissionsrequired Record<string, string[]> Junction map for role→permission edges (TABLE 3).
membership_recordsrequired AuthzMembershipDocument[] SaaS membership triple (user_id, organization_id, role_id) with UNIQUE constraint (TABLE 4).
role_hierarchy_edges AuthzRoleHierarchyEdge[] Parent→child adjacency list for hierarchical RBAC (Part 3.1).
session_roles string[] Materialized roles granted within the current session/token exchange.
channel_catalogrequired Channel[] Provider configuration for each channel (SMTP/Twilio/FCM/Webhook).
template_catalogrequired Template[] Localized template definitions with declared variables per R20.1 Part 2.3.
delivery_policiesrequired DeliveryPolicy[] Retry/throttle/quiet-hour policies (R20.1 Part 3 lifecycle).
messages Message[] Atomic message payloads queued for delivery (R20.6 Part 1.2 primitives).
conversations Conversation[] Multi-party threaded conversations with membership metadata (R20.6 Part 3.3).
message_statuses MessageStatusEntry[] Delivery state machine transitions (queued → sent → delivered → failed → retried → read).
organization_idrequired uuid Primary identifier for the organization tenant.
domainrequired string Verified root domain associated with the organization.
plan_tierrequired string (free, growth, enterprise) Billing plan currently assigned to the organization.
billing_statusrequired string (good_standing, past_due, unpaid, suspended) Coarse account-level financial standing used by the billing subsystem.
More

Intentionally coarser than the subscription lifecycle: this is a 4-state account vocabulary {good_standing, past_due, unpaid, suspended}, NOT the 8-state billing.subscription.status set. See docs/billing/lifecycle-states.md.

industry string Optional NAICS-derived industry tag.
employee_count number Reported number of active employees.
billing_contact_email email Primary contact email for invoicing and finance escalations.
data_residency string (us, eu, apac, latam) Preferred data residency region selected during onboarding.
owner_name string Display name of the owning principal (parent organization, reseller or platform team).

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: Organization1 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 account record for tenant and workspace governance across the platform.OrganizationTraits: Labelled, Stateful, Ownerable,Timestampable, Taggable, Addressable,Preferenceable, Authable, CommunicableKey fields (6 of 46)organization_id: uuid *label: string *billing_status: string *domain: string *plan_tier: string *billing_contact_email: email

The object file

The Organization object definition in YAML: objects/core/Organization.object.yaml
object:
  name: Organization
  version: 1.2.0
  domain: core.account
  description: Canonical account record for tenant and workspace governance across the platform.
  tags:
    - universal
    - organization
    - tenant

traits:
  - name: content/Labelled
    alias: OrganizationLabel
  - name: lifecycle/Stateful
    parameters:
      states:
        - prospect
        - onboarding
        - active
        - churned
      initialState: prospect
  - name: structural/Ownerable
    parameters:
      ownerTypes:
        - parent_organization
        - reseller
        - platform
      primaryOwnerType: parent_organization
      allowTransfer: true
  - name: lifecycle/Timestampable
    parameters:
      recordedEvents:
        - created
        - plan_upgraded
        - plan_downgraded
        - ownership_transferred
      timezone: UTC
  - name: behavioral/Taggable
    parameters:
      maxTags: 16
      allowCustomTags: false
      allowedTags:
        - enterprise
        - smb
        - nonprofit
        - startup
        - strategic
      caseSensitive: false
  - name: core/Addressable
    alias: OrganizationLocations
    parameters:
      roles:
        - headquarters
        - office
        - warehouse
        - branch
      defaultRole: headquarters
  - name: core/Preferenceable
    alias: OrganizationPreferences
    parameters:
      namespaces:
        - notifications
        - display
        - privacy
      schemaVersion: 2.0.0
      registryNamespace: org-preferences
  - name: core/Authable
    alias: OrganizationAuthz
    parameters:
      hierarchyDepthLimit: 5
  - name: core/Communicable
    alias: OrganizationCommunications

schema:
  organization_id:
    type: uuid
    required: true
    description: Primary identifier for the organization tenant.
  domain:
    type: string
    required: true
    description: Verified root domain associated with the organization.
    validation:
      format: hostname
  plan_tier:
    type: string
    required: true
    description: Billing plan currently assigned to the organization.
    validation:
      enum:
        - free
        - growth
        - enterprise
  billing_status:
    type: string
    required: true
    default: good_standing
    description: >-
      Coarse account-level financial standing used by the billing subsystem.
      Intentionally coarser than the subscription lifecycle: this is a 4-state
      account vocabulary {good_standing, past_due, unpaid, suspended}, NOT the
      8-state billing.subscription.status set. See docs/billing/lifecycle-states.md.
    validation:
      enum:
        - good_standing
        - past_due
        - unpaid
        - suspended
  industry:
    type: string
    required: false
    description: Optional NAICS-derived industry tag.
  employee_count:
    type: number
    required: false
    description: Reported number of active employees.
    validation:
      minimum: 0
  billing_contact_email:
    type: email
    required: false
    description: Primary contact email for invoicing and finance escalations.
  data_residency:
    type: string
    required: false
    description: Preferred data residency region selected during onboarding.
    validation:
      enum:
        - us
        - eu
        - apac
        - latam
  owner_name:
    type: string
    required: false
    description: Display name of the owning principal (parent organization, reseller or platform team).

semantics:
  # The one-line summary under the organization'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
  # structural/Ownerable's owner reference, named by owner_name.
  owner_id:
    semantic_type: ownership.owner.id
    token_mapping: tokenMap(ownership.owner.id)
    ui_hints:
      component: OwnerReference
      ownerTypeField: owner_type
      displayLabelField: owner_name
  organization_id:
    semantic_type: organization.id
    token_mapping: tokenMap(organization.id.primary)
  domain:
    semantic_type: organization.domain
    token_mapping: tokenMap(organization.domain.primary)
  plan_tier:
    semantic_type: organization.plan.tier
    token_mapping: tokenMap(organization.plan.tier)
  billing_status:
    semantic_type: billing.account.status
    token_mapping: tokenMap(billing.account.status)
  employee_count:
    semantic_type: organization.metrics.employee_count
    token_mapping: tokenMap(metric.count.primary)

tokens:
  organization.id.primary: "var(--text-strong)"
  organization.domain.primary: "var(--text-strong)"
  billing.account.status.good: "var(--status-success)"
  billing.account.status.risk: "var(--status-warning)"

metadata:
  owners:
    - customer-success@oods.systems
    - billing@oods.systems
  steward: platform@oods.systems
  changelog:
    - version: 1.2.0
      date: "2025-11-20"
      description: Added Authable trait to expose membership and entitlement exports for tenant governance.
    - version: 1.1.0
      date: "2025-11-18"
      description: Added Addressable trait for headquarters, branch, office, and warehouse roles.
    - version: 1.0.0
      date: "2025-10-16"
      description: Initial Universal Quintet baseline.

# Eight authored sample organizations. Each is one coherent account: the same names appear as the customers on the
# Subscription, Invoice, Transaction and Usage samples. Its lifecycle follows its plan: a prospect is on Free, an
# onboarding account is trialling a paid plan, an active account pays, and a churned account is back on Free.
samples:
  - organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a01
    label: Northwind Traders
    description: Wholesale food distributor in Chicago
    domain: northwind.example
    plan_tier: growth
    billing_status: good_standing
    industry: Wholesale trade
    employee_count: 85
    billing_contact_email: billing@northwind.example
    data_residency: us
    owner_id: org_northwind_group
    owner_type: parent_organization
    owner_name: Northwind Group
    ownership_role: Parent account
    tags: [strategic]
    tag_count: 1
    status: active
    state_history:
      - { title: Signed up, from: null, to: prospect, at: '2026-02-02T15:00:00Z', reason: Created a workspace on the Free plan }
      - { title: Trial started, from: prospect, to: onboarding, at: '2026-02-16T15:00:00Z', reason: Started a 14-day Team trial }
      - { title: Went live, from: onboarding, to: active, at: '2026-03-02T15:00:00Z', reason: Trial converted to the Team plan }
    created_at: '2026-02-02T15:00:00Z'
    updated_at: '2026-06-16T15:00:00Z'
    last_event: plan_upgraded
    last_event_at: '2026-06-16T15:00:00Z'
  - organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a02
    label: Blue Harbor Studio
    description: Packaging design studio in Portland
    domain: blueharbor.example
    plan_tier: growth
    billing_status: good_standing
    industry: Design services
    employee_count: 12
    billing_contact_email: accounts@blueharbor.example
    data_residency: us
    owner_id: platform_self_serve
    owner_type: platform
    owner_name: Self-serve
    ownership_role: Direct customer
    tags: [smb, startup]
    tag_count: 2
    status: onboarding
    state_history:
      - { title: Signed up, from: null, to: prospect, at: '2026-09-19T10:00:00Z', reason: Signed up from the pricing page }
      - { title: Trial started, from: prospect, to: onboarding, at: '2026-09-21T09:00:00Z', reason: Started a 14-day Team trial }
    created_at: '2026-09-19T10:00:00Z'
    updated_at: '2026-09-21T09:00:00Z'
    last_event: plan_upgraded
    last_event_at: '2026-09-21T09:00:00Z'
  - organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a03
    label: Lindqvist Bakery
    description: Bakery with three shops in Gothenburg
    domain: lindqvist.example
    plan_tier: growth
    billing_status: good_standing
    industry: Food and beverage
    employee_count: 18
    billing_contact_email: finance@lindqvist.example
    data_residency: eu
    owner_id: reseller_nordic_commerce
    owner_type: reseller
    owner_name: Nordic Commerce Partners
    ownership_role: Reseller of record
    tags: [smb]
    tag_count: 1
    status: active
    state_history:
      - { title: Signed up, from: null, to: prospect, at: '2026-01-12T08:00:00Z', reason: Referred by Nordic Commerce Partners }
      - { title: Onboarding, from: prospect, to: onboarding, at: '2026-01-13T08:00:00Z', reason: Reseller set up the shops and card readers }
      - { title: Went live, from: onboarding, to: active, at: '2026-01-15T08:00:00Z', reason: Subscribed to the Starter plan }
    created_at: '2026-01-12T08:00:00Z'
    updated_at: '2026-01-15T08:00:00Z'
    last_event: plan_upgraded
    last_event_at: '2026-01-15T08:00:00Z'
  - organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a04
    label: Kestrel Print Co.
    description: Commercial print shop in Leeds
    domain: kestrelprint.example
    plan_tier: growth
    billing_status: past_due
    industry: Commercial printing
    employee_count: 34
    billing_contact_email: hello@kestrelprint.example
    data_residency: eu
    owner_id: platform_self_serve
    owner_type: platform
    owner_name: Self-serve
    ownership_role: Direct customer
    tags: [smb]
    tag_count: 1
    status: active
    state_history:
      - { title: Signed up, from: null, to: prospect, at: '2026-01-20T10:00:00Z', reason: Created a workspace on the Free plan }
      - { title: Trial started, from: prospect, to: onboarding, at: '2026-01-20T10:30:00Z', reason: Started a 14-day Team trial }
      - { title: Went live, from: onboarding, to: active, at: '2026-02-03T10:00:00Z', reason: Trial converted to the Team plan }
    created_at: '2026-01-20T10:00:00Z'
    updated_at: '2026-02-03T10:00:00Z'
    last_event: plan_upgraded
    last_event_at: '2026-02-03T10:00:00Z'
  - organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a05
    label: Tidewater Co-op
    description: Farmers' cooperative in Tauranga, NZ
    domain: tidewater.example
    plan_tier: enterprise
    billing_status: good_standing
    industry: Agricultural cooperative
    employee_count: 640
    billing_contact_email: treasurer@tidewater.example
    data_residency: apac
    owner_id: platform_enterprise_sales
    owner_type: platform
    owner_name: Enterprise accounts
    ownership_role: Account team
    ownership_transferred_at: '2025-06-02T09:00:00Z'
    tags: [enterprise, strategic]
    tag_count: 2
    status: active
    state_history:
      - { title: Signed up, from: null, to: prospect, at: '2024-09-16T21:00:00Z', reason: Requested an Enterprise demo }
      - { title: Pilot started, from: prospect, to: onboarding, at: '2024-10-01T21:00:00Z', reason: Started a 30-day Enterprise pilot }
      - { title: Went live, from: onboarding, to: active, at: '2024-10-30T14:00:00Z', reason: Signed the annual Enterprise agreement }
    created_at: '2024-09-16T21:00:00Z'
    updated_at: '2025-06-02T09:00:00Z'
    last_event: ownership_transferred
    last_event_at: '2025-06-02T09:00:00Z'
  - organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a06
    label: Marlow Yoga
    description: Yoga studio in Austin, closed in July
    domain: marlowyoga.example
    plan_tier: free
    billing_status: good_standing
    industry: Fitness studio
    employee_count: 6
    billing_contact_email: studio@marlowyoga.example
    data_residency: us
    owner_id: platform_self_serve
    owner_type: platform
    owner_name: Self-serve
    ownership_role: Direct customer
    tags: [smb]
    tag_count: 1
    status: churned
    state_history:
      - { title: Signed up, from: null, to: prospect, at: '2026-01-05T10:15:00Z', reason: Created a workspace on the Free plan }
      - { title: Went live, from: prospect, to: active, at: '2026-01-09T10:15:00Z', reason: Subscribed to the Starter plan }
      - { title: Churned, from: active, to: churned, at: '2026-07-09T10:15:00Z', reason: Studio closed; back on the Free plan }
    created_at: '2026-01-05T10:15:00Z'
    updated_at: '2026-07-09T10:15:00Z'
    last_event: plan_downgraded
    last_event_at: '2026-07-09T10:15:00Z'
  - organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a07
    label: Summit Outfitters
    description: Outdoor gear retailer in Denver
    domain: summit.example
    plan_tier: growth
    billing_status: good_standing
    industry: Outdoor retail
    employee_count: 120
    billing_contact_email: ap@summit.example
    data_residency: us
    owner_id: reseller_harbor_channel
    owner_type: reseller
    owner_name: Harbor Channel Partners
    ownership_role: Reseller of record
    tags: []
    tag_count: 0
    status: active
    state_history:
      - { title: Signed up, from: null, to: prospect, at: '2026-04-23T12:00:00Z', reason: Referred by Harbor Channel Partners }
      - { title: Trial started, from: prospect, to: onboarding, at: '2026-04-23T12:30:00Z', reason: Started a 14-day Business trial }
      - { title: Went live, from: onboarding, to: active, at: '2026-05-07T12:00:00Z', reason: Trial converted to the Business plan }
    created_at: '2026-04-23T12:00:00Z'
    updated_at: '2026-05-07T12:00:00Z'
    last_event: plan_upgraded
    last_event_at: '2026-05-07T12:00:00Z'
  - organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a08
    label: Gale & Rowe Legal
    description: Employment law practice in Boston
    domain: galerowe.example
    plan_tier: free
    billing_status: good_standing
    industry: Legal services
    employee_count: 22
    billing_contact_email: office@galerowe.example
    data_residency: us
    owner_id: platform_self_serve
    owner_type: platform
    owner_name: Self-serve
    ownership_role: Direct customer
    tags: [smb]
    tag_count: 1
    status: prospect
    state_history:
      - { title: Signed up, from: null, to: prospect, at: '2026-08-11T13:00:00Z', reason: Requested a demo }
      - { title: Trial started, from: prospect, to: onboarding, at: '2026-08-25T13:00:00Z', reason: Started a 14-day Team trial }
      - { title: Trial ended, from: onboarding, to: prospect, at: '2026-09-08T13:00:00Z', reason: Trial ended without a purchase }
    created_at: '2026-08-11T13:00:00Z'
    updated_at: '2026-09-08T13:00:00Z'
    last_event: plan_downgraded
    last_event_at: '2026-09-08T13:00:00Z'