Releases: kanban-rs/kanban
Release list
v0.8.1
What's Changed
- docs: repair CHANGELOG.md structure on master to match develop by @fulsomenko in #543
- chore: release v0.8.1 by @fulsomenko in #540
Full Changelog: v0.8.0...v0.8.1
v0.8.0
What's Changed
- KAN-675 docs: advertise nixpkgs 26.05 stable in README and web install by @fulsomenko in #333
- KAN-728 feat(core): define ClientId newtype by @fulsomenko in #342
- KAN-732 feat(core): add HealthStatus enum and HealthChecker trait by @fulsomenko in #343
- KAN-742 chore(workspace): add kanban-api, kanban-server, kanban-http-backend crate stubs by @fulsomenko in #341
- KAN-752 chore(http-backend): drop tokio-tungstenite; transport is SSE not WebSocket by @fulsomenko in #348
- KAN-712 feat(service): add kanban-service::api module with ApiError and ChangeEventFrame by @fulsomenko in #347
- KAN-729 feat(domain): wrap commands in CommandBatch with correlation_id, issued_by, and AppType by @fulsomenko in #346
- KAN-753 chore(workspace): remove empty kanban-http-backend stub crate by @fulsomenko in #349
- KAN-755 chore(packaging): move AUR sources into packaging/aur/ (sibling of chocolatey) by @fulsomenko in #351
- KAN-713 feat(service): board/column v1 API DTO surface + foundation by @fulsomenko in #350
- KAN-762 refactor: decompose six oversized modules into focused submodules by @fulsomenko in #352
- KAN-769 feat(service): v1 API DTO surface + unified entity construction factory by @fulsomenko in #353
- Update README to clarify undo/redo functionality by @fulsomenko in #354
- Clarify back navigation shortcut in README by @fulsomenko in #355
- Update checklist item for attachments in README by @fulsomenko in #356
- Add search feature to the project roadmap by @fulsomenko in #357
- KAN-822 feat(tui): board delete from the TUI (closes #359) by @fulsomenko in #362
- KAN-828 feat(domain): shared archival abstraction + KanbanError::unsupported by @fulsomenko in #363
- KAN-829 feat(domain): first-class board_id on ArchivedCard (B1) by @fulsomenko in #364
- KAN-830 feat(domain): additive board-scoped archived-card query (B2) by @fulsomenko in #365
- KAN-831/832 feat(persistence): board_id backfill migrations — JSON V7→V8 (B3) + SQLite 2→3 (B4) by @fulsomenko in #366
- KAN-833 feat(service): board-scoped archived-card queries + cascade orphan fix (B5) by @fulsomenko in #367
- KAN-843 feat(service): ArchivedCardResponse v1 DTO with board_id (B6) by @fulsomenko in #369
- KAN-848 fix(domain): deterministic board ordering (fixes #358) by @fulsomenko in #374
- KAN-849 fix(tui): set task priority with
pfrom the card list (fixes #360) by @fulsomenko in #375 - KAN-850 fix(tui): declutter footer by dropping
panel Nhints (fixes #361) by @fulsomenko in #376 - KAN-855 feat(domain): generalize archival to Archived<T,C> + migrate ArchivedCard [F1b] by @fulsomenko in #378
- KAN-834 feat(domain): first-class ArchivedBoard = Archived + Snapshot.archived_boards [C1] by @fulsomenko in #377
- KAN-835 feat(domain): board archive/restore collection-move commands + store [C2] by @fulsomenko in #380
- KAN-836/844 feat(service): board archive/restore/list-archived + delete + ArchivedBoardResponse DTO [C3a+C3d] by @fulsomenko in #381
- KAN-837 feat(service): forward archived-board methods through JsonDataStore [C4] by @fulsomenko in #382
- KAN-845 feat(persistence-sqlite): durable pre-migration backup before irreversible schema upgrade by @fulsomenko in #370
- KAN-856 test(service): JSON V7→V8 migration coexists with archived boards by @fulsomenko in #383
- KAN-838 feat(persistence-sqlite): board_archival marker table + schema 3→4 [C5] by @fulsomenko in #384
- KAN-857 feat(persistence-json): bump save format V8→V9 for archived-board capability by @fulsomenko in #385
- KAN-842 refactor(service): hide archived-board descendants from live cross-board reads [C3b] by @fulsomenko in #386
- KAN-860 fix(persistence-sqlite): carry archived_boards through snapshot + apply (data loss) by @fulsomenko in #387
- KAN-861 feat(service): view archived-board constituents — board-scoped card reads + relations (C10a) by @fulsomenko in #388
- KAN-863 fix(persistence-sqlite): board restore data-loss — restore no longer cascades the subtree away by @fulsomenko in #389
- KAN-870 refactor(domain): archive cards by reference — card stays live, get_card unfiltered (F1) by @fulsomenko in #391
- KAN-871 test(service): pin JSON seam round-trips the reference archival model (F2) by @fulsomenko in #392
- KAN-872 refactor(domain): archived-card sprint mutations edit the live card (F3a) by @fulsomenko in #393
- KAN-879 feat(service): CardResponse.archived_at additive DTO consolidation (D1) by @fulsomenko in #394
- KAN-880 feat(service): BoardResponse.archived_at additive DTO consolidation (D2) by @fulsomenko in #395
- KAN-884 refactor(domain): collapse Archived to a pure marker (F3b) by @fulsomenko in #396
- KAN-874 feat(persistence): JSON V9->V10 archival-reference migration (M1) by @fulsomenko in #397
- KAN-873 test(service): cross-backend archival contract + edit-archived roundtrip (F4) by @fulsomenko in #398
- KAN-889 feat(domain/service): three-state archived selector on the card list (F7) by @fulsomenko in #399
- KAN-881 feat(cli): unify card list with a three-state archived filter (I1) by @fulsomenko in #400
- KAN-882 feat(mcp): merge card list tools into one list_cards with archived filter (I2) by @fulsomenko in #401
- KAN-886 feat(cli): board archive/restore/delete + unified list with archived filter (I4) by @fulsomenko in #402
- KAN-887 feat(mcp): board archive/restore + unified list_boards with archived filter (I5) by @fulsomenko in #403
- KAN-888 feat(tui): archived-boards view + archive/restore/delete affordances (I6) by @fulsomenko in #404
- KAN-894 fix(cli,mcp): board delete-archived/restore resolves archived-only (data-loss fix) by @fulsomenko in #405
- KAN-898/899/908 fix(domain): align clear_sprint_from_cards + guard delete_board across backends (regression) by @fulsomenko in #406
- KAN-895 feat(domain): export/import carries archived boards + orphan-safe archived cards (regression) by @fulsomenko in #407
- KAN-891 feat(tui): archived-board full interaction parity + view fixes (regression cluster) by @fulsomenko in #408
- KAN-900 fix: archival regression tail fixes (edge-guard, dead-code, docs, pagination, restore hint, migration test) by @fulsomenko in #409
- chore(changeset): unified reference-marker archival for v0.8.0 release by @fulsomenko in #410
- KAN-911 feat(tui): archived boards are ordinary boards — unify active board by id (LSP) by @fulsomenko in #412
- KAN-912 chore(choco): drop tools/LICENSE.txt and VERIFICATION.txt for download-only package by @fulsomenko in #413
- KAN-924 feat(domain): filter-aware DataStore read methods with loud floor by @fulsomenko in #415
- KAN-917 feat(domain): BoardListFilter carrying ArchivedFilter by @fulsomenko in #416
- KAN-925 feat(persistence-sqlite): 3-state archived clause on filtered card reads by @fulsomenko in #417
- KAN-918 feat(service): list_boards(filter) gather mirroring filter_cards by @fulsomenko in #418
- KAN-926 feat(domain): 3-state archived predicate on in-memory filtered card reads + delegator forwarding by @fulsomenko in #419
- KAN-919 refactor(service): consolidate BoardResponse to one shape + archived_at by @fulsomenko in #420
- KAN-931 refactor(tui): unify card collection + archived-id set, drop get_card_by_id re-join by @fulsomenko in https://github.com/fulsomenko/ka...
v0.7.2
What's Changed
- KAN-674 ci(release): escape $asset variable in chocolatey digest read step by @fulsomenko in #330
- release 0.7.2 by @fulsomenko in #331
Full Changelog: v0.7.1...v0.7.2
v0.7.1
What's Changed
- KAN-667 ci(release): surface chocolatey publish failure with warning annotation by @fulsomenko in #328
- release 0.7.1 by @fulsomenko in #329
Full Changelog: v0.7.0...v0.7.1
v0.7.0
What's Changed
- ci: auto-bump Homebrew tap formula on each release by @fulsomenko in #278
- KAN-469 refactor(web): collapse installation methods into single code block by @fulsomenko in #279
- KAN-451 feat(cli): add init subcommand to decouple storage bootstrapping from board create by @fulsomenko in #280
- KAN-466 chore(mcp): pass gitRev to nix build so -V includes commit hash by @fulsomenko in #277
- KAN-191 refactor(service): inverse-command undo/redo, no more snapshot replay by @fulsomenko in #281
- KAN-480 chore: remove redundant git MCP server by @fulsomenko in #283
- KAN-402 docs: add CI, AUR, nixpkgs, and Homebrew tap badges to README by @fulsomenko in #284
- KAN-457 docs(mcp): align README schemas with name-accepting fields by @fulsomenko in #285
- KAN-414 docs: welcome bug fixes in Areas for Contribution by @fulsomenko in #286
- KAN-504 feat: expose card parent/child relations through CLI and MCP by @fulsomenko in #287
- KAN-522 feat: refuse-on-future-version, writer-stamp metadata, F12 diagnostics by @fulsomenko in #288
- KAN-530 feat(persistence-json): rename JSON graph bucket parent_child to spawns (v7) by @fulsomenko in #289
- KAN-520 fix(tui): restore card-detail enter and backspace navigation across parent/child boxes by @fulsomenko in #290
- KAN-534 fix(tui): resolve active card by id after external file reload by @fulsomenko in #291
- KAN-482 fix(cli): drop implicit "My Board" board from kanban init by @fulsomenko in #292
- KAN-538 chore(choco): add packaging/chocolatey/ source files by @fulsomenko in #293
- KAN-539 ci(release): add build-windows job producing kanban + kanban-mcp archive by @fulsomenko in #294
- KAN-541 ci(release): add publish-chocolatey job (pack + smoke install + push) by @fulsomenko in #295
- KAN-545 chore(choco): cosmetic polish — iconUrl, VERIFICATION wording, README clarity by @fulsomenko in #296
- KAN-550 chore: ignore .claude/ (Claude Code CLI scratch + per-machine settings) by @fulsomenko in #297
- KAN-551 fix(tui): retain card selection after toggle-completion in kanban view by @fulsomenko in #307
- KAN-175 test(service): add data integrity integration tests by @fulsomenko in #305
- KAN-250 fix(persistence-sqlite): validate required string fields in SQLite write path by @fulsomenko in #304
- KAN-437 fix(tui): refresh task list before selecting moved card by @fulsomenko in #303
- KAN-174 feat(tui): surface save errors to user via UI banner by @fulsomenko in #306
- KAN-557 refactor(tui): extract RadioList and SprintPicker for reuse by @fulsomenko in #309
- KAN-249 refactor(domain): remove unused DomainError not_found helpers by @fulsomenko in #310
- KAN-556 feat: optional sprint assignment at card creation by @fulsomenko in #311
- KAN-580 refactor(domain): accept impl Into for unconditional-store params by @fulsomenko in #313
- KAN-643 fix(domain): accept YYYY-MM-DD in external-editor due_date field by @fulsomenko in #314
- KAN-644 feat: add due-date sort field across TUI, CLI, and MCP by @fulsomenko in #315
- KAN-646 refactor(domain): extract filter+sort engine into query::filter_sort by @fulsomenko in #316
- KAN-656 ci(release): read chocolatey digest from gh release API by @fulsomenko in #317
- KAN-657 docs(chocolatey): add recovery runbook and idempotent push by @fulsomenko in #318
- KAN-655 refactor(domain): typed SprintBoardMismatch + negative-path tests for card create --assign by @fulsomenko in #320
- KAN-650 fix(persistence-json): mirror .v{N}.backup writes in sync migration path by @fulsomenko in #321
- KAN-660 fix(persistence-json): cover V1/V2 sources in pre-V7 backup wrap by @fulsomenko in #322
- KAN-659 fix(domain): capitalize entity tags in KanbanError::not_found by @fulsomenko in #323
- KAN-649 fix(ci): make release.yml idempotent on partial-failure re-runs by @fulsomenko in #324
- KAN-668 fix(release-tooling): make validate-release Step 5 actually validate by @fulsomenko in #325
- chore: update kanban todo by @fulsomenko in #326
- release 0.7.0 by @fulsomenko in #308
- hotfix: revert KAN-668 Step 5 to unblock 0.7.0 release by @fulsomenko in #327
Full Changelog: v0.6.0...v0.7.0
v0.6.0
What's Changed
- editor/improve-robustness by @amanda-amy-frost in #255
- KAN-323 fix(cli): require existing file for all subcommands, init on no-subcommand path by @fulsomenko in #271
- KAN-328 fix(tui): show toast when toggling sprint filter without active sprint by @fulsomenko in #272
- KAN-455 fix(tui): scroll board edit and filter popup lists to keep selection visible by @fulsomenko in #273
- chore: update kanban todo by @fulsomenko in #274
- KAN-400 feat(workspace): accept entity names everywhere a UUID was required by @fulsomenko in #275
- Release 0.6.0 by @fulsomenko in #276
Full Changelog: v0.5.1...v0.6.0
v0.5.1
What's Changed
- KAN-449 test(tui): make apply_config_edit non-default-content test sandbox-safe by @fulsomenko in #269
- Hotfix: KAN-449 test(tui): make apply_config_edit non-default-content test sa… by @fulsomenko in #270
Full Changelog: v0.5.0...v0.5.1
v0.5.0
What's Changed
- KAN-397/ci-wire-aur-publish-into-release-workflow by @fulsomenko in #243
- fix(demo): use card move with column-id in Beat 9 by @fulsomenko in #244
- KAN-406/sprint-assignment-dialog-group-sprints-by-status-with-completed-sprints-in-separate-section by @fulsomenko in #245
- chore: track PR #247 follow-ups in kanban roadmap by @fulsomenko in #248
- windows/fix-keyevent-handling by @amanda-amy-frost in #247
- KAN-405: make undo in-session only — strip command log from persistence by @fulsomenko in #246
- KAN-332/require explicit file path no implicit kanban json default by @fulsomenko in #249
- KAN-418/fix kanban -V output drop Error prefix and stray trailing newline by @fulsomenko in #250
- chore/rebalance-changeset-bump-levels-for-0.5.0 by @fulsomenko in #252
- KAN-419 fix(tui): show sprint history on cards with >= 1 sprint assigned by @fulsomenko in #253
- KAN-420 chore: bump minimum Rust version to 1.74 by @fulsomenko in #254
- KAN-421 feat(tui): add raw key event trace logging to EventHandler by @fulsomenko in #256
- KAN-426 fix(tui): make KeyEventKind::Press filter unconditional across all platforms by @fulsomenko in #257
- KAN-394 fix(service): sync card status with completion column by @fulsomenko in #258
- KAN-434 refactor(service): collapse singular card methods into shorthands over plural by @fulsomenko in #259
- KAN-403 fix(tui): selector jumps to newly created card by @fulsomenko in #260
- KAN-435 fix(tui): sprint-detail card lists scroll and reach action parity by @fulsomenko in #261
- KAN-431 refactor(domain): extract UpdateSprint validators into private functions by @fulsomenko in #262
- KAN-427 refactor(service): lift DeleteBoard cascade to service layer (invert the wrap) by @fulsomenko in #263
- KAN-430 refactor(service): lift MigrateSprintLogs from domain to service by @fulsomenko in #264
- KAN-428 refactor(service): lift MoveCards batch position calculation to service by @fulsomenko in #265
- chore: add editor.rs follow-up cards from #255 review by @fulsomenko in #266
- KAN-445 fix(service): use dunce::canonicalize to avoid Windows UNC prefix by @fulsomenko in #267
- Release 0.5.0 by @fulsomenko in #251
New Contributors
- @amanda-amy-frost made their first contribution in #247
Full Changelog: v0.4.1...v0.5.0
v0.4.1
What's Changed
- [hotfix] fix(ci): aur-publish makepkg.conf + manual dispatch by @fulsomenko in #236
- [hotfix] fix(ci): aur-publish VERSION propagation + soft-fail commit-back by @fulsomenko in #238
- [hotfix] fix(ci): bump KSXGitHub/github-actions-deploy-aur v4.1.1 → v4.1.3 by @fulsomenko in #239
- [hotfix] fix(ci): aur-publish action inputs need snake_case by @fulsomenko in #240
- chore: sync develop with master after v0.4.0 release by @fulsomenko in #237
- KAN-396/fix-tui-make-settings-config-edit-tests-sandbox-safe-for-nixpkgs by @fulsomenko in #241
- Release 0.4.1 by @fulsomenko in #242
Full Changelog: v0.4.0...v0.4.1
v0.4.0
Release 0.4.0
SQLite backend, sprint carry-over, settings UI, undo/redo, AUR packaging, and per-layer error types.
Highlights
- SQLite storage backend compiled in by default (JSON remains the default file format)
- Sprint carry-over dialog when ending a sprint with incomplete cards
- Undo/redo history lifted into KanbanContext — all KanbanOperations consumers get it for free
- Settings page UI for configuring storage
migrateCLI reworked — backend as positional arg, filename optional- AUR package with CI auto-publish workflow
- Per-layer error types (DomainError, PersistenceError, KanbanError) for better debuggability
See CHANGELOG.md for the full list of changes (33 changesets accumulated since 0.3.5).
Crates published to crates.io
All 9 workspace crates published at 0.4.0:
kanban-core ·
kanban-domain ·
kanban-persistence ·
kanban-persistence-json ·
kanban-persistence-sqlite ·
kanban-service ·
kanban-mcp ·
kanban-tui ·
kanban-cli
Release-process note
Mid-release the publish workflow aborted at kanban-persistence-sqlite due to a workspace dev-dep cycle (sqlite/json dev-dep on kanban-service which transitively depends back on them). Hotfix #235 strips version pins from internal dev-deps so cargo correctly removes them from the published manifest. The 0.4.0 published artifacts include this fix; the workflow itself will be made resilient as part of follow-up release-tooling work.