Skip to content

[Bug]: Lineage keeps a delegated child's launch model after it changes #23837

Closed as not planned

Description

@AksharP5

Before submitting

  • I searched existing issues and did not find an exact duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/web, also used by desktop.

Steps to reproduce

  1. Launch an app-owned child with delegate_task, using gpt-6-astra with High effort.
  2. Open the child thread, switch to gpt-6.1-sol with Extra High effort, and run a follow-up.
  3. Return to the parent, open thread details, and hover the child in Lineage.

Expected behavior

Lineage shows the child's current model, provider account, and options. Historical task cards can retain the settings used for their original task.

Actual behavior

The child view shows Sol / Extra High, while the parent's Lineage hover card still shows Astra / High. The hover card reads the original subagent record rather than the child thread's current selection.

Impact

Minor bug or occasional failure. The stale label makes users doubt whether a requested model switch took effect.

Version or commit

Reproduced on upstream main 22840ab943b8418744b48223411e46ba4fdcef1a. The same code remains on ef92441313da327139df75daa8f723c0f42348f6.

Environment and verification

Linux, Chromium, isolated local web client. A synthetic persisted parent/child fixture reproduces the mismatch without private conversation data or live provider execution. A focused browser regression fails for Astra-to-Sol and Codex-to-Claude changes on main; both native-metadata controls pass.

Screenshots

Same fixture, dark theme, 1440 × 900 CSS viewport, DPR 1. Matching crops show the parent tooltip after the child has switched to Sol.

Before With the prepared fix
Before: Lineage incorrectly shows Astra and high effort After: Lineage shows Sol and xhigh effort

Related work

Investigated with GPT-6.1-Sol through Codex in T3 Code; the prepared fix was reviewed by GPT-6-Astra at High effort.

Activity

  1. EtanHey commented on Oct 22, 2026

    @EtanHey
    Contributor

    Additional real-install confirmation of #23837, including a Claude-to-Codex provider handoff.

    Environment: T3 Code Nightly desktop app on macOS arm64 (Darwin 27.0.0), connected to its local server. Affected server version: 0.1.2-nightly.20261022.3541, confirmed by /.well-known/t3/environment. The separate triage CLI version is 0.1.2.

    Observed behavior: An app-owned delegated child began on Claude Opus 5.5, then switched to Codex GPT-6.1-Sol with Extra High effort. The user reports that the child view shows the current model while the parent's Lineage still identifies it as Claude.

    Read-only database evidence from that same child:

    Original subagent: origin=app_owned
      driver/providerInstanceId=claudeAgent
      model=claude-opus-5-5
    Current child selection:
      instanceId=codex
      model=gpt-6.1-sol
      reasoningEffort=xhigh
    Context handoff:
      strategy=full_thread_summary
      status=ready
      delivery.status=injected
      ready at 2026-10-22T20:44:54.110Z
    Later Codex runs and provider turns: completed
    

    Source confirmation: At the affected release commit 044f07257c9684ae4543bd1e1ebf9c394e9e3830, ThreadRelationshipsControl.tsx selects the provider from agent.providerInstanceId before the child thread's provider (lines 479–484), and passes agent.model / agent.modelSelection to the hover card (lines 499–507). The row icon uses that same provider driver. This matches the issue's diagnosis and the code addressed by #23838.

    The handoff and completed Codex turns are persisted runtime evidence; I did not trigger a new handoff or run the proposed fix. No database or application changes were made. A user-supplied screen recording is available but is not attached to this comment.

    Investigated via t3 triage by Codex (GPT-6.1-Sol).

  2. juliusmarminge commented on Oct 24, 2026

    @juliusmarminge
    Member

    Reproduced in the isolated web app on 7f7daad985: a synthetic app-owned child has Sol / Extra High selected, while the parent’s Previous agents Lineage hover shows Astra / high. Runtime steps and evidence. Existing #23838 addresses this; two independent static reviews found no blockers and all 29 head checks pass. The PR remains open and unmerged.

  3. juliusmarminge commented on Nov 12, 2026

    @juliusmarminge
    Member

    I tried to reproduce this on the current build and could not.

    Commit 3c68642 (origin/main). Ran the web app from an isolated worktree with T3CODE_DEV_SEED=0 vp run dev on a fresh database, with a scratch git project. (1) Started a Codex parent thread that called delegate_task for an app-owned child on gpt-6-astra with high effort; the child ran and completed, and its composer read 'GPT-6-Astra, High'. (2) Opened the child in the web UI, switched the composer to GPT-6.1-Sol / Extra High (the timeline showed '6 Astra High → 6.1 Sol Extra High') and sent a follow-up, which completed. (3) Opened the parent, opened Thread details > Lineage > Previous agents and hovered the child: the card read '6.1 Sol · xhigh', the current selection. The parent's subagent table now held a second app-owned record for the same child thread with modelSelection gpt-6.1-sol/xhigh (written by the follow-up path in Orchestrator.ts that copies run.modelSelection, added in #17696). (4) Provider change: switched the same child to Claude Haiku 5.5 and sent another follow-up (with a context handoff); a third record was written with providerInstanceId claudeAgent, and the parent's hover card read 'Haiku 5.5'. (5) Delegated a second child (Astra/High) running sleep 300, stopped it from the UI (status interrupted), switched it to Sol / Extra High and sent a follow-up; the parent's hover card read '6.1 Sol · xhigh'. The stale label appears only when the parent holds the original subagent record without a follow-up record, which is the state the reporter's and the maintainer's synthetic fixtures built. A real follow-up writes that record, including on the reporter's commit, which already contains #17696.

    Closing as not planned. If it still happens for you, reply with the exact steps and the version you are on and it will be looked at again.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions