fix: start on QQQ 4.1.0-RC.7 (real user-preferences SPI; #1194 fields) #10

Merged
KofTwentyTwo merged 2 commits from fix/rc7-preferences into develop 2026-10-15 00:51:17 +00:00
KofTwentyTwo commented 2026-10-15 00:48:34 +00:00 (Migrated from github.com)

URGENT. qbit-slack 0.1.0-RC.1 through RC.3 fail to start on QQQ 4.1.0-RC.7. The cause is in SlackPreferencesAdapter.register: it was written against the #1162 stand-in, and it reflected UserPreferencesMetaData.withSection(String,String,QCodeReference), which the real RC.7 SPI doesn't have. This blocks kof22 WB#222 and #212.

Fix

  • Build against QQQ 4.1.0-RC.7.
  • Preferences. I deleted the reflection adapter. The new SlackPreferencesProvider uses the real SPI directly: UserPreferencesMetaData.ofOrWithNew(...).withSection(...).
    • The section shows a read-only connections list.
    • Its actions are Connect Slack, Install for my organization, Send me a test message and Disconnect, filtered by permission.
    • Patches are rejected.
    • It's registered only when the core classes exist, guarded with ClassNotFoundException | LinkageError only. Real configuration errors still surface.
    • RC.7 has no redirect result, so Connect returns the authorize URL in UserPreferenceActionResult.message.
  • Messaging (#1194). The stand-in is replaced with the RC.7 rich messaging fields. The QBIT_SLACK provider now declares its capabilities and returns status, message id and reasons.
  • New tests:
    • SlackStartupTest: produces the qbit on RC.7, checks that QInstanceValidator passes, and checks that the slack section is registered.
    • SlackPreferencesTest: the section only shows the owner's connections, actions are filtered by permission, a PATCH is rejected, and Connect and Install return the URL.

verify is green locally: 175 tests, 91.3% instruction coverage. The remaining stand-ins are #1142 (classification tokens), #1198 (help) and #1205 (delivery, unreleased).

Codex implemented this; I reviewed it.

🤖 Generated with Claude Code

**URGENT.** qbit-slack 0.1.0-RC.1 through RC.3 fail to start on QQQ 4.1.0-RC.7. The cause is in `SlackPreferencesAdapter.register`: it was written against the #1162 stand-in, and it reflected `UserPreferencesMetaData.withSection(String,String,QCodeReference)`, which the real RC.7 SPI doesn't have. This blocks kof22 WB#222 and #212. ## Fix - **Build** against QQQ 4.1.0-RC.7. - **Preferences.** I deleted the reflection adapter. The new `SlackPreferencesProvider` uses the real SPI directly: `UserPreferencesMetaData.ofOrWithNew(...).withSection(...)`. - The section shows a read-only connections list. - Its actions are Connect Slack, Install for my organization, Send me a test message and Disconnect, filtered by permission. - Patches are rejected. - It's registered only when the core classes exist, guarded with `ClassNotFoundException | LinkageError` only. Real configuration errors still surface. - RC.7 has no redirect result, so Connect returns the authorize URL in `UserPreferenceActionResult.message`. - **Messaging (#1194).** The stand-in is replaced with the RC.7 rich messaging fields. The `QBIT_SLACK` provider now declares its capabilities and returns status, message id and reasons. - **New tests:** - **`SlackStartupTest`**: produces the qbit on RC.7, checks that `QInstanceValidator` passes, and checks that the `slack` section is registered. - **`SlackPreferencesTest`**: the section only shows the owner's connections, actions are filtered by permission, a PATCH is rejected, and Connect and Install return the URL. `verify` is green locally: 175 tests, 91.3% instruction coverage. The remaining stand-ins are #1142 (classification tokens), #1198 (help) and #1205 (delivery, unreleased). Codex implemented this; I reviewed it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.