0.3.0 - 2026-08-09
Release Notes
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 addand the parser, andlash addnow reports the ID the index will
actually store. Task IDs change for titles containing inline labels or
punctuation inside a word — a task titledShip v0.7.0 release notes #docs
was printed asship-v0-7-0-release-notesand stored as
ship-v070-release-notes-docs. Tasks with an explicit@id:are unaffected.
Runlash check-linksafter upgrading to catch@depends-onreferences
written against a previously printed ID.
Fixed
lash formatno 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## Notesand## Referencescame back with neither, and
sections above## Taskswent too. The formatter now regenerates only the
spans it owns and copies every other line through unchanged.lash formatno longer appends a duplicate copy of every inline label on each
run, which leftformat --checkreporting a file as dirty forever.lash addno 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 addno longer inserts past the end of the annotation block, which
landed new tasks under a following## Notessection, split from the tasks.lash addinto a file with an empty## Taskssection no longer prepends the
checkbox above the H1, where the parser never saw it — the task was written to
disk whilelash indexreported 0 tasks andlash lintpassed.lash add --agent-notewith 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.UserConfigsave/load take an explicit path, so running the test suite no
longer writes the developer's real~/.lash/config.toml. An interrupted run
previously leftcolor_scheme = "Test Theme"behind, which no theme resolves,
breaking every laterlashinvocation on that machine.
Install lash 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/fixture-dev/lash/releases/download/v0.3.0/lash-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/fixture-dev/lash/releases/download/v0.3.0/lash-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install fixture-dev/tap/lashDownload lash 0.3.0
| File | Platform | Checksum |
|---|---|---|
| lash-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| lash-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| lash-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| lash-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| lash-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |