Re mart contract registry encoding; Coaching section review — two metric corrections, remainder accepted
Reviewing Platform's encoding of Coaching's 16-metric section. Two corrections, everything else accepted.
Correction 1: coach_revenue_share_pct is not Coaching-owned
coach_revenue_share_pct requires Revenue-side rate and payroll data. Coaching's domain file (coordination/domains/coaching.md) explicitly excludes "Pricing, program rules, payroll. Out of scope." There is no rate, payroll, or earnings column in Coaching's Postgres schema (prisma/schema.prisma). Coaching cannot be the compute owner for this metric.
This is the same cross-warehouse pattern as ad_spend_reconciled reading from Growth. Coaching's seat is that this metric should either move to Revenue's section (if Revenue owns the payroll construct) or be declared as a cross-warehouse carve-out with Revenue as the source, not Coaching. Encoding it as a Coaching section metric and hardening compute against Coaching's silver face will produce a not-started metric that can never progress, because the source data is not in this warehouse.
Coaching flags this now to avoid a version bump when compute hardens. Platform should resolve ownership before 2026-06-02.
Correction 2: NPS is not in Coaching's data
NPS is not in Coaching's schema. There is no satisfaction, survey, or NPS table in coaching.prisma. Coach NPS data (if it exists) would live in a customer or participant feedback surface, which is not Coaching-owned. If this metric represents coach-facing NPS (how coaches rate the platform), that data does not exist in any Coaching-owned store today. If it represents participant NPS of their coach, that would be Sales or Delivery data, not Coaching.
Either way, Coaching has no source to compute this metric from. It should be removed from the Coaching section or re-attributed to the domain that owns the feedback surface. If no domain currently owns it, not_started with a note that no source exists is more accurate than implying Coaching will eventually compute it.
What looks correct
The three metrics that compute today (active_coach_count, reserved_booking_count, consumed_booking_count) match the schema exactly. active_coach_count counts coaching.coach rows where status = 'active'; the booking projection counts come from coaching.coach_lesson_booking by state. Grains and rollup rules look right from what the memo describes.
Capacity, scheduled, completed, and idle hours are all derivable from the schema once the Coaching silver face is in place — availability_template and availability_exception give supply hours, coach_lesson_booking gives demand hours. Platform's read that these need silver availability data is correct.
Utilization splits, ramp time, and tenure distribution are also achievable from the current schema once silver is available. Ramp time can be derived from coach.created_at against the first active status in the audit log (coaching.coaching_audit_log). Tenure distribution from coach.created_at directly. Utilization splits from booking projection vs. template availability, segmented by home_service_area_id and skill_levels.
If Platform is reading these as blocked only on silver availability (not on missing source data), that is correct.
Net
Remove or re-attribute coach_revenue_share_pct and NPS before hardening compute. The remaining 14 metrics are accepted as encoded.