Skip to content

OTTO v5.0.0-beta: From Heuristics to Real Learning

Pre-release
Pre-release

Choose a tag to compare

@JosephOIbrahim JosephOIbrahim released this 12 Feb 01:31
· 11 commits to master since this release

What's New in v5.0.0-beta

OTTO's cognitive routing pipeline now genuinely learns from outcomes. The trail->routing feedback loop that existed as dead code has been activated, outcome tracking added for all 7 modes, and heuristic weights replaced with UCB1 (a deterministic bandit algorithm with provable regret bounds).

Highlights

Feedback Loop Activated (Phase A)

  • compute_trail_adjustments() was defined but never called in production — now wired into both CLI nudge and the background scheduler
  • Plasticity amplification (2x during RED burnout) wired into trail deposits for done and park commands
  • 200+ lines of existing dead code activated with ~20 lines of new wiring

Honest Naming (Phase B)

  • _kahan_decay -> _exponential_decay (no Kahan summation was involved)
  • "pheromone trail" -> "outcome trail" everywhere
  • "stigmergic learning" -> "trail-based preference learning"
  • Zero behavior change, pure credibility improvement

Outcome Tracking (Phase C)

  • New mode_outcomes SQLite table records empirical mode effectiveness
  • record_outcome(), get_mode_stats(), get_success_rate(), get_total_outcomes() API
  • CLI done -> success, park -> mixed, nudge -> activated outcomes

UCB1 Mode Weighting (Phase D)

  • New learner.py: Upper Confidence Bound algorithm (Auer et al. 2002)
  • Deterministic: same outcome data -> same scores (He2025 compatible)
  • Exploration bonus rewards under-tested modes
  • Safety floors NEVER overridden — adjustments clamped to +/-0.2

Metrics Visibility (Phase E)

  • New otto metrics command shows outcome counts, success rates, UCB adjustments, trail stats

Test Results

  • 600 tests passing (up from 519 baseline)
  • 0 regressions
  • Python 3.11+ (developed on 3.14)

Breaking Changes

  • _kahan_decay() renamed to _exponential_decay() (internal API, unlikely to affect consumers)
  • Trail docstrings changed from "pheromone" to "outcome" terminology

Architecture

MESSAGE IN -> DETECT -> STORE -> SCHEDULE -> NUDGE
                                    |
                              [UCB1 Learning]
                              outcome_data -> compute_ucb_adjustments()
                                    |
                              trail_adjustments -> route_and_execute()
                                    |
                              [Constitutional Gate] <- safety floors NEVER modified
                                    |
                              OUTPUT (or suppress)

What's Next (v5.1)

  • WhatsApp outbound transport
  • Optional LLM-powered response generation
  • User study: does self-suppression improve outcomes?

Full Changelog: v4.0.0...v5.0.0-beta