@basementuniverse/kanbn 2.0.0 → 2.5.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.
Files changed (100) hide show
  1. package/README.md +3 -1
  2. package/coverage/tmp/coverage-916017-1788028598821-0.json +1 -0
  3. package/coverage/tmp/{coverage-214293-1787777184569-0.json → coverage-916018-1788028597179-0.json} +1 -1
  4. package/coverage/tmp/coverage-916036-1788028598796-0.json +1 -0
  5. package/docs/actions.md +337 -0
  6. package/docs/advanced-configuration.md +55 -0
  7. package/docs/commands/add.txt +17 -1
  8. package/docs/commands/archive.txt +11 -0
  9. package/docs/commands/board.txt +9 -0
  10. package/docs/commands/boards.txt +34 -0
  11. package/docs/commands/burndown.txt +7 -0
  12. package/docs/commands/comment.txt +13 -1
  13. package/docs/commands/contributors.txt +58 -0
  14. package/docs/commands/edit.txt +18 -1
  15. package/docs/commands/find.txt +39 -1
  16. package/docs/commands/gantt.txt +6 -0
  17. package/docs/commands/help.txt +2 -0
  18. package/docs/commands/history.txt +6 -0
  19. package/docs/commands/init.txt +13 -0
  20. package/docs/commands/move.txt +26 -0
  21. package/docs/commands/remove.txt +22 -1
  22. package/docs/commands/rename.txt +5 -0
  23. package/docs/commands/restore.txt +12 -0
  24. package/docs/commands/sort.txt +23 -0
  25. package/docs/commands/sprint.txt +9 -0
  26. package/docs/commands/status.txt +10 -1
  27. package/docs/commands/task.txt +9 -0
  28. package/docs/commands/validate.txt +29 -1
  29. package/docs/contributors.md +145 -0
  30. package/docs/filtering-and-sorting.md +60 -3
  31. package/docs/index-structure.md +145 -11
  32. package/docs/index.md +6 -2
  33. package/docs/multiple-boards.md +259 -0
  34. package/docs/quick-start.md +21 -1
  35. package/docs/task-structure.md +31 -3
  36. package/example/README.md +23 -0
  37. package/example/advanced/kanbn.yml +65 -0
  38. package/example/boards/.kanbn/design.md +31 -0
  39. package/example/boards/.kanbn/index.md +44 -0
  40. package/example/boards/.kanbn/tasks/add-usage-alert-emails.md +19 -0
  41. package/example/boards/.kanbn/tasks/build-tenant-settings-page.md +43 -0
  42. package/example/boards/.kanbn/tasks/create-organization-switcher.md +44 -0
  43. package/example/boards/.kanbn/tasks/design-onboarding-checklist.md +22 -0
  44. package/example/boards/.kanbn/tasks/refresh-marketing-site.md +28 -0
  45. package/example/boards/.kanbn/tasks/ship-billing-portal.md +29 -0
  46. package/package.json +9 -7
  47. package/routes/add.json +40 -12
  48. package/routes/archive.json +14 -2
  49. package/routes/board.json +11 -3
  50. package/routes/boards.json +30 -0
  51. package/routes/burndown.json +23 -7
  52. package/routes/comment.json +19 -5
  53. package/routes/contributors.json +18 -0
  54. package/routes/edit.json +37 -11
  55. package/routes/find.json +37 -12
  56. package/routes/gantt.json +20 -6
  57. package/routes/history.json +39 -25
  58. package/routes/init.json +3 -1
  59. package/routes/move.json +24 -6
  60. package/routes/remove.json +18 -3
  61. package/routes/rename.json +11 -3
  62. package/routes/restore.json +14 -2
  63. package/routes/sort.json +40 -11
  64. package/routes/sprint.json +14 -4
  65. package/routes/status.json +23 -7
  66. package/routes/task.json +10 -2
  67. package/routes/validate.json +18 -5
  68. package/skills/kanbn-plan/SKILL.md +10 -1
  69. package/skills/kanbn-replan/SKILL.md +6 -1
  70. package/src/actions.js +904 -0
  71. package/src/board.js +25 -2
  72. package/src/controller/add.js +72 -55
  73. package/src/controller/archive.js +9 -4
  74. package/src/controller/board.js +21 -13
  75. package/src/controller/boards.js +140 -0
  76. package/src/controller/burndown.js +14 -7
  77. package/src/controller/comment.js +13 -6
  78. package/src/controller/contributors.js +166 -0
  79. package/src/controller/edit.js +48 -18
  80. package/src/controller/find.js +87 -13
  81. package/src/controller/gantt.js +13 -6
  82. package/src/controller/history.js +13 -6
  83. package/src/controller/init.js +39 -4
  84. package/src/controller/move.js +153 -25
  85. package/src/controller/remove.js +73 -13
  86. package/src/controller/rename.js +8 -4
  87. package/src/controller/restore.js +24 -8
  88. package/src/controller/sort.js +59 -3
  89. package/src/controller/sprint.js +31 -7
  90. package/src/controller/status.js +8 -4
  91. package/src/controller/task.js +34 -10
  92. package/src/controller/validate.js +197 -7
  93. package/src/git-user-name.js +9 -0
  94. package/src/git-user.js +55 -0
  95. package/src/main.d.ts +387 -9
  96. package/src/main.js +2757 -113
  97. package/src/parse-index.js +219 -17
  98. package/src/parse-task.js +16 -0
  99. package/src/utility.js +274 -0
  100. package/coverage/tmp/coverage-214292-1787777191526-0.json +0 -1
