UX-WF-001 — Protect unsaved workflow edits
| Field | Value |
|---|---|
| Status | Open; source-verified, live refresh pending |
| Architecture state | Deployed behavior |
| Severity | Medium |
| Affected surface | Create and edit forms, modal close, navigation, reload, and session expiry |
| Components | sparqd/oqullus; sparqd/workflow-backend only if server-side drafts are selected |
| Associated issue | Not opened |
Where the problem appears
Change a workflow form without saving, then close it, navigate away, reload, or allow the session to expire.
Concrete observed case
Create and edit state lives in component memory. No autosave, durable draft, dirty-state navigation guard, or recovery token was identified. A successful submit resets the form, but interrupted work has no restoration path.
Expected condition
At minimum, warn before discarding dirty changes. For longer multi-task workflows, save a clearly labelled draft keyed by actor, workspace, workflow identity, and base revision; restore it with conflict detection.
Cause and evidence
- Form state is local component state.
- No draft storage or before-leave handling is present in the Workflow authoring surface.
- Multi-task configuration can contain substantial schedule, resource, and dependency work.
Why it matters
Users can lose lengthy workflow definitions silently and may reconstruct them against a newer backend revision without knowing it.
Existing controls and workarounds
Keep an external copy of important settings before leaving or refreshing. Save in smaller deliberate increments only after reviewing that Save publishes a new revision.
Alternatives considered
- Recommended baseline: dirty warning and explicit discard confirmation.
- Server-side drafts with base-revision conflict detection.
- Browser-local drafts — helpful for crashes but insufficient across devices and sensitive configuration requires careful storage.
Component involvement
- sparqd/oqullus owns dirty state and recovery UX.
- sparqd/workflow-backend owns optional draft persistence and revision conflicts.
- Security defines which configuration may be stored locally.
Reproduction and verification
Follow WF-S015.
Resolution conditions
Close when close, navigation, reload, expiry, and concurrent-edit scenarios either preserve changes or require explicit discard, and accepted drafts cannot overwrite a newer revision silently.
Validation and blockers
Oqullus, workflow-backend, UX, product, and security owners must validate.