authorizer (slackUsergroupId, channelId, now handle)
no: host data
yes
slack_template
render, validate, SlackTemplates.seed (runtime, insert-only by name)
yes (existing runtime seed, extended not replaced)
yes
slack_message / _attempt / _interaction
outbox, dispatcher, interactivity
no: logs
yes
Changed
Help bundle help/qbit-slack.yaml + SlackHelp (STAND-IN qqq#1198), applied at the end of the producer.
Channel fields isPrivate, botIsMember, isArchived, description, checkedAt and slackChannelName were never written. Readiness and a new "Check channels" table action now write them from conversations.info.
User group handle was unused. Readiness resolves it via usergroups.list (optional scope); mentions become <!subteam^ID|@handle> (unsafe handles ignored). slackUsergroupId and channelId were already used (inventory was wrong on these).
Home readiness empty state says how to install.
No Liquibase changelog: the qbit seeds templates at runtime, so no host include is needed.
## Audit per table
| table | used by | seeded | help |
|---|---|---|---|
| slack_workspace | OAuth install, readiness, authorizer | no: OAuth install | yes |
| slack_connection | OAuth connect, authorizer, readiness | no: OAuth connect | yes |
| slack_channel | authorizer (slackChannelId, slackChannelName), readiness | no: host data (Slack IDs) | yes |
| slack_user_group | authorizer (slackUsergroupId, channelId, now handle) | no: host data | yes |
| slack_template | render, validate, SlackTemplates.seed (runtime, insert-only by name) | yes (existing runtime seed, extended not replaced) | yes |
| slack_message / _attempt / _interaction | outbox, dispatcher, interactivity | no: logs | yes |
## Changed
- Help bundle `help/qbit-slack.yaml` + `SlackHelp` (STAND-IN qqq#1198), applied at the end of the producer.
- Channel fields `isPrivate`, `botIsMember`, `isArchived`, `description`, `checkedAt` and `slackChannelName` were never written. Readiness and a new "Check channels" table action now write them from conversations.info.
- User group `handle` was unused. Readiness resolves it via usergroups.list (optional scope); mentions become `<!subteam^ID|@handle>` (unsafe handles ignored). `slackUsergroupId` and `channelId` were already used (inventory was wrong on these).
- Home readiness empty state says how to install.
- No Liquibase changelog: the qbit seeds templates at runtime, so no host include is needed.
## Tests
`SlackTablesGuardrailTest` (use, seeded-or-STARTS_EMPTY, help, seed twice + edit survives), `SlackChannelStatusTest` (channel write-back, Check channels, handle in mention). `./mvnw -o verify` green (checkstyle, JaCoCo).
## Not done
- No Setup card: home already has the readiness section; help carries the setup order.
- No channel discovery/import action.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Audit per table
Changed
help/qbit-slack.yaml+SlackHelp(STAND-IN qqq#1198), applied at the end of the producer.isPrivate,botIsMember,isArchived,description,checkedAtandslackChannelNamewere never written. Readiness and a new "Check channels" table action now write them from conversations.info.handlewas unused. Readiness resolves it via usergroups.list (optional scope); mentions become<!subteam^ID|@handle>(unsafe handles ignored).slackUsergroupIdandchannelIdwere already used (inventory was wrong on these).Tests
SlackTablesGuardrailTest(use, seeded-or-STARTS_EMPTY, help, seed twice + edit survives),SlackChannelStatusTest(channel write-back, Check channels, handle in mention)../mvnw -o verifygreen (checkstyle, JaCoCo).Not done
🤖 Generated with Claude Code