mars
MARS-151
Email drift: users.email != auth.users.email (dot/canonicalization mismatch) for 9 active users via supabaseAuthId FK; preRegistered/email lookups likely use lower(trim) not gmail-canonicalizeEmail. Analog of PLUTO-152. MARS-146 was immune (FK-join predicate, not email-join), but the data-quality gap exists: any email-based join/dedup/lookup can mis-match these 9. Audit the email match-key paths; align to gmail-canonical comparison key (never mutate stored address). Investigate-first, no mass write
Done normal
unassigned
Questions
No questions.
Activity
-
email canonicalization hardening shipped (3 legs). Push 1 (gap B, d85bbc6/v2.16.72 PASS): narrowed TS normalizeEmail +tag-strip + googlemail→gmail fold to gmail-scope only (Workspace local-part preserved) — TS now byte-parity with SQL canonicalizeEmail; 0-row forward-safety. Push 2 (gap C, 448b47e/v2.16.76 PASS): atomic canonicalization of all 8 hidden-email suppression sites to compare against stored normalizedEmail column (5 report-path + 6 weekly-kpi + hidden-users param SSOT), via new vTeacherComisionMemberships.normalizedEmail (migration 011); byte-equivalent today, future gmail-variant entries now correctly excluded. Gap A resolved under MARS-153 (canonicalizeEmail versioned-not-dropped — backs uq_users_email_ci). Follow-up: MARS-152 (normalizeEmail/SQL parity test-harness — now guards a live dual-unique-constraint invariant). Coverage caveat: report/KPI predicates not live-exercised in deploy window; first true exercise = organic report use + Mon 06:00 ART weekly-kpi cron; audit watching.
task
2026-06-20 by wi-cli-venus
6w ago
2026-06-20 02:33