Skip to content

feat(flowchat): stabilize timeline and session pane layout #7074

feat(flowchat): stabilize timeline and session pane layout

feat(flowchat): stabilize timeline and session pane layout #7074

Triggered via pull request September 29, 2026 07:30
Status Cancelled
Total duration 17m 15s
Artifacts –

ci.yml

on: pull_request
Build Impact
17s
Build Impact
Shell Deploy Scripts
16s
Shell Deploy Scripts
Matrix: cli-test
Matrix: Impact-selected Linux / Relay Contract / build
Waiting for pending jobs
Matrix: rust-build-check
DSH Profile Packaging (windows-latest)
0s
DSH Profile Packaging (windows-latest)
Frontend Build
8m 0s
Frontend Build
Rust / CLI Validation
6s
Rust / CLI Validation
Fit to window
Zoom out
Zoom in

Annotations

9 errors, 9 warnings, and 8 notices
Frontend Build
Process completed with exit code 1.
src/app/global-search/globalSearchArchitecture.test.ts > global search ownership > keeps the shared search presentation outside the session right-panel empty state: src/web-ui/src/app/global-search/globalSearchArchitecture.test.ts#L27
AssertionError: expected '/**\n * ContentCanvas main container …' to contain '<EmptyState onClose={disablePopOut ? …' - Expected + Received - <EmptyState onClose={disablePopOut ? undefined : onCollapsePanel}> + /** + * ContentCanvas main container component. + * Shared content surface. The containing scene or panel owns its layout. + */ + + import React, { useCallback, useEffect, useMemo, useRef, useSyncExternalStore } from 'react'; + import { EditorArea } from './editor-area'; + import { AnchorZone } from './anchor-zone'; + import { MissionControl } from './mission-control'; + import { EmptyState } from './empty-state'; + import { useCanvasStore } from './stores'; + import { useTabLifecycle, useKeyboardShortcuts } from './hooks'; + import type { AnchorPosition } from './types'; + import type { CanvasStoreMode } from './stores/canvasStore'; + import { selectActiveBtwSessionTab, type BtwSessionPanelData } from '@/flow_chat/services/btwSessionPane'; + import { useCurrentWorkspace } from '@/infrastructure/contexts/WorkspaceContext'; + import { openMainSession } from '@/flow_chat/services/sessionActivation'; + import { isSamePath } from '@/shared/utils/pathUtils'; + import './ContentCanvas.scss'; + import { flowChatStore } from '@/flow_chat/store/FlowChatStore'; + export interface ContentCanvasProps { + /** Workspace path */ + workspacePath?: string; + /** App mode */ + mode?: CanvasStoreMode; + /** Whether the containing scene is currently visible */ + isSceneActive?: boolean; + /** Interaction callback */ + onInteraction?: (itemId: string, userInput: string) => Promise<void>; + /** Before-close callback */ + onBeforeClose?: (content: any) => Promise<boolean>; + /** Disable transfer and host-close controls for embedded hosts. */ + disablePopOut?: boolean; + /** Override the event this canvas listens to for creating tabs. */ + createTabEventName?: string; + /** Reveal this host after an explicit content-open request. */ + onReveal?: () => void; + /** Hide the containing panel, when this host is collapsible. */ + onCollapsePanel?: () => void; + /** Host-owned layout actions, replacing the group-level close-all button. */ + toolbarActions?: React.ReactNode; + /** Suspend terminal fit/PTY resize while the hosting panel is animating. */ + terminalResizeSuspended?: boolean; + /** Whether this host exposes Mission Control. */ + missionControlEnabled?: boolean; + /** Host-provided content for the no-tabs state. */ + emptyState?: React.ReactNode; + } + + export const ContentCanvas: React.FC<ContentCanvasProps> = ({ + workspacePath, + mode = 'agent', + isSceneActive = true, + onInteraction, + disablePopOut = false, + createTabEventName, + onReveal, + onCollapsePanel, + toolbarActions, + terminalResizeSuspended = false, + missionControlEnabled = true, + emptyState, + }) => { + // Store state — fine-grained selectors so unrelated store changes + // (drag state, closed-tab history, ...) do not re-render the whole canvas. + const primaryGroup = useCanvasStore(state => state.primaryGroup); + const secondaryGroup = useCanvasStore(state => state.secondaryGroup); + const tertiaryGroup = useCanvasStore(state => state.tertiaryGroup); + const layout = useCanvasStore(state => state.layout); + const isMissionControlOpen = useCanvasStore(state => state.isMissionControlOpen); + const setAnchorPosition = useCanvasStore(state => state.setAnchorPosition); + const setAnchorSize = useCanvasStore(state => state.setAnchorSize); + const closeMissionControl = useCanvasStore(state => state.closeMissionControl); + const openMissionControl = useCanvasStore(state => state.openMissionControl); + const activeBtwSessionTab = useCanvasStore(state => selectActiveBtwSessionTab(state as any)); + const activeBtwSessionData = activeBtwSessionTab?.content.data as BtwSessionPanelData | undefined; + const canvasScopeKey = useCanvasStore(state => state.scopeKey); + const { workspace: currentWorkspace } = useCurrentWorkspace(); + const activeSessionId = useS
src/infrastructure/markdown/MarkdownRenderer.test.tsx > Markdown file links > commits a browser view and explicitly reveals its inline host: src/web-ui/src/infrastructure/markdown/MarkdownRenderer.test.tsx#L531
AssertionError: expected "vi.fn()" to be called 1 times, but got 0 times ❯ src/infrastructure/markdown/MarkdownRenderer.test.tsx:531:29
Rust Build Check (windows-latest)
Canceling since a higher priority waiting request for ci-refs/pull/3247/merge exists
Rust Build Check (windows-latest)
The operation was canceled.
Rust Build Check (macos-15)
Canceling since a higher priority waiting request for ci-refs/pull/3247/merge exists
Rust Build Check (macos-15)
The operation was canceled.
Rust / CLI Validation
Process completed with exit code 1.
CI
Canceling since a higher priority waiting request for ci-refs/pull/3247/merge exists
Frontend Build: src/web-ui/src/shared/utils/lazyWithRecovery.tsx#L26
Fast refresh only works when a file only exports components. Move your component(s) to a separate file
Frontend Build: src/web-ui/src/flow_chat/timeline/readerState.tsx#L127
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
Frontend Build: src/web-ui/src/flow_chat/timeline/readerState.tsx#L122
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
Frontend Build: src/web-ui/src/flow_chat/timeline/readerState.tsx#L118
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
Frontend Build: src/web-ui/src/flow_chat/timeline/readerState.tsx#L113
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
Frontend Build: src/web-ui/src/flow_chat/timeline/readerState.tsx#L94
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
Frontend Build: src/web-ui/src/flow_chat/timeline/readerState.tsx#L84
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
Frontend Build: src/web-ui/src/flow_chat/timeline/readerState.tsx#L75
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
Build Impact
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
Shell Deploy Scripts
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
Frontend Build
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
CLI Tests (ubuntu-latest)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
CLI Tests (macos-15)
Due to capacity constraints, jobs targeting macOS arm64 runners may experience longer queue times.
Rust Build Check (ubuntu-latest)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
Rust Build Check (macos-15)
Due to capacity constraints, jobs targeting macOS arm64 runners may experience longer queue times.
Rust / CLI Validation
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"