Skip to content

FE-709: Continuous workspace shell#134

Open
kostandinang wants to merge 68 commits into
mainfrom
ka/fe-709-continuous-workspace
Open

FE-709: Continuous workspace shell#134
kostandinang wants to merge 68 commits into
mainfrom
ka/fe-709-continuous-workspace

Conversation

@kostandinang
Copy link
Copy Markdown
Contributor

@kostandinang kostandinang commented May 13, 2026

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

  • Render realized workflow phases in one cumulative ContinuousWorkspaceView scroll surface.
  • Keep only the current reachable phase interactive while showing closed and future-ready context in place.
  • Add useContinuousWorkspaceController to own the single chat runtime, lifecycle handling, auto phase intents, and per-phase section projection.
  • Share controller helpers through -interview-controller-core.ts so the continuous workspace and legacy interview controller use the same projection logic.
  • Add workspace focus state and sidebar scroll-spy highlighting for phase sections, with route-active fallback for graph/export surfaces.
  • Stabilize continuous workspace section projection during live updates to avoid unnecessary observer churn.
  • Restore submitted-phase live tool running indicators so pre-stream tool activity remains visible.
  • Update controller and view tests for the continuous workspace, scroll focus, live tool details, and submitted pre-stream behavior.

Testing

  • npm run verify

lunelson added 30 commits May 13, 2026 13:17
Copy link
Copy Markdown
Contributor Author

kostandinang commented May 13, 2026

@kostandinang kostandinang force-pushed the ka/fe-709-continuous-workspace branch 2 times, most recently from 4829a42 to e8a0a27 Compare May 13, 2026 16:48
@kostandinang kostandinang self-assigned this May 13, 2026
@kostandinang kostandinang marked this pull request as ready for review May 13, 2026 17:59
@cursor
Copy link
Copy Markdown

cursor Bot commented May 13, 2026

PR Summary

Low Risk
Documentation-only changes that adjust agent workflows and planning vocabulary; low implementation risk, with the main risk being process confusion if the new terminology is applied inconsistently.

Overview
Adds new skill docs (d3k, ln-diagnose, ln-disambiguate, ln-prototype) and updates multiple existing ln-* skills to clarify routing, testing/TDD discipline, and when to use ln-design vs ln-refactor.

Standardizes planning vocabulary and templates around frontier items (PLAN/Linear/branch unit) vs slices (scoped execution), including a new mature memory/PLAN.md shape (Context + Sequencing + stable Frontier Definitions) and corresponding updates across ln-plan, ln-scope, ln-build, ln-oracles, ln-spec, ln-sync, and AGENTS.md.

Refines process docs: planning-pr is narrowed to an explicit advisory (no automatic branching), HANDOFF.md is added as a volatile transfer snapshot, and several design/archive docs are annotated/retitled and cross-links are updated (including additional sync-archive entries in docs/archive/PLAN_HISTORY.md).

Reviewed by Cursor Bugbot for commit d1072bb. Bugbot is set up for automated code reviews on this repo. Configure here.

@augmentcode
Copy link
Copy Markdown

augmentcode Bot commented May 13, 2026

🤖 Augment PR Summary

Summary: 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:

  • Replaces per-phase InterviewView routes with ContinuousWorkspaceView (single scroll surface that stacks realized phase sections).
  • Adds useContinuousWorkspaceController to own the spec-scoped useChat runtime, lifecycle wiring, auto phase-intent submission, and section projection.
  • Introduces WorkspaceFocusProvider + IntersectionObserver scroll-spy to track focusedPhase and drive sidebar highlighting.
  • Extracts shared pure helpers + bottom-artifact enrichment into -interview-controller-core.ts so both controllers reuse the same logic.
  • Updates router tests to reflect the new workspace view mount/render semantics.
  • Updates planning docs (memory/PLAN.md, docs/archive/PLAN_HISTORY.md) to reflect the runtime umbrella and FE-709 completion.

Technical Notes: Keeps InterviewView/useInterviewController intact for the existing large test suite while switching the live phase routes to the new continuous workspace host.

🤖 Was this summary useful? React with 👍 or 👎

Copy link
Copy Markdown

@augmentcode augmentcode Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review completed. 1 suggestion posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

Comment thread src/client/routes/specification/$id/-phase-navigation-sidebar.tsx
Comment thread src/client/routes/specification/$id/-workspace-focus.tsx Outdated
kostandinang added a commit that referenced this pull request May 13, 2026
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>
Comment thread src/client/routes/specification/$id/_view/-interview-controller.ts Outdated
kostandinang and others added 11 commits May 14, 2026 12:11
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.
@kostandinang kostandinang force-pushed the ka/fe-709-continuous-workspace branch from a0055e6 to d1072bb Compare May 14, 2026 10:23
@kostandinang kostandinang changed the base branch from main to ka/fe-709-runtime-umbrella-planning-sync May 14, 2026 10:23
@kostandinang kostandinang changed the base branch from ka/fe-709-runtime-umbrella-planning-sync to graphite-base/134 May 14, 2026 10:25
@kostandinang kostandinang changed the base branch from graphite-base/134 to main May 14, 2026 10:26
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ 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.

Comment thread HANDOFF.md

## Retirement rule

Delete this file after PR is submitted or after Step 5 is decided.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit d1072bb. Configure here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants