chore: migrate Slack runtime from Hubot RTM to Bolt - #55
Merged
Merged
Conversation
Implement local command dispatch, script interfaces, HTTP helpers, and legacy-compatible brain persistence without importing Hubot. Preserve existing command implementations and replace only their type imports; this is not a complete rewrite of the scripts. Keep the existing Hubot startup and dependencies temporarily until the Bolt cutover. Add 29 offline runtime regression tests; all 43 tests pass.
Add the signed Bolt HTTP Events API receiver, Slack event normalization, message delivery, persistent event deduplication, and Redis-backed brain storage while retaining the existing memory format and key. Keep construction offline and cover Slack and Redis behavior with mocked integration tests. The deployment launcher cutover and removal of temporary Hubot dependencies remain separate.
Persist Slack events before acknowledgement, process channels independently, and retain transient failures for retry. Secure privileged commands, improve transport and HTTP reliability, clean production dependencies, and expand regression coverage.
Coalesce brain snapshots, process bounded channel batches, and move profile updates out of the durable command queue. Add durable retry limits, dead-letter storage, a renewable single-worker lease, startup validation, and regression coverage.
Member
|
hi @dhairyathareja1, here are a few findings which need to be resolved, have a look into these:
|
Member
dhairyathareja1
force-pushed
the
revamp/bolt
branch
2 times, most recently
from
September 22, 2026 23:27
78fb253 to
223950a
Compare
Resolve member names and mentions for keys, info, and scores while preserving username-keyed brain data. Keep update-db replies in their originating thread and make member-sheet reads reliable for local testing. Add regressions for the restored behavior.
alronova
approved these changes
Sep 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR resolves #50 by replacing the deprecated
hubot-slackRTM integration with Bolt for JavaScript and Slack's HTTP Events API.I also implemented the Node.js upgrade tracked in #49. This Bolt branch is built on that Node 24 work, and both PRs are intended to be merged together because Bolt v5 requires Node.js 20 or newer.
The existing command modules and Redis memory format are retained through an internal compatibility runtime. Hubot,
hubot-slack,hubot-redis-brain, and the Hubot runtime are no longer production dependencies.Closes #50
Related to #49
What changed
Bolt migration
hubot-slackwith@slack/bolt./slack/eventsendpoint.message,app_mention, anduser_changehandling to Bolt.bin/hubotpaths as compatibility launchers that forward to Bolt without loading Hubot.Event processing and Redis
messageandapp_mentiondeliveries for the same Slack message are processed once.hubot:storagekey.Compatibility and hardening
file_share, bot messages, mentions, channel lookups, user lookups, and thread context are handled by the new adapter.env,show users,show storage, anddierequire IDs configured throughBOT_ADMIN_IDS.HUBOT_ENV_BASE_PATH.Node.js and deployment
.nvmrcand aligned local development and CI versions.nodeuser.start_bot.sh,Procfile, npm scripts, and Windows/Unix launchers..envloading for local launch paths.Slack configuration
The new Slack app uses:
SLACK_BOT_TOKENSLACK_SIGNING_SECRET/slack/eventsRequest URLSocket Mode is not used, so
SLACK_APP_TOKENis not required.Subscribed bot events:
app_mentionmessage.channelsuser_changeThe new bot must be invited to every channel where it should receive messages or post scheduled output, including
#general.The app should be installed in the same workspace as the existing bot so stored Slack user IDs remain valid.
Deployment notes
BOT_ADMIN_IDSfor administrative commands.9998to container port8080.Verification
npm run checknpm audit --omit=devreports 0 vulnerabilities