package/routes/edit.json CHANGED
@@ -6,7 +6,8 @@
6
6
  ],
7
7
  "args": {
8
8
  "boolean": [
9
- "interactive"
9
+ "interactive",
10
+ "actions"
10
11
  ],
11
12
  "string": [
12
13
  "name",
@@ -22,18 +23,43 @@
22
23
  "plannedStart",
23
24
  "plannedFinish",
24
25
  "progress",
25
- "unset"
26
+ "unset",
27
+ "board"
26
28
  ],
27
29
  "alias": {
28
- "interactive": ["i"],
29
- "name": ["n"],
30
- "description": ["d"],
31
- "column": ["c"],
32
- "sub-task": ["s"],
33
- "tag": ["t"],
34
- "relation": ["r"],
35
- "due": ["e"],
36
- "assigned": ["a"]
30
+ "interactive": [
31
+ "i"
32
+ ],
33
+ "name": [
34
+ "n"
35
+ ],
36
+ "description": [
37
+ "d"
38
+ ],
39
+ "column": [
40
+ "c"
41
+ ],
42
+ "sub-task": [
43
+ "s"
44
+ ],
45
+ "tag": [
46
+ "t"
47
+ ],
48
+ "relation": [
49
+ "r"
50
+ ],
51
+ "due": [
52
+ "e"
53
+ ],
54
+ "assigned": [
55
+ "a"
56
+ ],
57
+ "board": [
58
+ "b"
59
+ ]
60
+ },
61
+ "default": {
62
+ "actions": true
37
63
  }
38
64
  },
39
65
  "controller": "./src/controller/edit",
package/routes/find.json CHANGED
@@ -8,7 +8,8 @@
8
8
  "boolean": [
9
9
  "interactive",
10
10
  "quiet",
11
- "json"
11
+ "json",
12
+ "all-boards"
12
13
  ],
13
14
  "string": [
14
15
  "id",
@@ -32,19 +33,43 @@
32
33
  "plannedFinish",
33
34
  "workload",
34
35
  "progress",
35
- "assigned"
36
+ "assigned",
37
+ "board"
36
38
  ],
37
39
  "alias": {
38
- "interactive": ["i"],
39
- "name": ["n"],
40
- "description": ["d"],
41
- "column": ["c"],
42
- "quiet": ["q"],
43
- "due": ["e"],
44
- "sub-task": ["s"],
45
- "tag": ["t"],
46
- "relation": ["r"],
47
- "json": ["j"]
40
+ "interactive": [
41
+ "i"
42
+ ],
43
+ "name": [
44
+ "n"
45
+ ],
46
+ "description": [
47
+ "d"
48
+ ],
49
+ "column": [
50
+ "c"
51
+ ],
52
+ "quiet": [
53
+ "q"
54
+ ],
55
+ "due": [
56
+ "e"
57
+ ],
58
+ "sub-task": [
59
+ "s"
60
+ ],
61
+ "tag": [
62
+ "t"
63
+ ],
64
+ "relation": [
65
+ "r"
66
+ ],
67
+ "json": [
68
+ "j"
69
+ ],
70
+ "board": [
71
+ "b"
72
+ ]
48
73
  }
