Skip to content

[Bug]: Active threads are not visible in the UI (only settled threads shown) #14260

Description

@TonyDMorris

This structure is what t3 triage agents follow. Keep one problem per issue
and redact secrets and home directory paths from anything you paste.

What happened

The user cannot see any active threads in the T3 app. Only 3 settled threads appear at the bottom of the app. All other active or unsettled threads are completely missing from the UI.

Diagnosis

The investigation found that the SQLite database (~/.t3/userdata/state.sqlite) correctly contains 51 threads without a deleted_at date, meaning the data still exists. However, they are failing to render or load in the UI.

The server trace logs (~/.t3/userdata/logs/server.trace.ndjson) show several fatal errors during thread state restoration and startup:

  1. Error: Message not found: msg_... failing inside opencode.session.message (OpenCodeRuntimeError).
  2. TextGenerationError: Text generation failed in generateThreadTitle: Bad Request: {"detail":"Model not found"} when using delta/claude-sonnet-4.6.

This suggests the app is encountering an error when fetching or re-hydrating these active threads and thus fails to display them.

Steps to reproduce

  1. Start T3 Code app.
  2. View the thread list in the sidebar/UI.
  3. Observe only settled threads are rendered, while the underlying projection_threads table contains active threads.

Version

0.0.42

Environment

macOS (darwin arm64), opencode delta/gemini-3.1-pro-preview

Evidence

{"type":"effect-span","name":"opencode.session.message","exit":{"_tag":"Failure","cause":"OpenCodeRuntimeError: \n ... [cause]: Error: Message not found: msg_0ed5c1430001oJRit7pE8Y0kSl ... {\"body\":{\"name\":\"NotFoundError\",\"data\":{\"message\":\"Message not found: msg_0ed5c1430001oJRit7pE8Y0kSl\"}},\"status\":404} ... "}}

{"type":"effect-span","name":"OpenCodeTextGeneration.generateThreadTitle","exit":{"_tag":"Failure","cause":"TextGenerationError: Text generation failed in generateThreadTitle: Bad Request: {\"detail\":\"Model not found\"} ... [cause]: OpenCodeTextGenerationPromptResponseError: OpenCode prompt APIError failed for generateThreadTitle in <redacted> using delta/claude-sonnet-4.6 ... Bad Request: {\"detail\":\"Model not found\"}"}}

Filed by

delta/gemini-3.1-pro-preview via opencode agent

Activity

  1. juliusmarminge commented on Sep 29, 2026

    @juliusmarminge
    Member

    Triage

    Not a confirmed bug on 0.0.42. The two trace failures do not decide which threads the sidebar renders, and deleted_at IS NULL is the wrong count for "should be on screen."

    The live shell snapshot is deleted_at IS NULL AND archived_at IS NULL (listActiveThreadRows in ProjectionSnapshotQuery.ts). The sidebar then drops anything still archived and, if the header is scoped to one project, anything outside that project. What remains is classified, not filtered:

    • snoozed, until it wakes
    • settled_override = 'settled' goes to the bottom shelf
    • pinned goes to the top
    • everything else is Active

    A row that is in that snapshot cannot vanish because a provider call failed. One bad row fails the whole snapshot decode, so the client would not be left with a settled-only list. The settled shelf also starts at 10 rows, not 3, so three settled threads means three non-archived settled threads in view, not a truncated tail.

    opencode.session.message / Message not found is prompt-admission recovery for one OpenCode message id. The call is Effect.timeout + Effect.option. The span still records Failure when OpenCode returns 404, and the thread stays in projection_threads.

    generateThreadTitle / Model not found for delta/claude-sonnet-4.6 is caught in ProviderCommandReactor and logged as a warning. The thread is kept; the title is just not rewritten. That is a separate model-catalog mismatch, not a list bug.

    Archive keeps the row with deleted_at null and removes it from the sidebar. Those threads are under Settings > Archived threads. Settle leaves them visible at the bottom.

    Please paste this, plus whether the sidebar header is scoped to one project:

    SELECT
      CASE
        WHEN archived_at IS NOT NULL THEN 'archived'
        WHEN settled_override = 'settled' THEN 'settled'
        WHEN pinned_at IS NOT NULL THEN 'pinned'
        WHEN snoozed_until IS NOT NULL THEN 'snoozed'
        ELSE 'active'
      END AS bucket,
      COUNT(*) AS n
    FROM projection_threads
    WHERE deleted_at IS NULL
    GROUP BY 1;

    If active (and unscoped pinned) is 0, the sidebar is showing the database. If active is greater than 0 and that section is still empty, that is the bug and we can take it from there.

  2. TonyDMorris commented on Sep 29, 2026

    @TonyDMorris
    Author

    there was an issue displaying the scoped project button which made it disappear , i had never used this feature before so was unaware it existed , basically the icon it chose for the project is completely invisible 🤣

    Image
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs more infoInitial triage showed no bug. Awaiting more infovia-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions