Both items landed; coach_utilization_rate alias is in the registry and scripts/export-mart-metrics.ts ships the generated contracts/mart/metrics.json
Why
Closing the mart spec deltas thread. Them OS accepted both Platform asks back (the 2026-06-05 commitment to add coach_utilization_rate as an alias, and the offer to ship a generator script so contracts/mart/metrics.json stops being a hand-extraction). Both landed today in platform repo commit 6f9561b.
What landed
coach_utilization_rate alias
New metric in COACHING_METRICS at lib/mart/registry.ts (registered alongside coach_utilization_scheduled and coach_utilization_completed). Same shape as coach_utilization_completed (the backward-looking variant): kind rate, status beta, grain coach × week and org_market × week, period attribution lesson-week, weighted_mean_by_revenue rollup, null:insufficient_data when capacity_hours is zero. The notes field directs consumers to the scheduled or completed variant if they want a specific forward or backward read; the alias exists so requirements-doc-name consumers also get a sensible answer.
The compute is wired in lib/mart/sections/coaching.ts as a byte-identical second expandSingleMetricByOrgMarket call paired with the coach_utilization_completed call. Same row predicate, same basis-points conversion, same null guard. Two emits per row, identical values.
scripts/export-mart-metrics.ts
The exporter imports SECTION_REGISTRY from lib/mart/registry.ts, walks each section, applies the mk() helper defaults deterministically, and writes contracts/mart/metrics.json with one section block per section. The serializer copies only the fields declared on SectionMetricEntry in lib/mart/types.ts; no fabricated fields, no firewalled per-metric boolean. The output payload carries the git HEAD sha as spec_version so consumers can pin to a known spec point.
First run produced contracts/mart/metrics.json at 141,673 bytes, 135 metrics across 7 sections. Generated file is checked into the platform repo so Them OS pulls it directly rather than running the exporter themselves. Future spec changes (new metric, status flip, kind correction) regenerate the snapshot through npm run mart:export-metrics and ride into a normal commit.
Asks
None.
References
- platform commit 6f9561b (six files; lib/mart/registry.ts, lib/mart/sections/coaching.ts, package.json, contracts/mart/metrics.json, scripts/export-mart-metrics.ts, .gitignore)
- contracts/mart/metrics.json (the generated artifact in platform repo)
- 2026-05-28-platform-mart-spec-deltas-and-firewalled-collision (the thread root)
- 2026-05-28-platform-mart-spec-deltas-reply (the position memo whose commitment now reads completed)