SOW HLT-DC-MCN-001 · Confidential
Prepared for James · 14 May 2026 · End of Week 4 + Week 5 Day 1 · Week 5 in flight · last update 16 May (GBP invoicing · INV-002 sent)
00DU0000000HGVH → sandbox 00Dbb0000083GTR. Surgical content+filename rename unlocked 99.66% deployable. Preference_c__dlm (campus pilot central DMO) now deployable. Idempotent script committed for future refreshes (scripts/data-cloud/rename_dmos_for_sandbox.py). PR #270 · #271 · #273 merged.--test-level NoTestRun).specs/data-graph/p2-149-bi-canonical-model-spec.md — Track A dbt · 7 DMOs · 16 NEW fields with exact SQL CASE logic · seed CSVs for Campus_Catalog + Staff_Assignment + Programme_Lookup · 825 lines. specs/data-graph/p2-149-bdt-canonical-normalization.md — Track B BDT · field-parity · 15-code programme normalization · single + multi-value formulas · 770+ lines. Plus 3 session logs committed (Chris+Hristo BDT debugging · playbook training · sprint review).audit/phase-4/calculated-insights-pre-unmap-2026-05-12/ (JSON + Metadata XML formats · deployable manifest). BI safety confirmed — Tableau pulls SFTP not DC, unmap window invisible to BI.CdpDataStreams, CdpDataSpace) reactivated by Jonatan (not SF Support). 3 remaining gaps tracked: stream activation · Data Kits redeploy · companion org link. Memory updated for future-session context.Approach A vs B → resolved as hybrid. Track A (Snowflake medallion · dbt silver→gold · Zero Copy reverse to DC) is the primary path. Track B (DC-first BDT) is the optional reference / fallback for marketing autonomy use cases. Re-affirmed across 23 Apr · 6 May · 11 May · 13 May sessions. Execution moves to HULT-22198 (BI Track A) and HULT-22199 (DC Track B), with HULTMKT1-10110 as the marketing-side visibility tracker. Cross-project link graph established.
Both tracks fully specced and committed to repo: Track A spec (p2-149-bi-canonical-model-spec.md) covers the 7 canonical DMOs with the exact SQL CASE logic Polly delivered 8 May · all 16 NEW computed fields · seed CSVs for static catalogs (Campus + Staff_Assignment + Programme_Lookup per Polly's 13 May confirmation). Track B spec (p2-149-bdt-canonical-normalization.md) mirrors at field-parity with BDT-flavoured formulas. Total ~1,600 spec lines. BI team now has unambiguous build target.
Sandbox refresh renamed 7 DMOs by substituting prod org-id (00DU0000000HGVH) with new sandbox org-id (00Dbb0000083GTR). Root cause found via Tooling API query against MktDataModelObject (not EntityDefinition — the standard query misses DC objects). Surgical rename script committed for future refreshes. Result: Enrollment manifest moved from 45% deployable (over-strip) to 99.66% (1,249 → 2,068 components recovered including the critical Preference_c__dlm for the campus pilot).
Engagement work organised into three concurrent streams: Data transformation (BI · Snowflake · dbt) · Data harmonization & activation (MCN) · Environment readiness (sandbox/prod). Phase 1 (data in: Snowflake → MCN) prioritised over data out. Campus tackled as a dimension first before journey build. IP application stage programme code trumps all other campus sources. MC Personalization SDK ruled out (broken ~1 year) — GA-via-Snowflake (24h delay) is the substitute. CIs not the right tool for composite logic.
Post-refresh, all DC source/sink connectors need re-authentication before streams can pull data. Jess owns 3 (Salesforce CRM Enrollment · Companion org with Falak · SFMC MID 523000969). Chris owns 2 (BigQuery Service Account JSON · Snowflake Zero Copy private key). Connector #1 (SF CRM) alone unlocks ~110 streams. Once all 5 are re-authed, scripted stream activation can run via SSOT REST API. Tracked in #272.
4 Apex classes in sandbox have compile errors unrelated to our scope (AzureTest · ChangeOwner · Task_AssignOwner · TestForchangeOwnerTrigger). They block sf project deploy validate by default. Workaround: deploy with --test-level NoTestRun flag — our scope is metadata-only, no Apex touched. Permanent fix: Hidayah / Hult tech team to fix or delete. Not in our SOW scope.
Polly asked (James CC'd) whether GA4 web behaviour can flow into Data Cloud for campaigning — concretely, segmenting Enquiries / IPs without Campus preference who visit campus web pages. Yes — the architecture already supports this (GA4 → BigQuery → Snowflake → DC via Zero Copy, locked in HULT-22064 hybrid decision). The use case lands naturally once HULT-22198 dbt build populates the canonical Engagement DMO (fields like Last_Webpage_Name_Visited + Days_since_last_webpage_visited are already in the spec). The real practical blocker is the <1% GA-to-Contact match rate (identity stitching investment) — architecture itself is solid. Full reply tracked in #277. Polly on leave next week; Simon + Ash to receive updates per her ask.
Full DLO → DMO lineage covering all 137 DMOs, 203 DLOs, and 224 DSOs across both Enrollment and MyStudents orgs. Interactive — zoom, pan, and click to explore relationships.
| # | Issue | Phase | Status |
|---|---|---|---|
| 72 | Access provisioning (sandbox, JIRA, GitHub, MC) | 1 | Done |
| 74 | CI write-back diagnosis — CC_TopChoiceCampus__c | 1 | Done |
| 75 | Opportunity 3-stream split audit | 1 | Done |
| 76 | Data Stream baseline — 176 streams | 1 | Done |
| 77 | Repo scaffold + spec-driven workflow | 1 | Done |
| 112 | V3 CRM Data Kit field maps (963 mappings) | 1 | Done |
| 143 | SFMC Classic full audit (362 autos · 1,534 journeys · 14 query families) | 1 | Done |
| 96 | BI architecture review — Hybrid decided 29 Apr | 1 | Decided |
| 142 | Operating-model deck — signed-off 5 May | 4 | Done · Wk 3 |
| 160 | MC stream cleanup audit | 2 | Done · Wk 3 |
| 157 | Web behavioural data gap — discovery, exec lives in HULTMKT1-9834 | 2 | Done · Wk 3 |
| 175 | Preference scoring deprecation — 0 of 1.7M ever populated | 2 | Done · Wk 3 |
| 176 | Stakeholder project update deck — presented 6 May | 4 | Done · Wk 3 |
| 176 | Stakeholder project update deck — presented 6 May | 4 | Done · Wk 3 |
| 225 | Data Graph playbook — deck + canonical specs + Jira tickets (closed Wk 5) | 4 | Done · 14 May |
| 149 | Campus canonical pilot — specs done, Jira execution tickets active | 2 | In Progress · gated by #272 |
| 80 | MC connection recreation — sandbox-side prep done, prod gated on #272 + HULTMKT1-7467 | 4 | In Progress |
| 178 | Data Cloud One companion org sandbox provisioning — deploy-ready, link gated on #272 item 2 | 1 | In Progress (Jess + Falak) |
| 173 | Unmap existing DC configurations — partial done 12 May (EmailEngagement) · gold-layer in HULT-22198/199 | 2 | In Progress |
| 82 | All Subscribers migration — spec drafted, blocked on DD | 4 | Spec drafted |
| 84 | WhatsApp / Unified Messaging — audit complete, 5 bugs | 4 | In Review |
| 272 | Sandbox 5-connector re-auth (Jess: 3 · Chris: 2) (NEW Wk 5) | 1 | Critical-path blocker |
| 73 | Two-org Data Space/Data Share architecture | 1 | Backlog |
| 79 | Consent architecture — DC owns, 7-flag reconciliation open | 4 | Backlog |
| 81 | Calculated Insights build — PipeAge, Suppression, CTAs | 4 | Backlog |
| 83 | Sender profiles + Reply Mail Management | 4 | Backlog |
| 85 | BigQuery DLO — batch data transform workaround | 2 | Backlog |
| 86 | WhatsApp bulk send — MCN setup | 4 | Backlog |
| 87 | Programme-specific footers + application link CTAs | 4 | Backlog |
| 88 | Stream error monitoring — 27 streams | 2 | Backlog |
| 92 | Lead Source deduplication | 2 | Backlog |
| 93 | Team enablement sessions | 5 | Backlog |
| 219 | MCN deliverability — IP warming, subdomain rep, sending strategy | 4 | Backlog |
| 221 | MCN Preference Center configuration | 4 | Backlog |
--test-level NoTestRun flag. Total 7,306 components landing this week (out of 9,099 ready)./services/data/v60.0/ssot/data-streams/{id}/refresh for the 176 streams. Jonatan delivers the script; Jess runs once connectors are live.Lead.ImportFile_LastImportDate__c must be added to the Snowflake replica or Pipeage cannot compute correctly.| Q | Question | Owner | Blocks |
|---|---|---|---|
| Q1 | Operating-model deck (#142) — sign-off? | James + Simon | ✓ Resolved 5 May · signed-off, deck closed |
| Q4 | Campus canonical — confirm as first proof point? | James + Simon | ✓ Resolved 6 May · campus + programme locked |
| Q2 | Legal scope for All Subscribers migration — current 362K unsubs, or broader historical superset (subscribers who unsubed at any point, even if since re-subscribed)? | Ku / Simon (legal) | #82 execute · Wk 5+ |
| Q3 | Data Graph naming + structure — confirm PG vs UG split (per Polly+Simon decision) and per-journey-family pattern before first build. | Marketing (Simon · Polly · Ash) | First Data Graph build · Wk 5+ |
| Q5 (NEW) | Subscriber-vs-Lead/Contact discrepancy DD — quantify gap, document third-party-lead duplication root cause. | Ash + Chris | Blocks #79 + #82 spec drafting |
| Q6 (NEW) | Event-reminder classification — marketing vs transactional? Affects footer language + whether event reminders bypass the marketing tickbox. | Simon + Polly (legal counsel) | #221 preference centre + #87 footers |
| Q7 (NEW) | MCN deliverability unknowns — IP type today, IP transfer to MCN, parallel-run sharing, sending subdomain decision. | Ash + SF Support | #219 deliverability strategy · before first MCN send |
| Q8 (NEW · 14 May) | Polly's GA4 question (James CC'd): can web behaviour from GA4 be brought into Data Cloud for campaigning? Concrete use case: segment Enquiries/IPs without campus preference who visit campus pages. | Polly (on leave next wk) · Simon · Ash · Chris+Hristo (BI) | ✓ Answered preliminarily 14 May · #277 · architecture already supports this (GA4 → BigQuery → Snowflake → DC via Zero Copy) · use case lands naturally once HULT-22198 dbt build populates Engagement DMO · real blocker is <1% GA-to-Contact match rate |
Engagement on schedule and on budget at the Week-4-end / Week-5-Day-1 checkpoint. 5 major closures this week: architecture decision (HULT-22064) · MC connection audit (HULT-21768) · Data Graph playbook (#225) · 16 NEW field SQL logic captured in specs · sandbox deploy-readiness landed. Phase 2 jumped from 40% → 75% through the deploy-readiness landing. The Wk 5/6 critical path is #272 connector re-auth — once Jess + Chris complete their 5 connectors, the deployed metadata becomes live data flowing into DC. Pilot build (HULT-22198 + 22199) starts in parallel. Engagement now at 60% delivered against 25% invoiced — outperforming pace.