Repository navigation
fix(web): the right panel opens on the thread's tab, not on Nová karta beside it - #57
Conversation
…a beside it A thread whose first snapshot already lists its agent's tab (it comes into view, or the page reloads, after the agent opened a page) added the tab to the strip with nothing selected: the first snapshot reveals nothing, and the strip's reconciliation kept an empty selection. The panel then opened on the empty Nová karta beside a "Browser" tab whose frame it never loaded, so the agent's page looked missing. The strip after the server's list now selects its first Environment browser tab where nothing is selected or the selected surface went, as upstream's reconciliation does for its browser, even when the list brings nothing new (a panel stored without a selection). Another Environment's tab added behind follows the same rule. A closed panel stays closed; a live reveal still opens it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
agentrozjedemeai
left a comment
There was a problem hiding this comment.
@immakermatty Approved on exact head 4e7eef7. The reconciliation now selects a surviving Environment browser surface when selection is absent or removed, without opening a closed panel; a selected real Nová karta remains the user choice. The first snapshot remains a reveal baseline. The release runbook describes this selection rule and retains the separate no-auto-open rule. In a clean isolated clone: 51 focused tests passed, 4 additional reviewer edge-case tests passed, targeted lint and format passed, web typecheck passed, release contract passed (22), and git diff --check passed. Live CI: 4 successful jobs, 2 skipped advisory jobs; no unresolved threads. Canary/browser verification and stable release remain post-merge gates, not claims of this review.
Problem
A thread's agent opened a page, but the right panel did not show it. The panel opened on the empty Nová karta, and the strip had a "Browser" tab beside it that showed nothing.
This happens whenever a thread's first snapshot after it comes into view already lists the agent's tab. That covers opening the thread after the agent opened the page, reloading the page, or a client that reconnects. The first snapshot is a baseline of reveals by design: a reload never opens the panel by itself. The strip's reconciliation then added the tab but kept an empty selection. When the person opened the panel,
RightPanelTabsshowed the empty panel's Nová karta (activeSurfaceId === null). The frames of the strip's tabs only mount beside a selected surface, so the tab never loaded. Its title stayed "Browser".We reproduced it on a canary Environment running preview 0.0.45-preview.20261012.3:
reconcileBrowserSurfaceseffect selects the first surface on a thread change, which hid the bug there.A live reveal (the thread in view while the agent opens a page) already worked and still works. On the same canary, a new thread's agent opened a page and the panel opened on it by itself.
Fix
reconcileThreadTabsnow selects the first Environment browser tab when nothing is selected or the selected surface went. This is the same rule upstream's reconciliation uses for its browser (fallbackBrowser ?? surfaces[0]).withSurface, theforeignevent without a reveal) follows the same rule. An open panel on the empty Nová karta used to keep it, and now selects that tab.The runbook's paragraph on the web's strip states the rule.
What does not change
Verification
vp test run src/lazurio/threadTabs.test.ts src/lazurio/LazurioEnvironmentBrowser.test.tsx src/lazurio/LazurioNewTab.test.tsx: 51 passed.threadTabs.ts(3 failed, 23 passed) and pass with the fix:vp lint,vp fmt --checkon the changed files,vp run --filter @t3tools/web typecheck,node --test scripts/lazurio-release-contract.test.mjs(22 passed).Follow-up
The agents' instructions in the Lazurio Folder manual (LazurioPlatform) will explain how the Environment browser presents a page in each client. That covers a plain link, the view of a remote tab, and the thread's tab in the panel. It is a separate change.
🤖 Generated with Claude Code (Claude Opus 5.5)