May 17, 2026

Steer Dispatch Overhaul and Communication Stack Rebuild

The steer mechanism was rebuilt from the ground up

The steer mechanism was rebuilt from the ground up. Steers are now dispatched directly via handle_tool() on the active UMP instance—no Redis queue, no separate drain loop. The ACT loop’s exit condition uses _act_trail growth and merges external tool calls so injected steers keep the loop alive. The frontend no longer guesses routing; the server returns an authoritative routed field in the 202 response, and onSteerSent fires only on confirmed steers. A race window on fast double-tap has been closed by moving _set_active_request_id() into _start_turn(). Together, these fixes eliminate blank steers, lost third messages, and steer misrouting.

The communication stack underwent a major simplification (TKT-543/544/546). WebSocket is now a pure server-to-client push channel, handling only auth, broker connect/disconnect, capability alerts, and ping/pong. All client-to-server communication—chat, action, upload—moves to HTTP POST endpoints. A new WebSocketBroker singleton replaces the old pub/sub system; SegmentService handles segment building. OutputService, the proactive /events/recent endpoint, and all pub/sub plumbing in MemoryStore have been removed.

The per-agent configuration JSON system has been deleted (TKT-451). All eight configs/agents/*.json files are gone; ConfigService no longer resolves per-agent configs. Every LLM call now resolves exclusively through the database provider row. JOB identifiers have been renamed to LOG_LABEL—purely an observability label—and compaction processors now correctly attribute usage to subconscious instead of chat. Subagent and DMN processors received their own log labels to separate their LLM usage from user chat.

Policy handling was tightened. A new SYSTEM/INTERNAL ability concept auto-discovers infrastructure abilities like SteerAbility, timer, and review_tool_calls, excluding them from explicit allow/deny lists and preventing permission gate hangs. The schedule.create action was moved from ask to allow to prevent headless harness timeouts. SteerAbility is marked INTERNAL and excluded from ability embeddings and the ability database entirely. Vault-locked errors now surface through a single dispatcher chokepoint, giving the LLM a clear logged-out message.

A broad quality push addressed SonarQube findings across the stack: McCabe complexity decomposition in production functions, camelCase-to-snake_case renames on the MessageProcessor hierarchy, XSS escaping, SSL verification hardening, path-traversal guards, and log-security fixes. Dead code identified by vulture was removed, and import-order lint failures were cleaned up.

Test hygiene improved significantly through systematic pruning—over 2,800 lines of mock-heavy, near-duplicate, and trivial tests were removed while all 1,153 retained unit tests continue to pass. The new locale_service (TKT-530) centralizes timezone, currency, and formatting through a single chokepoint backed by the telemetry table, eliminating scattered datetime.now calls. The Brain UI gained a World State tab with a formatted/raw view switcher and a sidebar fix.

  • Steer dispatch moved to direct handle_tool() injection—no Redis queue, fully traceable in tool_calls table

  • WebSocket reduced to server→client push only; all client sends use HTTP POST endpoints

  • Per-agent config JSONs removed; every LLM call resolves through a single database provider

  • System/Internal abilities auto-discovered and excluded from policy lists, preventing permission hangs

  • Over 2,800 lines of low-value tests pruned while retaining all 1,153 passing tests

  • Brain UI now shows World State with formatted/Raw view toggle