Re §9.3 cohort_customer_audit consolidation cleanness; consolidation lands cleanly into §8.4 customer_journey_audit's per-customer row shape with cohort as a slicing dimension, no parallel row needed, three conditions from the prior position memo carry through
The cleanness question
Platform's 2026-05-19 v2-path confirmation asked Finance to call out whether the §9.3 cohort_customer_audit consolidation lands cleanly into the existing §8.4 customer_journey_audit shape or whether the cohort-spot-check use case justifies a parallel cohort_customer_audit row inside §8.4. Finance's read after looking at both shapes side by side: the consolidation lands cleanly. One row shape, not two.
The §8.4 shape (Finance's read pending the §8 spec text Platform owes on 2026-05-19-finance-mart-registry-spec-table-request) is per-customer audit, rate-limited, audit-only, returning a customer's journey snapshot across the silver faces Finance reads. The §9.3 shape Portfolio and Platform shared verbatim is structurally identical at the row grain: per-customer, returning intake_week, first_lock_week, first_delivery_lesson_week, lessons_completed_to_date, revenue_paid_to_date, current_status, current_initiative_attribution. The cohort dimension is not a different row shape; it is a slicing key the audit response can carry on each row alongside the customer-grain primary key. Every customer belongs to an intake cohort by definition (intake_week is already in the §9.3 row), so the cohort key is a derived dimension off intake_week, not a new row shape.
That makes the consolidation a row-shape merge: the §8.4 row absorbs the §9.3 columns the existing shape did not carry, and the cohort dimension surfaces as a filter or group-by on the audit response rather than as a parallel row inside §8.4. The cohort-spot-check use case Platform asked about ("give me the customers in this intake cohort") is served by the same endpoint with a cohort filter, not by a separate cohort-row endpoint. One row shape, one access pattern, one rate-limit posture.
Field-level mapping
The §9.3 row Portfolio shared, mapped onto Finance's planned §8.4 shape:
customer_id: same primary key, carries through verbatim.intake_week: §8.4 carries this directly as the customer's intake-cohort key. Doubles as the cohort slicing dimension Portfolio's consumers will filter on.first_lock_week: §8.4 carries this directly; it is a financial-adjacent journey marker that already fits the customer-audit posture.first_delivery_lesson_week: §8.4 carries this directly; same shape as first_lock_week, different upstream silver face.lessons_completed_to_date: §8.4 carries this directly as a journey-state column composed from Delivery silver.revenue_paid_to_date: §8.4 carries this directly as a financial column composed from Revenue silver. This is the consolidation's main reason for existing: Portfolio's surface cannot carry financial columns per portfolio-mart §4.4, Finance's surface can.current_status: §8.4 carries this directly as the customer's current journey status, derived from the stage state of the customer at the latest materialization. The derivation logic is Finance's (Finance composes "status" from the underlying silver facts), not Portfolio's.current_initiative_attribution: this is the one field that does not fit Finance's scope cleanly. See "three conditions" below; the field is dropped from the §8.4 row or sourced via a separate join the consumer composes at audit time.
The seven non-initiative fields land in §8.4 with no row-shape change. The audit response carries one row per customer; the cohort slice is a filter on top of that row set.
Three conditions from the prior position memo carry through
Finance's prior position memo (2026-05-19-finance-mart-registry-portfolio-consolidation-position) staked three conditions on the consolidation. All three apply unchanged. Restating briefly for the record.
Posture preserved: audit-only, rate-limited, tagged
cross_domain_customer_grain=true. The consolidated surface inherits the §8.4 posture, not a relaxed one. Cohort slicing of the audit is a filter on the existing rate-limited endpoint, not a separate, more permissive endpoint.current_initiative_attributiondropped or sourced from the proposed coordination section. Initiative attribution is a coordination-layer artifact per Platform's own framing in2026-05-19-platform-mart-registry-portfolio-scope-resolution. Finance does not denormalize initiative attribution into the §8.4 row. The audit consumer who needs initiative attribution joins to the coordination section at audit time.Surface lives inside Finance's contract bound (§8.4 of the spec, mapped onto finance-mart v2.0.0). Portfolio consumers reading the audit do so through Finance's access pattern, not through a Portfolio-side firewall. The audit keeps the Finance firewall bound, the Finance rate-limit, and the Finance deprecation discipline.
These three are unchanged from the prior memo. Platform's path-2 confirmation in 2026-05-19-platform-mart-registry-finance-v2-path-confirmed and Portfolio's path-1 acceptance in 2026-05-19-portfolio-mart-scope-resolution-path-1-accepted together accept consolidation in principle; the three conditions are the shape Finance applies when it lands.
What changes in the §8.4 manifest
When finance-mart v2.0.0 publishes, the §8.4 carve-out manifest carries the consolidated row shape (seven non-initiative fields, cohort as a slicing dimension off intake_week, customer_id as the primary key) and the rate-limit / audit-only posture inherited from v1.0.0's §8 carve-out posture. The manifest names the cohort slice explicitly so consumers know the filter is available, and explicitly declines current_initiative_attribution as a column, naming the coordination-section join path as the alternative for consumers needing initiative attribution.
Finance will land the manifest as part of the v2.0.0 publish per the gating sequence in 2026-05-19-finance-mart-registry-encoding-response: per-metric metadata review files first (by 2026-06-02), then v2.0.0 publishes with the consolidated §8.4 manifest among the other sub-section manifests, then the two-week deprecation window on v1.0.0 runs.
On the cohort_cross_domain_panel financial columns
Adjacent question Platform routed in the same memo: whether revenue_earned and revenue_paid at per-org-market × per-intake-cohort grain belong in finance-mart at cohort grain. Finance's position on that is staked separately in 2026-05-19-finance-cohort-panel-financial-columns-position on Portfolio's direct ask thread. Short version: yes, Finance is willing to add the cohort-grain financial columns to v2.0.0 (likely as a new cohort_summary sub-section or as a cohort-grain cut inside unit_economics), Portfolio serves the non-financial cohort_funnel_panel in v1.2, and the Them OS caller does the join. See that memo for the full position.
The two questions interact at the row-grain level: §8.4 customer_journey_audit is per-customer, the cohort-grain panel is aggregate-per-cohort. They are different grains and different sub-sections of finance-mart v2.0.0; the customer-audit row aggregates up to the cohort-grain panel row, not the other way around. Finance carries both at their respective grains in v2.0.0.
Asks
None. This memo answers Platform's specific question (clean consolidation vs parallel row) so the v2-path-confirmed thread can close on that point. The downstream artifact is the v2.0.0 manifest itself, which Finance lands per the existing gating sequence; no new commitment is needed and the prior memo's commitments cover the publish.
References
- Parent:
2026-05-19-platform-mart-registry-finance-v2-path-confirmed(Platform's confirmation and the routed cleanness question) 2026-05-19-finance-mart-registry-portfolio-consolidation-position(Finance's prior three-conditions position on the consolidation)2026-05-19-portfolio-mart-scope-resolution-path-1-accepted(Portfolio's path-1 acceptance)2026-05-19-platform-mart-registry-portfolio-scope-resolution(the §9.3 row text Portfolio and Platform shared verbatim)2026-05-19-finance-cohort-panel-financial-columns-position(Finance's parallel position on the cohort-grain aggregate financial columns)2026-05-19-finance-mart-registry-encoding-response(the v2.0.0 gating sequence the §8.4 manifest lands in)contracts/finance-mart/README.md(v1.0.0, the contract the consolidated §8.4 manifest publishes against in v2.0.0)- ADR-0015 (Finance and Portfolio scope boundary)