Legacy Migration: CRM Contact Activity Logs → CDP
One-time migration of legacy audits records (qontak.com Postgres) into CDP activity_logs (MongoDB). Handles the dual YAML structure (update vs destroy), maps crm_person_id via Contact.source_id, and uses a durable job-state store (replacing the Redis-only pattern).
Scope Changes
Engineering surfaces this initiative touches (controlled vocab: Backend · Frontend · Mobile · Infra · Data · Design · Docs · None). Aggregate of this initiative's PRDs; mirrors the scope_changes frontmatter above.
- Backend —
contact-service: extend the activity-log write path withexternal_id/source_tag/multi-category support, a migration consumer with a durable job-state store, and aContactResolverkeyed oncrm_data.id(CDP, indexed) /qontak_customer_id(CRM) — notsource_id; plus the net-new CRM extraction contract; alsoSyncWatermarkResolver(pre-sync cutoff) andAssociationLogEnricher(in-place metadata patch for live-feed logs lackingexternal_id). - Frontend — migration-status indicator + composable (CALM-S05) surfacing progress via the IAG session-authenticated migration-status proxy.
- Data — one-time historical migration of the CRM
auditstable (qontak.com Postgres) → CDPactivity_logs(MongoDB), parsing the dualaudited_changesYAML structure (update vs destroy).
QA Lane
Lane B — keeps a human QA gate. A data migration whose before/after results require manual QA crosschecking. No E2E test specs exist for this initiative yet, so the Lane-A entry bar (100% E2E, spec-mapped coverage) is unmet regardless. Classified 2026-06-29.