# 0.37.0 — 2026-07-26 — "Two Views"

## Added

- **The TUI now has a list view, and it is the default.** One task per line with `ID · Age · Status · Priority/Owner/Deps · Tags · Description`, using the full terminal width instead of splitting it across five kanban columns that truncate every title to ~15 characters. The selected row expands downward so its whole title is readable; every other row stays exactly one line.
- **`Tab` swaps list ⇄ board.** Neither view replaces the other — the selection is carried across *by task id*, so you land on the same task in both. The choice is persisted per project in `.kandown/kandown.json` under a new `tui` section (`defaultView`, `showDetailPane`, `listSort`).
- **A live detail pane under the list**, following the selection with id, title, status, priority, owner, assignee, tags, blockers, checklist progress, last-update age and file path. Toggle it with `z`.
- **New list keys:** `h`/`l` move the selected task one column left/right (through the same dependency gate as every other move, and undoable with `u`), `s` cycles the sort (status, age, priority, id), `[`/`]` jump to top/bottom, `PgUp`/`PgDn` page, and the mouse wheel scrolls.
- **An `updated:` frontmatter timestamp**, stamped by every write path — CLI, MCP and web. It powers the `Age` column and the age sort. Deliberately not the file mtime, which `git clone` resets: on a fresh checkout an mtime-based age would report the same value for every task.
- **A `blocked` filter mode** (`f`), listing tasks that are waiting on a dependency.

## Changed

- **The changelog is now one file per release.** `changelogs/vX.Y.Z.md` holds the full notes for each version, and `CHANGELOG.md` at the root is a generated index — version, date, release name and per-type change counts, linking to each file. The old single 798-line file made every release edit the same few lines at the top, so every in-flight branch conflicted with every other, and `git log -p CHANGELOG.md` was unreadable. A release now *adds* a file instead of editing a shared one, and a link to `changelogs/v0.36.0.md` is stable and guessable forever. Generated by `pnpm changelog`, verified by `pnpm changelog:check` in CI, and staged automatically by the pre-commit hook alongside the codemap — the index cannot go stale.
- **GitHub release notes are read straight from the version file** rather than sliced out of the index with an `awk` range, which was one heading-format change away from silently publishing an empty release body.
- **The full history ships with the npm package.** `changelogs/` joins `CHANGELOG.md` in the published `files`, so the notes for every version are readable offline from `node_modules`.

- **One lockfile for pnpm 9 and pnpm 11.** `pnpm-workspace.yaml` now declares the minimum supported pnpm version (9.15) and lists the exact patch range pnpm 11 parses, so a freshly cloned repo installs cleanly on either line without the lockfile being rewritten. Local installs no longer churn `pnpm-lock.yaml` between pnpm 9 and pnpm 11, and CI sees a stable lockfile across versions.

## Fixed

- **`/` search and `f` filter did nothing.** Both were stored in TUI state and advertised in the cheatsheet, but never applied to the rendered tasks — the features had been dead since they were added. They now drive a real filter pipeline shared by *both* views, matching on id, title, tags and assignee. The dependency gate deliberately still resolves against the unfiltered board, so narrowing the search can never unlock a blocked move.
- **`Esc` in the TUI quit immediately even with a search or filter active**, throwing away the narrowing you had just typed with no way back. It now clears the search and filter first, and only quits when neither is set.
- **The "Search docs" button in the website header did nothing on every non-docs page.** The dialog was mounted inside the docs layout while the trigger button lived in the global header, so clicking it (or pressing ⌘K) on the home page fired an event no listener was registered for. `SearchDialog` now mounts once in the root layout so the trigger, the global ⌘K shortcut, and the dialog are present on every page.
- **`docs/RELEASE.md` claimed the CLI parses `CHANGELOG.md` and prints it during auto-updates.** It does not, and never did — nothing in `src/` or `scripts/` reads the file. The stale claim had been shaping how the changelog was written for several releases.
