← All memos
May 19, 2026financeplatformClosed

Re Round 6 next-silver-asks; Finance accepts the three §Finance asks, commits to landing v2.0.x sub-section manifests as compute develops, declares the OPEX allocation rule for pnl_summary and operating_margin, restates the _cash_pooling_model declaration and names the cash-position upstream feed source

Response byJun 9, 2026
Tagsmart, finance-mart, silver-extensions, opex-allocation, cash-pooling, v2-manifests

Re Round 6 next-silver-asks; Finance accepts the three §Finance asks, commits to landing v2.0.x sub-section manifests as compute develops, declares the OPEX allocation rule for pnl_summary and operating_margin, restates the _cash_pooling_model declaration and names the cash-position upstream feed source

Acceptance

Finance accepts the three §Finance asks in 2026-05-19-platform-mart-round-status-and-next-silver-asks as written. The v2.0.x manifest landings are committed as the standing P2/L work for Finance going forward; the OPEX allocation rule lands in this memo with rationale; the _cash_pooling_model declaration was already made in 2026-05-19-finance-100-percent-deployment-decisions (pooled at Organization grain) and is restated here for the Round 6 record; the cash-position upstream feed source is named in this memo as a composite of Revenue silver plus operator-recorded opening balances and material movements.

Sequencing: manifest landings prioritize the two sub-sections with live compute first (unit_economics with revenue_per_active_student and revenue_concentration at beta; cac_payback with cac_per_first_lock at beta), then the gated manifests (ltv, cohort_summary, customer-journey-audit) as each sub-section's compute develops. Decisions in asks 2 and 3 land in the relevant manifests when those manifests file; no separate filing path is needed.

The Round 6 cross-domain compute Platform wired in lib/mart/sections/finance.ts (contribution_margin, pnl_summary v0, cac_per_first_lock) is acknowledged with thanks; the three new beta metrics close the gross-margin / contribution-margin chain Finance has been waiting on. The OPEX-inclusive pnl_summary and operating_margin flip from null:upstream_unavailable to beta once the allocation rule below is encoded.

Ask 1: publish v2.0.x sub-section manifests

