{"record":{"id":"0e56ed07a2a00f59","repo":"HKUDS/Vibe-Trading","slug":"group-message-buffer-size-must-be-0","errorCode":null,"errorMessage":"group_message_buffer_size must be > 0","messagePattern":"group_message_buffer_size must be > 0","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"agent/src/channels/signal.py","lineNumber":329,"sourceCode":"\n    enabled: bool = False\n    phone_number: str = \"\"  # Your Signal phone number (e.g., \"+1234567890\")\n    daemon_host: str = \"localhost\"\n    daemon_port: int = 8080\n    group_message_buffer_size: int = 20  # Number of recent group messages to keep for context\n    # Override the directory signal-cli writes inbound attachments to. When\n    # None, defaults to ~/.local/share/signal-cli/attachments (the daemon's\n    # platform default on Linux). Set this if the daemon is running with a\n    # custom XDG_DATA_HOME or on macOS/Windows where the default path differs.\n    attachments_dir: str | None = None\n    dm: SignalDMConfig = Field(default_factory=SignalDMConfig)\n    group: SignalGroupConfig = Field(default_factory=SignalGroupConfig)\n\n    @field_validator(\"group_message_buffer_size\")\n    @classmethod\n    def _validate_buffer_size(cls, v: int) -> int:\n        if v <= 0:\n            raise ValueError(\"group_message_buffer_size must be > 0\")\n        return v\n\n    @computed_field  # type: ignore[prop-decorator]\n    @property\n    def allow_from(self) -> list[str]:\n        \"\"\"Aggregate allowlist for the base-class is_allowed() check.\n\n        Returns the union of dm.allow_from and group.allow_from so the base\n        channel gate sees a populated list when either sub-policy is configured.\n        A ``\"*\"`` wildcard in either sub-list propagates to allow all.\n        \"\"\"\n        return list(dict.fromkeys(self.dm.allow_from + self.group.allow_from))\n\n\nclass SignalChannel(BaseChannel):\n    \"\"\"\n    Signal channel using signal-cli daemon via HTTP JSON-RPC interface.\n","sourceCodeStart":311,"sourceCodeEnd":347,"githubUrl":"https://github.com/HKUDS/Vibe-Trading/blob/80ffdda44c5c4db0dd84d70e051cca591cea67df/agent/src/channels/signal.py#L311-L347","documentation":"Pydantic field validator on SignalConfig rejects group_message_buffer_size values <= 0. It is raised at model construction time, before any Signal channel is started.","triggerScenarios":"Instantiating SignalConfig(group_message_buffer_size=0) or a negative value, typically from env vars or YAML config.","commonSituations":"Env var left empty and parsed as 0, typo in config file, or defaulting logic that computes a size of 0 when no override is set.","solutions":["Set group_message_buffer_size to a positive integer (e.g. 100)","Check env parsing: ensure empty strings don't coerce to 0","Remove the key entirely to use the built-in default"],"exampleFix":"# before\nSignalConfig(group_message_buffer_size=0)\n# after\nSignalConfig(group_message_buffer_size=100)","handlingStrategy":"validation","validationCode":"size = cfg_overrides.get('group_message_buffer_size', 100)\nif size <= 0:\n    raise ConfigError('group_message_buffer_size must be positive')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate numeric env overrides before constructing config","Use the library default unless a specific buffer size is needed"],"tags":["config","pydantic","signal","validation"],"backgroundTag":"config-validation-failed","analyzedSha":"80ffdda44c5c4db0dd84d70e051cca591cea67df","analyzedAt":"2026-08-28T12:46:38.989Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}