v0.4.1
v0.4.1 (2026-09-08)
Changes since v0.4.0:
Features
- copy moves via temp-then-rename (9007fca)
- flock the mover's live move (cbcde76)
- reconcile the poll over the database revision, not new's bracket (45450f0)
- persist the last-classified revision (L) (b23911d)
- resume-draft key, dispatch, and seam usage (cf0c29b)
- resume prefill - parse a draft back into a dialogue (e2a6db9)
- retire the resumed draft on success, replace it on re-save (0af43dd)
- resume builder streams attachments from the stored draft (e8bdb54)
- fuzz ParseDraft and harden the part readers against nil parts (3550fbd)
- parse a stored draft and stream its attachment parts (b016464)
- split a body's signature tail at the structural marker (b28f136)
- carry the resume identity across the event round trip (843d6bf)
Bug Fixes
- parse @media blocks as units and strip !important from decls (1011eea)
- refuse the tag when the apply move fails (233b6cc)
- classify a client-written copy's own index bracket (18da98d)
Documentation
- spec width-aware media queries for the stage-2 render (6e2a221)
- bring temp-then-rename into the mover work (2a6586a)
- scope the reconcile's cross-client safety to a mover flock (335bd0d)
- spec the reconciling poll - classify (last, cur], not the new bracket (a598a24)
- align spec and plan with the streaming-resume pivot (a008e36)
- spec the resume path - retire on send, update in place (f58c75b)
Refactoring
- resolve the cache paths through xdg.CacheHome (c2f5e4e)
- one sender/fcc identity and folder resolver (272f95e)
- one message resolver for the reply and resume opens (32b57c4)
Testing
- centralize cache hermeticity in testutil.CacheDir (deeafe7)
- redirect the apply evict test's mover lock to the test cache (8d04e5a)
- workflow - save, resume, send retires the draft (022546e)
- re-arm the re-crop burst gate deterministically under -race (0d9012c)
CI
- push the release to a named branch, never a detached HEAD (ecf14ca)