"Open question" banner opens an empty new thread when the child thread runs on a linked environment
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 74/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- typescript
- Domaine
- frontend
Piste de recherche
Commence par apps/web/src/components/chat/ThreadActivityBanners.tsx et apps/web/src/components/chat/useThreadLifecycle.tsx, puis lis la définition de EnvironmentThreadShell dans packages/client-runtime/src/state/models.ts. Suis la transmission de l’environnement du fil enfant lors de son ouverture, y compris la bannière de travail en arrière-plan. Le travail est terminé lorsque cliquer sur la bannière d’un fil enfant dans un autre environnement ouvre ce fil dans son propre environnement ; vérifie les tests pertinents dans les zones correspondant à ces fichiers.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
What happened
Feature: Linked environments, a beta behind Settings → Labs.
A thread on machine A (macOS desktop) had a child thread running on linked machine B (Linux server), and that child was waiting on a question. The parent's timeline showed the child-input banner, with the child's title and an "Open question" button. Clicking it (or the child's title) opened an empty new-thread view, not the child thread. Opening the child's own t3-thread:// link showed the thread and its question correctly.
Diagnosis
The banner sends only the child's thread id. The click handler then pairs that id with the parent's environment:
childInputNowItem(apps/web/src/components/chat/ThreadActivityBanners.tsx:52and:60) callsonOpenThread(child.id)/onOpenThread(first.id). Eachchildis anEnvironmentThreadShell, which already carriesenvironmentId(packages/client-runtime/src/state/models.ts:138), but that id is dropped here.onOpenRelatedThread(apps/web/src/components/chat/useThreadLifecycle.tsx:400–429) buildsscopeThreadRef(environmentId, threadId)from the current thread's environment, then navigates to/$environmentId/$threadId.childThreadInputsAtom(packages/client-runtime/src/state/threadShell.ts:383–420) deliberately includes children on other environments: tasks whosedelegatedFrompoints at this thread. For those, the route becomes/<A>/<B's thread id>, a thread A doesn't have.- Because the server sends
shellThreadFamilies: true(apps/server/src/ws.ts:1788), the guard that would show "This thread is no longer available" is skipped. The app navigates anyway and lands on a blank thread/draft view.
Local subagents share the parent's environment, so this only goes wrong for cross-machine children. The banner was the only in-app way to reach this child's question: the child was also hidden from the sidebar and the Lineage panel (#27004). So the user had no working path to answer it.
Steps to reproduce
- Turn on Settings → Labs → Linked environments on machines A and B, and link A → B.
- From a thread on A, start a task on B that becomes a child of that thread:
delegate_taskwithtarget.environmentId: <B>, ort3_thread_launchwithenvironmentId: <B>plusdelegatedFrom. - Make the child ask a question or request an approval. For example, use a mode that prompts for tool approval, or have it call AskUserQuestion.
- In the desktop app, open the parent thread on A. The banner "Subagent needs input · · Open question" appears.
- Click Open question. Expected: B's child thread opens. Actual: an empty new-thread view for environment A opens.
Version
0.1.5-nightly.20261029.3877 (desktop app and both servers). The same code is on main as of 2026-10-29.
Environment
A: macOS (Darwin 27.0.0, arm64), desktop app 0.1.5-nightly.20261029.3877, Node 24.22.1. B: Linux x64 server 0.1.5-nightly.20261029.3877. Provider claudeAgent (claude-opus-5-5).
Evidence
# apps/web/src/components/chat/ThreadActivityBanners.tsx
<InlineButton tone="muted" onClick={() => onOpenThread(child.id)}> # environmentId dropped
<InlineButton onClick={() => onOpenThread(first.id)}>
# apps/web/src/components/chat/useThreadLifecycle.tsx
const onOpenRelatedThread = async (threadId: ThreadId) => {
const threadRef = scopeThreadRef(environmentId, threadId); # parent's environment
Related issues
- #19165 (closed as duplicate): "Open question" opens the child but no question shows. Different symptom: there the right thread opened.
- #26766: a stale parent link on a remote child, in the opposite direction (child → parent).
- #27004:
t3_thread_launchthreads withdelegatedFromare hidden, which is how this reporter's child had no other entry point.
Fix applied or workaround
None applied. Workaround: open the child through its t3-thread:// link (it includes B's environment id).
Suggested fix: change onOpenThread to take a ScopedThreadRef (or { environmentId, threadId }), and pass child.environmentId from childInputNowItem. The background-work banner's Open button (ThreadActivityBanners.tsx around line 174, onOpenThread(onlyThreadId)) uses the same id-only callback, so check it for the same assumption.
Filed by
Claude Code (claude-opus-5-5) via T3 Code triage
- Langage dominant
- TypeScript
- Étoiles
- 24.8k
- Forks
- 6.4k
- Merge moyen
- 14 h 40 min
- PR mergées (30 j)
- 193
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de pingdotgg/t3code
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
pingdotgg/t3code#27767 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
[Bug]: Dragging a sidebar thread from the lower part of the list auto-scrolls the sidebar to the bottomPeut-être pris @juliusmarminge l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
pingdotgg/t3code#27445 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
pingdotgg/t3code#27146 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de pingdotgg/t3code
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Northeastern-Electric-Racing/FinishLine#4660 ·
Les mainteneurs répondent en général sous 2 jours
-
BeOS .json missingOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
mihaip/infinite-mac#475 ·
-
Let TypeScript accept an initial object in ReactiveDictPeut-être pris @yograj-vijay-yadav l’a pris aujourd’hui. Ouvertebug good first issue help wanted workshop
Difficulté 2/5 1-3 heures Accessibilité débutants 92/100
meteor/meteor#14919 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
marmelab/atomic-crm#401 ·
Les mainteneurs répondent en général sous 1 jour
-
account: profile
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 5 jours