Directus CRM Master Import Status — 2026-03-30

Current State

  • Preflight is now green.
    • Supabase connectivity is working.
    • pg_dump and psql are available through the supabase-db Docker container fallback.
    • the Directus API token is present in the execution environment.
    • Baserow parity and reload paths work against the local Baserow origin with the required host-header override.
  • Snapshot-first live execution has been resumed from the previously blocked step and carried through the ready import families.
  • source_of_truth_ready is now true in /home/zasage/_my/.ultra-plans/artifacts/directus-crm-master-import/final-status.json.

What Ran

  • Baserow core was re-snapshotted and reloaded after live parity drift was detected.
    • Report: reload-baserow-core-run.json
    • Result: baserow_core and baserow_foundations are both loaded in live-parity-post-imports.json.
  • LinkedIn live import completed after two concrete fixes:
    • blank-dated interactions are skipped instead of violating the non-null occurred_at column
    • follow-enrichment raw_data is serialized before insert
    • Report: linkedin-import.json
    • Final report counts:
      • created_contacts: 33
      • matched_contacts: 2,478
      • updated_linkedin_fields: 25,549
      • created_interactions: 5,772
      • created_enrichment_rows: 2,329
      • skipped_interactions_missing_date: 2
  • Google Contacts curated import ran live behind a fresh snapshot.
    • Report: google-contacts-import.json
    • Final report counts:
      • created_contacts: 8
      • matched_contacts: 29
      • filled_fields: 26
  • fCTO import ran live after converting the migrator from sparse batch-inserts to stable-key upserts.
    • Report: fcto-report.json
    • Final report counts:
      • created_row_count: 232
      • updated_row_count: 1
      • final_row_count: 232
  • Foundation imports ran live after converting the migrator from append-only inserts to stable-key upserts.
    • Reports:
      • foundation-co-report.json
      • foundation-all-states-report.json
    • Final report counts:
      • Colorado file: 0 create, 2,446 update
      • All-states outreach file: 5,807 create, 157 update
      • final prospects_foundations row count: 8,253
  • ERPNext conditional branch was executed after snapshot.
    • Report: erpnext-import.json
    • Result: all created counts remained 0, so the branch was classified as a no-op already covered by existing live records and dedup/match rules.

Verification Fixes Made During Execution

  • Preflight now accepts the real environment shape:
    • Supabase host/user/db defaults are inferred
    • pg_dump and psql can run via docker exec supabase-db
    • Baserow .env resolution works from both Linux and Windows workspace paths
  • Snapshot restore now works with the Docker Postgres fallback and bypasses audit-trigger restore failures by streaming SQL through psql with replication role override.
  • Live parity was corrected in two places:
    • Baserow person matching now tolerates legitimate overlay changes from LinkedIn instead of treating them as missing baseline rows
    • Google Contacts parity now matches by the same email/phone strategy the importer uses, instead of letting LinkedIn URLs hide valid Google matches
  • Prospect migrators now use stable-key upserts instead of append-only inserts.
    • This resolved the fCTO sparse-row failure and the foundation duplicate-risk blocker in the same change set.

Final Evidence

  • /home/zasage/_my/.ultra-plans/artifacts/directus-crm-master-import/preflight.json
    • status: ok
  • /home/zasage/_my/.ultra-plans/artifacts/directus-crm-master-import/live-parity-post-imports.json
    • loaded: baserow_core, baserow_foundations, google_contacts_curated, linkedin_contacts_export, foundation_outputs, fcto_outputs
    • blocked_missing_source: msp
    • ready_for_import: erpnext_backup in the parity artifact, but the executed import report proves the live branch was a no-op
  • /home/zasage/_my/.ultra-plans/artifacts/directus-crm-master-import/final-status.json
    • consolidates the final classification
    • marks source_of_truth_ready: true

Remaining Explicit Classifications

  • msp
    • status: blocked_missing_source
    • reason: there is still no import-ready MSP output CSV on disk
  • google_contacts_raw, google_contacts_manual_review, google_contacts_excluded
    • remain audit-only by design
  • erpnext_full_dump
    • remains backup-only

Conclusion

  • Every ready in-scope family that had importable source data on disk was either loaded into the live CRM or explicitly classified with evidence.
  • The only still-blocked family is MSP, and that blocker is concrete and already accepted by the plan as non-blocking for source-of-truth readiness.