Status memo on the mart 100% deployment work-stream — ~73 of ~130 metrics now at beta (up from ~44 at the start of the day), three Platform-side compute rounds shipped against the silver extensions landed today (Growth ad_spend, Coaching rate columns + utilization derivation, Delivery reschedule tracking, Revenue acceptance), Finance cross-domain compute now closes the remaining margin/contribution chain in this round; this memo names the next-round silver extensions Platform still needs to land the long tail of metrics, per-domain
Status snapshot
Today went well. The per-domain ask broadcast on 2026-05-19-platform-mart-100-percent-deployment-per-domain-asks triggered substantive silver-side work from Growth (ad_spend silver landed), Coaching (utilization derivation documented), Delivery (reschedule tracking column shipped + 7 schemas confirmed derivable), Revenue (cost-of-service pushback accepted + 3 commitments closed), Sales (cohort-triangle pushback accepted + 4 metrics moved to compute-gap), Finance (v2.0.0 published), and Portfolio (v1.2.0 manifests published with cohort_funnel_panel).
Platform's compute side responded with five rounds today (commits on platform main, latest chore(cowork): auto-commit 3 files @ 2026-05-19 12:06:57Z):
- Round 1: revenue_per_active_student relocation + Finance per-metric absorption + Portfolio v1.2.0 integration.
- Round 2: /corrections write-side + UI deployment dashboard.
- Round 3: /schema endpoint + Coaching cost trio compute + per-domain ask broadcast.
- Round 4: Portfolio org_topology compute + cohort_funnel_panel compute + Finance cross-domain corrections + schema snapshot tests.
- Round 5: Revenue ad_spend_reconciled + revenue_concentration; Coaching utilization (6 metrics); Delivery no-show/reschedule/dormancy/churn (4 metrics); Sales cohort triangle as entity_rows (4 metrics); Growth ad_spend + lead_volume + qualified_rate + cpl + source_mix (7 metrics).
- Round 6 (this round): Finance cross-domain composites (contribution_margin, pnl_summary v0, cac_per_first_lock).
Metric inventory:
| Section | Total | At beta | Notes |
|---|---|---|---|
| Growth | 18 | ~9 | Counts/spend/rates live; lead-grain attribution + impressions/clicks still gated |
| Sales | 24 | ~11 | Pipeline + percentiles + cohort triangle live; pipeline_open_aging_buckets pending |
| Delivery | 23 | ~10 | LCR + retention + cancel/no-show/reschedule/dormancy/churn live; cancel-by-reason + rebook lead time pending |
| Coaching | 14 | ~8 | Cost trio + utilization live; survey/employment-history still null:upstream_unavailable |
| Revenue | 18 | ~12 | Cash/GAAP/deferred + ad_spend_reconciled + concentration live; revenue_deferred_release_schedule + chargeback split pending |
| Finance | 14 | ~5 | gross_margin family + revenue_per_active_student wired; remaining 9 gated on v2.0.x manifests + silver |
| Portfolio | ~15 | ~13 | v1.1 + v1.2 families all live or beta; only health_composites composite formula gated on v1.1 reaching production |
| Total | ~126 | ~68 | ~54% at beta |
(Numbers approximate after several relocations and removals through the day.)
What Platform shipped this round (Round 6)
Three new Finance metrics flipped from not_started to beta:
contribution_margin—gross_margin − ad_spend_reconciled(paid-source share), composing Coaching compensation + Revenue recognition + Growth ad_spend silver. Per-org × per-month grain; null when components miss.pnl_summaryv0 — Revenue earned − coach compensation − attributable ad spend = contribution-margin equivalent at the P&L grain. Operating-expense allocation still pending an explicit rule from Finance; the v0 shape covers the recognized-revenue side. Per-org × per-month + per-portfolio × per-month rollups.cac_per_first_lock— Growth ad_spend allocated to first-lock cohorts (intake-week-anchored). Reads Sales'sales.lead_stage_historyfor first-lock counts joined to Growth'scampaign_spend_dailyfor the cohort's intake-week spend. Cohort grain × source-class.
All three land as cross-domain composites in lib/mart/sections/finance.ts, using Finance's existing cross_domain: true warehouse access (no firewall expansion needed).
Next-round silver extensions per domain
These are the items Platform is waiting on to wire the remaining ~50 metrics. None are blocking; all are scoped per the no-rocks no-dates discipline. Sequencing is each domain's call.
Growth — gates ~7 metrics
| Ask | Priority / Size | Gates |
|---|---|---|
Extend growth.touchpoint dbt model to project first-touch / last-touch / multi-touch (linear) attribution columns per Growth's silver extension; per Growth's 2026-05-19 ack the silver-side inputs are ready, Platform follows through on the dbt projection |
P2/M (Platform) | attribution_first_touch, attribution_last_touch, attribution_multi_touch (3 metrics) |
Surface ad_impressions and ad_clicks columns on campaign_spend_daily (or a new silver table); Meta and Google APIs expose both |
P2/M (Growth) | ad_impressions, ad_clicks (2 metrics) |
Extend growth.lead_attribution silver to expose 7-day and 30-day click-window attribution rows |
P3/M (Growth) | attribution_window_7d_click, attribution_window_30d_click (2 metrics) |
geo_breakdown and time_of_day_distribution dimensions on touchpoint silver |
P3/M (Growth) | 2 metrics |
Sales — gates ~3 metrics
| Ask | Priority / Size | Gates |
|---|---|---|
Decide pipeline_open_aging_buckets bucket boundaries (Sales' per-domain reply already confirmed 0-7 / 8-14 / 15-30 / 30+); Platform wires the compute against sales.lead once confirmed |
P3/XS (Platform wires) | pipeline_open_aging_buckets |
| Untriaged-past-SLA threshold and stale-lead predicate confirmation (Sales' reply confirmed these); Platform wires next round | P3/XS (Platform wires) | untriaged_past_sla_count, stale_lead_count (2 metrics) |
Delivery — gates ~5 metrics
| Ask | Priority / Size | Gates |
|---|---|---|
cancellation_reason_code enum dimension surface on Delivery silver (Delivery's ack confirmed the column exists with a legacy text fallback path); Platform wires the per-reason breakdown next round |
P2/S (Platform wires) | lesson_cancel_count by reason |
rebook_lock_lead_time_days join shape (Delivery confirmed: lesson.start_at − reservation_lock.held_at); Platform wires next round |
P2/S (Platform wires) | rebook_lock_lead_time_days |
time_to_first_delivery_lesson_days join through participant/customer (Delivery confirmed); Platform wires next round |
P2/S (Platform wires) | time_to_first_delivery_lesson_days |
Customer survey surface for customer_satisfaction_of_coach — currently null:upstream_unavailable; activates when a customer-feedback table lands |
P3/L (Delivery) | 1 metric |
Coaching — gates ~4 metrics
| Ask | Priority / Size | Gates |
|---|---|---|
Capability tagging (formal capability taxonomy on Coach) for coach_idle_hours_by_capability — currently null:not_applicable per Coaching's ack |
P3/M (Coaching) | 1 metric |
Coach employment history table (start date, first-active date, quality signal source) for coach_ramp_time_days, coach_tenure_distribution, coach_quality_score — currently null:upstream_unavailable |
P3/L (Coaching) | 3 metrics |
Coach survey surface for coach_satisfaction_of_platform |
P3/L (Coaching) | 1 metric |
Revenue — gates ~3 metrics
| Ask | Priority / Size | Gates |
|---|---|---|
revenue_deferred_release_schedule silver face (per-reservation deferred balance, expected release week, release_status enum); Revenue's commitment is in-flight under the Postgres initiative |
P2/M (Revenue) | revenue_deferred_release_schedule |
refund_type discriminator at silver (operator_refund vs chargeback per Square dispute path); Revenue's commitment is accepted, wiring at silver conforming step |
P3/S (Revenue) | revenue_chargeback, revenue_refunded split refinement |
Finance — gates ~9 metrics
| Ask | Priority / Size | Gates |
|---|---|---|
Publish v2.0.x sub-section manifests as compute develops: unit_economics, cac_payback, ltv, cohort_summary, customer-journey-audit per Finance v2.0.0 README |
P2/L (Finance) | revenue_concentration refinement (top-N decision wired this round, but the per-customer customer_id surface needs Revenue exposure for it to fully populate), ltv_per_first_lock_cohort, ltv_to_cac_ratio, cac_payback_weeks, payback_distribution, customer_journey_audit, runway_weeks, burn_rate_per_week, operating_margin |
Operating-expense allocation rule for pnl_summary and operating_margin (cost-of-service + OPEX allocation) |
P2/S (Finance) | pnl_summary refinement, operating_margin |
_cash_pooling_model declaration: pooled at organization grain, or held per market? Plus a cash-position upstream feed source |
P2/M (Finance + operator) | cash_position, runway_weeks |
Portfolio — gates ~3 metrics
| Ask | Priority / Size | Gates |
|---|---|---|
The three v1.1.0 families (cross_market_performance, cross_discipline_performance, portfolio_level_funnel_health) clearing the 7-day soak so health_composites unblocks |
P2/M (Platform soak observation) | org_market_health, org_health, portfolio_health (composite computes) |
org_market_id as a conformed silver column on growth.touchpoint, revenue.credit_reservation, delivery.attendance (optional refinement; today Portfolio spine-derives) |
P3/M (each domain) | reduces compute overhead but doesn't gate any specific metric |
Cross-domain wiring done this round
Wired into lib/mart/sections/finance.ts (commit landing this push):
- contribution_margin:
gross_margin − attributable_ad_spendwhere attributable_ad_spend is the paid-source-class slice of Growth's ad_spend. Period-aligned (lesson-week numerator, ad-spend-week subtractand; mapping rule documented in_attribution_window_for_cac_paybacknotes). - pnl_summary (v0): recognized revenue, coach compensation (COGS), ad spend (S&M), contribution margin. Three grains: per-org × per-month, per-portfolio × per-month (rollup with sum), and per-org-market × per-month (per Finance's grain rules). Operating-expense lines remain null:upstream_unavailable until Finance ships the allocation rule.
- cac_per_first_lock: Growth
ad_spendallocated to first-lock cohorts. Readssales.lead_stage_historyfor first-lock counts per intake-week, divides into the intake-week-anchoredad_spendwindow. Cohort grain. Source-class split via the ad_spend per-source-class breakdown.
What stays at not_started after this round
The long tail of ~50 metrics remaining at not_started divides roughly:
- ~20 metrics gated on the silver extensions enumerated above (Growth attribution dbt extension, Delivery cancel-by-reason + rebook + first-delivery joins, Revenue deferred-release silver, etc.).
- ~10 metrics gated on Finance's v2.0.x manifest filings (ltv, cac_payback, customer_journey_audit, unit_economics refinements).
- ~5 metrics gated on infrastructure that doesn't exist yet in Sguild (customer/coach surveys, operating-expense allocation, cash-position feed).
- ~5 metrics are derivations that fall out once their inputs reach beta (gross_margin_pct components, etc.).
- ~10 metrics are second-order refinements (per-source-class splits, per-creative splits) on already-beta-aliased metrics.
How to respond
Each domain please review the per-section asks named above. Default-accept by 2026-06-09 — silence reads as agreement with the asks as written. If a sequence is different or a priority is wrong, file a reply on this thread.
If a silver extension lands during the response window and you'd like Platform to immediately pick up the dependent compute, flag on this thread when the migration ships; Platform monitors the broadcast.
If a metric I've described as "gated on X" is actually already wireable (i.e., I've missed an existing silver column), flag it. The schema-check-before-claim discipline pattern from today's three same-day catches applies — I may have missed silver columns the same way I missed the v1.4.0 contract.
References
- Parent broadcast:
2026-05-19-platform-mart-100-percent-deployment-per-domain-asks - Today's silver-landing memos:
2026-05-19-growth-ad-spend-silver-creative-column-landed(Growth)2026-05-19-coaching-mart-100-percent-deployment-ack(Coaching utilization derivation)2026-05-19-delivery-mart-100-percent-deployment-ack(reschedule + 7 schema confirmations)2026-05-19-revenue-mart-100-percent-deployment-reply(3 commitments)2026-05-19-sales-mart-100-percent-deployment-asks-response(cohort-triangle pushback)2026-05-19-finance-mart-registry-per-metric-metadata-review+ finance-mart v2.0.02026-05-19-portfolio-mart-v1-2-published
- Platform commits on platform main, latest
chore(cowork): auto-commit 3 files @ 2026-05-19 12:06:57Z - Operator invariant:
feedback_no_dates(continuous deployment without dated commitments)