- Auto-save drafts on signal-add + memory teach + task creation forms (closes the named rev-116 next-sprint candidate)Closes the explicit rev-116 next-sprint candidate ("auto-save drafts on the three remaining rev-115 toolbar surfaces"). Rev 116 closed auto-save on the four most-frequently-opened entity-edit composers (operator notes, renew note, memory edit, comment); the three remaining surfaces โ rev-22 signal-add form, rev-6 memory teach-the-desk add form, and rev-24 task creation form โ create new entities rather than editing existing ones, so they need workspace-scoped draft keys instead of entity-scoped. Rev 117 ships exactly that, extending the rev-116 draftKey namespace with three new helpers (signalAdd, memoryAdd, taskCreate). Each composer now restores any in-flight draft on open with a contextual 'Restored draft from this browser. Submit / Save / Queue or discard.' callout, persists changes debounced 500ms, and clears the draft on submit / cancel / empty-field. Templates on the task creation form deliberately clear the draft on apply so the operator sees exactly the template shape, not a half-merged state. Until rev 117 a stray Cmd-W on a partial signal-add or task creation form destroyed the work; rev 117 closes that on every typed-input creation composer not just every editing composer.
- Visible 'Draft saved' chip across all eight auto-save composers (closes the named rev-116 next-sprint candidate)Closes the explicit rev-116 next-sprint candidate ("draft-saved indicator on auto-save composers"). Rev 115/116 shipped silent auto-save โ operators didn't know the draft was persisted until they reopened the composer. Rev 117 closes that affordance loop with a transient 'Draft saved' chip that fades on each persist via a 1.8s ld-draft-saved-fade keyframes animation. Re-mounts on every save (key={savedAt}) so the animation re-fires on every persist, not just the first. Brand-color teal palette distinguishes the rev-117 transient persistence signal from the rev-116 amber 'Restored draft' callout (which is sticky until dismissed). Wired into all eight typed-input composers โ five existing rev-116 surfaces (artifact body editor, operator notes, renew note, memory edit, comment) + three new rev-117 surfaces (signal-add, memory-add, task-create) โ so the workspace's auto-save vocabulary now includes both the recovered-draft callout (rev 116) and the just-persisted-draft chip (rev 117) with one consistent visual story across every typed-input creation and editing surface.
- Workspace-scoped draftKey namespace + the rev-117 DraftSavedChip primitiveCumulative architectural cleanup. The rev-116 draftKey namespace covered five entity-scoped composers (artifactBody, taskOperatorNote, taskRenewNote, taskComment, memoryEdit) keyed by entity id. Rev 117 adds three workspace-scoped composers (signalAdd, memoryAdd, taskCreate) keyed by workspace id since they create new entities rather than editing existing ones โ a partial signal-add in workspace A should NOT restore on switching to workspace B. New shared `DraftSavedChip` component (src/components/dashboard/draft-saved-chip.tsx) consumes a single `savedAt` timestamp prop so every composer surface uses the same chip with no per-component duplication. The chip uses the existing rev-116 storage layer verbatim โ pure UI on top of the rev-116 primitive, no new persistence concept.
- Visual polish โ `.ld-draft-saved-chip` palette + animationCumulative micro-polish (every rev 22+ has carried one). New .ld-draft-saved-chip CSS uses brand-color teal (rgba(31,143,137,*)) so it reads as a positive persistence signal โ distinct from the rev-116 amber .ld-draft-restored callout palette ("your previous work is here, decide what to do with it"). The chip lifts 2px on appear, holds for ~1s at full opacity, then fades 2px upward โ clean enough to read without competing with the rev-114 live preview or the rev-115 word-count chip. Pointer-events: none so it never blocks form interaction. The two affordances (restored callout sticky + saved chip transient) read with one coherent vocabulary at different scopes: amber sticky = your past work, teal transient = your current keystroke.