49
74
  },
50
75
  "controller": "./src/controller/find",
package/routes/gantt.json CHANGED
@@ -12,14 +12,28 @@
12
12
  "assigned",
13
13
  "column",
14
14
  "date",
15
- "now"
15
+ "now",
16
+ "board"
16
17
  ],
17
18
  "alias": {
18
- "json": ["j"],
19
- "assigned": ["a"],
20
- "column": ["c"],
21
- "date": ["d"],
22
- "now": ["n"]
19
+ "json": [
20
+ "j"
21
+ ],
22
+ "assigned": [
23
+ "a"
24
+ ],
25
+ "column": [
26
+ "c"
27
+ ],
28
+ "date": [
29
+ "d"
30
+ ],
31
+ "now": [
32
+ "n"
33
+ ],
34
+ "board": [
35
+ "b"
36
+ ]
23
37
  }
24
38
  },
25
39
  "controller": "./src/controller/gantt",
@@ -1,27 +1,41 @@
1
1
  {
2
- "name": "Task History",
3
- "commands": [
4
- "history",
5
- "hi"
6
- ],
7
- "args": {
8
- "boolean": [
9
- "json"
10
- ],
11
- "string": [
12
- "date",
13
- "sprint",
14
- "assigned",
15
- "task"
16
- ],
17
- "alias": {
18
- "json": ["j"],
19
- "date": ["d"],
20
- "sprint": ["p"],
21
- "assigned": ["a"],
22
- "task": ["t"]
23
- }
24
- },
25
- "controller": "./src/controller/history",
26
- "help": "./docs/commands/history.txt"
2
+ "name": "Task History",
3
+ "commands": [
4
+ "history",
5
+ "hi"
6
+ ],
7
+ "args": {
8
+ "boolean": [
9
+ "json"
10
+ ],
11
+ "string": [
12
+ "date",
13
+ "sprint",
14
+ "assigned",
15
+ "task",
16
+ "board"
17
+ ],
18
+ "alias": {
19
+ "json": [
20
+ "j"
21
+ ],
22
+ "date": [
23
+ "d"
24
+ ],
25
+ "sprint": [
26
+ "p"
27
+ ],
28
+ "assigned": [
29
+ "a"
30
+ ],
31
+ "task": [
32
+ "t"
33
+ ],
34
+ "board": [
35
+ "b"
36
+ ]
37
+ }
38
+ },
39
+ "controller": "./src/controller/history",
40
+ "help": "./docs/commands/history.txt"
27
41
  }
package/routes/init.json CHANGED
@@ -8,7 +8,8 @@
8
8
  "string": [
9
9
  "name",
10
10
  "description",
11
- "column"
11
+ "column",
12
+ "board"
12
13
  ],
13
14
  "boolean": [
14
15
  "interactive"
@@ -17,6 +18,7 @@
17
18
  "name": ["n"],
18
19
  "description": ["d"],
19
20
  "column": ["c"],
21
+ "board": ["b"],
20
22
  "interactive": ["i"]
21
23
  }
22
24
  },
package/routes/move.json CHANGED
@@ -7,17 +7,35 @@
7
7
  "args": {
8
8
  "boolean": [
9
9
  "interactive",
10
- "relative"
10
+ "relative",
11
+ "add",
12
+ "actions"
11
13
  ],
12
14
  "string": [
13
15
  "column",
14
- "position"
16
+ "position",
17
+ "board"
15
18
  ],
16
19
  "alias": {
17
- "interactive": ["i"],
18
- "column": ["c"],
19
- "position": ["p"],
20
- "relative": ["r"]
20
+ "interactive": [
21
+ "i"
22
+ ],
23
+ "column": [
24
+ "c"
25
+ ],
26
+ "position": [
27
+ "p"
28
+ ],
29
+ "relative": [
30
+ "r"
31
+ ],
32
+ "board": [
33
+ "b"
34
+ ]
35
+ },
36
+ "default": {
37
+ "add": true,
38
+ "actions": true
21
39
  }
22
40
  },
