Files
Nick 408bbb11a4 feat(governor): WAVE D56 — the provider-aware dispatch governor + the live tok/s readout (ADMIT-wave-d56-governor; Gitea #2580 + #2581, owner doctrine 2026-10-24: cloud-first routing, no consent gates on cloud, routing scope = factory lane assignment): (1) TELEMETRY — runecore.Governor samples live tok/s per provider from the engine's REAL turns (provider output-token accounting wired on every wire: ollama eval_count, [OI] completion_tokens, anthropic output_tokens, gemini candidatesTokenCount; honest token-estimate fallback when the wire carries none; a zero-token turn is never a sample); rolling per-provider samples + (provider,lanes) EMA saturation curve persisted via the hot-state pattern (~/.rune/hot/provider_throughput.json, atomic temp+rename, survives restarts); (2) SATURATION MODEL — lane cap = the highest lanes bucket whose marginal tok/s gain clears the floor (RUNE_GOVERNOR_CAP_FLOOR, default 5); no curve = honest cap 1, never invented headroom; (3) CONNECTION-HEALTH (#2581) — the core polls the registry's enabled providers on a 60s cadence (reachable/authenticated/tok/s/error_rate/last_error); the route refuses unreachable, never-probed-alive and 429-throttled providers (a throttle is worse than not spawning) while day-one pre-probe routing passes through; (4) LANE POOLS + CLOUD-FIRST — Route() orders cloud rows ahead of local (the servedByLocalBinding law), least-loaded within a tier, lane pools tracked via Acquire/ReleaseLane; (5) CLASSIFIER INTEGRATION — dispatch-classifier LoadCapacity reads the same hot file; PARALLEL verdicts become throughput-aware ('governor: N lanes free at current tok/s'), the thin pipe states '0 lanes free ... serialize, no fan-out benefit', unknown capacity stays honest; registry/lock semantics byte-unchanged (locks untouched, asserted); (6) INFO BAR READOUT — /v1/status gains the governor section; both bridge seams (serve + library) carry it; the info bar renders ' · 38 tok/s' after the context readout and NOTHING when nothing was measured (the bar never guesses); the sub-agents section shows the governor's own state row (lanes in use/cap, measured tok/s or '—'); red-first tests: governor laws (samples/persist/cap/cloud-first/health/thin-pipe/lanes), classifier capacity laws, bridge both-seam propagation, hermetic fake-serve info-bar proof '(13%) · 38 tok/s'; go test -race -short green on rune-core, dispatch-classifier, tui; vet/gofmt clean; deployed build_paired → ~/.local/share/rune/bin/rune-tui + rune-core rebuilt, core restarted — /v1/status serving the governor section live
2026-10-25 01:21:55 +00:00
..
2026-10-17 11:07:31 +01:00
2026-10-24 17:39:32 +01:00
feat(governor): WAVE D56 — the provider-aware dispatch governor + the live tok/s readout (ADMIT-wave-d56-governor; Gitea #2580 + #2581, owner doctrine 2026-10-24: cloud-first routing, no consent gates on cloud, routing scope = factory lane assignment): (1) TELEMETRY — runecore.Governor samples live tok/s per provider from the engine's REAL turns (provider output-token accounting wired on every wire: ollama eval_count, [OI] completion_tokens, anthropic output_tokens, gemini candidatesTokenCount; honest token-estimate fallback when the wire carries none; a zero-token turn is never a sample); rolling per-provider samples + (provider,lanes) EMA saturation curve persisted via the hot-state pattern (~/.rune/hot/provider_throughput.json, atomic temp+rename, survives restarts); (2) SATURATION MODEL — lane cap = the highest lanes bucket whose marginal tok/s gain clears the floor (RUNE_GOVERNOR_CAP_FLOOR, default 5); no curve = honest cap 1, never invented headroom; (3) CONNECTION-HEALTH (#2581) — the core polls the registry's enabled providers on a 60s cadence (reachable/authenticated/tok/s/error_rate/last_error); the route refuses unreachable, never-probed-alive and 429-throttled providers (a throttle is worse than not spawning) while day-one pre-probe routing passes through; (4) LANE POOLS + CLOUD-FIRST — Route() orders cloud rows ahead of local (the servedByLocalBinding law), least-loaded within a tier, lane pools tracked via Acquire/ReleaseLane; (5) CLASSIFIER INTEGRATION — dispatch-classifier LoadCapacity reads the same hot file; PARALLEL verdicts become throughput-aware ('governor: N lanes free at current tok/s'), the thin pipe states '0 lanes free ... serialize, no fan-out benefit', unknown capacity stays honest; registry/lock semantics byte-unchanged (locks untouched, asserted); (6) INFO BAR READOUT — /v1/status gains the governor section; both bridge seams (serve + library) carry it; the info bar renders ' · 38 tok/s' after the context readout and NOTHING when nothing was measured (the bar never guesses); the sub-agents section shows the governor's own state row (lanes in use/cap, measured tok/s or '—'); red-first tests: governor laws (samples/persist/cap/cloud-first/health/thin-pipe/lanes), classifier capacity laws, bridge both-seam propagation, hermetic fake-serve info-bar proof '(13%) · 38 tok/s'; go test -race -short green on rune-core, dispatch-classifier, tui; vet/gofmt clean; deployed build_paired → ~/.local/share/rune/bin/rune-tui + rune-core rebuilt, core restarted — /v1/status serving the governor section live
2026-10-25 01:21:55 +00:00
2026-10-17 11:07:31 +01:00
2026-10-20 01:15:27 +01:00
2026-10-17 11:07:31 +01:00
2026-10-17 11:07:31 +01:00
2026-10-17 11:07:31 +01:00
2026-10-17 11:33:38 +01:00