v1.50.0
Highlights
- Reworked TUI task composer: reliable editing (backspace, delete, caret-aware input), Tab/Shift+Tab field navigation, and a fixed status picker (#833)
- Dependency readiness in the TUI and browser: see at a glance whether a task is blocked or ready to pick up, with fail-closed handling of ambiguous IDs (#873, with @cottrell)
- Hide empty board columns in the TUI: the
hideEmptyColumnssetting now drives the TUI board too, with aShift+Hquick toggle persisted to config (#889, with @janosmiko) - Task IDs auto-link in the web UI: task IDs mentioned in markdown become deep links to the task (#865, with @cottrell)
defaultAssigneeis now honored on task creation across CLI, TUI, web, and MCP (#867), with explicit unassign everywhere:-a ""on the CLI, an empty list on web/MCP, and a prefilled removable chip in the web create form (#880, #886)- Concurrent edits fail fast instead of losing data: a second writer gets a clear error instead of silently overwriting (#860)
backlog decision listjoins the CLI (#871)
Behavior changes
- Invalid config now stops Backlog with a clear error. Malformed YAML (for example
statuses: ["To Do]) or wrong-typed values (for examplestatuses: To Do) abort withBacklog could not start because <file> has an invalid value for "<key>": ...instead of silently applying defaults. Previously one malformed key could also silently corrupt how other valid keys parsed (#877, #882) - Bare numeric task IDs resolve consistently.
backlog task edit 597now works in projects with a custom ID prefix, matchingtask view; ambiguous IDs fail closed everywhere, including dependency and parent-filter resolution, andtask demote/draft archive/draft promotenow exit non-zero when the ID does not resolve (#881) - Explicit empty means unassigned.
POST /api/taskswithassignee: []now creates an unassigned task instead of applying the default; absent still means "apply the default" (#880) - Empty value clears on edit.
task edit --dep "",--ref "", and--doc ""now clear the list, matching-a ""and the--clear-*flags; on create an empty value is still rejected (#890, #878) - Shell completions fail closed when
BACKLOG_CWDpoints at an invalid directory instead of serving data from the shell's cwd (#876)
Fixes
- The web task list now fits laptop screens without horizontal scroll: content-sized columns with a flexible Title, trimmed page padding, a filter bar that stays on one line, subtle themed scrollbars site-wide, and a visible border on the task modal (#894)
- TUI footer filter hints show the correct keys for each view, in the filter-bar order (#892, #893)
- Web board drag-and-drop no longer breaks when
hideEmptyColumnsis on; hidden columns appear as drop targets mid-drag (#891, with @janosmiko) - TUI operations run against the right project when launched from a subdirectory or with
BACKLOG_CWDset; previously the board could render one project and write to another (#876, #859) - Document watcher: no more endless retries on
doc-1.md-style filenames, and renames with zero-padded IDs reconcile correctly (#887) doc create --plainworks,doc listhandles the legacy docs layout, the TUI restores the previous terminal title on exit (including tmux), and pipedbacklog boardshows the real project name (#879)- vim keys:
j/kstay inside lists at navigation boundaries (#866) and now also navigate the filter popups (#888, with @janosmiko) - Repeated
-lflags and empty--dep/--refvalues are handled correctly ontask createanddraft create;--depends-onand--depvalues merge instead of silently dropping one (#878) - Frontmatter parsing is immune to a parser-cache poisoning class that could return stale task data (#875)
- Multi-assignee parity for
task create(#858), clearabledefaultEditor(#855), incremental--add-ref/--remove-refflags (#870), and dependency/reference/documentation clearing via--clear-*flags (#840, #862) - Ambiguous document and decision identities fail closed with doctor diagnostics instead of guessing (#872, #874)
- TUI window titles include the project name (#863); the Rosetta probe no longer leaks stderr on Apple Silicon (#857); terminal browser initialization errors release the shared loading state (#842)
Documentation
backlog_directoryis now documented accurately, with a corrected README example (#885, @pxmpsdev's first contribution)- Real-newline handling documented for every multiline Markdown flag (#864)
Security
- All open Dependabot alerts resolved; the mermaid bump was verified against npm attestations and SLSA provenance (#868)
New Contributors
Full Changelog: v1.49.3...v1.50.0