#12793: fix(signal): preserve case-sensitivity for group IDs, UUIDs, and usernames
stale
Cluster:
Signal Reaction Fixes
## Problem
Messages sent to Signal groups via the `message` tool fail with `Group not found` errors. Signal group IDs are base64-encoded strings that are **case-sensitive**, but the message normalization and actions handlers were incorrectly lowercasing these identifiers.
Example:
- Correct: `eouKjHKHie8bH+nncebACPAD1cjJZZd46i1+pMaqnMA=`
- Broken (lowercased): `eoukjhkhie8bh+nncebacpad1cjjzzd46i1+pmaqnma=`
## Changes
### `src/channels/plugins/normalize/signal.ts`
- **`normalizeSignalMessagingTarget`**: Preserve case for `group:`, `uuid:`, and `username:` identifiers
- Only lowercase phone numbers (the fallback case), which are typically numeric and case-insensitive
### `src/channels/plugins/actions/signal.ts`
- **`resolveSignalReactionTarget`**: Check prefix case-insensitively but preserve group ID case
- **`normalizeSignalReactionRecipient`**: Check prefix case-insensitively but preserve UUID case
### `src/channels/plugins/normalize/signal.test.ts`
- Updated existing UUID tests to expect case preservation
- Added tests for group ID case preservation (base64 strings)
- Added tests for username case preservation
- Added tests for `u:` shorthand username case preservation
## Testing
Tested with Signal group message delivery:
- **Before**: `Signal RPC -1: Group not found: eoukjhkhie8bH...` (lowercased ID)
- **After**: Messages deliver successfully with case-preserved group ID
## Impact
- ✅ Fixes message delivery to Signal groups
- ✅ Fixes reactions in Signal groups
- ✅ No breaking changes (prefixes like `group:` are still matched case-insensitively)
Closes #12843
Most Similar PRs
#16562: fix(signal): preserve case for group and username targets
by akalypse · 2026-02-14
83.1%
#14462: fix(messaging): preserve case in target normalization fallback (#14...
by lailoo · 2026-02-12
79.0%
#19190: Signal: preserve group ID casing in session keys
by clzoc · 2026-02-17
75.3%
#18511: fix(signal): signal:-prefixed phone numbers fail target resolution ...
by yinghaosang · 2026-02-16
69.6%
#22221: fix: preserve case of target ID in normalizeTargetId
by zerone0x · 2026-02-20
69.2%
#17453: fix(signal): make group reactions deterministic from inbound sender...
by akalypse · 2026-02-15
68.5%
#10958: fix: Signal UUID allowlist entries silently fail when sourceNumber ...
by meaadore1221-afk · 2026-02-07
67.5%
#19358: test(signal): add E.164 format acceptance for signal target detection
by saurav470 · 2026-02-17
67.2%
#13489: fix: preserve Slack channel/user ID case in target normalization
by sandieman2 · 2026-02-10
65.6%
#22168: fix(imessage): resolve group sessions without chat identifiers
by AIflow-Labs · 2026-02-20
65.5%