Opus
Group allowlist comparison uses raw senderE164 against normalized allowlist
- src/web/inbound/access-control.ts:79-92
- src/web/inbound/access-control.ts:117-119
`normalizedGroupAllowFrom` is built by passing each entry through `normalizeE164`, but the membership check compares against the raw `params.senderE164` without normalizing it. If the configured allowlist contains values like `+1 555-111-2222` (which normalize to e.g. `15551112222`) but the inbound senderE164 already arrives as `15551112222`, this may work coincidentally; but if the formats differ (config with `+`, sender without, or vice versa) the check will reject legitimate senders. The DM path is consistent because it also compares `params.from` (which is the raw form) — but the asymmetry is identical: normalized list vs. raw candidate. The author clearly intended to normalize both sides.
Recommendation
Compare against `normalizeE164(params.senderE164)` (and likewise normalize `candidate` for the DM path) so both sides of the comparison are in the same canonical form.