Skip to content

FE-540: Design mode: commitment and exploration#35

Merged
lunelson merged 11 commits into
mainfrom
ln/fe-540-design-mode-commitment-exploration
Apr 10, 2026
Merged

FE-540: Design mode: commitment and exploration#35
lunelson merged 11 commits into
mainfrom
ln/fe-540-design-mode-commitment-exploration

Conversation

@lunelson
Copy link
Copy Markdown
Contributor

feat: enter design mode after scope closure

feat: enable design phase closure proposals

feat: support user-forced design closure

add figma captures to design notes

feat: extract phase-close command vocabulary

feat: project shared force-close availability

feat: persist phase-outcome closure basis

feat: cut workflow projection over to durable closure basis

feat: ship explicit phase-close command union

feat: deepen the shared phase-close module

cleanup and sync

@linear
Copy link
Copy Markdown

linear Bot commented Apr 10, 2026

FE-540 Design mode: commitment and exploration

Implement the second workflow mode on the new turn and knowledge model. The interviewer walks design forks; the observer captures decisions, assumptions, new constraints, and emerging requirements.

Acceptance

  • After confirmed scope closure, the interview enters design mode
  • Design turns yield coherent commitments and assumptions
  • Design mode can propose design closure

Copy link
Copy Markdown
Contributor Author

lunelson commented Apr 10, 2026

This stack of pull requests is managed by Graphite. Learn more about stacking.

@lunelson lunelson changed the title feat: enter design mode after scope closure FE-540: Design mode: commitment and exploration Apr 10, 2026
@lunelson lunelson marked this pull request as ready for review April 10, 2026 06:28
@augmentcode
Copy link
Copy Markdown

augmentcode Bot commented Apr 10, 2026

🤖 Augment PR Summary

Summary: Adds “design mode” as the next workflow phase after confirmed scope closure and unifies the phase-closing seam (recommended close + user-forced close) across workflow phases.

Changes:

  • Introduces shared phase-close command modeling for data-confirmation (discriminated union) plus helpers for parsing, labels, and force-close policy.
  • Extends workflow projection to a richer per-phase state (status, closeability, readiness, closureBasis, proposalPending).
  • Persists durable closure provenance via phase_outcome.closure_basis + a new Drizzle migration.
  • Updates server /chat handling to accept/validate confirm vs force-close commands and to create confirmed outcomes for forced closes.
  • Updates workspace UI to render shared workflow summaries for all phases and to expose a design force-close action; phase summary confirmation now works for both scope and design.
  • Adds/updates tests across shared, server, and client layers for mode transitions, closure proposals, forced closes, and force-close validation errors.
  • Refreshes planning docs and adds design scratch/image notes assets; removes stale spike scripts.

🤖 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. 2 suggestions posted.

Fix All in Augment

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

Comment thread src/server/app.ts
if (confirmationPart && !confirmationTarget) {
const forceClosePhase =
phaseClosureCommand?.kind === 'force-close-active-phase' ? phaseClosureCommand.phase : undefined;
const confirmationTarget =
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

src/server/app.ts:199-202 — The phase in the confirm-proposed-phase-closure payload isn’t validated/used when resolving confirmationTarget (lookup is only by proposalTurnId). This allows mismatched phase vs proposal metadata and makes the extra field effectively untrusted/inconsistent if a client sends a crafted payload.

Severity: medium

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.


function getWorkflowMetaLabel(state: WorkflowPhaseState) {
const parts = [`${state.readiness[0].toUpperCase() + state.readiness.slice(1)} readiness`];
parts.push(state.closeability ? 'Closeable now' : 'Not yet closeable');
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

src/client/routes/InterviewWorkspace.tsx:61getWorkflowMetaLabel will show “Not yet closeable” for phases whose status is closed (since closeability is false once closed), which is misleading user-facing state. This could confuse users reviewing already-closed phases in the header.

Severity: low

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Copy link
Copy Markdown
Contributor Author

lunelson commented Apr 10, 2026

Merge activity

  • Apr 10, 11:44 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Apr 10, 11:52 AM UTC: Graphite rebased this pull request as part of a merge.
  • Apr 10, 11:53 AM UTC: @lunelson merged this pull request with Graphite.

@lunelson lunelson changed the base branch from ln/fe-572-spike-knowledge-ontology to graphite-base/35 April 10, 2026 11:49
@lunelson lunelson changed the base branch from graphite-base/35 to main April 10, 2026 11:50
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.

1 participant