Repository navigation
fix(slack): recover broadcast replies after connection gaps - #1187
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to The change appears mergeable after normal checks. Live Slack and sleep/wake behavior remain untested, but no concrete failure is established. Pre-merge checks |
|
openrig-review
left a comment
There was a problem hiding this comment.
Approved at 147a58e. Slack replies sent with "Also send to channel" during a connection gap are now recovered from the configured channel's history and land once, with their thread's routing and the late-delivery marker. They go through the same sender, bot, duplicate and routing checks as live inbound; ordinary thread replies are still left to live delivery. Required CI passed at this head, on current main.
— dev60-planner@v-openrig-build
|
Merged to main, thanks @XTLine. It will ship in the next release. Thanks for a second fix after #1156. #739 stays open for thread replies that aren't broadcast. Two optional doc notes for a later change, neither needed: the sentence saying it 'does not replay intervals already checkpointed' reads more like a changelog line than a description, and the edit dropped 'dead-connection detection' from the out-of-scope sentence without saying that the socket layer now has liveness checks. |
|
An update, @XTLine: OpenRig 0.6.11 is out on npm, and this change is in it (release notes: https://github.com/mvschwarz/openrig/releases/tag/v0.6.11). Thanks again. |
What a user gets
Replies sent with Slack’s Also send to channel option now recover after a connection gap when they appear in the configured default channel’s history. Previously live inbound accepted these
thread_broadcastmessages, but recovery silently skipped every threaded message and checkpointed past them. Recovered replies now use the existing sender checks, exact thread routing, duplicate identity and durable retry path, with the usual late-delivery marker.This is a narrow remaining case from #739, following #742 and #910. Issue #739 remains open: non-broadcast thread replies still require separate recovery, and secondary mapped channels remain outside the existing default-channel scan.
How you verified it
Published commit:
147a58edb6a666a3aedf8d9bc464c800128ef2a8, based on upstream9109360f57124b50c7cccf583485bdb38c4ef242. Its tree48bbee1a99c4bf7489055b34a2ad4cf393def4c9exactly matches local tested commit2dda53c044937e1ca443105820ce1f1358a7ee4b; only publication metadata differs.npm run buildandnpm run lintpassed. All four Slack CLI files passed: 56 tests.npm run test:repodid not fully pass in this environment. After retrying the script suite with a writable task-local npm cache: 286 passed, four failed becausersyncis absent (spawnSync rsync ENOENT), one opt-in test skipped. The separate first-run reference, documentation guard, mirror digest and generated-context checks all passed.npm test, the complete workspace suites, and installed-package container scenarios were not run.The tests inject synthetic Slack Socket Mode/history responses into production recovery and routing. The generic stub-agent scenario has no Slack history endpoint, so it cannot exercise this bug; these checks cover the actual transport-to-queue path instead. No live Slack connection, real sleep/wake cycle, native agent execution or browser test was performed. This backend-only fix has no screenshot.
Anything you were unsure about
The change only recovers broadcast replies that Slack exposes in the existing configured-channel history interval. It does not enumerate ordinary threads, change API scopes, add a new endpoint, or rewind intervals checkpointed before this fix. Existing rate, retention, visibility-margin and global-order limitations still apply. Routing remains the live path’s behavior, including preserving the original seat for closed or superseded roots and withholding gate correlation for a superseded root.
One commit, 83 additions and 16 deletions (99 total changed lines). No dependency, migration, version bump or changelog change.
CHANGELOG.mdedit