Post-PR Status Update
Build checks (MYPY_DIFF_ONLY=1 nox -s chk mode used by CI):
make fmt✅ruff format --check✅ruff check✅mypy apps/attio/ tests/✅- 11/11 unit tests pass
Codex review (/codex-review-loop):
- Iteration 1: 1 finding ([P2]
+branch didn't validate digits) → fixed in this PR. - Iteration 2: LGTM — "I did not identify a discrete regression that should block the patch."
- Note: this PR exists because the original fix in #22916 was merged before iteration 2's fix could land. This is the codex follow-up.
CI (PR #22920, SHA 33b76ae9):
- ✅ Postman Tests, Google Docs Markdown renderer, Trigger Config, Deploy Preview Version, Endpoint Duplicate CI, Lint and type checks, Checks, Tests
- ❌
secrets-detection.yml— pre-existing: failing on every PR and branch in the repo (verified by sampling: zen/fix-attio-create-person-phone-x2em7c #22916 which merged today, plus 8+ unrelated zen/cortex branches all show the same failure). Not introduced by this PR.
Tests / E2E:
- Unit tests cover the
+digit-validation behavior (+not-a-phone,+123abc,+12345,+1234567890123456all correctly rejected; valid E.164 + 10-digit US still accepted). - Direct sanity check on the original failing input from production logs:
_normalize_phone_to_e164("5551234567")→"+15551234567"✅ (the exact payload from the watchdog M1bc evidence). - E2E via Apollo→Thermos→Mercury Lambda is not feasible from Zen sandbox (Mercury Lambda runs deployed code, not local branch). The fix will reach production via the master→production promotion PR; recovery should be confirmed by watching
service:mercury "Error processing payload" "Invalid phone number"go to zero on the next deploy.
PR comments: 0 (none open).
Remaining blockers: None.