23
41
  "controller": "./src/controller/move",
@@ -7,11 +7,26 @@
7
7
  "args": {
8
8
  "boolean": [
9
9
  "force",
10
- "index"
10
+ "index",
11
+ "all-boards",
12
+ "actions"
11
13
  ],
12
14
  "alias": {
13
- "force": ["f"],
14
- "index": ["x"]
15
+ "force": [
16
+ "f"
17
+ ],
18
+ "index": [
19
+ "x"
20
+ ],
21
+ "board": [
22
+ "b"
23
+ ]
24
+ },
25
+ "string": [
26
+ "board"
27
+ ],
28
+ "default": {
29
+ "actions": true
15
30
  }
16
31
  },
17
32
  "controller": "./src/controller/remove",
@@ -9,11 +9,19 @@
9
9
  "interactive"
10
10
  ],
11
11
  "string": [
12
- "name"
12
+ "name",
13
+ "board"
13
14
  ],
14
15
  "alias": {
15
- "interactive": ["i"],
16
- "name": ["n"]
16
+ "interactive": [
17
+ "i"
18
+ ],
19
+ "name": [
20
+ "n"
21
+ ],
22
+ "board": [
23
+ "b"
24
+ ]
17
25
  }
18
26
  },
19
27
  "controller": "./src/controller/rename",
@@ -6,10 +6,22 @@
6
6
  ],
7
7
  "args": {
8
8
  "string": [
9
- "column"
9
+ "column",
10
+ "board"
10
11
  ],
11
12
  "alias": {
12
- "column": ["c"]
13
+ "column": [
14
+ "c"
15
+ ],
16
+ "board": [
17
+ "b"
18
+ ]
19
+ },
20
+ "boolean": [
21
+ "actions"
22
+ ],
23
+ "default": {
24
+ "actions": true
13
25
  }
14
26
  },
15
27
  "controller": "./src/controller/restore",
package/routes/sort.json CHANGED
@@ -31,19 +31,48 @@
31
31
  "plannedFinish",
32
32
  "workload",
33
33
  "progress",
34
- "assigned"
34
+ "assigned",
35
+ "overdue",
36
+ "is-started",
37
+ "is-completed",
38
+ "in-started-column",
39
+ "in-completed-column",
40
+ "board"
35
41
  ],
36
42
  "alias": {
37
- "interactive": ["i"],
38
- "name": ["n"],
39
- "description": ["d"],
40
- "sub-task": ["s"],
41
- "tag": ["t"],
42
- "relation": ["r"],
43
- "due": ["e"],
44
- "workload": ["w"],
45
- "ascending": ["a"],
46
- "descending": ["z"]
43
+ "interactive": [
44
+ "i"
45
+ ],
46
+ "name": [
47
+ "n"
48
+ ],
49
+ "description": [
50
+ "d"
51
+ ],
52
+ "sub-task": [
53
+ "s"
54
+ ],
55
+ "tag": [
56
+ "t"
57
+ ],
58
+ "relation": [
59
+ "r"
60
+ ],
61
+ "due": [
62
+ "e"
63
+ ],
64
+ "workload": [
65
+ "w"
66
+ ],
67
+ "ascending": [
68
+ "a"
69
+ ],
70
+ "descending": [
71
+ "z"
72
+ ],
73
+ "board": [
74
+ "b"
75
+ ]
47
76
  }
48
77
  },
49
78
  "controller": "./src/controller/sort",
@@ -10,12 +10,22 @@
10
10
  ],
11
11
  "string": [
12
12
  "name",
13
- "description"
13
+ "description",
14
+ "board"
14
15
  ],
15
16
  "alias": {
16
- "interactive": ["i"],
17
- "name": ["n"],
18
- "description": ["d"]
17
+ "interactive": [
18
+ "i"
19
+ ],
20
+ "name": [
21
+ "n"
22
+ ],
23
+ "description": [
24
+ "d"
25
+ ],
26
+ "board": [
27
+ "b"
28
+ ]
19
29
  }
20
30
  },
21
31
  "controller": "./src/controller/sprint",
@@ -13,15 +13,31 @@
13
13
  ],
14
14
  "string": [
15
15
  "sprint",
16
- "date"
16
+ "date",
17
+ "board"
17
18
  ],
