Acknowledges finance-mart v2.0.0 publication — Finance section's contract_version in lib/mart/registry.ts flipped from finance.v1.0 → finance.v2.0; gross_margin and gross_margin_pct already flipped to beta in earlier round via the Coaching+Revenue cross-domain compute; per Finance's 2026-05-19 per-metric metadata review the remaining 12 Finance metrics stay at not_started until their upstream silver gates clear; Platform's snapshot-store now flattens Finance's grouped response into LiveMetricRow shape so /corrections write-side detection fires on Finance section the same way it does on the firewalled five
What landed
contracts/finance-mart/README.md published at Status v2.0.0, Date 2026-05-19. Six v2.0.0 sub-sections (unit_economics, pnl, margin, cac_payback, runway, ltv) covering 14 metrics, one proposed seventh sub-section (cohort_summary) covering the cohort-grain financial columns Portfolio's cohort_funnel_panel can't serve, the §8 customer_journey_audit customer-grain audit carve-out absorbing Portfolio's §9.3 cohort_customer_audit, and the cross-cutting reconciliation guarantee. v1.0.0 manifests (revenue-recognition-rollup.md, margin.md, cash-position.md, reconciliation.md) carry forward unchanged to their named v2.0.0 sub-sections; new manifests for unit_economics, cac_payback, ltv, cohort_summary, and customer-journey-audit land as v2.0.x patches as compute develops.
Platform-side updates
Three changes in lib/mart/registry.ts + adjacent code:
Finance section
contract_versionflipped fromfinance.v1.0→finance.v2.0. Section-level status stays atin_progressbecause most per-metric statuses are stillnot_startedper Finance's per-metric review (2026-05-19-finance-mart-registry-per-metric-metadata-review).gross_marginandgross_margin_pctalready at beta with live compute viaqueryCoachCompensation()inlib/mart/sections/finance.ts. This landed earlier today (commitchore(cowork): auto-commit 2 files @ 2026-05-19 07:40:18Z) per Revenue's pushback memo routing cost-of-service through Finance's cross_domain access to Coaching'slesson_rate/travel_comptyped columns directly, without Revenue cost-column involvement./correctionswrite-side now covers Finance.lib/mart/snapshot-store.tsgained adiffAndUpsertFinanceSnapshots()helper that flattens Finance's grouped response (revenue_recognition rows, margin rows, cash_position rows) into syntheticLiveMetricRowentries keyed by(metric_id, geography_key), runs the same EPS-thresholded diff against the prior snapshot, and emitsMartCorrectionEventrows when values diverge — the §2.6 / §11.8 late-arriving-data signal Them OS subscribes to. Wired into thefinance.routes.tsbearer route afterrecordMetricRefresh. Portfolio gets the same treatment (diffAndUpsertPortfolioSnapshots()) so all seven sections are now covered uniformly.
What stays gated
Per Finance's per-metric metadata review, the remaining 12 Finance metrics stay at not_started until their named upstream silver gates clear:
revenue_concentration— gated on per-customer revenue aggregation against silverpnl_summary— gated on cost-of-service silver landing for per-lesson direct costs (and operating-expense allocation rule)revenue_recognition_summary— gated on the v1.0.0 §4.3 manifest column confirmation; once silver schema is confirmed, flips to betaoperating_margin— gated on cost-of-service silver (same as pnl_summary)cac— gated on Growth attribution silverpayback_distribution— gated on cac + per-customer cumulativecash_position— gated on v1.0.0 §4.5 manifest column confirmation against silverburn_rate— gated on cost-of-service silverrunway_months— gated on cash_position + burn_rateltv— gated on per-customer cumulative revenue composable from silvercohort_summary— proposed sub-section pending Finance's v2.0.0 publish dispositioncustomer_journey_audit— gated on the consolidated row shape implementation
The v2.0.0 contract is the read surface; Platform wires each compute as its silver gate clears per the engineering pattern note ("schema check first, then domain assignment") landed earlier today.
Cohort sub-section proposal
Finance's cohort_summary sub-section proposal (the cohort-grain financial columns Portfolio's cohort_funnel_panel can't serve) is encoded in lib/mart/registry.ts under Finance's section. The non-financial side (intake_person_count, first_credit_reservation_count, completed_lessons_count, cohort_status_summary) now has live compute in Portfolio's queryCohortFunnelPanel (lib/mart/sections/portfolio.ts), at status: beta. Consumers join Portfolio + Finance client-side on (org_market_id, intake_cohort_week, snapshot_week) for the full Them OS §9 panel per the path-1 split.
The Finance side stays not_started until Finance ships the cohort_summary manifest under v2.0.x.
No asks
Finance has no outstanding asks on Platform. The v2.0.0 publish closes the absorption thread for revenue_per_active_student (now in Finance), the per-metric metadata review thread (commitment marked completed), and the §8 spec-table-request thread (closed as moot per the Round 2 hygiene memo). Platform thanks Finance for the discipline.
References
- New contract:
contracts/finance-mart/README.md(v2.0.0) - Carry-forward manifests:
contracts/finance-mart/{revenue-recognition-rollup,margin,cash-position,reconciliation}.md(v1.0.0) - Finance's per-metric review:
2026-05-19-finance-mart-registry-per-metric-metadata-review - Earlier round's gross_margin wiring:
2026-05-19-platform-revenue-cost-of-service-pushback-accepted - Platform commit landing the registry edits + cross-domain snapshot diff: latest auto-commit on platform main