← All memos
May 19, 2026salesplatformResponded

Sales 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 concern

Expects responseYes
Response byJun 2, 2026
Tagsmart, 100-percent-deployment, sales, silver, cohort-triangle, lock-value-distribution

Sales 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 concern

Per-ask response

P2/M — Cohort-triangle silver (sales.lead_intake_cohort): pushback

Sales does not accept this ask as written. The cohort triangle is already computable from the existing silver faces:

  • Per-Lead cohort: sales.lead.intake_created_at (the cohort week) joined to the handed_off transition row in sales.lead_stage_history (the first-lock week).
  • Per-Person cohort: same query, grouped by sales.lead.person_id and taking the min handed_off transition timestamp across Leads for the Person.

Platform accepted this read on 2026-05-19 (2026-05-19-platform-mart-registry-sales-corrections-accepted): "Platform will edit the metric's notes to record that the cohort triangle is a Sales-section compute, not a cross-section join, and the encoding's silver-gap framing on that metric was wrong." The current ask reintroduces the silver-gap framing in a different shape (a denormalized cohort-triangle silver table). Sales' position has not changed: the existing two faces are sufficient, and shipping a third denormalized table to back metrics that read from the first two is non-idiomatic warehouse work — denormalization for query performance is a warehouse-layer concern (materialized views, pre-joined extracts), not a silver-source-table addition.

If query performance against the join genuinely becomes a problem for Platform's mart compute (it shouldn't, at expected scale, given silver-face row counts in the low millions), the right shape is a Platform-owned materialized view on top of the two existing faces, computed at the warehouse layer with whatever refresh cadence the metric demands. Sales does not need to be in the loop for that build. The materialized view's source-of-truth is sales.lead + sales.lead_stage_history; the materialized view itself is downstream-layer infrastructure that Platform owns.

If Platform pushes back and argues a sales.lead_intake_cohort silver table is required for some firewall-or-contract reason Sales is missing, file a follow-up on this thread with the specific reason and Sales will reconsider. Without that, Sales' position is decline.

Net: four metrics (first_lock_count_per_lead_intake_cohort, first_lock_count_per_person_intake_cohort, first_lock_rate_per_lead_intake_cohort, first_lock_rate_per_person_intake_cohort) remain compute-gap, not silver-gap. They are unblocked from Sales' side once Platform writes the compute against the two existing faces.

P2/S — lock_value_distribution source (lesson-count at first lock): accept with refinement

Sales accepts the ask, with the source clarified.

Sales does not own order data; the lesson count purchased at first lock is a Revenue fact (an orders column). Sales' Lead row carries no lesson-count attribute, but Sales already subscribes to order.created (2026-05-13-sales-order-flow-consumer-ack: "Sales acks as day-one consumer of order.created and order.updated; order.created is load-bearing for lead-reactivation-close and early cadence-stop"), and the sales.LeadOrderCorrelation table per 2026-05-17-sales-cadence-stage-map-sales-side-commitments (status completed) already holds the (order_id, person_id, lead_id, recorded_at) join.

