[Bug]: Background task remains running and retries with <none> after provider stream timeout

Author: ricatixCreated Sep 15, 2026Updated Sep 15, 2026

What happened, and what did you expect?

A background Oracle task using a single configured model received a terminal upstream stream error, but the task lifecycle did not become terminal. The TUI retried it as Retrying (attempt 2) · <none>, while plugin logs continued to report the child as running for more than two minutes after the gateway had already ended the request with stream stall timeout.

Expected behavior:

  • the provider error should be preserved instead of rendered as <none>;
  • the background task should transition once to a terminal error state;
  • the parent should receive that terminal result and be able to reconcile it.

This resembles the lifecycle family tracked in #595 and #998, but this reproduction does not use a model-array fallback: Oracle is configured with one model string. The trigger is a terminal streaming error from the provider/gateway.

The plugin was also running in degraded compatibility mode: startup logs report unavailable ctx.storage, ctx.generate.text, ctx.tool.transform, ctx.session.hook, ctx.tool.hook registration, and ctx.event.subscribe, followed by children-driven degraded mode. This may be relevant to the missing terminal reconciliation.

Steps to reproduce

  1. Use OpenCode 1.18.31 with oh-my-opencode-slim 2.2.20.
  2. Configure Oracle with one streaming model (not a fallback array).
  3. Start Oracle through task(..., background: true) with a large context.
  4. Make the upstream Responses stream end with an error after a long silent gap (observed: stream stall timeout).
  5. Observe the task UI and plugin lifecycle logs.

Observed sequence (UTC, identifiers redacted):

03:16:46 child state=running; upstream streaming request starts
03:29:25 gateway ends request: stream stall timeout
03:31:39 child is still reported state=running
TUI: Retrying (attempt 2) · <none>

A separate lifecycle observation in the same environment produced:

state=error
timedOut=false
hasResult=true
terminalUnreconciled=true

oh-my-opencode.json

jsonc
{
  "agents": {
    "oracle": {
      "model": "9router/cx/gpt-5.6-sol",
      "variant": "high"
    }
  }
}

OpenCode version

1.18.31

oh-my-opencode-slim version

2.2.20

Operating system

macOS (client); Linux/Docker (gateway)

Logs, screenshots, or extra context

bash
ctx.storage unavailable
ctx.generate.text unavailable
ctx.tool.transform unavailable
ctx.session.hook unavailable
ctx.tool.hook registration failed
ctx.event.subscribe unavailable
children-driven degraded mode

Related:

  • #595 tracks detached terminal results during model-array fallback.
  • #998 tracks premature terminalization during fallback; this case shows the inverse symptom, remaining running after terminal provider failure.
  • The gateway-side stream stall is being reported separately to decolua/9router.

No account identifiers, prompts, request bodies, tokens, or connection IDs are included.

Source: alvinunreal/oh-my-opencode-slim