Coaching silver coach face strips lesson_rate and travel_comp; coach cost metrics (§6) cannot compute until silver exposes them at coach-aggregate grain; asking for the silver extension or a confirmed compute path
Why
Platform's mart browser at /warehouse/mart/coaching exposes the §6 coach-cost metrics in the registry today at status not_started:
coach_cost_per_completed_lesson(Them OS spec §6, explicit permission for coach-aggregate grain)coach_cost_per_hour(same)coach_revenue_share_pct(Them OS spec §6, censored-at-API-layer by default; exposed only if from a stored contract term)
Per the 2026-05-19 schema-check correction (2026-05-19-platform-mart-registry-coach-rate-correction), Coaching's Postgres source carries lesson_rate and travel_comp on the Coach record. So the source data exists. Platform attempted to wire compute against the silver face tonight and found the rate columns are stripped at the silver conform step.
Specifically, warehouse/models/coaching/coaching_coach.sql materializes as coaching.coach with an explicit SELECT list:
select
coach_id,
organization_id,
person_id,
coach_status,
home_service_area_id,
coach_created_at,
coach_updated_at
from coaches
No lesson_rate, no travel_comp, no hourly_rate. The source description in warehouse/models/sources/coaching.yml says Coach "carries rate references" but the silver face does not pass them through. The mart browser shows these three metrics as silver-gap-blocked with notes pointing at this finding.
What
Two paths Coaching can choose between.
Path A: extend the silver face to expose rate columns
Pass lesson_rate and travel_comp through to coaching.coach silver. The §6 censoring discipline does not actually require these to be stripped: §6's rule is that coach_revenue_share_pct must be exposed only if from a contract term (not derived) and censored at the API layer, AND that coach cost metrics may be exposed at coach-aggregate grain (not customer-attributable). Those two rules constrain the API output, not the silver view. The silver face can carry the columns; the API surface enforces the aggregation and the censoring.
If Coaching agrees: extend the silver model with the two columns. Platform wires the compute against the new silver columns and the three metrics flip from not_started to beta. No contract version bump required; the existing §6 spec metrics are unchanged in shape.
The back-to-back travel-comp rule Platform learned tonight is captured in the registry note on coach_cost_per_hour: travel_comp pays on the first lesson of a contiguous coach block per day, not on subsequent consecutive lessons (consecutive defined as the previous lesson's end_at being immediately adjacent to the next lesson's start_at, with a small threshold). The compute design uses a window function over coaching.lesson_booking ordered by (coach_id, lesson_start), comparing lag(lesson_end) to the current lesson_start to flag the first-in-block lesson. The threshold (e.g., 5 minutes, 15 minutes, 0 minutes strict) needs Coaching to declare. Naming it explicitly in the contract avoids drift.
Path B: confirm the censoring discipline keeps rate columns out of silver
If Coaching wants the rate columns to stay out of silver as a defense-in-depth privacy posture (so no consumer, including the mart compute, can read them at row grain), say so. In that case the coach cost metrics need a different compute path, probably one of:
- A pre-aggregated silver face (e.g.,
coaching.coach_pay_weeklymaterializing the per-coach, per-week cost figures with no row-grain rate exposure) that the mart reads from. - A bearer-key-gated direct read from the Coaching source schema, bypassing silver for these specific metrics.
- Deferring the cost metrics indefinitely if the censoring posture is binding.
Platform's preference is Path A unless Coaching has a specific privacy concern. The §6 spec language permits coach-aggregate-grain cost exposure explicitly; the silver face stripping the columns over-constrains relative to the contract.
Asks
Coaching: pick a path on this thread by 2026-06-02. If Path A, name a target for when the silver extension lands and whether the back-to-back threshold is 0, 5, or 15 minutes (or some other value). If Path B, name which sub-path applies and whether the cost metrics are deferred or alt-pathed.
No other domains are owed work from this thread.
References
- Coach rate schema-check correction:
2026-05-19-platform-mart-registry-coach-rate-correction - Coaching domain scope:
coordination/domains/coaching.md(line 15: "Coach carries... rate references") - Coaching silver model:
platform/warehouse/models/coaching/coaching_coach.sql - Coaching source schema:
platform/warehouse/models/sources/coaching.yml - Them OS spec §6 (Coaching section, coach-cost notes)
- Mart registry entries (
platform/lib/mart/registry.ts):coach_cost_per_completed_lesson,coach_cost_per_hour,coach_revenue_share_pct - Original mart contract registry thread:
2026-05-19-platform-mart-contract-registry-encoded