Skip to content

Capability audit: LLC adapter layer + voice pipeline — confirmed gaps #13096

Description

@mrveiss

Context

A capability audit of two AutoBot subsystems — the LLC external-agent adapter
layer
and the voice conversation pipeline — against established practice for
each. This umbrella collects every confirmed gap, each verified by reading the
code and recorded with the grep/file evidence in the child issue.

Findings are grouped by subsystem. Every item below was confirmed absent, not
assumed absent.

What the audit confirmed we already do well

Recorded so these are not re-litigated:

Tasks

LLC adapter layer

Voice pipeline

Filed separately (not a capability gap)

Disproved during the audit

  • Retry applied around a streaming response (would replay already-emitted
    deltas) — checked, does not occur. Retry wraps only the buffered
    chat_completion() path; stream_completion() is unwrapped and the fallback
    chain has no streaming path. Detail in the close-out comment below.

Deliberately NOT proposed

Recorded with reasons so they are not re-raised without new information:

  • A dedicated semantic end-of-turn model. Our STT is server-side, so hosting
    one means a new worker-VM deployment plus an extra hop inside the turn path. The
    latency and ops load plausibly cancel the accuracy gain in our topology. The
    cheap heuristic (V4) captures most of the value. Revisit only with measurements.
  • Flattening the LLC adapters into a single data-table registry. The elegant
    version of that pattern only works where a normalizing protocol sits in front of
    every agent. Ours carry genuine per-agent logic — CLI flags, credential
    injection, session resume, rate-limit output scanning, token parsing — precisely
    because there is no such protocol. Flattening would relocate that logic somewhere
    worse. The precondition is a protocol, not a refactor. See discovery(orchestration): AgentRegistry fragmentation — 4 different implementations + 1 Protocol with same name #6828 for the prior
    round of this.
  • Adopting a normalizing agent-transport protocol. It would buy streaming
    output, in-flight permission relay, and mid-session model switching — real
    capabilities our detached headless-CLI model cannot offer. But it would mean
    depending on a protocol under a year old, with exact-pinned third-party adapter
    versions. Our current model is less capable and materially more stable. Worth
    re-evaluating in ~2 quarters, not now.

Sequencing

#13097 first — it is a live bug, and #13099 (stall-kill) makes the orphaning worse until
it is fixed. Then #13098 (highest value-per-line), then #13102 + #13104 (most
user-visible), then #13100, #13103, #13105, #13101. #13110 is now its own epic
(#13119-#13123) and runs in parallel — de-fork + wire-in work, not new construction.

Activity

  1. mrveiss commented on Jul 31, 2026

    @mrveiss
    OwnerAuthor

    Audit close-out — two remaining items resolved

    DISPROVED: retry is never applied around a streaming response

    Suspected hazard: a retry wrapper re-attempting a call after SSE bytes were
    already consumed would replay already-emitted text/tool deltas to the client.

    Checked and the invariant holds — no fix needed:

    • llm_shared/base_provider.py:157 — execute_with_retry(_attempt, …) wraps
      chat_completion(), which returns a fully-buffered LLMResponse. Retrying a
      buffered response cannot replay partial deltas.
    • stream_completion() (base_provider.py:246) is a separate abstract method and
      is not wrapped by the backoff handler.
    • No retry/backoff wrapper on any provider's stream_completion implementation.
    • fallback_chain.py and model_fallback_coordinator.py contain no streaming
      references — fallback operates on non-streaming completions only, so there is no
      mid-stream provider switch that could replay output.

    Recorded so this is not re-investigated. If streaming retry or mid-stream fallback
    is ever added, this invariant must be re-asserted at that point.

    CONFIRMED and filed: #13110 — vision not wired into the voice loop

    The one item left un-audited in the original pass. Confirmed: the voice path has
    no visual-input reference at all (every frame hit in the voice composables is an
    audio frame — the AudioWorklet render quantum). All the vision components exist;
    nothing connects them to the voice loop. Filed as #13110.

    Umbrella task list updated below.

  2. mrveiss commented on Jul 31, 2026

    @mrveiss
    OwnerAuthor

    Two further findings filed after reconciling every item from the audit against what was actually opened:

    #13110 re-scoped into a vision epic (#13119-#13123) — see its own thread.

  3. mrveiss commented on Aug 4, 2026

    @mrveiss
    OwnerAuthor

    Sequence map: this umbrella is track U#13096 in #13483, which places all 282 open issues into ordered tracks.

    Derived order for this track's 9 open children:

    1. #13097 [P0] LLC adapters: agent cancel/timeout orphans the whole subprocess tree
      2. #13098 [--] LLC adapters: no read-only sign-in probe before dispatch — signed-out agen
      3. #13099 [--] LLC adapters: no stall or first-output watchdog — a hung run holds a slot 
      4. #13100 [--] LLC adapters: no version floor or compat assertion on any external agent C
      5. #13101 [--] LLC adapters: commentary vs final answer is tag-based, so it cannot work f
      6. #13102 [--] Voice: TTS text is not shaped for speech — markdown, file paths, URLs and 
      7. #13103 [--] Voice: first audio waits for a full terminated sentence — no sub-sentence 
      8. #13105 [--] Voice: end-of-turn is purely temporal — a mid-sentence pause commits the t
      9. #13116 [--] LLC scheduler: only rate-limit failures have a recovery path — every other
    

    How much to trust this: track membership is reliable. The order is derived from stated blockers (only 9 exist backlog-wide), then priority label, then issue number — it is a starting default, not a proven critical path. Where a child carries its own ## Implementation order, that wins.

    64% of open issues have no priority label, which is why some rows sort last for no good reason — see #13485.

  4. modified the milestones: v0.9.0, v0.10.0 on Sep 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions