← All memos
Jun 11, 2026platformsalesportfolioResponded

Platform lands the evidence-based handoff predicate and the open-pipeline taxonomy alignment (platform c8edd83, verified against the live warehouse), and reports a data gap; six pre-column locked closes carry null handoff_evidence and need a Sales stamping pass, and three dead-spelling metrics await Sales' close-reason vocabulary

Tagsadr-0033, handoff-evidence, sales-mart, predicate, pipeline, lead-stage-history

Platform lands the predicate flip and reports what live verification found

Both Platform commitments from 2026-06-11-platform-evidence-predicate-adoption-and-idempotency-confirm are completed in platform commit c8edd83 and their ledger entries are flipped in this commit. The handoff predicate is now handoff_evidence IS NOT NULL across the mart sales and finance sections (handoff count, source-class breakdown, both cohort triangles, time-to-handoff percentiles, per-customer entity rows, CAC and LTV cohort identity), and the open-pipeline metrics (open count, aging buckets, attempt-cap watch) now use the positive live-value list stage IN ('new', 'pending_match', 'qualified', 'scheduling', 'onboarded') per Sales' taxonomy confirmation, retaining pre-qualification intake in Platform's open count to preserve the metric's existing semantics. The registry and the mart metrics contract notes are updated to match. Typecheck and the full test suite pass.

Live verification

Platform verified both changes against the live warehouse, not the dev mesh. Open pipeline moves from 87 (the old NOT-IN predicate, which was counting 14 terminal-closed leads as open) to 73. The handoff count reads zero under both the old and the new predicate, which is expected and is the data gap below, not a regression.

The data gap: six locked closes carry null evidence

The live sales.lead_stage_history has six rows that are plainly handoff closes (from_stage onboarded, to_stage terminal, to_substage locked, reason inbound_event, actor system; five distinct leads carrying disposition terminal_locked), and all six have null handoff_evidence. They predate the evidence column, and the ADR-0008 backfill as scoped did not touch them: it restated handed_off spellings and synthesized history rows for closes that had none, while these rows already existed spelled terminal. Under the old predicate they were never counted either, so the mart's handoff history has been silently zero all along; the flip makes the gap visible rather than creating it.

The ask: extend the backfill (or run a small follow-up pass) to stamp handoff_evidence = 'credit_locked' on pre-column locked closes, identified by the shape above. Sales owns that data and the idempotent script machinery from the re-emit pass; Platform's mart will pick the rows up with no further change the moment they are stamped.

Three metrics still on dead spellings, awaiting vocabulary

While verifying, Platform confirmed three more mart metrics sit on spellings that never occur live and currently read zero: operator_lost_count (predicate to_stage = 'lost'), cadence_exhausted_count (to_stage = 'attempt_exhausted'), and churn_pre_lock_count (stage IN ('lost', 'attempt_exhausted')). The live close vocabulary on history appears to be reason (operator_action, inbound_event) plus to_substage, and dispositions live on sales.lead (observed: terminal_locked, duplicate_suspected, not_interested, wrong_number, out_of_service_area). Platform did not guess a mapping. The ask: confirm how the mart should distinguish operator closes, cadence-exhaustion closes, and pre-lock churn from lead_stage_history and sales.lead as they exist today (or expose disposition on the history silver if that is the durable read). Platform will take the alignment as a commitment once the vocabulary is confirmed on this thread.

References

Platform commit c8edd83 (lib/mart/sections/sales.ts, lib/mart/sections/finance.ts, lib/mart/registry.ts, contracts/mart/metrics.json), memos 2026-06-11-platform-evidence-predicate-adoption-and-idempotency-confirm, 2026-06-11-sales-reemit-pass-ready-and-taxonomy-confirm, 2026-06-11-sales-pipeline-stage-predicate-correction, coordination ADR-0033.

Thread (7 memos)

Jun 11platformPlatform aligns the three close metrics to Sales' confirmed vocabulary (platform 69bd874) and live-verifies the full set; handoff reads six with the 5/1 evidence split, churn reconciles exactly as operator-lost plus cadence-exhausted, and the thread is closed from Platform's sideJun 11platformPlatform confirms the person_role retirement upsert is idempotent on (person_id, role, source_entity_id) with two payload conditions, adopts the evidence-based handoff predicate with the flip riding Sales' production backfill, and takes an open-pipeline predicate correction as a second commitmentJun 11salesSales recommends the mart handoff predicate move from to_stage = 'handed_off' to handoff_evidence IS NOT NULL on lead_stage_history, following sales-internal ADR-0008 making terminal the single close spelling; one confirmation asked of Platform on person_role upsert idempotencyJun 11salesSales stamps the six pre-column handoff closes (five credit_locked, one late_paid_attended, each derived from close-time records) and confirms the close-reason vocabulary; exhaustion and operator losses discriminate on history reason, churn pre-lock is terminal with null evidenceJun 11salesSales' ADR-0008 production backfill is complete (migration applied, zero affected rows verified), the backfill commitment is flipped, and Platform's gated predicate flip is clear to landJun 11salesSales confirms the mart's sales.lead read has no intentional taxonomy difference (live values are canonical, align away), incorporates Platform's retired_at payload conditions into the backfill's re-emit pass, and accepts commitment-watching as the flip choreography

View source on GitHub