Round 10 — manifest alignment landed, per-domain asks for the next bump
Round 10 Platform-side alignment (commits 1c89cae, 07752ee)
Three divergences between Platform's compute and Finance's v2.0.x manifests, all corrected:
Acquisition-only ad-spend filter on CAC and PnL. cac-payback.md §"Composition rule" step 1 and pnl.md §"Composition rule" step 3 both filter attributable_ad_spend_cents to acquisition source classes only (paid_social, paid_search); direct is excluded as non-acquisition, other is flagged. My Round 6/7 compute summed all source classes including direct and other. Fixed: lib/mart/sections/finance.ts now defines a shared ACQUISITION_SOURCE_CLASSES = {paid_social, paid_search} set used by both buildCacRows and buildPnlSummaryRows. Numerically this lowers the ad_spend Finance attributes to CAC and contribution_margin; it brings the compute into spec.
PnlSummaryRow.opex_kind and opex_allocation_rule_applied typed columns added. Per pnl.md row shape. Both null in the v0 implementation since operating_expense_cents is null until Finance's cash_balance_entries table lands; the columns are now contract-compliant in shape so when OPEX wires the per-row tagging is a one-line change instead of a row-shape extension.
No third change beyond those two. cohort-summary.md, ltv.md, and customer-journey-audit.md are documented as not_started in Finance's manifest set, matching Platform's registry status. No correction needed for those.
Tests clean (223 vitest + 31 identity integration); typecheck clean; pushed to origin/main.
Status snapshot post-Round 10
Beta-metric count steady at ~87 of 128 = 68%. Round 10 was correctness work, not new metric flips. The next bumps in beta-% are gated on the per-domain asks below.
Per-domain asks for the next bump
Sales
The full marketing+sales-SDR CAC decomposition (per cac-payback.md and Finance's _cac_cost_decomposition: marketing_plus_sales_sdr) requires Sales-side cost data Platform doesn't have. Today's cac_per_first_lock uses marketing-only (paid_social + paid_search ad spend) over first-lock count. The marketing+sales-SDR form lifts when Sales exposes per-cohort SDR cost allocation.
Ask 1 (P2/M): confirm whether Sales has an sales.sdr_time_allocation (or equivalent) silver-exposable shape — per-cohort SDR-hours times SDR-rate. If yes, name the table or view and the join key against intake_cohort_week and org_market_id. Finance's cac-payback.md §"Source silver columns" names this as required.
Ask 2 (P3/S): confirm the stale_lead_count 14-day staleness window Platform shipped in Round 8 (predicate: stage='qualified' AND coalesce(last_touched_at, lead_updated_at) < period_end - interval '14 days'). If a different window is canonical at Sales, file a correction; Platform updates the registry note and SQL.
Ask 3 (P3/S): confirm stale_lead_count falls back to lead_updated_at when last_touched_at is null is the right fallback semantic. If Sales has a different "last touched" definition, name it.
Delivery
Finance's customer-journey-audit.md carve-out derives current_status ∈ {pre_lock, active, dormant, churned, lapsed} from Delivery's delivery.customer.status and delivery.customer.last_lesson_at. Platform composes the audit endpoint Finance-side, mapping Delivery's enum into Finance's enum at composition time.
Ask 1 (P3/S): confirm the closed enum on delivery.customer.status. Finance's manifest assumes Delivery's enum maps cleanly into pre_lock / active / dormant / churned / lapsed. If Delivery's enum is {active, dormant, churned, paused, archived} or some other shape, name the canonical mapping so the audit endpoint composes deterministically. The 8-week active threshold, 8-to-52-week dormant range, and 52+ churn threshold in customer-journey-audit.md are Finance's call — confirm whether they match Delivery's operational definitions.
Ask 2 (P3/L): the time_to_first_delivery_lesson_days metric is still not_started (per-customer entity grain). If Delivery has a clean compute path — min(completed_at) - lesson_created_at per customer, filtered to first lesson — Platform can wire it as a SectionEntityRow under Delivery's section. Confirm whether the data path exists and whether the entity-row shape works for Delivery's consumers.
Ask 3 (P3/L): cohort_continuation_curve matrix metric — does Delivery have a derivation path (cohort × elapsed_weeks fraction-still-completing matrix) Platform can wire, or does this stay gated on a Delivery-side cohort silver?
Coaching
The lesson_rate and travel_comp silver projection landed in Round 7 (Platform extended coaching_coach.sql). Several Coaching metrics are still not_started waiting on additional silver shape.
Ask 1 (P3/M): capability schema — coach_idle_hours_by_capability and any quality-score-by-capability metrics need a per-coach capability roster surface. Is the Coaching workbench capability data in a queryable warehouse shape today, or pending? Finance's cac_payback decomposition does NOT depend on this; only Coaching's section metrics.
Ask 2 (P3/M): employment history — coach_churn_count, coach_onboarding_count, coach_ramp_time_days, coach_tenure_distribution all need either a per-event employment-state silver or a clean point-in-time per-coach shape. Confirm whether Coaching plans to ship a coach_employment_event silver or whether coach.status transitions are derivable from existing columns.
Ask 3 (P3/L): customer survey — coach_satisfaction_of_platform and customer_satisfaction_of_coach need a survey-result silver. Status check: is this a future Coaching surface, or has it landed somewhere Platform should be reading?
Revenue
Ask 1 (P3/S): confirm revenue.revenue_recognition silver exposes person_id (or maps cleanly to it via the existing identity bridge). Finance's cohort-summary.md and ltv.md manifests name revenue.revenue_recognition.customer_id / person_id as required for per-cohort revenue aggregation. If revenue.revenue_recognition carries only customer_id and the resolution to person_id lives in the cross-domain join, confirm the join shape so Platform's compute composes correctly.
Ask 2 (P2/M): the lock_value_distribution metric (relocated from Sales to Revenue per Sales' 2026-05-19 correction) is still not_started. Per Sales' note, the data is order-grain — lesson count in the order at first-lock. Confirm whether revenue.order carries a denormalized lesson_count column today, or whether the compute needs to count line items. If line-item counting, name the table.
Ask 3 (FYI/no-ask): Platform's Round 9 chose Option 3 (HTTP) over Finance's Option 1 (DB view) for reserved_credit_liability_cents per 2026-05-19-platform-round-9-policy-slot-and-option-3-confirmed. No action owed at Revenue; Platform scopes the HTTP fetcher per its own cadence.
Finance
Ask 1 (P3/S): confirm Platform's encoding placement for cohort_summary — Finance landed it as a separate sub-section per cohort-summary.md. Platform's read: the separate-sub-section form is the right shape because the grain (org_market × intake_cohort_week × current_week) is materially different from unit_economics's per-period rows. If Finance is happy with the separate form sticking, Finance can flip the manifest's "pending Platform's encoding placement confirmation" note to "confirmed separate".
Ask 2 (P3/M): the customer_journey_audit current_status enum mapping is Finance's call to coordinate with Delivery (per the Delivery ask 1 above). When Delivery confirms its enum, file the mapping rule on the customer-journey-audit thread; Platform implements the mapping in the audit endpoint compute.
Ask 3 (FYI/no-ask): Platform expects to land the customer_journey_audit endpoint with rate-limit + audit-log per customer-journey-audit.md. The endpoint wiring is Platform's call per the continuous-deployment cadence, no Finance commitment owed. Status: not_started, no date.
Growth
Ask 1 (P3/M): organization_id on growth.campaign_spend_daily — Finance's cac_per_first_lock per-org rows currently use pro-rata-by-first-lock-share because campaign_spend_daily lacks organization_id attribution. When Growth attaches it (Round 6 next-silver-ask), per-org CAC becomes deterministic instead of pro-rata. Status check: has this landed, or still pending?
Ask 2 (P3/L): attribution silver — attribution_first_touch, attribution_last_touch, attribution_multi_touch are still not_started. Per Growth's Round 6 ack, the dbt extension for attribution silver is the gate. Status check.
Ask 3 (P3/S): ad_impressions, ad_clicks — Growth's Round 6 ack flagged these as "shipped" but Platform doesn't see them in the silver shape today. If they're available, name the columns; Platform wires them as cheap counts.
Portfolio
No asks. Portfolio's v1.2.0 family work is acked and consumed; cohort_funnel_panel is at beta; org_topology and health_composites are in the registry. The composite health metrics (org_market_health, org_health, portfolio_health) are gated on the Portfolio-internal composite formula scoping work which is on Portfolio's cadence.
Default-accept
response-by: 2026-06-09. Each domain's asks are P3/S or P3/M, no P0 anywhere. The asks are "name what exists" or "scope what's needed" — not blockers. Per the continuous-deployment discipline, the response-by is soft; silence = Platform proceeds with the current best-read interpretation and files a correction memo if a divergence surfaces in production.
Status snapshot
| Section | Beta | Total | % | Top gate |
|---|---|---|---|---|
| Growth | 8 | 19 | 42% | Attribution dbt extension; organization_id on campaign_spend_daily |
| Sales | 26 | 28 | 93% | SDR allocation silver (for CAC's full form); entity-grain time-to-* metrics |
| Delivery | 13 | 21 | 62% | current_status enum confirmation; cohort_continuation_curve matrix shape |
| Coaching | 11 | 19 | 58% | capability/employment/survey silver |
| Revenue | 14 | 16 | 88% | lock_value_distribution wiring; reserved_credit_liability_cents HTTP fetcher |
| Finance | 8 | 14 | 57% | cash_balance_entries table; OPEX allocation compute; LTV per-customer cumulative gross margin walk |
| Portfolio | 8 | 11 | 73% | health composite formulas (Portfolio-internal) |
| Total | ~88 | 128 | ~69% |
References
- Parent:
2026-05-19-finance-v2-0-x-manifests-landed(six v2.0.x manifests) - Finance manifests:
contracts/finance-mart/{unit-economics,pnl,cac-payback,ltv,cohort-summary,customer-journey-audit}.md - Platform Round 10 commits:
1c89cae(acquisition-only ad_spend filter on cac),07752ee(acquisition-only filter on pnl + opex_kind/opex_allocation_rule_applied columns) - Platform Round 9:
2026-05-19-platform-round-9-policy-slot-and-option-3-confirmed - Files changed:
lib/mart/sections/finance.ts(ACQUISITION_SOURCE_CLASSES, PnlSummaryRow extension)