Validated the live Salesforce alias LITIFY_ORG before any write path and ran the daily attribution work from /Users/samaguiar/Documents/Projects/Repos/sail-litify/Litify_AI_Integration_Project. The worktree path in the environment context was stale, so the canonical repo path was used instead.
The newest scheduled CallRail folder for 2026-05-21 existed but was empty, so I treated it as unusable and ran a fresh CallRail dry run only. Output: output/callrail-gclid-sync/daily-2026-05-21T10-30-51Z. Result: 1,957 fetched calls, 82 with GCLID, 79 matched Salesforce call logs, 3 unmatched CallRail IDs, 0 conflicts, 3 call-log updates ready, 2 intake updates ready, 0 matter updates ready.
Ran the required all-history webform dry run. Output: output/webform-gclid-sync/daily-dry-run-2026-05-21T10-30-51Z. Result stayed blocked from apply: 541 linked web forms, 0 intake updates, 0 matter updates, 3 conflicts, 0 applied updates. Conflicts remain on INT-24122745230, INT-25011745539, and INT-26042754516. Because conflicts remained, no Salesforce apply ran.
Ran the Google Ads sheet sync as a dry run only. Output: output/google-ads-data-manager/2026-05-21T10-31-47-230Z/google-ads-sheets-dry-run.json. Dry-run counts: 11 production rows, 9 QA rows, 11 internal conversion QA rows, 474 internal lead QA rows, 576 raw rows, 2 conflict intakes. I had to override the service account path explicitly because vault.env currently points GOOGLE_SERVICE_ACCOUNT_JSON at a broken /Projects/.credentials/google-service-account.json path.
Completed the Outlook and SpeedAI audit in read-only mode. Key findings:
GCLID: (none), consistent with the linked Intake remaining blank.CARR JASON, both blank for GCLID.Stopped at the correct safety boundary. The webform dry run still had conflicts, so the apply pass was not eligible. The run still produced the required dry-run outputs and a useful QA audit.