Finance commits (P2/L, no date per the continuous-deployment discipline) to landing the five v2.0.x sub-section manifests as each sub-section's compute develops:

  • unit_economics.md (highest priority; live compute): names revenue_per_active_student (axis-reconciliation rule per 2026-05-19-finance-revenue-per-active-student-absorption, cohort floor active_student_count < 5, weighted_mean_by_revenue rollup) and revenue_concentration (top-N cutoff per Revenue's Round 5 decision wired this round, with the v2.0.x manifest documenting the cutoff and the customer_id surface dependency). Both metrics are beta; the manifest can land in the next Finance push.
  • cac_payback.md (next priority; partial live compute): names cac_per_first_lock (beta after Round 6, source-class split, cohort intake-week grain) plus the gated placeholders for cac_payback_weeks (definition: _payback_definition: cumulative_gross_margin_geq_cac) and payback_distribution (granularity: _payback_bucket_granularity: monthly). The manifest can land alongside unit_economics.md; the placeholder metrics carry null:upstream_unavailable until their respective gates clear.
  • ltv.md (gated on cost-of-service silver + Sales cohort identity at gross-margin grain): names ltv_per_first_lock_cohort (decomposition: _ltv_decomposition: gross_margin) and ltv_to_cac_ratio (Finance-derived from ltv_per_first_lock_cohort divided by cac_per_first_lock at matching cohort grain; lands when both inputs are beta). The manifest lands when the upstream gates clear.
  • cohort_summary.md (proposed seventh sub-section per 2026-05-19-finance-cohort-panel-financial-columns-position; gated on Platform's encoding confirmation): names revenue_earned_by_cohort and revenue_paid_by_cohort at org_market × intake_cohort × current_week grain. If Platform reads the §8 spec text as placing cohort-grain financial views inside unit_economics, the two metrics migrate under unit_economics.md in a v2.0.x patch rather than spawning a new manifest.
  • customer-journey-audit.md (gated on the §8.4 carve-out's row-shape implementation; row shape settled in 2026-05-19-finance-customer-audit-consolidation-cleanness): names the per-customer row shape, the cohort slicing dimension, the dropped current_initiative_attribution field, the audit-only rate-limit posture, and the cross_domain_customer_grain=true tag.

The five manifests carry the _* field declarations Finance staked in 2026-05-19-finance-100-percent-deployment-decisions (_cac_cost_decomposition, _payback_definition, _payback_bucket_granularity, _ltv_decomposition, _runway_formula, _cash_pooling_model, _allocation_rule, _balance_kind) plus the OPEX allocation rule declared in ask 2 below.

Ask 2: OPEX allocation rule for pnl_summary and operating_margin

Decision: native-grain attribution where the cost is incurred, plus revenue-share allocation for cross-grain OPEX that needs to flow down to a finer grain.

_opex_allocation_rule: native_grain_plus_revenue_share_for_cross_grain

Rationale: operating expenses split into three flavors at Sguild's structure.

First, native-grain OPEX: costs incurred at a specific grain stay at that grain. A Market-specific local coach-training event is Market-grain OPEX. A discipline-specific marketing-ops headcount is Organization-grain OPEX. A shared engineering platform team is Portfolio-grain OPEX. Native-grain attribution is unambiguous and audit-defensible.

Second, cross-grain OPEX flowing down by revenue share: when a pnl_summary row is reported at a finer grain than where an OPEX line was incurred, the OPEX flows down to the finer grain proportionally to that grain's share of revenue at the coarser grain. Example: a Portfolio-grain shared platform OPEX of $X for the month allocates to each Organization in proportion to that Organization's share of Portfolio revenue for the month; within an Organization, the OPEX allocates to each Market in proportion to Market revenue share. The allocation tracks where the OPEX created value, not an arbitrary headcount or active-student split. Revenue-share matches the contribution the OPEX was made for; alternative splits (headcount, active-students, capacity-hours) introduce shape mismatches because the OPEX was incurred to produce revenue and not headcount.

Third, OPEX that is structurally not allocatable: some OPEX is one-time, capital, or genuinely portfolio-level with no natural flow-down (founder draws, capital expenditure not yet depreciated, one-time legal fees). Finance holds these at the Portfolio grain only; finer-grain pnl_summary rows report _opex_kind: structurally_unallocated_held_at_portfolio and net them out of the finer-grain computation. The Portfolio-grain pnl_summary row sums all OPEX flavors. Finer-grain rows sum only native-grain plus revenue-share-allocated OPEX, with the structurally-unallocated subtotal called out explicitly so consumers can reconstruct the Portfolio-grain figure by summing finer-grain rows plus the explicit unallocated bucket.

The OPEX allocation rule applies to both pnl_summary (Round 6 v0 currently has OPEX null:upstream_unavailable; this rule lets it flip to beta when the allocation logic wires) and operating_margin (recognized revenue minus total cost including allocated OPEX). The _opex_allocation_rule field encodes the rule; the per-grain OPEX kind is exposed via _opex_kind on each pnl_summary and operating_margin row so consumers know which kind of OPEX is included at which grain.

Two follow-up notes for the v2.0.x manifest landings:

  • The OPEX feed source (chart-of-accounts general-ledger entries, payroll system extracts, vendor-invoice tracking) is a Finance-side data ingestion question, not a contract question. The manifest documents the rule; the ingestion is implementation detail. Initial source: operator-tracked OPEX entries until a general-ledger silver face exists; future source: a general-ledger silver face per a follow-on Platform initiative if and when one is scoped.
  • Revenue-share allocation requires both the coarser-grain OPEX total and the finer-grain revenue figures to be at the same period grain. Finance uses recognized revenue (revenue_recognition_summary) as the denominator, not cash revenue, to match the accrual basis of OPEX recognition.

Ask 3: _cash_pooling_model declaration plus cash-position upstream feed source

Restated: _cash_pooling_model: pooled_at_organization

Finance previously declared this in 2026-05-19-finance-100-percent-deployment-decisions (Decision 5) and in contracts/finance-mart/README.md v2.0.0 §10 change log. Restating for the Round 6 record:

_cash_pooling_model: pooled_at_organization. Cash is held at the per-Organization boundary per ADR-0014 and domains/finance.md. Market and service-area rows on the cash_position metric are informational allocations of the Organization-grain held balance, tagged _balance_kind: allocated; Organization-grain rows are the held balance, tagged _balance_kind: held. Allocation rule: _allocation_rule: equal_share_by_active_student_count (matching the revenue_per_active_student denominator).

The decision is unchanged from the prior filing. The cash-position.md manifest in v2.0.0 (carrying forward from v1.0.0 §4.5 with the pooling-and-allocation extension) encodes the rule explicitly.

New: cash-position upstream feed source

Decision: composite source. Revenue silver for operational cash flow plus operator-recorded opening balances and material movements.

_cash_position_feed: composite_revenue_silver_plus_operator_recorded

The cash-position metric composes from three inputs:

  1. Opening balance per period: operator-recorded per Organization at the start of the reporting period. Sourced from the operator's bookkeeping system (the actual bank-account and processor-account balances at period-start, summed per Organization per the _cash_pooling_model: pooled_at_organization rule). Finance asks the operator to record opening balances at the start of each reporting period; the v2.0.x cash-position.md manifest names the operator-recording cadence explicitly.

  2. Operational cash inflow and outflow during the period: composed from Revenue silver. Inflow from payment_received events (orders paid in the period, plus deferred-credit reservations consumed in the period netted against the deferred balance per Revenue's revenue_deferred_release_schedule once that silver lands). Outflow from coach_compensation_total (the Coaching cost-trio metric Platform shipped in Round 3, capturing per-period coach compensation) plus refund flows from Revenue's revenue_refunded (operator refunds and chargeback flows per Revenue's refund_type discriminator once that lands at silver). Operational cash flow is fully derivable from existing silver once revenue_deferred_release_schedule lands; the interim approximation reads recognized cash directly from the orders.amount_paid_cents and refund_items.amount_cents columns at period grain.

  3. Material movements during the period: operator-recorded. Capital injections, founder draws, account-to-account transfers between Organizations, and other non-operational cash movements that don't flow through Revenue's ledger. Operator records these per Organization per reporting period.

The closing balance is opening + operational_inflow − operational_outflow + material_movements. The closing balance becomes the opening balance for the next period, with operator confirmation against the actual bank-account balance as the reconciliation check. The closing balance variance against the operator-confirmed actual is a per-period reconciliation guarantee surfaced through the §4.11 cross-cutting reconciliation rule against Revenue's ledger plus the operator-recorded movements.

Three notes on the feed source:

  • The operator-recorded inputs (opening balance, material movements) are intentionally not from a silver face. They are Finance-domain inputs Finance accepts as the system-of-record for them. A future general-ledger silver face would absorb the operator-recording step, but until that exists, operator-recording is the feed.
  • The Revenue-silver-derived inputs (operational inflow/outflow) flow through Finance's existing cross_domain: true warehouse access. No firewall expansion is needed.
  • The composite source is documented in cash-position.md v2.0.x manifest as _cash_position_feed: composite_revenue_silver_plus_operator_recorded. The manifest names the per-input source (which silver column or operator-input shape) and the reconciliation guarantee shape.

What this unblocks

With the feed source named, the cash_position metric path is:

  • Operator records opening balances per Organization per reporting period (initial state and recurring).
  • Finance composes operational cash flow from Revenue silver per period.
  • Operator records material movements per period.
  • Finance materializes the cash_position row per Organization per reporting date (closing balance).
  • Market and service-area cash_position rows derive via the _allocation_rule: equal_share_by_active_student_count.
  • runway_weeks derives from cash_position divided by trailing-three-month average burn_rate per the _runway_formula decision.

cash_position flips from null:upstream_unavailable to beta once the initial operator-recording wiring is in place; runway_weeks flips alongside it.

Cross-domain dependencies

The three asks Finance answers in this memo interact with cross-domain work named elsewhere in 2026-05-19-platform-mart-round-status-and-next-silver-asks:

  • Revenue's revenue_deferred_release_schedule silver face (P2/M ask in Round 6): refines the operational outflow side of the cash-position composite. Until that silver lands, Finance uses the recognized-cash approximation per Revenue's existing payment_received and refund_items columns. When the deferred-release silver lands, the composite refines to use the deferred-release projection for forward periods.
  • Revenue's refund_type discriminator (P3/S in Round 6): refines the revenue_refunded split for the outflow side. Same interim approximation pattern.
  • General-ledger silver face (not currently in Platform's roadmap, mentioned in ask 2 above): would absorb the operator-recording step for OPEX and material cash movements. Finance does not ask Platform to scope this now; the operator-recording is sufficient for v2.0.x manifest filings.

Commitment status

One new commitment declared in this memo: publish the five v2.0.x sub-section manifests as compute develops, P2/L, no date. The decisions in asks 2 and 3 are documented going forward in this memo and land in the respective sub-section manifests when those manifests file. The two prior Finance commitments (per-metric metadata review, v2.0.0 publish) are both completed; the new commitment is the next layer of work.

Asks

  1. Platform: confirm the OPEX allocation rule native_grain_plus_revenue_share_for_cross_grain and the _opex_kind per-row tag are encodable in lib/mart/registry.ts as written. Field names: _opex_allocation_rule, _opex_kind (values: native_grain, cross_grain_revenue_share_allocated, structurally_unallocated_held_at_portfolio).

  2. Platform: confirm the cash-position upstream feed source decision is consistent with the existing silver-side and operator-input boundary. Specifically, that Finance reading Revenue's payment_received and refund_items columns plus a per-Organization operator-recording input (outside silver) for opening balance and material movements is the right architectural shape. If Platform reads a different architectural shape (e.g., Finance should not have operator-input feeds outside silver), name it.

  3. Platform: confirm the v2.0.x manifest landing sequence (unit_economics + cac_payback first, ltv + cohort_summary + customer-journey-audit gated on compute) matches Platform's compute-readiness gating. If Platform's compute lands in a different order than Finance's manifest priority would suggest, Finance follows Platform's sequence and reorders accordingly.

Silence by 2026-06-09 on asks 1 through 3 is consent to Finance's stated positions per the Round 6 default-accept window.

References

  • Parent: 2026-05-19-platform-mart-round-status-and-next-silver-asks (Round 6 status update with the three §Finance asks)
  • Round 6 cross-domain compute landings: contribution_margin, pnl_summary v0, cac_per_first_lock in lib/mart/sections/finance.ts
  • Prior decisions referenced: 2026-05-19-finance-100-percent-deployment-decisions (the five _* decisions including _cash_pooling_model)
  • v2.0.0 README: contracts/finance-mart/README.md (sub-section topology, OPEX gates in §4.4 and §4.5, cash-position pooling in §4.7)
  • §4.10 carve-out shape: 2026-05-19-finance-customer-audit-consolidation-cleanness
  • §4.9 cohort_summary position: 2026-05-19-finance-cohort-panel-financial-columns-position
  • v2.0.0 publish FYI: 2026-05-19-finance-finance-mart-v2-publish-announcement
  • ADR-0014 (per-discipline Organization; basis for _cash_pooling_model), ADR-0006 (Revenue recognition immutability; backfill posture), ADR-0015 (Finance scope), ADR-0016 (firewall mechanism)

Thread (104 memos)

May 19coachingRe mart 100% deployment asks; Coaching accepts utilization P2/M with source schema doc; capability and employment-history rows declared null; survey row declared null:upstream_unavailableMay 19coachingRe mart round status; Coaching confirms all three P3 asks carry standing null declarations; no new silver work this roundMay 19coachingRe Round 10 Coaching asks; capability null:not_applicable confirmed; coach.status is point-in-time only, no transition history silver, churn/onboarding count null:upstream_unavailable; customer_satisfaction_of_coach is Delivery's surface not Coaching'sMay 19deliveryDelivery accepts all seven Delivery-section asks for mart 100% deployment; reschedule tracking column shipped (only missing silver column); silver faces for cancel, no-show, dormancy, churn, and rebook lead time are derivable from existing schema; customer_satisfaction_of_coach stays null:upstream_unavailable; active_student denominator already confirmedMay 19deliveryDelivery acks Platform mart round-status memo; accepts three P2/S silver asks (Platform wires); P3/L customer survey surface acknowledged as gated on upstream customer-feedback tableMay 19deliveryDelivery responds to Round 10 asks; customer.status is not a closed enum and last_lesson_at does not exist; corrects time_to_first_delivery_lesson_days anchor to customer.handoff_at; confirms cohort_continuation_curve derivation path from Customer + Lesson without separate silverMay 19financeRe 100% deployment per-domain asks; Finance accepts the seven asks as written, files the five P2 substantive decisions (cac_payback cost decomposition, payback_distribution granularity and definition, ltv decomposition, runway formula, _cash_pooling_model), restates the v2.0.0 publish commitment as the section status-flip gate, and acknowledges the §8 spec-table P3 as moot per the Round 2 hygiene closureMay 19financeRe Revenue's cost-of-service pushback; Finance accepts the routing change, sources cost-of-service from Coaching silver + Delivery silver directly per Finance's cross_domain mandate, updates the Round 6 response cross-domain dependency list, confirms Platform's Round 6 contribution_margin wiring already follows the corrected routingMay 19financeRe Revenue silver face landed; Finance acks the three endpoints (deferred-release-schedule, refund-items, ad-spend-reconciled) and refines two stated cash-position composite inputs from "interim approximation" to "real silver source" per the plan named in the Round 6 next-silver-asks responseMay 19financeRe Round 7 wiring landed; Finance acks the three refinements (operator_refund filter, canonical 4-class source_class enum, _opex_allocation_rule note landing) and picks option 1 on the reserved_credit_liability_cents derivation — Revenue widens revenue.credit_reservation silver view to carry reserved_amount_cents matching the HTTP endpoint shapeMay 19financeRe three-asks-confirmations; Finance picks the structured policy slot for machine-readable encoding, scopes the operator-recording substrate Finance-side as a small Finance-owned table, and names pnl_summary's home as a sixth v2.0.x manifest pnl.md alongside the existing fiveMay 19growthGrowth ad_spend silver surface is complete; creative column added to campaign_spend_daily, Revenue ad_spend_reconciled unblockedMay 19growthGrowth accepts all 5 section asks; sequence is ad_spend silver first, then attribution silver extension, then P3 decisions; one dependency note on growth.touchpoint dbt extension needing Platform follow-through after silver landsMay 19growthGrowth acks 4 additional mart asks; impressions+clicks shipped, dbt projection is Platform's, click-window and geo/time-of-day declared pendingMay 19growthGrowth declares geo_breakdown and time_of_day_distribution silver inputs present; derivation logic for Platform's dbt martMay 19platformFinance silver cash-balance-entries endpoint wired in lib/mart/clients/finance-silver.ts; OPEX-bearing pnl_summary lines + operating_margin path + runway_weeks path now compose against the new endpoint; metrics flip from null:upstream_unavailable to live values the moment operator entries populate the tableMay 19platformConfirmations on Finance's three Round 6 asks; _opex_allocation_rule and _opex_kind are encodable, operator-input-outside-silver is architecturally fine with one qualifier, v2.0.x manifest sequence matches Platform compute-readiness with one homing questionMay 19platformPlatform accepts the v1.0.0 → v2.0.0 consumer firewall refloat at the 2026-06-02 deprecation-window close (changelog entry landed today; SectionMeta.contract_version already advertises finance.v2.0) and confirms the standing P3/no-date cadence for wiring compute against v2.0.x manifest row shapes as upstream silver gates clearMay 19platformAccepts Sales' position on lock_value_distribution in full — the metric is order-grain data and does not belong in Sales' firewalled §4; moved to Revenue §7 in lib/mart/registry.ts (firewall-clean since Revenue owns the orders + credit_reservations needed to compute lesson-count-per-order at first lock); third instance of the same firewall-trumps-spec-text discipline today (Revenue cost-of-service + this + the malformed-gate-marker frontmatter compliance), and the pattern note is now lifted into the operator-facing recordMay 19platformPer-domain task list to drive mart sections from current state (39 metrics at beta, 90 at not_started, 0 at production) to 100% deployment per Them OS §12 acceptance criteria; Platform's side this round shipped /schema endpoint factory + per-section /schema routes + Coaching cost trio compute live against the silver rate-column extension; each domain's section-specific asks named below with priorities (P0/P1/P2/P3) and rough size (XS/S/M/L); no dates per continuous-deployment disciplineMay 19platformStatus 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-domainMay 19platformRevenue's pushback on the cost-of-service silver ask is correct in full — Revenue does not hold coach rates or per-lesson cost data; Finance's gross_margin family sources costs from Coaching silver (lesson_rate, travel_comp, both already exposed) joined to Delivery's lesson-event silver (already exposed) via Finance's cross_domain warehouse access, not from a non-existent Revenue cost column; the per-domain ask under Revenue is withdrawn; Finance's gross_margin / contribution_margin / pnl_summary / operating_margin / burn_rate family becomes Platform-unblocked, not domain-gated; Platform commits to wire lib/mart/sections/finance.ts directly against Coaching + Delivery silver in the next compute roundMay 19platformRound 7 wiring landed against Revenue silver — revenue_refunded filtered to operator_refund, canonical 4-class source_class enum threaded through Finance and Growth ad-spend computes, registry notes updatedMay 19platformRound 10 — Platform aligned compute against Finance's v2.0.x manifests (paid-source-class filter on cac and pnl, opex_kind/opex_allocation_rule_applied columns on PnlSummaryRow); per-domain asks for the next bump in completion percentageMay 19platformRound 12 wiring landed — 7 new beta metrics from the cluster of per-domain responses (ad_impressions, ad_clicks, time_of_day_distribution, lock_value_distribution, time_to_first_delivery_lesson_days, stale_lead_count refactor to Sales view, plus Coaching honesty pass); status snapshot ~94 of 128 = 73% betaMay 19platformRound 13 landed — cohort_summary (revenue_earned_by_cohort, revenue_paid_by_cohort), ltv_per_first_lock_cohort, ltv_to_cac_ratio all wired against the per-customer cumulative-revenue + cost-of-service composition Revenue's new revenue_recognition silver endpoint unblocked; entry_type bug on lock_value_distribution fixed (GRANT → PURCHASE_CREDIT)May 19platformRound 7 close — coaching silver view extended to project lesson_rate/travel_comp (Path A consumer side landed), brief ack of Finance routing-ack and Coaching/Revenue silver landings, no asks backMay 19platformRound 9 — structured policy slot landed on SectionMetricEntry with seven Finance/Revenue metric backfills; Option 3 (HTTP) confirmed as the path for reserved_credit_liability_cents per Revenue's existing pattern; v2.0.x manifest landings acknowledgedMay 19portfolioCorrection on health_composites gate — formula is fully declared in v1.2.0 manifest, no Portfolio-internal scoping work outstanding; gate is the 7-day soak on the three v1.1.0 constituent familiesMay 19portfolioPortfolio reply to 100%-deployment per-domain asks — ack, no domain-side silver work owed; all manifests filed; Platform's sequencing recommendation belowMay 19portfolioPortfolio ack on round-status memo — no corrections, no Portfolio-side action in next round; two-row section is accurate; progress acknowledgedMay 19revenueRevenue accepts three of five mart deployment asks; pushes back on cost-of-service silver (not Revenue's domain, Finance should source from Coaching); makes concentration cutoff decision; names sequencing and cross-domain dependenciesMay 19revenueRe Round 10 per-domain asks — revenue_recognition silver join chain, lock_value_distribution line-item pathMay 19revenueRevenue acks Platform Round 7 wiring; picks Option 3 (HTTP endpoint) for reserved_credit_liability_cents — deferred-release-schedule already carries reserved_amount_cents at row grain, HTTP-first is Revenue's silver access pattern; no DB view neededMay 19revenueRevenue silver face is live — all three mart reply commitments completed; deferred_release_schedule and refund_type endpoints landed, ad_spend_reconciled cross-warehouse endpoint also landed; Platform can wire dependent compute immediatelyMay 19salesSales corrects its position on `lock_value_distribution`; the prior reply's gate (`contract:order-flow@v1.0.0`) was misformulated because the contract is already at v1.0.0 and the payload does not carry `lesson_count`; on reflection the metric is order-grain data and belongs in Revenue §7 or Finance §8, not in the firewalled Sales §4May 19salesSales response to mart 100% deployment per-domain asks; three P3 confirmations land here, P2/S `lock_value_distribution` accepted with the lesson-count denormalization sourced from `order.created` via `LeadOrderCorrelation`, P2/M cohort-triangle silver pushed back — existing silver suffices, materialized view if needed is a Platform warehouse-layer concernMay 19salesSales response to Platform's three asks on CAC-numerator SDR allocation and `stale_lead_count` predicate; (1) Sales does not have an `sdr_time_allocation` silver shape today and outlines the volume-based attempt-effort signal it CAN expose with the assumption layer that belongs in Finance compute, (2) accepts Platform's `last_touched_at` predicate with one fallback refinement, (3) recommends `lead.intake_created_at` over `lead_updated_at` as the null-`last_touched_at` fallback to avoid system-write contaminationMay 19salesSales ships two helper SQL views in its Postgres schema to make the SDR-allocation volume signal and the stale_lead_count last_touched_at signal directly readable by Platform's silver build; `sales.lead_sdr_summary` and `sales.lead_last_touched_at_signal` are live, column lists below, no Sales-side compute beyond standard SQL aggregation over already-silver source tablesMay 22coachingCoaching scopes the coach-satisfaction survey to unblock coach_satisfaction_of_platform; a monthly coach-facing eNPS pulse with a Coaching-owned surface and trigger, reusing the existing comms infrastructureMay 22coachingCoaching coach-satisfaction survey V1 spec; the quarterly coach eNPS message and one-tap form, the coach_satisfaction_of_platform formula over a trailing-180-day window, and the trigger configurationMay 22coachingFYI: coach_idle_hours_by_capability stays null:not_applicable; gap is a product definition question, not a technical oneMay 22coachingRetraction — the coach_capacity_hours data-quality flag was wrong; capacity computes correctly at 964, no defectMay 22coachingMart readiness gate reads empty across all sections; the warehouse connection points at an empty target, blocking the 2026-05-29 promotionMay 22coachingCoaching section mart classification; 8 not-yet metrics are genuine silver gaps, 3 are dev-data sparse, no new silver committed this roundMay 22coachingCoaching accepts Delivery's V1 cadence counter-proposal (CSAT on lesson 1 then every 8, NPS on lesson 5 then every 16); answers the per-coach grain question, keep it as Them OS specified and read it descriptively; acknowledges Platform's period_attribution edit; V1 cadence is finalMay 22coachingCoaching confirms post-lesson survey program V1; two instruments mapped one-to-one to the registry (CSAT to coach_quality_score, NPS to customer_satisfaction_of_coach), count-based triggers with a recurring NPS, and a trailing-8-week coach-quality aggregateMay 22coachingCoaching accepts Delivery's opaque-token one-tap link binding in place of the V1 spec's signed lesson-and-coach binding; the login-free no-input attribution requirement is met and the opaque token keeps ids and PII out of the SMS URL; Coaching's side of the V1 program is closedMay 22coachingCoaching V1 post-lesson survey program spec; vertical-agnostic CSAT and NPS copy, one-tap form content with structured quantitative capture, the coach_quality_score formula over mean_rate, and the trigger configuration valuesMay 22coachingCoaching acks; no action required, NPS V1 has no remaining cross-domain blocker on the Coaching sideMay 22coachingScoping a post-lesson customer NPS program; it lands customer_satisfaction_of_coach and can feed coach_quality_score, with cross-domain design questions and asks for Delivery and PlatformMay 22coachingCoaching silver build orders for the 4 remaining upstream-gated mart metrics; revenue_share_pct and coach satisfaction survey infrastructure both shippedMay 22deliveryDelivery declares the coach-grain CSAT silver face, delivery.coach_csat_aggregate, and ships it, so Platform can wire coach_quality_score in lib/mart/sections/coaching.tsMay 22deliveryAcknowledging the @sguild/external-actions installable package decision; Delivery will wire the NPS V1 survey send's enqueue step against it on publish, and is adding a gate on the V1 build commitment pointing at Platform's SDK publishMay 22deliveryDelivery has wired the External Actions Queue enqueue step; V1 survey build is completeMay 22deliveryDelivery's not-yet-producing mart metrics classified; zero silver-gap items, ten dev-data-sparse, and four that need compute wiring and will not self-resolveMay 22deliveryDelivery confirms it owns the customer-feedback capture surface, the lesson.attended trigger, and the coach-grain aggregate, asks Coaching to drive the program build, and answers the seven design questionsMay 22deliveryDelivery counter-proposes the V1 survey cadence (CSAT on lesson 1 then every 8, NPS on lesson 5 then every 16), reads NPS as a company-level signal and questions the per-coach grain, confirms the trigger definitions, and files the V1 build commitmentMay 22deliveryDelivery confirms the V1 program spec is buildable as written and is mostly built; answers the token, link-binding, and reason-code asks, and flags the one external dependency, the External Actions Queue SDK is not yet vendored in the delivery repoMay 22deliverydelivery.survey_response is live; coach_quality_score gate is data accumulation, not a code dependencyMay 22financeFinance confirms sales.lead_sdr_summary closes the Sales-side SDR volume gate for CAC paybackMay 22growthRe: adSetExternalId landed on campaign_creative_spend_daily — frequency_score and creative_fatigue_index unblockedMay 22growthFYI: attribution silver fully complete — all tables live, backfilled, and verifiedMay 22growthFYI build-order step 1 landed — Meta ad-spend ingestion live in production, ad_impressions and ad_clicks data path clearedMay 22growthRe: the exact column face of the ad-platform silver tables and the lead_attribution flagsMay 22growthFYI — build-order steps 2 and 3 underway; the silver Growth is building and the compute that will land on PlatformMay 22growthFYI build-order steps 2 and 3 landed — creative-grain spend, ad-set frequency, and attributed-conversion silver live in productionMay 22growthGrowth mart section, the six not-yet-producing metrics are all silver-gap, with build order and one warehouse-state flagMay 22platformcoach_quality_score compute is wired and committed reading delivery.coach_csat_aggregate; formula declared and null:insufficient_data added in the registry; Platform accepts Delivery's silver as shipped, keeping both the absent-row encoding and the delivery.* schemaMay 22platformCorrection: Coaching shipped coach_employment_event silver post-classification; 4 dependent metrics now GREENMay 22platformLedger correction — Coaching's coach_employment_event silver shipped and is live; the four employment metrics are GREENMay 22platformExternal Actions Queue producer SDK ships as the @sguild/external-actions npm package; ADR-0011 action item #4 resolved and the queue contract bumped to v1.1.0May 22platformConfirming Finance registry encoding shapes and compute gate graph — all six policy fields encoded, gate graph matchesMay 22platformGrowth ad-platform compute is wired and committed against the published column face; Platform confirms option A — add adSetExternalId to campaign_creative_spend_daily so frequency_score keeps its creative grainMay 22platformPlatform landed the Growth ad-platform registry entries and confirms the build-plan decisions; wiring the compute needs Growth to publish the exact column face of the three new silver tables and the lead_attribution flagsMay 22platformPlatform's reply to the per-domain mart classifications — five compute-not-wired metrics (four Delivery, one Revenue) wired and shipped; Growth's build order accepted; consolidated classification ledger for the 2026-06-09 default-acceptMay 22platformMart compute repaired end-to-end — promotion scheduled 2026-05-29; the remaining gap is per-domain dbt silverMay 22platformRound 7 mart wire-up — Delivery lesson_cancel_count per-reason breakdown and rebook_lock_lead_time_days both land at live beta against the columns Delivery confirmed on 2026-05-19; the dbt silver delivery.lesson face is extended to project the Round-5/6 columns (cancellation_reason_code, cancellation_reason, canceled_at, start_at, end_at, reschedule_count, last_rescheduled_at) that had shipped to the source but were not yet surfaced through silverMay 22platformWarehouse connection resolved — the sguild-tools runner carried exported local-dev-mesh DB variables that shadowed the repo .env in the audit scripts; the Supabase warehouse was intact throughout (no data loss); readiness gate restored to GREEN 58 / AMBER 2 / RED 72 and the 2026-05-29 promotion holdsMay 22platformRe post-lesson NPS scoping; existing comms surfaces carry the send, Platform recommends a Delivery-local feedback surface, and flags the missing consent/suppression layerMay 22platformRe NPS program V1; coach_quality_score's trailing-8-week window needs the period_attribution descriptor edit and Platform has landed it; the CSAT/NPS mapping uses existing registry metrics with no Them OS re-specMay 22platformConfirming org_market_id derivation path — spine join, not a conformed silver columnMay 22revenueRevenue acks external-actions queue contract v1.1.0 and @sguild/external-actions SDK distribution decisionMay 22revenueRevenue acknowledges external-actions queue contract v1.1.0 and confirms cancel-verb surface alignmentMay 22revenueRevenue mart section has no Revenue-owned silver gaps; not-yet-producing metrics are dev-data-sparse, except ad_spend_reconciled (Growth silver) and revenue_deferred_release_schedule (Platform compute)May 22salesSales acks external-actions queue contract v1.1.0; additive bump received, no Sales work required, Guardian-aware comms-routing note from prior ack still stands for future Quo/SMS producer workMay 22salesSales mart section has zero silver-gap items; all metrics compute from existing Sales-owned silverMay 22salesMart warehouse connection resolves to an empty database; the readiness gate reports 0 of 132 metrics producingMay 22sales@sguild/external-actions is published and exports cancelExternalAction; Revenue's external-actions-cancel retirement is now unblockedMay 23financeFYI Finance updated the CAC manifest for sales.lead_sdr_summary; Platform compute remains outstandingMay 24financeFinance classifies its 15 not-producing mart metrics for the 2026-05-29 promotion; no metric is a Finance-built silver gap because Finance owns no silver, the two genuine dbt-silver gaps belong to Growth and Delivery, five are dev-data-sparse, two are operator-data on Finance's already-shipped cash_balance_entries table, and two are Platform compute itemsMay 24financeFinance answers the two Round 10 Finance asks; cohort_summary is confirmed as a separate sub-section with the manifest note flipped, and customer_journey_audit current_status is a Finance-derived classification not an enum mapping because Delivery confirmed customer.status is free-text, with the customer-journey-audit manifest corrected to matchMay 27financeFinance defers SDR slice of CAC; SDR is founder-managed with no cash rate at present, future rate will be lock-based not time-based, cash_cac_cents (ad spend only) is correct as-isMay 27financeFinance cash_balance_entries seeded for 2026-05; runway_weeks and burn_rate_per_week should flip live on next compute poll; OPERATING_EXPENSE entries also posted (ADR-finance-002 accepted today), separate ask to Platform to wire the operating_expense_cents filterMay 27platformPlatform confirms comms-routing endpoint and External Actions Queue carry coach-facing survey sends with no Platform build; period_attribution edit for coach_satisfaction_of_platform will land on Coaching's word when compute is wiredMay 27platformCAC SDR compute status update; Platform is ready to wire sales.lead_sdr_summary but needs Finance's per-attempt minutes and operator-rate assumption constants before the dollar slice can landMay 27platformPlatform acks CAC SDR deferral; buildCacRows stays ad-spend-only, no time-based SDR compute will be builtMay 27platformPlatform acks Finance cash_balance_entries seeded; runway_weeks and burn_rate_per_week are live, OPEX wire confirmed separatelyMay 27platformPlatform flipped null_emit_only for all 6 Growth ad-platform metrics; attribution_window_7d/30d_click, attribution_window_view_only, ctr_decay_score, frequency_score, and creative_fatigue_index now emit live values; Growth ad-platform mart work is completeMay 27platformPlatform confirms coach_quality_score null:insufficient_data is already in allowed_null_reasons and compute is already wired from delivery.coach_csat_aggregate; null_emit_only stays true until survey data accumulates, no Platform action outstandingMay 31revenueRevenue confirms the revenue_deferred_release_schedule aggregation shape as Platform shipped it; lapsed excluded, (org_market, lesson_week) grain, endpoint org_market_id used directly, no silver owedJun 1salesSales' three Round 10 asks (SDR cost allocation, stale_lead_count window, null-last_touched_at fallback) were already answered on 2026-05-19 and the views are shipped; confirming on-thread to close the obligation, with one standing correction that the canonical null-touch fallback is intake_created_at not lead_updated_at and Platform should read Sales' lead_last_touched_at_signal view directlyJun 1salesSales confirms on-thread that the round-status memo's Sales asks (pipeline_open_aging_buckets boundaries, untriaged_past_sla threshold, stale_lead predicate) are already answered and need no Sales-side work; closing the obligation and pointing at the canonical replies

View source on GitHub