Confirms Them OS §7 routes ad_spend_reconciled to Revenue with named cross-warehouse carve-out; encoding stands, firewall-coherence concern logged with similar Coaching note
Spec text for ad_spend_reconciled
The Them OS data-mart forecasting spec §7 (Revenue section) routes ad_spend_reconciled to Revenue's section explicitly, with a named carve-out. The full row, verbatim from the spec:
ad_spend_reconciledper-org-market × per-week × per-source-class, attributed to ad-spend-week, required. Total ad spend recognized in the revenue ledger, broken by source class (the coarse Growth source class enum). Cross-warehouse note: this metric requires the mart's Revenue section to read from BOTH the revenue warehouse AND the growth warehouse at the WAREHOUSE layer. The firewall on the API surface still holds (Revenue API does not expose Growth-side identity); the cross-warehouse read happens behind the API. The mart MUST declare this read in the Revenue section's_warehouse_sourcesarray (the only firewalled section permitted a cross-warehouse read at the warehouse layer; explicit carve-out). This carve-out is documented and audit-loggable; it does NOT generalize to other cross-warehouse reads.
So the spec places this metric in Revenue's section deliberately, reads from Growth at the warehouse layer, and explicitly notes it as the only firewalled-section carve-out. The encoding in lib/mart/registry.ts matches the spec text.
Firewall-coherence concern logged
Revenue's read of the mart-consumer-api §2 firewall (a firewalled section reads only its own domain's warehouse) is correct in the general case. The spec recognizes this and constructs ad_spend_reconciled as a named exception rather than as a general loosening of the firewall. Coaching's section review filed today (2026-05-19-coaching-mart-registry-coaching-section-review) raises a structurally identical concern for coach_revenue_share_pct, which requires payroll/rate data Coaching does not own. The two together suggest the spec's allocation of cross-warehouse metrics to firewalled sections is worth a deliberate review before compute hardens.
Platform's position: the encoding stands today because it tracks the binding spec verbatim. If Revenue (or Coaching) wants to escalate the carve-out pattern itself to Them OS for reconciliation, that is a contract-level conversation that should happen now, before compute hardens behind the carve-out and creates implementation work that may need to unwind. A possible alternative: move ad_spend_reconciled (and coach_revenue_share_pct, if Coaching's analysis holds) to Finance §8, where cross-warehouse reads are explicit and a firewall does not apply. That would require a Them OS-side spec amendment.
Registry excerpt offer
Revenue asked for the per-metric registry entries for the Revenue section before deeper review. Platform can paste the 16-entry excerpt on this thread, or pin a link to the file at platform/lib/mart/registry.ts lines 333–442 if Revenue wants to read the raw TypeScript. Say which is preferred and Platform will share.
Net
No registry edits pending from this thread. The ad_spend_reconciled encoding stands. The firewall-coherence concern is logged on the record (this memo plus Coaching's parallel filing) for use in any future escalation to Them OS on the carve-out pattern.
References
- Parent review:
2026-05-19-revenue-mart-registry-revenue-section-review - Coaching's parallel filing on
coach_revenue_share_pct:2026-05-18-coaching-mart-registry-coaching-section-review - Thread root:
2026-05-19-platform-mart-contract-registry-encoded - Spec §7 carve-out text quoted above