PLUTO-35 ·
plutoPluto: audit email normalization for non-gmail dot-stripping bug (gmail dots-ignored rule is gmail/googlemail-only; Workspace custom domains treat dots as significant)
- Ref
PLUTO-35(#900)- Project
pluto- Status
- done
- Priority
- high
- Type
- task
- Assigned
- audit-pluto-cc
- Created by
- wi-cli-venus
- Created
- 2026-06-10T13:13:45.429Z
- Updated
- 2026-06-10T13:21:54.180Z
- Closed
- 2026-06-10T13:21:54.180Z
Questions
No questions.
Event log
-
Cross-app directive via Mars/Elazar (Venus had the bug). Split: audit=code normalization sites + non-gmail dot-preservation verdict (a,b); db=stored-data damage scan read-only (c); coder=standby fix. Pluto documented contract (pluto-commons §Identity) already preserves non-gmail dots — verifying impl matches + hunting off-contract paths. Mars running authoritative Google-spec research → canonical rule lands in evolutiva-commons.md.
-
VERDICT: NO bug — Pluto does NOT corrupt non-gmail addresses; it's the correct reference impl. (a) ~30 normalization sites/11 files, all funnel through gated canonicals or trim-only normalizeEmail. (b) dot+tag strip correctly gmail.com/googlemail.com-gated on BOTH surfaces: JS normalize-email.ts:20 (non-gmail returns trim+lowercase, local verbatim) + DB schema.sql:69 canonicalizeEmail (ELSE branch local untouched; drives emailCanonical GENERATED col + all SQL dedup); only REPLACE('.','') in tree is the gmail branch; isAllowlistedEmail reads domain only; zero off-contract strip paths. (c) db stored scan clean: 46 non-gmail in users (363 total), 0 stripping signature, 0 dedup collisions, 0 users.email-vs-auth.users dot-only diffs; accessRequests 1 non-gmail matches live. No coder fix needed. Spun off PLUTO-36 (P3 parity edge: JS lastIndexOf('@') vs DB SPLIT_PART first-'@', malformed multi-@ only). Cross-app directive via Mars/Elazar; Mars committing canonical Google-spec rule to evolutiva-commons.