From 39f6ec8611f0a8210e471469a6cb70cda5e5b304 Mon Sep 17 00:00:00 2001 From: Frank O'Hara Date: Sun, 9 Aug 2026 14:01:34 -0600 Subject: [PATCH] chore(release): 0.3.0 Twelve commits since 0.2.0, mostly the launch-blocker sweep on the Markdown write path. Minor bump rather than patch: synthesized task IDs now come from one derivation, so IDs change for titles with inline labels or punctuation. --- CHANGELOG.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.lock | 12 ++++++------ Cargo.toml | 2 +- 3 files changed, 61 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20d270a..1d267f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,58 @@ While the major version is 0, minor version bumps may contain breaking changes. ## [Unreleased] +## [0.3.0] - 2026-08-09 + +A sweep of the Markdown write path. `lash add` and `lash format` both +regenerated Markdown from a parsed model that did not carry everything the +source did, and neither noticed when the difference cost content. Several of +these fixes address silent data loss that exited 0. + +### Added + +- The file watcher's outbound channel is bounded at 256 events. Past that the + debouncer stops sending and raises an overflow flag, and the TUI answers with + a single full reload instead of thousands of individual reindexes. A branch + switch across a large project no longer grows memory and latency with the size + of the burst. + +### Changed + +- Synthesized task IDs come from one derivation (`synthesize_task_id`) shared by + `lash add` and the parser, and `lash add` now reports the ID the index will + actually store. **Task IDs change** for titles containing inline labels or + punctuation inside a word — a task titled `Ship v0.7.0 release notes #docs` + was printed as `ship-v0-7-0-release-notes` and stored as + `ship-v070-release-notes-docs`. Tasks with an explicit `@id:` are unaffected. + Run `lash check-links` after upgrading to catch `@depends-on` references + written against a previously printed ID. + +### Fixed + +- `lash format` no longer deletes sections it does not model. Rebuilding from + the parsed model dropped every section other than the header, Description and + Tasks — a file with `## Notes` and `## References` came back with neither, and + sections above `## Tasks` went too. The formatter now regenerates only the + spans it owns and copies every other line through unchanged. +- `lash format` no longer appends a duplicate copy of every inline label on each + run, which left `format --check` reporting a file as dirty forever. +- `lash add` no longer splices a new task into the middle of the preceding + task's annotation block, which silently truncated multi-line `@agent-note` + values on the next reindex. +- `lash add` no longer inserts past the end of the annotation block, which + landed new tasks under a following `## Notes` section, split from the tasks. +- `lash add` into a file with an empty `## Tasks` section no longer prepends the + checkbox above the H1, where the parser never saw it — the task was written to + disk while `lash index` reported 0 tasks and `lash lint` passed. +- `lash add --agent-note` with an embedded newline emitted an unindented + continuation line the parser then dropped. Notes are emitted so they round + trip, and values that cannot round trip regardless of indentation (a blank + line, a line starting with `@`) are rejected up front. +- `UserConfig` save/load take an explicit path, so running the test suite no + longer writes the developer's real `~/.lash/config.toml`. An interrupted run + previously left `color_scheme = "Test Theme"` behind, which no theme resolves, + breaking every later `lash` invocation on that machine. + ## [0.2.0] - 2026-08-08 ### Added @@ -39,6 +91,7 @@ Initial release. - Project scaffolding: `lash init` and the PixelQuest `lash playground` - Configuration management, shell completions, and `lash explain` error catalog -[Unreleased]: https://github.com/fixture-dev/lash/compare/v0.2.0...HEAD +[Unreleased]: https://github.com/fixture-dev/lash/compare/v0.3.0...HEAD +[0.3.0]: https://github.com/fixture-dev/lash/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/fixture-dev/lash/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/fixture-dev/lash/releases/tag/v0.1.0 diff --git a/Cargo.lock b/Cargo.lock index b3852ad..903893a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1093,7 +1093,7 @@ dependencies = [ [[package]] name = "lash" -version = "0.2.0" +version = "0.3.0" dependencies = [ "anyhow", "assert_cmd", @@ -1133,7 +1133,7 @@ dependencies = [ [[package]] name = "lash-agent" -version = "0.2.0" +version = "0.3.0" dependencies = [ "lash-core", "lash-types", @@ -1145,7 +1145,7 @@ dependencies = [ [[package]] name = "lash-core" -version = "0.2.0" +version = "0.3.0" dependencies = [ "blake3", "chrono", @@ -1165,7 +1165,7 @@ dependencies = [ [[package]] name = "lash-db" -version = "0.2.0" +version = "0.3.0" dependencies = [ "anyhow", "blake3", @@ -1187,7 +1187,7 @@ dependencies = [ [[package]] name = "lash-tui" -version = "0.2.0" +version = "0.3.0" dependencies = [ "crossterm", "filetime", @@ -1208,7 +1208,7 @@ dependencies = [ [[package]] name = "lash-types" -version = "0.2.0" +version = "0.3.0" dependencies = [ "blake3", "chrono", diff --git a/Cargo.toml b/Cargo.toml index be0a681..bd0dc05 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ members = [ ] [workspace.package] -version = "0.2.0" +version = "0.3.0" authors = ["Lash Contributors"] edition = "2021" rust-version = "1.75"