v0.1.17 — the features v0.1.16 announced
Read this first if you installed v0.1.16
The v0.1.16 tag was cut from the release repository before the code had been synced into it. Its binaries report 0.1.15 and contain none of the features its notes describe. Nothing was lost — the code existed, it just was not in the artifact. This release is the first one that actually carries it, which is why the version skips to 0.1.17.
Tab completes a slash command
Type /con, press Tab, get /config. It works whether or not the list is open — a closed list is not a statement about what the key should do.
And a bug reported straight from use: completing with Tab and then deleting a single letter left the list shut for good; the only way back was to erase the leading / entirely. One flag was doing two jobs — Esc's dismissal is sticky by design, and completing had borrowed it. They are separate now. Editing after a completion lists again; Esc still means Esc.
Up and Down filter history by what you have typed
Type tacet why, press Up, and you walk only the commands that start with it.
This was broken on the second keypress. The prefix was read off the input buffer inside the walk — but the walk replaces that buffer with the entry it lands on, so the filter applied once and then vanished. With a history of git status, tacet why a, git diff, tacet why b and tacet typed, the first Up gave tacet why b and the second gave git diff. The prefix is captured once and held for the whole walk, and the test fails without the fix.
A trailing comma no longer costs a tool call
Small models sometimes write {"path": "src/main.rs",}. That comma has no meaning in JSON, so it is dropped and the call runs.
Deliberately the only repair. Every repair rewrites what the model actually said before it is parsed, and a rewrite that guesses can turn a call the model did not make into one it did. Adding a missing quote or closing an unbalanced brace requires guessing intent, and is not done.
It arrived untested, which is the last place to leave untested. It is string-aware — {"q":"a,}"} comes out unchanged, escapes included — and there are now cases that say so.
Also
The comments deleted along the way are back. They are not decoration: each records a measured failure — why the tool name is the last identifier before the parenthesis, why pasted control bytes are filtered at the single entrance, why ctrl-d leaves whatever is typed.
The "dynamic GGUF context budget" the previous notes claimed was already there: the engine reads the length the model declares and clamps it by what the machine can afford. Nothing was needed and nothing was done.
Crates
tacet-cli 0.1.17 · tacet-tools 0.1.8
cargo install tacet-cli --features candle
Full Changelog: v0.1.16...v0.1.17