FEAT-012 deferred task — tracking issue (filed per constitution Development Workflow / CLAUDE.md; closes analyze Round 11 F2).
What
Make a drafted handoff durable on submission failure (FR-072a): if the daemon rejects a submission, the handoff must "remain in drafted with the daemon error attached" so the operator can navigate away, return, amend, and retry without losing context.
Why deferred / blocked
Today the draft + failure context live only in the handoff-flow widget state, so they're lost on widget tear-down. Durability requires the daemon to accept a new write-through method app.handoff.draft(params: { draft_id, draft_payload }) so Handoff.failureContext is persisted server-side. That method does not exist in FEAT-011 (0 matches in main).
Upstream status — not yet created
No upstream artifact exists yet. The method shape is pre-specced in specs/012-flutter-control-panel/upstream-feat011-extension-draft.md §(b). FEAT-014 covered only the dashboard (§a); the handoff-draft + streaming pieces (§b/§c) were left for a separate feature (proposed FEAT-015).
Unblock steps
- From the root checkout on
main, /speckit.specify a new daemon feature (FEAT-015) adding app.handoff.draft (seed from the draft §b); plan → tasks → implement on src/agenttower.
- FEAT-012 client side: persist the draft via
app.handoff.draft so it survives tear-down; swap the soft soft-probe in integration_test/us3_handoff_flow.dart.
Ships today (interim)
Submission failure is handled inline within the open flow (error shown, retry works) — only cross-navigation persistence is missing.
Refs: FEAT-012 task T166, FR-072(a), swarm-review H-B10.
FEAT-012 deferred task — tracking issue (filed per constitution Development Workflow / CLAUDE.md; closes analyze Round 11 F2).
What
Make a drafted handoff durable on submission failure (FR-072a): if the daemon rejects a submission, the handoff must "remain in
draftedwith the daemon error attached" so the operator can navigate away, return, amend, and retry without losing context.Why deferred / blocked
Today the draft + failure context live only in the handoff-flow widget state, so they're lost on widget tear-down. Durability requires the daemon to accept a new write-through method
app.handoff.draft(params: { draft_id, draft_payload })soHandoff.failureContextis persisted server-side. That method does not exist in FEAT-011 (0 matches inmain).Upstream status — not yet created
No upstream artifact exists yet. The method shape is pre-specced in
specs/012-flutter-control-panel/upstream-feat011-extension-draft.md§(b). FEAT-014 covered only the dashboard (§a); the handoff-draft + streaming pieces (§b/§c) were left for a separate feature (proposed FEAT-015).Unblock steps
main,/speckit.specifya new daemon feature (FEAT-015) addingapp.handoff.draft(seed from the draft §b); plan → tasks → implement onsrc/agenttower.app.handoff.draftso it survives tear-down; swap the soft soft-probe inintegration_test/us3_handoff_flow.dart.Ships today (interim)
Submission failure is handled inline within the open flow (error shown, retry works) — only cross-navigation persistence is missing.
Refs: FEAT-012 task T166, FR-072(a), swarm-review H-B10.