Objects / Relationship
Relationship
Canonical graph edge linking two entities with lifecycle, ownership, and tagging semantics.
Generated from @oods/foundry 0.10.1
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.
sha256:542dc195c689…Open full size: Relationship detail screen generated by OODS Foundry in Reactsha256:be21dec0d1b7…Open full size: Relationship detail screen generated by OODS Foundry in Vuesha256:f7de8bcb4111…Open full size: Relationship list screen generated by OODS Foundry in Reactsha256:1104607c18f0…Open full size: Relationship list screen generated by OODS Foundry in Vuesha256:f5bf2f2cecec…Open full size: Relationship form screen generated by OODS Foundry in Reactsha256:3a498b61bc75…Open full size: Relationship form screen generated by OODS Foundry in Vuesha256:16236f4b6287…Open full size: Relationship timeline screen generated by OODS Foundry in Reactsha256:90ceae8b7087…Open full size: Relationship timeline screen generated by OODS Foundry in Vuesha256:4bbd06767e6c…Open full size: Relationship card screen generated by OODS Foundry in Reactsha256:1b6c462e2f2b…Open full size: Relationship card screen generated by OODS Foundry in Vuesha256:5076bb9a06fa…Open full size: Relationship inline screen generated by OODS Foundry in Reactsha256:fc10257b5138…Open full size: Relationship inline screen generated by OODS Foundry in Vuesha256:13353a433ced…Open full size: Relationship workflow screen generated by OODS Foundry in Reactsha256:8636d025b5fa…Open full size: Relationship workflow screen generated by OODS Foundry in VueThe calls that made the Relationship detail apps, in React and Vue
design_compose {
"object": "Relationship",
"context": "detail",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-266667ae",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-266667ae",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:542dc195c689a67223fbb2b95d8665c01496f7954b91e36fd99f718b3dde4012. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, charts/, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:be21dec0d1b7bba3b8e3044d66533cbb316e9617b984c65f97a62d5c933ef276. Its src/ folder: App.vue, GeneratedUI.vue, app.css, charts/, main.ts, oods-brand-aquex.css
The calls that made the Relationship list apps, in React and Vue
design_compose {
"object": "Relationship",
"context": "list",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-4f0130f3",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-4f0130f3",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:f7de8bcb41115af3644d85ef77df69e5fa386bd0c0936733c68045d25f1623af. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:1104607c18f017f8ceec9f4e04e76dddba04725e8325c1f4230d7bdce6e3288e. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Relationship form apps, in React and Vue
design_compose {
"object": "Relationship",
"context": "form",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-9b2ffe84",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-9b2ffe84",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:f5bf2f2cecec5e9cf4931f34d96d1d5e1b39b820f3f1a762959e06d825eeb029. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:3a498b61bc75ac0aab18ad751962493380cabd96ef20285d9c73a2742cf85722. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Relationship timeline apps, in React and Vue
design_compose {
"object": "Relationship",
"context": "timeline",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-05af471a",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-05af471a",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:16236f4b6287f5425959bc616df28c5beaab9a86f0617eea50f2d2e47a15f05c. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:90ceae8b708744cb1b11e72025779f5de34c6ec9f5fdfbea5adee5629f1b54e3. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Relationship card apps, in React and Vue
design_compose {
"object": "Relationship",
"context": "card",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-e8836673",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-e8836673",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:4bbd06767e6c4788a6568e9b5cd7d853bf1bc9973369ea00a827feb53768e8a6. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:1b6c462e2f2b6062d60892a98bde327544296487c21069d4a77e992646198b80. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Relationship inline apps, in React and Vue
design_compose {
"object": "Relationship",
"context": "inline",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-4a4945de",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-4a4945de",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:5076bb9a06fa31ed6430fb022936e50345b88aa592a955008b2d68873ad09036. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:fc10257b513888266cd6e4b156bab267e24a069e5fa01022a94fc3c329720a52. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Relationship workflow apps, in React and Vue
design_compose {
"object": "Relationship",
"context": "workflow",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-57ea32d2",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-57ea32d2",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:13353a433ced2831d2e2e20102752563f26472ca30796dbfc2df1f1ffde8cdbe. Its src/ folder: App.tsx, actions.ts, app.css, application.ts, chart-assets.ts, charts/, main.tsx, oods-brand-aquex.css, sample-data.ts, screens/, ssr.tsx, store.ts
The Vue app's content hash: sha256:8636d025b5fa7e796999027ce345c3081db136dba96a3761b509bc3c25d9e821. Its src/ folder: App.vue, actions.ts, app.css, application.ts, chart-assets.ts, charts/, main.ts, oods-brand-aquex.css, sample-data.ts, screens/, ssr.ts, store.ts
Fields
| Field | Type | Description |
|---|---|---|
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. MoreThis 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. MoreEach 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. MoreWhen 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. |
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. |
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. MoreEach 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) |
neighborhood | array | This relationship's edge and the edges that share one of its endpoints, each containing source_id and target_id strings and an is_bidirectional boolean. |
relationship_idrequired | uuid | Primary identifier for the relationship edge. |
source_idrequired | uuid | Identifier of the source node in the relationship. |
source_name | string | Display name of the source node. |
target_idrequired | uuid | Identifier of the target node in the relationship. |
target_name | string | Display name of the target node. |
relationship_typerequired | string (membership, ownership, follows, depends_on, references) | Semantic type describing the edge between the source and target. |
directionrequired | string (unidirectional, bidirectional) | Directionality applied when traversing the relationship. |
strength | string (low, medium, high) | Signal representing how strongly the entities are connected. |
origin_source | string (manual, ingestion, analytics, integration) | System that originated or inferred the relationship. |
is_bidirectionalrequired | boolean | Flag indicating whether the relationship is symmetric. |
owner_name | string | Display name of the organization, team or platform that owns the relationship. |
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.
The object file
The Relationship object definition in YAML: objects/core/Relationship.object.yaml
object:
name: Relationship
version: 1.1.0
domain: core.graph
description: Canonical graph edge linking two entities with lifecycle, ownership, and tagging semantics.
tags:
- universal
- relationship
- graph
traits:
- name: content/Labelled
alias: RelationshipLabel
- name: lifecycle/Stateful
parameters:
states:
- proposed
- active
- paused
- completed
- terminated
initialState: proposed
- name: lifecycle/Timestampable
parameters:
recordedEvents:
- created
- activated
- paused
- terminated
- reactivated
timezone: UTC
- name: structural/Ownerable
parameters:
ownerTypes:
- organization
- team
- platform
primaryOwnerType: organization
allowTransfer: true
- name: behavioral/Taggable
parameters:
maxTags: 10
allowCustomTags: true
allowedTags:
- primary
- secondary
- inferred
- manual
- pending_review
caseSensitive: false
- name: viz/MarkGraph
parameters:
title: Connected relationships
description: This relationship and the others that share one of its endpoints.
chart:
chartType: force_graph
source: edge-array
dataField: neighborhood
edges:
source: source_id
target: target_id
bidirectionalField: is_bidirectional
sampleRows:
- { source_id: example-team, target_id: example-project, is_bidirectional: false }
- { source_id: example-project, target_id: example-document, is_bidirectional: true }
schema:
neighborhood:
type: array
required: false
description: This relationship's edge and the edges that share one of its endpoints, each containing source_id and target_id strings and an is_bidirectional boolean.
relationship_id:
type: uuid
required: true
description: Primary identifier for the relationship edge.
source_id:
type: uuid
required: true
description: Identifier of the source node in the relationship.
source_name:
type: string
required: false
description: Display name of the source node.
target_id:
type: uuid
required: true
description: Identifier of the target node in the relationship.
target_name:
type: string
required: false
description: Display name of the target node.
relationship_type:
type: string
required: true
description: Semantic type describing the edge between the source and target.
validation:
enum:
- membership
- ownership
- follows
- depends_on
- references
direction:
type: string
required: true
default: bidirectional
description: Directionality applied when traversing the relationship.
validation:
enum:
- unidirectional
- bidirectional
strength:
type: string
required: false
description: Signal representing how strongly the entities are connected.
validation:
enum:
- low
- medium
- high
origin_source:
type: string
required: false
description: System that originated or inferred the relationship.
validation:
enum:
- manual
- ingestion
- analytics
- integration
is_bidirectional:
type: boolean
required: true
default: true
description: Flag indicating whether the relationship is symmetric.
owner_name:
type: string
required: false
description: Display name of the organization, team or platform that owns the relationship.
semantics:
# The one-line summary under the relationship'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
relationship_id:
semantic_type: graph.relationship.id
token_mapping: tokenMap(graph.relationship.id)
source_id:
semantic_type: graph.relationship.source_id
token_mapping: tokenMap(graph.relationship.id)
ui_hints:
displayLabelField: source_name
target_id:
semantic_type: graph.relationship.target_id
token_mapping: tokenMap(graph.relationship.id)
ui_hints:
displayLabelField: target_name
# 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
relationship_type:
semantic_type: graph.relationship.type
token_mapping: tokenMap(graph.relationship.type)
direction:
semantic_type: graph.relationship.direction
token_mapping: tokenMap(graph.relationship.direction)
strength:
semantic_type: graph.relationship.strength
token_mapping: tokenMap(graph.relationship.strength)
origin_source:
semantic_type: graph.relationship.origin
token_mapping: tokenMap(graph.relationship.origin)
tokens:
graph.relationship.type: "var(--graph-relationship-type)"
graph.relationship.direction: "var(--text-default)"
graph.relationship.strength.high: "var(--status-success)"
metadata:
owners:
- data@oods.systems
- platform@oods.systems
steward: graph@oods.systems
changelog:
- version: 1.1.0
date: "2026-09-14"
description: Declared neighborhood edge array and a read-only graph of explicitly synthetic connected relationship examples.
- version: 1.0.0
date: "2025-10-16"
description: Initial Universal Quintet baseline.
# Eight authored sample relationships between the sample users, organizations and services. Each is proposed, then
# confirmed (the lifecycle's initial state is proposed); its direction and bidirectional flag agree, and the last event
# is the latest recorded change.
samples:
- label: Dana Whitfield — Northwind Traders
description: Workspace owner membership
relationship_type: membership
source_id: 8b2e4d6f-1a3c-4e5b-9d7f-2c4e6a8b0d01
source_name: Dana Whitfield
target_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a01
target_name: Northwind Traders
direction: unidirectional
is_bidirectional: false
neighborhood:
- { source_id: Dana Whitfield, target_id: Northwind Traders, is_bidirectional: false }
- { source_id: Northwind Group, target_id: Northwind Traders, is_bidirectional: false }
- { source_id: Tidewater Co-op, target_id: Northwind Traders, is_bidirectional: false }
strength: high
origin_source: manual
owner_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a01
owner_type: organization
owner_name: Northwind Traders
tags: [primary, manual]
tag_count: 2
status: active
state_history:
- { title: Created, from: null, to: proposed, at: '2026-02-02T15:00:00Z', reason: Created with the workspace }
- { title: Confirmed, from: proposed, to: active, at: '2026-02-02T15:00:30Z', reason: Confirmed by the workspace owner }
created_at: '2026-02-02T15:00:00Z'
updated_at: '2026-02-02T15:00:30Z'
last_event: activated
last_event_at: '2026-02-02T15:00:30Z'
- label: Northwind Group — Northwind Traders
description: Parent company owns the account
relationship_type: ownership
source_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a09
source_name: Northwind Group
target_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a01
target_name: Northwind Traders
direction: unidirectional
is_bidirectional: false
neighborhood:
- { source_id: Northwind Group, target_id: Northwind Traders, is_bidirectional: false }
- { source_id: Dana Whitfield, target_id: Northwind Traders, is_bidirectional: false }
- { source_id: Tidewater Co-op, target_id: Northwind Traders, is_bidirectional: false }
strength: high
origin_source: integration
owner_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a09
owner_type: organization
owner_name: Northwind Group
tags: [primary]
tag_count: 1
status: active
state_history:
- { title: Created, from: null, to: proposed, at: '2026-02-03T09:00:00Z', reason: Imported from the CRM }
- { title: Confirmed, from: proposed, to: active, at: '2026-02-04T16:00:00Z', reason: Confirmed by Northwind's legal team }
created_at: '2026-02-03T09:00:00Z'
updated_at: '2026-02-04T16:00:00Z'
last_event: activated
last_event_at: '2026-02-04T16:00:00Z'
- label: Harbor Channel — Summit Outfitters
description: Reseller of record since April
relationship_type: ownership
source_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a10
source_name: Harbor Channel Partners
target_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a07
target_name: Summit Outfitters
direction: unidirectional
is_bidirectional: false
neighborhood:
- { source_id: Harbor Channel Partners, target_id: Summit Outfitters, is_bidirectional: false }
- { source_id: Summit Outfitters, target_id: Tidewater Co-op, is_bidirectional: true }
strength: medium
origin_source: manual
owner_id: team_partnerships
owner_type: team
owner_name: Partnerships
tags: [secondary]
tag_count: 1
status: active
state_history:
- { title: Created, from: null, to: proposed, at: '2026-04-23T12:00:00Z', reason: Registered by the reseller }
- { title: Confirmed, from: proposed, to: active, at: '2026-04-24T10:00:00Z', reason: Approved by the partnerships team }
created_at: '2026-04-23T12:00:00Z'
updated_at: '2026-04-24T10:00:00Z'
last_event: activated
last_event_at: '2026-04-24T10:00:00Z'
- label: Orders API — Billing Service
description: Orders API calls Billing to charge
relationship_type: depends_on
source_id: 7e0b1c2d-3e4f-4a5b-8c6d-9e0f1a2b3c01
source_name: Orders API
target_id: 7e0b1c2d-3e4f-4a5b-8c6d-9e0f1a2b3c02
target_name: Billing Service
direction: unidirectional
is_bidirectional: false
neighborhood:
- { source_id: Orders API, target_id: Billing Service, is_bidirectional: false }
strength: high
origin_source: integration
owner_id: team_platform_engineering
owner_type: team
owner_name: Platform engineering
tags: [primary]
tag_count: 1
status: active
state_history:
- { title: Created, from: null, to: proposed, at: '2025-11-10T09:00:00Z', reason: Found in service tracing }
- { title: Confirmed, from: proposed, to: active, at: '2025-11-12T09:00:00Z', reason: Confirmed by Platform engineering }
created_at: '2025-11-10T09:00:00Z'
updated_at: '2025-11-12T09:00:00Z'
last_event: activated
last_event_at: '2025-11-12T09:00:00Z'
- label: Summit Outfitters — Tidewater Co-op
description: Co-marketing referral partnership
relationship_type: references
source_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a07
source_name: Summit Outfitters
target_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a05
target_name: Tidewater Co-op
direction: bidirectional
is_bidirectional: true
neighborhood:
- { source_id: Summit Outfitters, target_id: Tidewater Co-op, is_bidirectional: true }
- { source_id: Harbor Channel Partners, target_id: Summit Outfitters, is_bidirectional: false }
- { source_id: Tidewater Co-op, target_id: Northwind Traders, is_bidirectional: false }
strength: low
origin_source: manual
owner_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a07
owner_type: organization
owner_name: Summit Outfitters
tags: [secondary]
tag_count: 1
status: paused
state_history:
- { title: Created, from: null, to: proposed, at: '2026-06-01T17:00:00Z', reason: Proposed at the partner summit }
- { title: Confirmed, from: proposed, to: active, at: '2026-06-15T17:00:00Z', reason: Both teams signed off }
- { title: Paused, from: active, to: paused, at: '2026-09-01T17:00:00Z', reason: Paused for the harvest season }
created_at: '2026-06-01T17:00:00Z'
updated_at: '2026-09-01T17:00:00Z'
last_event: paused
last_event_at: '2026-09-01T17:00:00Z'
- label: Tidewater Co-op — Northwind Traders
description: Follows supplier price updates
relationship_type: follows
source_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a05
source_name: Tidewater Co-op
target_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a01
target_name: Northwind Traders
direction: unidirectional
is_bidirectional: false
neighborhood:
- { source_id: Tidewater Co-op, target_id: Northwind Traders, is_bidirectional: false }
- { source_id: Dana Whitfield, target_id: Northwind Traders, is_bidirectional: false }
- { source_id: Northwind Group, target_id: Northwind Traders, is_bidirectional: false }
- { source_id: Summit Outfitters, target_id: Tidewater Co-op, is_bidirectional: true }
strength: medium
origin_source: analytics
owner_id: team_data_platform
owner_type: team
owner_name: Data platform
tags: [inferred]
tag_count: 1
status: active
state_history:
- { title: Created, from: null, to: proposed, at: '2025-12-01T00:00:00Z', reason: Inferred from order history }
- { title: Confirmed, from: proposed, to: active, at: '2025-12-03T20:00:00Z', reason: Accepted by Tidewater }
- { title: Paused, from: active, to: paused, at: '2026-02-10T20:00:00Z', reason: Supplier feed paused }
- { title: Reactivated, from: paused, to: active, at: '2026-03-02T20:00:00Z', reason: Supplier feed restored }
created_at: '2025-12-01T00:00:00Z'
updated_at: '2026-03-02T20:00:00Z'
last_event: reactivated
last_event_at: '2026-03-02T20:00:00Z'
- label: Jonah Marlow — Marlow Yoga
description: Former workspace owner membership
relationship_type: membership
source_id: 8b2e4d6f-1a3c-4e5b-9d7f-2c4e6a8b0d07
source_name: Jonah Marlow
target_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a06
target_name: Marlow Yoga
direction: unidirectional
is_bidirectional: false
neighborhood:
- { source_id: Jonah Marlow, target_id: Marlow Yoga, is_bidirectional: false }
strength: high
origin_source: manual
owner_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a06
owner_type: organization
owner_name: Marlow Yoga
tags: [primary]
tag_count: 1
status: terminated
state_history:
- { title: Created, from: null, to: proposed, at: '2026-01-05T10:15:00Z', reason: Created with the workspace }
- { title: Confirmed, from: proposed, to: active, at: '2026-01-05T10:15:30Z', reason: Confirmed by the workspace owner }
- { title: Ended, from: active, to: terminated, at: '2026-07-10T09:00:00Z', reason: Studio closed }
created_at: '2026-01-05T10:15:00Z'
updated_at: '2026-07-10T09:00:00Z'
last_event: terminated
last_event_at: '2026-07-10T09:00:00Z'
- label: Priya Raman — Blue Harbor Studio
description: Workspace admin membership
relationship_type: membership
source_id: 8b2e4d6f-1a3c-4e5b-9d7f-2c4e6a8b0d03
source_name: Priya Raman
target_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a02
target_name: Blue Harbor Studio
direction: unidirectional
is_bidirectional: false
neighborhood:
- { source_id: Priya Raman, target_id: Blue Harbor Studio, is_bidirectional: false }
strength: high
origin_source: manual
owner_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a02
owner_type: organization
owner_name: Blue Harbor Studio
tags: [primary, manual]
tag_count: 2
status: active
state_history:
- { title: Created, from: null, to: proposed, at: '2026-09-19T10:00:00Z', reason: Created with the workspace }
- { title: Confirmed, from: proposed, to: active, at: '2026-09-19T10:00:30Z', reason: Confirmed by the workspace owner }
created_at: '2026-09-19T10:00:00Z'
updated_at: '2026-09-19T10:00:30Z'
last_event: activated
last_event_at: '2026-09-19T10:00:30Z'