kandown 0.25.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.26.0 — 2026-07-20 — "Task Workspace"
4
+
5
+ - **Added**: **Desktop opened-task workspace** — opening a task on desktop now replaces the modal overlay with a split workspace below the sticky header. The left pane lists tasks grouped by board status, while the right pane keeps the full task editor available in a large three-quarter-width panel.
6
+ - **Added**: **Collapsible status navigation for open tasks** — the workspace task list groups every active task under its Kandown column, shows per-section counts, lets sections collapse, highlights the currently open task, and makes switching between tasks much faster than returning to the board after every edit.
7
+ - **Added**: **Header back control for task focus mode** — when a task is open on desktop, a visible Back button appears beside the Kandown logo. It saves and closes the current task so users can return to their existing board or list view without hunting for the editor footer.
8
+ - **Changed**: **Responsive task-opening behavior** — desktop now uses the new workspace, while small screens keep the existing modal drawer so mobile editing stays familiar and does not squeeze a two-column layout into a narrow viewport.
9
+ - **Changed**: **Task editor reuse** — the desktop workspace reuses the existing drawer store state, save paths, URL copy action, dependency chips, archive/delete actions, agent hook button, conflict state, and recovery draft behavior instead of creating a second persistence model.
10
+ - **Fixed**: **Safer quick task switching** — switching tasks from the workspace navigator now guards against unsaved edits and stores discarded drafts in the existing recovery buffer, avoiding silent data loss during rapid navigation.
11
+ - **Fixed**: **Logo close behavior while editing** — clicking the header logo while a task is open now saves and closes through the drawer workflow instead of force-closing the task state directly.
12
+
13
+ ## 0.25.1 — 2026-07-20 — "Stale Daemon Refresh"
14
+
15
+ - **Fixed**: **Deep-link refreshes after existing daemon sessions** — Kandown now detects when a project daemon was started by an older CLI version and restarts it when the current CLI is newer. This matters because URL refresh handling for paths like `/058?p=suzu` lives in the daemon process itself; refreshing `kandown.html` alone cannot teach an already-running old daemon to serve task deep-link routes.
16
+ - **Fixed**: **Direct task URLs no longer require manual daemon restarts after updates** — running `kandown` or `kandown daemon start` now upgrades stale daemon processes automatically, so newly published routing behavior becomes active for existing projects without users needing to hunt for old PIDs.
17
+ - **Changed**: **Daemon reconnect behavior** — reconnecting to a same-project daemon still reuses compatible current/newer daemons, but older or unknown-version daemons are stopped and relaunched with the current CLI before returning the daemon URL.
18
+
3
19
  ## 0.25.0 — 2026-07-20 — "Task Deep Links"
4
20
 
5
21
  - **Added**: **Shareable task deep links** — opening a task drawer now updates the browser URL to a copy-pasteable route such as `/210?p=kandown`, where numeric task segments are normalized to Kandown task ids like `t210`. This makes it possible to send a direct link to a specific task instead of asking someone to find it manually on the board.
package/bin/kandown.js CHANGED
@@ -1987,7 +1987,21 @@ function releaseDaemonSpawnLock(lockPath) {
1987
1987
 
1988
1988
  async function startDaemon(kandownDir, preferredPort) {
1989
1989
  const current = await getDaemonStatus(kandownDir);
1990
- if (current.running) return current;
1990
+ if (current.running) {
1991
+ const currentVersion = getCurrentVersion();
1992
+ const daemonVersion = current.metadata?.version || null;
1993
+ // 📖 Deep-link routes and other daemon-owned behavior live in the long-running
1994
+ // daemon process, not in kandown.html. If the CLI updated while a daemon was
1995
+ // already running, reconnecting to the old process keeps old routing alive
1996
+ // (e.g. refreshing `/058?p=suzu` returned 404). Restart only when the local
1997
+ // CLI is newer; newer/dev daemons are left untouched.
1998
+ if (!daemonVersion || semverGt(currentVersion, daemonVersion) > 0) {
1999
+ warn(`Restarting daemon v${daemonVersion || 'unknown'} → v${currentVersion}...`);
2000
+ await stopDaemon(kandownDir);
2001
+ } else {
2002
+ return current;
2003
+ }
2004
+ }
1991
2005
 
1992
2006
  const lock = acquireDaemonSpawnLock(kandownDir);
1993
2007
  if (!lock) {