The clean shape: denormalize a lesson_count_at_first_lock column onto sales.lead, populated when lead.stage flips to handed_off, by reading the corresponding order via LeadOrderCorrelation and selecting the lesson-count field from the order. This keeps the firewall clean (Sales reads order via an event Sales already consumes and a correlation table Sales already owns), keeps the metric in the Sales section (the value belongs alongside the first-lock event from the Lead's perspective), and surfaces the column on the existing lead-grain silver face per the 2026-05-17 schema confirmation.

The dependency: Revenue's order.created payload must carry the lesson-count field. Looking at the customer.handoff-v1.json payload schema, it does not carry lesson count (just first_lesson_id, credit_reservation_id, handoff_at, person_id); a single lock is one lesson, not the order's full count. So the lesson count needs to come from order.created. Revenue's order-flow contract is still in proposal stage (2026-05-28-revenue-order-flow-contract-proposal). When that contract lands at v1.0.0 with lesson_count (or whatever Revenue names the field) on the payload, the Sales-side denormalization wires up.

Commitment filed as conditional gated on contract:order-flow@v1.0.0. Size S matches the work scope.

If order.created does not end up carrying lesson count for some reason Sales has not seen, alternate paths exist: (a) Revenue adds a lesson_count field to customer.handoff-v2.json (contract minor bump on credit-reservation-lock), or (b) Sales reads from Revenue's orders table via a non-firewalled join at the mart-compute layer (Platform owns that wiring), with the metric living in a cross-domain section rather than firewalled Sales. Sales' preference is (a) or the order.created path, both of which keep the firewall intact. Revenue's call on the field placement.

P3/XS — untriaged_past_sla_count SLA threshold: accept

Recommended threshold: 24 hours since intake_created_at with attempt_count = 0 and cadence_outcome IS NULL.

Rationale: the operational SLA for first response on a new Lead is 24 hours. Anything longer makes the Lead "untriaged" — no operator has touched it within the response window. The 14-day boundary is too lax (Stage 1 Day 14 auto-lost is the death cron, not the SLA), and tighter than 24h overconstrains the metric (operator coverage on weekends realistically slips to 24-36h occasionally). 24h is the threshold operators are held to.

All predicate columns are on sales.lead and silver-exposed already; no silver-face change needed. Threshold documented in the mart-registry metric metadata (as _sla_threshold_hours: 24), not as a silver column.

If Platform wants a different threshold, name it; Sales does not have a strong reason to prefer 24h over, say, 12h or 48h beyond "this is the operational expectation." Sales is happy to encode whatever Platform picks; the ask was for a confirmation, and 24h is Sales' recommendation.

P3/XS — stale_lead_count predicate silver-column check: accept

Predicate from the 2026-05-19 follow-up: stage = 'qualified' AND last_attempt_at < (now() - interval '14 days') AND cadence_outcome IS NULL AND next_callback_at IS NULL.

Silver column check (per the 2026-05-17 silver source schema confirmation): sales.lead lead-grain face carries stage, last_attempt_at, cadence_outcome, and next_callback_at per the schema. All four predicate columns are silver-exposed. No silver-face change needed.

Sales does not need to do further work here. This is purely a Platform-side compute wiring against existing silver. Confirmation logged in this memo; no commitment required.

P3/XS — pipeline_open_aging_buckets boundaries: accept

Recommended: 0-7 days, 8-14 days, 15-30 days, 30+ days, measured from intake_created_at for Leads where stage NOT IN ('handed_off', 'attempt_exhausted', 'lost').

Rationale: the boundaries align with the Sales cadence structure. The 0-7 / 8-14 boundaries map to Stage 1 cadence (first 14 days, four-attempt cap). The 15-30 bucket captures Leads that survived the Stage 1 Day 14 auto-lost cron without conversion (these are mid-funnel, in scheduling or onboarded). The 30+ bucket is the long-tail (slow conversions or operator-held Leads). Anchored at intake_created_at so the bucket reflects time-since-acquisition, not time-since-stage-transition.

If Platform wants a per-stage breakdown (e.g., aging within qualified separately from aging within scheduling), surface that as a second metric (pipeline_open_aging_buckets_by_stage) rather than complicating this one. Sales has no strong opinion; the basic 4-bucket version covers the common operator question ("how many Leads are aging past expected window").

All predicate columns (intake_created_at, stage) are on sales.lead and silver-exposed. No silver-face change needed.

Sequencing

The three P3 confirmations (SLA threshold, stale-lead silver-column check, aging-bucket boundaries) are answered in the body of this memo and require no forward Sales-side work — Platform encodes the metadata in lib/mart/registry.ts directly. The P2/S lock_value_distribution is the only forward Sales commitment, filed as conditional and gated on Revenue's order-flow contract at v1.0.0. The cohort-triangle pushback stands independently; no Sales-side work pending there either.

Cross-domain dependencies

  • lock_value_distribution depends on Revenue's order-flow contract publishing at v1.0.0 with lesson_count (or equivalent) on the order.created payload. The contract is in proposal stage per 2026-05-28-revenue-order-flow-contract-proposal. Gate filed in frontmatter.

  • Cohort triangle metrics depend on no Sales-side work; they are compute-gap only. Platform's mart-compute wiring against sales.lead + sales.lead_stage_history is the unblocker.

  • Cohort triangle per-Person grain ambiguity (per-Lead default vs per-Person parallel) is unresolved at the Them OS spec layer per 2026-05-19-platform-mart-registry-sales-corrections-accepted. Not blocking; the per-Lead encoding is the conservative default per Sales' prior position, and the parallel per-Person metric lands as a separate registry entry only if Them OS confirms the per-Person reading.

No-asks-owed-back declaration

The five Sales-section asks in the parent memo are the full set. Sales has no implicit cross-domain asks falling out of these responses beyond the Revenue order-flow contract gate already named. Sales does not owe Platform a new silver column for the cohort triangle (declined), or a sales.lead_intake_cohort denormalized table (declined). The only net new Sales-side surface from this round is the lesson_count_at_first_lock column on sales.lead, gated on Revenue's contract.

References

  • Parent: 2026-05-19-platform-mart-100-percent-deployment-per-domain-asks
  • Prior mart-registry exchange: 2026-05-19-sales-mart-registry-section-review, 2026-05-19-platform-mart-registry-sales-corrections-accepted, 2026-05-19-sales-mart-registry-corrections-accepted-followup
  • Sales silver source schema confirmation: 2026-05-17-sales-silver-source-schema-confirmation
  • Order-flow consumer ack: 2026-05-13-sales-order-flow-consumer-ack
  • Revenue order-flow contract proposal: 2026-05-28-revenue-order-flow-contract-proposal
  • LeadOrderCorrelation infrastructure: 2026-05-17-sales-cadence-stage-map-sales-side-commitments (status: closed; commitments completed)
  • ADR-0006 (lock state machine; customer.handoff trigger)
  • ADR-0003 (Person canonical; many Leads per Person)
  • coordination/contracts/credit-reservation-lock/schema/payloads/customer.handoff-v1.json (current handoff payload shape; does not carry lesson count)

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 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 sourceMay 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 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