FE-709: Continuous workspace shell#134
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
4829a42 to
e8a0a27
Compare
PR SummaryMedium Risk Overview Adds Introduces Reviewed by Cursor Bugbot for commit dce8bbe. Bugbot is set up for automated code reviews on this repo. Configure here. |
🤖 Augment PR SummarySummary: This PR implements a “continuous workspace” interview shell so the center pane behaves like one cumulative conversation across phases instead of separate per-phase views. Changes:
Technical Notes: Keeps 🤖 Was this summary useful? React with 👍 or 👎 |
memory/PLAN.md and docs/archive/PLAN_HISTORY.md changes from this branch will land as a planning-only PR off main after Lu's #132 + #133 stack merges, per the planning-pr convention (known merge conflicts on planning docs + frontier-definitions migration triggers separate-PR recommendation). This keeps PR #134 code-only and conflict-free with Lu's stack. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
a0055e6 to
d1072bb
Compare
d8db6ee to
b9d3a93
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit d1072bb. Configure here.
9b0fb37 to
a4827a2
Compare
a4827a2 to
9b0fb37
Compare
Planning baseline for the umbrella's frontier-item decomposition. Adds three new frontier definitions for the runtime tracks not yet captured in PLAN.md (Tracks 2/3/5), flips continuous-workspace to done after FE-709, and retires side-chat-persistence-v4a as superseded by Track 2. This is a draft planning PR — Linear issue TBD. Per planning-pr convention: planning baselines for shared downstream branches go on a separate planning branch off main (here, off ln/fe-705-extensions so it inherits the new PLAN.md format from Lu's stack and shows only the umbrella additions in the diff). Changes: - Context paragraph: name the umbrella + its 5 sub-tracks - Sequencing: continuous-workspace done; insert chat-runtime-threads, thread-context-provision, reconciliation-runtime into Next - Three new frontier definitions: chat-runtime-threads (Track 2), reconciliation-runtime (Track 3), thread-context-provision (Track 5) - continuous-workspace: Linear=FE-709, Status=done - Horizon: side-chat-persistence-v4a removed (superseded) - Recently Completed: FE-709 entry - Dependencies: TRACK A restructured as the umbrella; RETIRED section added for v4a Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
All four phase routes now render ContinuousWorkspaceView, which shows all realized phase sections stacked in one scroll surface. Unrealized future phases are skipped. Only the current reachable phase section has an actionable bottom artifact. Graph view is unchanged. InterviewView is preserved as-is for its existing test coverage. Co-authored-by: Amp <amp@ampcode.com>
One controller owns the single chat session, lifecycle hooks, auto-phase-intent, and per-phase section projection. ContinuousWorkspaceView no longer double-reads from useSpecificationBundleData + useInterviewController — it uses only the new controller. useInterviewController is preserved unchanged for InterviewView tests. Co-authored-by: Amp <amp@ampcode.com>
Added WorkspaceFocusContext to bridge scroll position from the continuous workspace view to the phase navigation sidebar. IntersectionObserver on section divs updates focusedPhase; the sidebar uses it for is-active highlighting instead of route-active matching when available. Route-based highlighting is preserved as fallback for graph view and export routes. Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: Amp <amp@ampcode.com>
… core Move 9 pure helper functions (live activity, tool items, reasoning text, turn reference comparison) and the bottom-artifact enrichment chain from both useInterviewController and useContinuousWorkspaceController into -interview-controller-core.ts. Both controllers now import from core instead of carrying character-identical copies. Also moves InterviewControllerBottomArtifactState type to core (re-exported from -interview-controller.ts for downstream consumers) and fixes ContinuousWorkspaceController to use InterviewDurableSpecificationState directly instead of ReturnType<typeof ...>. Net reduction: ~185 lines. No behavior change. Co-authored-by: Amp <amp@ampcode.com>
Remove dead InterviewView and useInterviewController mocks from router.test.tsx (no production route renders them anymore). Rename interviewView* counters to workspaceView* to match the actual component under test (ContinuousWorkspaceView). Remove provenance comment from continuous controller. Completes Step 4 of the CONTINUOUS_WORKSPACE_HYBRID.md migration plan. The route-first assumptions were already structurally retired by Steps 1-2 (continuous controller derives activePhase from workflow state, not route params). This commit cleans up the residual test artifacts. Co-authored-by: Amp <amp@ampcode.com>
Clear stale workspace focus on route changes and stabilize continuous workspace section inputs so scroll-spy observers are not rebuilt on unrelated renders. Co-authored-by: Cursor <cursoragent@cursor.com>
Update mutation callback refs synchronously so stable action wrappers always call the latest mutation implementation. Co-authored-by: Cursor <cursoragent@cursor.com>
Avoid rebuilding the continuous workspace observer for artifact-only section changes by keying the effect to the rendered phase list instead of stabilizing controller artifacts. Co-authored-by: Cursor <cursoragent@cursor.com>
Keep submitted-phase live tool indicators running so the refactored controllers preserve the previous pre-stream UI behavior. Co-authored-by: Cursor <cursoragent@cursor.com>
Re-applies FE-705's a4827a2 'Fix completed tool activity rendering' to the extracted -interview-controller-core helpers, so the live tool-running indicator goes false the moment a tool returns output-available instead of persisting until the chat stream ends. InterviewView fixture for the 'pre-stream generating window' test now seeds the tool part with state: 'input-available' (the actual pre-stream state), which is what hasRunningLiveTool requires.
d1072bb to
d0e93ed
Compare
HANDOFF.md is volatile session-transfer state — its own contract said "Delete this file after PR is submitted." ln-sync and ln-build skills both instruct agents to remove stale HANDOFF.md files rather than preserve them as archive breadcrumbs.


Summary
Replaces the per-phase interview center pane with a continuous workspace shell while preserving phase routes, existing interview-controller behavior, and the durable workflow model. The interview still behaves as one four-phase conversation, but the UI now has a stable single-pane host for future chat runtime and reconciliation work.
Changes
ContinuousWorkspaceViewscroll surface.useContinuousWorkspaceControllerto own the single chat runtime, lifecycle handling, auto phase intents, and per-phase section projection.-interview-controller-core.tsso the continuous workspace and legacy interview controller use the same projection logic.Testing
npm run verify