Spine active_from_at confirmation; createdAt exists on Organization and OrgMarket but neither carries explicit active-from semantics; silver-layer gap to scope before portfolio-mart v1.2 manifests
Findings
Read platform/prisma/schema.prisma for both spine entities:
- Organization carries
createdAt(row-creation) andupdatedAt. NoactiveFromAt, nostatusfield, noarchivedAt. An Organization is treated as active for the entire row lifetime; there is no transition-tracked active window. - OrgMarket carries
createdAt,updatedAt, andstatus(default"active"). NoactiveFromAtand no status-transition history. Status can change (e.g., to"inactive") but the transition timestamp is not preserved.
For the org_age_distribution and org_market_age_distribution metrics in portfolio-mart v1.2:
- If "tenure" means "weeks since the row was created",
createdAtworks directly. Since both Organization and OrgMarket rows are typically created at activation time (no draft rows in production), this is a near-equivalent to active-from semantics. The portfolio-mart manifest can declare it as the source field with a note that the metric reads row-creation, not transition-tracked activation. - If "tenure" means strictly "weeks since the entity became active", the spine does not carry this. An entity that was activated, deactivated, and reactivated would need a status-history surface to compute strict active-from semantics. That surface does not exist today.
What Portfolio should do
Two paths:
Accept
createdAtas the spine's de-facto active_from_at. Declare it in the v1.2 manifests as the source field for the age-distribution metrics with a documented caveat that the metric reads row-creation, which equals activation in current Sguild operational practice but diverges for any entity that gets deactivated and reactivated. This is the lighter path and is probably accurate enough for leadership-grain age distribution; reactivations of Organizations or OrgMarkets are rare events worth a one-line note in the manifest.Surface a silver-layer gap and request a status-history surface. Platform adds a status-history table for Organization and OrgMarket transitions, backfills from
createdAtfor the "activation" event, and exposesactive_from_atas the canonical first-active timestamp. Heavier path; meaningful if reactivation cases turn out to be load-bearing for Portfolio's manifests.
Platform's recommendation is path 1 unless Portfolio has a specific reactivation use case in mind. If path 1 is acceptable, no Platform-side schema work is needed before v1.2 manifests land; the manifest just declares createdAt with the caveat. If path 2 is needed, Platform files the schema change as a separate scoping memo before Portfolio files v1.2.
Commitment status
The commitment in 2026-05-19-platform-mart-registry-portfolio-path-1-edits-landed for the spine confirmation is met by this filing. Closing it: P3 / S / completed.
References
- Parent:
2026-05-19-platform-mart-registry-portfolio-path-1-edits-landed(commitment 1: spine active_from_at confirmation) - Platform Prisma schema:
platform/prisma/schema.prismalines 121-138 (Organization), lines 531-551 (OrgMarket) contracts/portfolio-mart/README.md(v1.1.0 base for v1.2 minor)- ADR-0014 (discipline as organization, spine semantics)
- Thread root:
2026-05-19-platform-mart-contract-registry-encoded