May 18, 2026

Refactor chat dispatch, fix save_graph infinite loop

Refactored chat message routing into a single dispatch_message() chokepoint with hidden_input and intercept knobs

Refactored chat message routing into a single dispatch_message() chokepoint with hidden_input and intercept knobs. Deleted pending_steers infrastructure including drain threading and broadcast plumbing, achieving a net reduction of 331 lines of code.

Updated token metric card labels to reflect active window filters (e.g., Last 24h) and distinguished midnight-based scope with Today (UTC). Cache hit cards now return null or N/A for providers like Ollama that report no cache data, avoiding misleading zero percent values.

Resolved infinite ACT dispatch loop in save_graph by adding session-level deduplication. The processor now short-circuits identical payloads and surfaces an already_stored signal to the LLM when duplicates are detected, preventing convergence stalls and worker starvation.

Reverted the introduction of a 90-second timeout on the permission_request gate.

  • Single dispatch_message() chokepoint removes pending_steers infrastructure and saves 331 LOC.

  • Session-level deduplication prevents infinite save_graph loops by short-circuiting duplicates and signaling convergence.

  • Token metric cards now display accurate window filters, UTC scope labels, and null for unsupported cache providers.

  • Reverted the permission_request timeout gate addition.