Skip to content

[Bug]: Deleted forks remain as UUID rows in Lineage #28978

Closed

Description

@Alb11747

What happened

The user reported UUID rows in the Lineage panel, and asked why deleted forks were still shown. The original installation version was not captured. Investigation and the synthetic reproduction below identify genuinely deleted endpoints, rather than merely unloaded threads.

Area

Web and desktop thread details / Lineage.

Steps to reproduce

  1. Fork a conversation, leaving the context-transfer history in the source thread.
  2. Delete the fork.
  3. Open the source thread's Lineage panel.

The synthetic reproduction uses a source projection containing a retained transfer to a deleted fork, plus one existing fork. It renders the actual panel with application CSS on upstream fa31b66bbb.

Expected behavior

Deleted forks should not remain navigable UUID rows. Existing forks omitted from the initial shell and archived forks should remain reachable, and historical subagent results should remain visible. A failed or pending lookup should not be treated as proof of deletion.

Actual behavior

The deleted fork remains as a UUID-labelled Queued row. deriveThreadRelationshipGraph creates a node from the retained context transfer after the deleted thread has disappeared from the shell; the panel falls back to its ID. An existing older fork omitted from the shell can also show an ID instead of its title.

The user originally reported this in the Windows desktop client. Read-only inspection established that the two affected fork endpoints had deletion timestamps. No live database was modified. Public captures use invented IDs and titles.

Version / environment

Reproduced against upstream fa31b66bbb2ae5234205a8628a78e038d917202f on Windows with the project's Chromium/Playwright browser runner, real panel and CSS, synthetic projections. The built-in Browser panel was unavailable, so a full installed-client reproduction was not performed in this run.

Node.js v24.21.0, Playwright 1.60.0. No provider-specific behavior is involved.

Impact

Deleted forks look like live queued work and expose an unavailable navigation target. Existing older forks omitted from shell snapshots can also lose their readable labels.

Proposed fix available for review

Prepared branch: Alb11747/t3code:fix/upstream-deleted-lineage, commit 7d58d6caa2.

Complete comparison against the reproduced upstream base: one focused commit, 11 files. The branch was rebased/rechecked against current upstream main before publication; the base is unchanged.

The prepared fix performs an on-demand title/existence lookup for related endpoints omitted from live shells, including archived threads but excluding deleted rows. It hides non-subagent relationships only after a settled successful lookup confirms absence, refreshes on shell removals, and preserves historical subagent results and transfer history. Transfer records are intentionally retained: replay and merge-back/result resolution use them.

This spans the read RPC, authorization/contracts, shared query lifecycle, panel and focused tests. I am requesting maintainer triage of the failure and intended behavior before opening the substantial-fix PR, per CONTRIBUTING.md. Maintainers can use this prepared fix or choose another approach.

Verification

The new browser cases reproduce three upstream failures: an existing omitted fork displays an ID, and deleted forks remain visible with and without a stale archived snapshot. The pending and failed-lookup cases already preserve unknown endpoints.

At the published commit:

  • vp run check:changed: all checks passed, including 105 tests across seven executed test files, all 35 affected-package typechecks, format, lint, both knip checks, and GraphQL generation. This is the affected-code check, not the full repository suite.
  • vp test run src/components/chat/ThreadRelationshipsControl.browser.test.tsx from apps/web: all 15 Chromium cases passed. The existence matrix covers an existing omitted fork, deleted fork, renamed archived fork with a stale snapshot title, deleted fork in a stale archived snapshot, pending lookup, and failed lookup. Existing tooltip and historical-subagent navigation tests still pass.
  • The server test confirms active and archived titles are returned, while deleted and unknown IDs are excluded, with an empty request returning an empty map.
  • The relevant React Compiler cases were run explicitly and passed; the check runner's Windows path filter skips its compiler selection.
  • Independent Sol xhigh source review found stale archived-title precedence, which was corrected with a failing-then-passing regression. Live-shell and historical-subagent title precedence remain covered. Commit hooks also passed format, lint and knip.

No hosted checks were separately dispatched for this prepared branch. The full repository suites and an installed-client/physical-input check were not run.

Before (deleted UUID row):

Before

After (existing fork retained, deleted fork hidden):

After

Related but distinct: #26766 covers clicking a deleted remote subagent's parent link, rather than deleted local forks reconstructed from retained transfer history. #22385 addresses the width shift when a Lineage list gains a scrollbar.

Implemented with GPT-6.1 Sol at high reasoning effort in the Codex harness; independently reviewed by GPT-6.1 Sol at xhigh effort.

Activity

  1. added 3 commits that reference this issue on Nov 2, 2026
    ec5cdb5
    3a838d5
    c9b84c0
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