fix(channels): normalize phone identities with stray plus signs#100467
Conversation
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Codex review: found issues before merge. Reviewed July 5, 2026, 9:05 PM ET / 01:05 UTC. Summary PR surface: Source +3, Tests +29, Docs +1. Total +33 across 8 files. Reproducibility: yes. Source inspection on current main shows Review metrics: 3 noteworthy metrics.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review findings
Review detailsBest possible solution: Land this broader shared normalizer fix as the canonical path after maintainer acceptance of the SDK-visible behavior change, remove the changelog entry, and then retire the narrower overlapping PR. Do we have a high-confidence way to reproduce the issue? Yes. Source inspection on current main shows Is this the best way to solve the issue? Yes, if maintainers accept the SDK contract correction: the shared helper is the narrowest durable fix for the common invariant. The safer compatibility alternative is caller-local guards plus a later documented SDK change. Full review comments:
Overall correctness: patch is correct AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 5a31666a06e5. Label changesLabel justifications:
Evidence reviewedPR surface: Source +3, Tests +29, Docs +1. Total +33 across 8 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (4 earlier review cycles)
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
4e04390 to
c6e38db
Compare
87daa1c to
d7743db
Compare
|
Maintainer closeout at exact head
Proof gap: the organization-wide Crabbox lease cap prevented a second sanitized AWS allocation after the final one-line validation repair. The repaired exact head is covered by source-blind runtime proof and hosted CI. |
70e26ec to
5eab941
Compare
5eab941 to
aea1141
Compare
|
Merged via squash.
|
…claw#100467) * fix(channels): canonicalize phone identity digits * test(channels): cover phone identity normalization * test(whatsapp): use shared phone normalizer * fix(channels): reject invalid normalized phone identities * fix(signal): preserve strict account input validation * fix(signal): preserve prefixed allowlist input * docs(changelog): stabilize phone identity entry * chore(changelog): defer phone identity entry --------- Co-authored-by: Peter Steinberger <[email protected]>
…claw#100467) * fix(channels): canonicalize phone identity digits * test(channels): cover phone identity normalization * test(whatsapp): use shared phone normalizer * fix(channels): reject invalid normalized phone identities * fix(signal): preserve strict account input validation * fix(signal): preserve prefixed allowlist input * docs(changelog): stabilize phone identity entry * chore(changelog): defer phone identity entry --------- Co-authored-by: Peter Steinberger <[email protected]>
What Problem This Solves
Phone-based channel identities could normalize to unusable values when copied input contained doubled or embedded
+characters. Digit-free input could also become the truthy identity+, causing incorrect routing comparisons instead of a clean invalid-input result.Why This Change Was Made
The shared
normalizeE164helper now strips provider prefixes and formatting, keeps digits only, returns exactly one leading+, and returns an empty string when no digits remain.The maintainer rewrite also closes sibling cases exposed by that shared invariant:
auto:handles instead of collapsing them.User Impact
Equivalent phone identities compare canonically across shared channel routing even when copied input contains stray plus signs. Invalid digit-free identities fail closed, while valid non-phone iMessage handles and Signal UUID senders retain intended routing.
Evidence
aea114112f975285bdf4c7bbf9ba163ca171e372.run_2cb4c42e20e4found the prefixed Signal setup regression after 96 focused assertions passed. The branch was repaired to preserve strict setup validation and gained a focused regression.auto:Alice Smithremainedauto:AliceSmith; digit-free Signal phone identity fell back to UUID; prefixed allowlist input parsed; embedded-plus setup input was rejected.28761404940: all required checks passed.oxfmtandgit diff --check: pass.Risk checklist
AI-assisted disclosure