Make It Final — Letting a Piece Be Done
Status: Proposed 2026-09-29. Awaiting Sarah's decisions (below) before Phase 1.
Why
Sarah, revising a poem: "I sorta feel like I'm in this Discuss > Critique > Revise loop that doesn't want me to ever finish."
The loop is built into the code in three places:
- Critique must find problems.
CritiqueService.systemPromptrequires "3 to 6 numbered findings" on every reading. A finished draft still gets at least three things to fix. - Nothing records "done."
WorkspaceStore.status(of:)derives Exploring → Drafting → Revising. A piece that has been critiqued once reads "Revising" in the Library forever. - Every surface ends by inviting more work. The mentor answers and offers the next move, callouts keep arriving, and Critique's main button is "Start Revising."
A button alone would add an exit without changing the loop. The plan therefore starts with Atticus being able to say a piece is ready (Phase 1), then adds Make it Final (Phase 2), then the moments after (Phase 3).
Principles this answers to
- Reversible Without Penalty: Final never locks anything. Editing after Final simply moves the piece back to Revising, and the Final version stays in Versions.
- Prioritize the surprising over the complete: a reading of a ready draft names what works and at most two optional touches.
- The Writer's Own Words / authorship: Final marks the writer's text as they left it. Atticus doesn't polish on the way out.
- Destinations: the Foundation names Docs and Word as where finished work lives, so Final hands off with Copy / Export.
Decisions for Sarah
- D1. Does Make it Final mint a version? The versioning spec allows exactly four triggers. Recommendation: Final is a fifth trigger,
MintTrigger.markedFinal, but it mints only when the text changed since the current version. Otherwise it stamps the current version. That keeps "Final" findable in Versions without duplicate rows. - D2. The "ready" bar. Recommendation: ready requires no structural or argumentative finding a reader would act on, no predicted disengagement, and (when a recipient is set) a recipient who would do what the writer wants. Close means one substantive item remains. Not yet is everything else.
- D3. Student wording. Recommendation: the same action, labeled "Ready to submit" for student work, with the numeric score shown in the closing moment.
- D4. Does Critique still offer findings on a ready draft? Recommendation: 0 to 2 findings, labeled "Optional," with the prose leading on what works.
Phase 1 — Atticus can say "ready"
- Add a
<readiness>tag to the Critique output (ready|close|not_yetplus one sentence naming why), with the D2 bar in the system prompt - Change the findings rule from "3 to 6" to "0 to 6": a ready draft gets at most two findings marked optional; close and not-yet keep today's range
- Parse readiness in
CritiqueStreamParser; persist it onCritiqueResultas nullablereadinessRaw+readinessNote(LOW-risk additive migration) - Critique view: a ready reading leads with a "Ready to send" band (confirmations first, optional touches after), and the primary button becomes "Make it final" instead of "Start Revising"
CritiqueConsistencyAuditor: flag a readiness verdict that flips between readings of an unchanged draft- Composition mentor: pass the latest readiness in
critiqueContext; when ready, the mentor answers questions but doesn't propose another pass - Tests: parser, persistence, prompt contains the bar, the consistency flag, the mentor context line
Phase 2 — Make it Final
Draft.finalizedAt: Date?(nullable, LOW risk) andMintTrigger.markedFinal(per D1)WorkspaceStore.makeFinal(project:prompt:): commit the buffer, mint or stamp per D1, count it as stepping back for Voice Lab (voiceDraftSteppedBack)- Derived status:
ProjectStatus.finalwhen the current draft is finalized and the live text still matches its body; editing reverts to Revising with no action from the writer - Library: a "Final" pill and group, showing the date ("Final · Sep 28")
- Composition header: "Make it final" beside the version meta; Critique's ready band carries the same action
- The closing moment (a sheet the writer dismisses; not a modal gate): Copy, Export, and a line of what changed ("v1 → v6 · 412 → 368 words · 3 critique readings")
- Final quiets Atticus: no ambient callouts and no rescue prompts on a finalized, unchanged draft
- Multi-prompt projects: finality is per prompt; the project reads Final only when every prompt is final
- Tests: mint-or-stamp, derived status and revert-on-edit, per-prompt rollup, callout suppression, Voice Lab step-back
Phase 3 — After final
- Versions rail badges the Final version
- Writing backup: write a copy of the final text into the writer's backup folder, named as final (reuses
WritingBackupService) - Reopening a final piece shows one quiet line — "Final on Sep 28. Changes start a new version." — no confirmation dialog
Verification (Sarah)
- Take the poem through Critique and confirm the reading can say it's ready without inventing three problems
- Make it final, see it in the Library as Final, edit a line, and confirm it returns to Revising with the Final version still in Versions
Final review
Pros. The plan fixes the cause (a Critique that must find problems) along with the symptom (no exit). Final state is derived from the text itself, so reopening needs no special mode, dialog, or unlock. It reuses versioning, the Voice Lab step-back, and the backup service instead of adding parallel machinery.
Cons and risks.
- A readiness verdict that comes too easily would erode trust in Critique. The D2 bar and the consistency check are the guard, and the bar needs tuning on real drafts.
- "0 to 6 findings" loosens a floor that exists to keep Critique substantive. A lazy reading could now return nothing on a draft that isn't ready. The rule ties zero findings to a ready verdict only.
- A fifth mint trigger changes an agreed spec (D1).
Edge cases the plan may handle poorly.
- A writer who marks Final, makes a one-character fix, and wants it still Final: derived status reverts them to Revising. They'd press Make it final again, which is one click but could feel fussy.
- Pieces with several prompts where only some are final show a partial state that the Library pills don't express yet.
- Legacy critiques have no readiness and will show today's layout until re-run.
Adjustments worth considering.
- Let the mentor offer Make it final in conversation when Critique says ready, as a chip rather than prose.
- A gentle end-of-session nudge ("This read as ready last time. Make it final?") on reopening a ready, unchanged draft.
Confidence: 80/100 that this is the right shape. The main uncertainty is the readiness bar, which only real drafts will settle.