18
19
  "alias": {
19
- "untracked": ["u"],
20
- "quiet": ["q"],
21
- "json": ["j"],
22
- "due": ["e"],
23
- "sprint": ["p"],
24
- "date": ["d"]
20
+ "untracked": [
21
+ "u"
22
+ ],
23
+ "quiet": [
24
+ "q"
25
+ ],
26
+ "json": [
27
+ "j"
28
+ ],
29
+ "due": [
30
+ "e"
31
+ ],
32
+ "sprint": [
33
+ "p"
34
+ ],
35
+ "date": [
36
+ "d"
37
+ ],
38
+ "board": [
39
+ "b"
40
+ ]
25
41
  }
26
42
  },
27
43
  "controller": "./src/controller/status",
package/routes/task.json CHANGED
@@ -9,8 +9,16 @@
9
9
  "json"
10
10
  ],
11
11
  "alias": {
12
- "json": ["j"]
13
- }
12
+ "json": [
13
+ "j"
14
+ ],
15
+ "board": [
16
+ "b"
17
+ ]
18
+ },
19
+ "string": [
20
+ "board"
21
+ ]
14
22
  },
15
23
  "controller": "./src/controller/task",
16
24
  "help": "./docs/commands/task.txt"
@@ -7,13 +7,26 @@
7
7
  "boolean": [
8
8
  "json",
9
9
  "save",
10
- "fix"
10
+ "fix",
11
+ "all-boards"
11
12
  ],
12
13
  "alias": {
13
- "json": ["j"],
14
- "save": ["s"],
15
- "fix": ["f"]
16
- }
14
+ "json": [
15
+ "j"
16
+ ],
17
+ "save": [
18
+ "s"
19
+ ],
20
+ "fix": [
21
+ "f"
22
+ ],
23
+ "board": [
24
+ "b"
25
+ ]
26
+ },
27
+ "string": [
28
+ "board"
29
+ ]
17
30
  },
18
31
  "controller": "./src/controller/validate",
19
32
  "help": "./docs/commands/validate.txt"
@@ -13,9 +13,18 @@ Do not use this skill to implement the project, edit source code, scaffold files
13
13
 
14
14
  Your output must stay inside the Kanbn planning surface:
15
15
 
16
- - `.kanbn/index.md`
16
+ - `.kanbn/index.md` — the main board
17
+ - `.kanbn/{board-slug}.md` — any secondary boards, in exactly the same format as the index
17
18
  - `.kanbn/tasks/*.md`
18
19
 
20
+ A workspace may hold several boards over one shared pool of tasks. Every board file is a sibling of
21
+ `index.md` inside `.kanbn/`, and boards own membership: a task can be referenced by several boards,
22
+ in a different column on each. Task files never record which boards they belong to.
23
+
24
+ Unless the user asks for more than one board, plan onto `.kanbn/index.md` alone. When they do want
25
+ several, write each board file yourself in the same format, and make sure any task referenced by a
26
+ board has a file in `.kanbn/tasks/`.
27
+
19
28
  Do not create application code, tests, CI files, or documentation unrelated to the Kanbn board.
20
29
 
21
30
  If the user asks for planning plus implementation, complete the planning portion in Kanbn format first and keep the planning files cleanly separated from any later work.
@@ -13,9 +13,14 @@ Do not use this skill to redesign scope, rewrite completed tasks, or invent new
13
13
 
14
14
  Your output must stay inside the Kanbn task surface:
15
15
 
16
- - `.kanbn/index.md`
16
+ - `.kanbn/index.md` — the main board
17
+ - `.kanbn/{board-slug}.md` — any secondary boards, in exactly the same format as the index
17
18
  - `.kanbn/tasks/*.md`
18
19
 
20
+ A workspace may hold several boards over one shared pool of tasks. Rescheduling changes task
21
+ metadata dates, which are shared, so it applies to every board at once — you do not need to touch
22
+ board files unless a task's column changes.
23
+
19
24
  You may read the current board and gantt output, but the end result should be a revised schedule for existing tasks, not a new plan.
20
25
 
21
26
  Do not modify completed tasks unless the user explicitly asks to reopen them. Leave completed task descriptions, relations, and completion history intact.