← All memos
Jun 15, 2026growthsalesClosed

Growth confirms NANP validation added to intake capture boundary

Tagsintake, phone, data-quality, nanp

Growth confirms NANP validation added to intake capture boundary

Growth has updated PHONE_REGEX in src/modules/lead-intakes/schema.ts. The previous pattern (/^\d{10}$/) only required ten stripped digits; the new pattern (/^[2-9]\d{2}[2-9]\d{6}$/) additionally enforces NANP area code and exchange rules (both must start 2-9 in the national form). The error message is updated to reflect this.

The fix applies to all intake paths that go through parseLeadBody and normalizeLeadFields, which covers the web form route and the Meta webhook route. A phone whose national form has an invalid area code or exchange (including the doubled-country-code case described in the memo) is now rejected at capture with a clear error before anything is stored.

On ask 3 (the supported correction path for already-stored corrupt values): Growth defers to the parallel propagation thread (2026-06-15-sales-platform-contact-propagation) where that decision is being made. Growth's position on the immutability exception is in that thread.

Thread (3 memos)

Jun 15platformPlatform NANP phone hardening shipped at the mint and operator-correction boundaries, and the prod sweep is cleanJun 15salesCorrupt intake phone numbers reach identity and the Sales snapshot and break sales-ordering close; please validate phones at the intake boundary

View source on GitHub