tuiboard 0.14.0 → 0.14.1

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
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.14.1] - 2026-09-28
11
+
12
+ ### Changed
13
+ - **Shift+T clears the time blocks it carries to today** (#79). A time block
14
+ is a slot on a particular day, so moving every overdue task to today used to
15
+ keep theirs: tasks landed in today's agenda at hours nobody chose, stacked on
16
+ whatever was already there. Now each moved task drops its block and waits in
17
+ today's planner to be placed again (two keys, with arm mode). The banner
18
+ says how many were cleared. `t` / `m` on a single task and the headless
19
+ `tuiboard task defer` are unchanged.
20
+
10
21
  ## [0.14.0] - 2026-09-21
11
22
 
12
23
  ### Added
@@ -544,6 +555,7 @@ First public release on npm. This entry captures the full feature set at launch.
544
555
 
545
556
  Built with [OpenTUI](https://opentui.com) + SolidJS on Bun.
546
557
 
558
+ [0.14.1]: https://github.com/NazzarenoGiannelli/tuiboard/releases/tag/v0.14.1
547
559
  [0.14.0]: https://github.com/NazzarenoGiannelli/tuiboard/releases/tag/v0.14.0
548
560
  [0.13.3]: https://github.com/NazzarenoGiannelli/tuiboard/releases/tag/v0.13.3
549
561
  [0.13.2]: https://github.com/NazzarenoGiannelli/tuiboard/releases/tag/v0.13.2
package/README.md CHANGED
@@ -509,7 +509,7 @@ A placed task stays armed, so it can be sized and moved straight away.
509
509
  | Key | Action |
510
510
  |---|---|
511
511
  | `n` | New task in current column (quick-add syntax) |
512
- | `Shift-T` | Reset ALL overdue tasks (any board) to today |
512
+ | `Shift-T` | Reset ALL overdue tasks (any board) to today — their time blocks are cleared, since a slot chosen for another day means nothing today |
513
513
  | `Ctrl-Z` | Undo last mutation |
514
514
  | `i` | Status file — the markdown file set as `status_file`, shown read-only |
515
515
  | `?` | Help modal with the full reference |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tuiboard",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "Terminal kanban for markdown task boards, with optional Today/Tomorrow planner, 24h agenda + calendar overlay, and a live view of your coding-agent sessions (Claude Code, Codex, OpenCode, Pi). Use only the panels you want.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -200,8 +200,9 @@ export function handleKey(
200
200
 
201
201
  // Bulk: reset all overdue across all boards → today (Shift+T).
202
202
  if (key.name === "t" && key.shift) {
203
- const n = store.resetAllOverdueToToday();
204
- store.flashBanner("info", n > 0 ? `Reset ${n} overdue → today` : "No overdue tasks");
203
+ const { tasks, blocks } = store.resetAllOverdueToToday();
204
+ const cleared = blocks > 0 ? ` (${blocks} time block${blocks > 1 ? "s" : ""} cleared)` : "";
205
+ store.flashBanner("info", tasks > 0 ? `Reset ${tasks} overdue → today${cleared}` : "No overdue tasks");
205
206
  return;
206
207
  }
207
208
 
@@ -1641,9 +1641,15 @@ export function createTuiStore({ config }: CreateStoreOptions) {
1641
1641
 
1642
1642
  // ─── Bulk: reset all overdue across all boards to today ──────────────────
1643
1643
 
1644
- function resetAllOverdueToToday(): number {
1644
+ /**
1645
+ * Every overdue task → today, and its time block goes with the day it was
1646
+ * planned for: a slot chosen for last Tuesday means nothing on today's
1647
+ * agenda, and re-placing it is two keys with arm mode (#79).
1648
+ */
1649
+ function resetAllOverdueToToday(): { tasks: number; blocks: number } {
1645
1650
  const today = isoToday();
1646
- let count = 0;
1651
+ let tasks = 0;
1652
+ let blocks = 0;
1647
1653
  for (const lb of state.boards) {
1648
1654
  const board = lb.board;
1649
1655
  for (let ci = 0; ci < board.columns.length; ci++) {
@@ -1652,17 +1658,19 @@ export function createTuiStore({ config }: CreateStoreOptions) {
1652
1658
  for (const child of col.children) {
1653
1659
  if (!isTask(child)) continue;
1654
1660
  if (!child.done && child.scheduled && child.scheduled < today) {
1655
- setScheduled(
1656
- { boardPath: board.filepath, columnIndex: ci, taskIndex: ti },
1657
- today,
1658
- );
1659
- count++;
1661
+ const ref = { boardPath: board.filepath, columnIndex: ci, taskIndex: ti };
1662
+ if (child.timeBlock) {
1663
+ setTimeBlock(ref, undefined);
1664
+ blocks++;
1665
+ }
1666
+ setScheduled(ref, today);
1667
+ tasks++;
1660
1668
  }
1661
1669
  ti++;
1662
1670
  }
1663
1671
  }
1664
1672
  }
1665
- return count;
1673
+ return { tasks, blocks };
1666
1674
  }
1667
1675
 
1668
1676
  function openModal(m: ModalKind): void {
package/src/ui/Modal.tsx CHANGED
@@ -1307,7 +1307,7 @@ const HELP_SECTIONS: HelpSection[] = [
1307
1307
  {
1308
1308
  emoji: "📦",
1309
1309
  title: "Bulk",
1310
- rows: [["T", "Reset ALL overdue tasks (any board) to today"]],
1310
+ rows: [["T", "Reset ALL overdue tasks (any board) to today — clears their time blocks"]],
1311
1311
  },
1312
1312
  {
1313
1313
  emoji: "🌐",