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 SummaryLow Risk Overview Standardizes planning vocabulary and templates around frontier items (PLAN/Linear/branch unit) vs slices (scoped execution), including a new mature Refines process docs: Reviewed by Cursor Bugbot for commit d1072bb. 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>
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.
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.
|
|
||
| ## Retirement rule | ||
|
|
||
| Delete this file after PR is submitted or after Step 5 is decided. |
There was a problem hiding this comment.
Volatile handoff file committed despite its own retirement rule
Low Severity
The newly added HANDOFF.md states in its own retirement rule: "Delete this file after PR is submitted." Since this PR is the submission itself, including the file means it will persist in the repository after merge. The ln-sync skill and ln-build skill both instruct agents to "remove stale HANDOFF.md files instead of preserving them as archive breadcrumbs" and to delete when "unfinished volatile transfer state" no longer exists. This file is volatile session-transfer state that has served its purpose and contradicts its own lifecycle contract by being included in the final PR.
Reviewed by Cursor Bugbot for commit d1072bb. Configure here.



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