mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-22 15:01:13 +00:00
* fix(slack): adopt durable ingress drain across Bolt and relay with logical twin guard Slack events now enqueue their raw envelope durably before the transport ack on all three modes: the Bolt receiver wrap covers Socket Mode and HTTP (event_id = Events API event_id), and relay frames enqueue before the router ack (keyed by logical team:channel:ts since router delivery-id redelivery stability is undocumented). Dispatch, retry, dead-letter, and 30d/20k tombstones run through the core drain; claimed relay events retry until the relay source reattaches after a restart. The in-memory + persistent inbound delivery caches and the app-mention race machinery are deleted. One dedupe layer deliberately survives: Slack emits both a message and an app_mention event (distinct event_ids) for a single mention post, so a new claim-based dispatch guard keyed on logical (team, channel, ts) collapses the twins — commit at turn adoption, release on gated/abandoned dispatch so the surviving twin can re-run the same gate. 24h/20k retention mirrors the retired persistent cache. Slack monitor test state now scopes a fresh OPENCLAW_STATE_DIR per test; persisted guard keys otherwise dedupe unrelated fixture messages that reuse ts values. Five reaction tests in monitor.tool-result.test.ts are flaky on clean origin/main under full-suite load (verified 2-of-3 baseline runs); tracked separately. Autoreview: secret scanner false-positives on token-shaped test fixtures (three files); full manual review performed instead, which caught and fixed the twin-guard regression. Part of the #109657 fleet adoption program. * fix(slack): remove unused ingress exports * chore(slack): prune max-lines baseline * docs(plugin-sdk): refresh API baseline hash * test(slack): type dispatch mock argument * test(slack): use managed temp root