v3.9.28: Hotfix — bridge plugin pre-load
What's New
Hotfix for v3.9.27.
The CapturedExperienceBridge shipped in v3.9.27 correctly drained captured_experiences and advanced its cursor — but published events into a kernel with zero subscribers because lazyLoading: true (the default) left domain plugins un-initialized at the moment the bridge's first drain ran. Cursor advanced past those rows, events were silently lost, and downstream learning:* kv keys still showed empty.
The fix: kernel.initialize() now eagerly loads all enabled domain plugins before starting the bridge so each plugin's subscribeToEvents() registers handlers on the eventBus before the bridge can publish. CLI commands that don't need event-driven domain reactions opt out via the new enableExperienceBridge: false flag to preserve their fast startup.
Reported by @Jordi-Izquierdo-DDS within hours of v3.9.27 publishing, with a precise reproduction (cursor advanced 0→25 but no learning:experience:* keys appeared) and three correctly-ranked hypotheses — hypothesis 1 (subscribers not loaded yet) was the root cause.
A new end-to-end integration test (tests/integration/bridge/bridge-end-to-end.test.ts) instantiates a real QEKernelImpl + real learning-optimization plugin and asserts that bridge-published events actually land in the kv store. Pre-fix this test fails with expected 0 to be greater than 0. Post-fix it passes.
Getting Started
npx agentic-qe init --autoSee CHANGELOG and docs/releases/v3.9.28.md for full details.