Repository navigation
Writ v0.4.0
What's changed
Features
- feat(startup): stop Writ starting inside a synced folder (83834cd)
- feat(quit): write pending notes before the app exits (6d99f51)
- feat(autosave): cap scheduled writes at one per note per second (7699a6c)
- feat(autosave): raise the idle debounce to one second (b3a991a)
- feat(core): decide when the shutdown path stops waiting for a flush (b19b5e1)
- feat(notes): open a note by name with Cmd+Shift+O (8b629dd)
- feat(notes): watch the notes folder and rebuild the index at startup (c178d20)
- feat(storage): index notes by path and reconcile the folder (b0175ac)
- feat(render): hide yaml frontmatter in the markdown preview (3f06124)
- feat(notes): notes folder settings and the migration report (4616d30)
- feat(notes): create, rename, trash and copy notes from the app and the cli (d17bedd)
- feat(storage): give a stopped save a code and stop before an evicted file (9cda3ce)
- feat(storage): refuse a save that would overwrite a newer file on disk (5d7fb75)
- feat(storage): make the file on disk the only copy of a note (c2971ab)
- feat(storage): add migration 040 with the path-keyed index schema and a rollback copy (9bd04a2)
- feat(notes): add the notes folder root, title sanitiser and containment (a4ee423)
Fixes
- fix(preflight): rebuild the mac sidecars before the tests run (89c53b5)
- fix(tests): compare the rebased notes path as a path (6813fb2)
- fix(tests): spell the notes root fixtures with a drive on windows (e93244a)
- fix(cli): write the notes root as a toml literal string in the config test (2977098)
- fix(tests): gate the host platform import in the startup guard test (0676105)
- fix(tests): compile the watcher path test on every platform (8aa9021)
- fix(startup): title-case the sync container and cover dot names (dbfcef5)
- fix(startup): name the sync service a CloudStorage container belongs to (b5d9dd1)
- fix(startup): judge the data folder by where it will land (c4b2219)
- fix(startup): check both spellings of the data folder (125d678)
- fix(quit): answer AppKit only once the flush has finished (12064a7)
- fix(ui): say note, not buffer, in the close save-failure log (d2f861e)
- fix(quit): flush pending notes when macOS terminates the app (c69934b)
- fix(ui): say note, not buffer, in the quit save-failure log (052abb2)
- fix(quit): run the flush on every macOS quit gesture (06b98b5)
- fix(storage): take the snapshot heartbeat to two minutes (c103d9a)
- fix(storage): prune the row of a note that stops being indexable (4d50d5d)
- fix(notes): point the index and the watcher at the moved folder (630d8be)
- fix(storage): re-key the notes index when the folder moves (49b810f)
- fix(palette): open a content hit that has no tab by its path (65ac4f4)
- fix(storage): keep the notes index off files the save path skips (1406647)
- fix(notes): clear the folder fallback when the notes folder moves (8ef9e71)
- fix(notes): keep the notes folder out of writ's data folder at startup (8357073)
- fix(notes): refuse emptying the archive into itself (04712de)
- fix(notes): refuse a notes folder inside writ's data folder (d75b32d)
- fix(notes): six defects in the folder move and the migration report (c8b77a8)
- fix(settings): open on the section the nav rail leads with (56e7580)
- fix(notes): drop the unwired deletable check and scope the rename wording (e356e58)
- fix(notes): keep the trash off apple events and surface a stopped rename (96f1f43)
- fix(storage): leave a recovered file alone when it already holds the text (629f877)
- fix(storage): never open an evicted file to compare it against a snapshot (4fd1271)
- fix(storage): stamp every write Writ makes and guard the relaunch restore (8d6b673)
- fix(storage): keep the migration report from forgetting an earlier run (64f97e1)
- fix(storage): settle the notes migration and keep generated documents out of search (bf1fd32)
- fix(storage): keep generated documents out of the notes folder (b9a68c3)
- fix(storage): retry a note the migration could not place (93d72c8)
Other
- chore(licences): cover the crates 0.4 added (d20486b)
- chore(release): bump version to v0.4.0 (83216e2)
- test(notes): accept either refusal for a destination that climbs into the data folder (c0a245b)
- test(notes): expect the canonical spelling the app stores for a copied note (90c78a2)
- test(startup): expect the canonical spelling the app produces (a38ab49)
- chore(release): sync Cargo.lock with the 0.3.5 bump (ca13253)
- test: make the load-sensitive tests deterministic (42054cf)
- docs(adr): record files as the only copy, the 1.0 direction and the design system (cf92bb6)
- test(startup): pin the repro the guard used to walk past (aaec08f)
- test(storage): report a p99 the sample count can carry (5c8df1e)
- test(startup): cover the data folder verdict directly (2263f40)
- test(startup): pin the report the location check writes (cff0486)
- test(storage): measure what F_FULLFSYNC would cost a save (0bceb1e)
- test(quit): keep the menu id test on macos (f1d57b9)
- test(storage): port the search tests onto the notes index (c2011a1)
- test(notes): pin the refusal for a destination two levels below the data folder (eb893c3)
- test(notes): mint a note file inside the awkward notes folder (4858c8b)
- test: widen the mount project and reorder the perf gate (d30fe9e)
- test: enforce the moved perf budgets from the gate (ed480a5)
- refactor(watcher): key ignore stamps by canonical path (c0c7c19)
- test: make the load-sensitive tests deterministic (f0fd6e6)
- test(strings): scan every crate source and skip log arguments by call, not line (d2a7bec)
- test(strings): inflect banned words off the stem when they end in e (e4532c7)
- test(strings): widen the banned-word guard to error text and inflections (f8e217b)
- test(strings): guard user-visible strings against retired vocabulary (18ccc44)
Full Changelog: v0.3.5...v0.4.0