#18656: fix(signal): add missing groups field to Signal channel schema (#18635)
size: S
Cluster:
Signal and Discord Fixes
## Summary
- Add `SignalGroupSchema` and `groups` field to `SignalAccountSchemaBase` so per-group configuration (`requireMention`, `tools`, `allowFrom`, etc.) is accepted by Zod validation — matching the existing Telegram, IRC, and WhatsApp patterns.
- Add `groups` property to `SignalAccountConfig` TypeScript type with proper imports.
- Add schema regression tests (accept valid groups, reject unknown keys).
Fixes #18635
## Test plan
- [x] `pnpm check` — no type errors, lint clean, format clean
- [x] `npx vitest run src/config/config.schema-regressions.test.ts` — 5 tests pass (3 new)
- [x] `npx vitest run src/config` — all 387 config tests pass, no regressions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
<!-- greptile_comment -->
<h3>Greptile Summary</h3>
Adds the missing `groups` field to the Signal channel's Zod schema and TypeScript type, enabling per-group configuration overrides (e.g., `requireMention`, `tools`, `skills`, `allowFrom`) that were already supported for Telegram, IRC, WhatsApp, and other channels.
- New `SignalGroupSchema` in `zod-schema.providers-core.ts` follows the established `TelegramGroupSchema` pattern (with `.strict()` for unknown-key rejection)
- `groups` field added to `SignalAccountSchemaBase` as `z.record(z.string(), SignalGroupSchema.optional()).optional()`
- `SignalAccountConfig` TypeScript type updated with matching `groups` property and proper `GroupToolPolicyConfig` / `GroupToolPolicyBySenderConfig` imports
- Three regression tests added covering valid minimal config, complex per-group overrides, and unknown-key rejection
- Signal's existing `resolveChannelGroupRequireMention` call path in `event-handler.ts` will now pick up group configs correctly via the shared `resolveChannelGroups` utility
<h3>Confidence Score: 5/5</h3>
- This PR is safe to merge — it adds schema/type support following well-established patterns with no runtime behavior changes.
- The changes are minimal, additive, and closely follow the existing Telegram/IRC/WhatsApp group schema patterns. The Zod schema uses `.strict()` for safety, the TypeScript type matches the schema exactly, and regression tests cover both positive and negative cases. The existing `resolveChannelGroupPolicy` infrastructure will correctly consume the new Signal groups config without any additional code changes.
- No files require special attention.
<sub>Last reviewed commit: 3d10806</sub>
<!-- greptile_other_comments_section -->
<sub>(3/5) Reply to the agent's comments like "Can you suggest a fix for this @greptileai?" or ask follow-up questions!</sub>
<!-- /greptile_comment -->
Most Similar PRs
#4337: fix(signal): add group-level allowlist support via groups config
by derekross · 2026-01-30
88.7%
#17579: fix(slack): prevent Zod default groupPolicy from breaking multi-acc...
by ZetiMente · 2026-02-15
77.4%
#5201: Signal: add group mention gating with requireMention config
by csalvato · 2026-01-31
77.2%
#8310: feat(telegram): Add allowBots support for groups (parity with Disco...
by vishaltandale00 · 2026-02-03
76.9%
#10943: fix(config): resolve Control UI "Unsupported schema node" for confi...
by kraftbj · 2026-02-07
76.5%
#20078: feat(session): Add channelGroups config(optional config) for shared...
by demarlik01 · 2026-02-18
74.3%
#20674: fix #20495 & #20515: configure UX + Telegram media group fixes
by neipor · 2026-02-19
73.1%
#4878: fix: string/type handling and API fixes (#4537, #4380, #4373, #4547...
by lailoo · 2026-01-30
73.1%
#23211: fix: include modelByChannel in allowed channels validator
by westerbamos · 2026-02-22
72.9%
#10197: fix: add missing allowAgents to agent defaults subagents schema
by Yida-Dev · 2026-02-06
72.2%