@basementuniverse/kanbn 1.1.1 → 2.1.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/README.md +3 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-summary.json +31 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +146 -0
- package/coverage/kanbn/index.html +116 -0
- package/coverage/kanbn/index.js.html +217 -0
- package/coverage/kanbn/src/board.js.html +646 -0
- package/coverage/kanbn/src/controller/add.js.html +1729 -0
- package/coverage/kanbn/src/controller/archive.js.html +277 -0
- package/coverage/kanbn/src/controller/board.js.html +217 -0
- package/coverage/kanbn/src/controller/burndown.js.html +607 -0
- package/coverage/kanbn/src/controller/comment.js.html +397 -0
- package/coverage/kanbn/src/controller/edit.js.html +2920 -0
- package/coverage/kanbn/src/controller/find.js.html +1597 -0
- package/coverage/kanbn/src/controller/gantt.js.html +1342 -0
- package/coverage/kanbn/src/controller/help.js.html +115 -0
- package/coverage/kanbn/src/controller/history.js.html +400 -0
- package/coverage/kanbn/src/controller/index.html +431 -0
- package/coverage/kanbn/src/controller/init.js.html +511 -0
- package/coverage/kanbn/src/controller/move.js.html +514 -0
- package/coverage/kanbn/src/controller/remove-all.js.html +226 -0
- package/coverage/kanbn/src/controller/remove.js.html +307 -0
- package/coverage/kanbn/src/controller/rename.js.html +397 -0
- package/coverage/kanbn/src/controller/restore.js.html +268 -0
- package/coverage/kanbn/src/controller/sort.js.html +1318 -0
- package/coverage/kanbn/src/controller/sprint.js.html +361 -0
- package/coverage/kanbn/src/controller/status.js.html +310 -0
- package/coverage/kanbn/src/controller/task.js.html +244 -0
- package/coverage/kanbn/src/controller/validate.js.html +367 -0
- package/coverage/kanbn/src/controller/version.js.html +100 -0
- package/coverage/kanbn/src/index.html +191 -0
- package/coverage/kanbn/src/main.js.html +9787 -0
- package/coverage/kanbn/src/parse-index.js.html +1063 -0
- package/coverage/kanbn/src/parse-markdown.js.html +202 -0
- package/coverage/kanbn/src/parse-task.js.html +2191 -0
- package/coverage/kanbn/src/utility.js.html +616 -0
- package/coverage/lcov.info +11837 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/tmp/coverage-214292-1787777191526-0.json +1 -0
- package/coverage/tmp/coverage-214293-1787777184569-0.json +1 -0
- package/docs/advanced-configuration.md +25 -0
- package/docs/commands/add.txt +19 -0
- package/docs/commands/archive.txt +5 -0
- package/docs/commands/board.txt +8 -1
- package/docs/commands/boards.txt +34 -0
- package/docs/commands/burndown.txt +8 -4
- package/docs/commands/comment.txt +5 -0
- package/docs/commands/edit.txt +27 -0
- package/docs/commands/find.txt +56 -1
- package/docs/commands/gantt.txt +5 -0
- package/docs/commands/help.txt +2 -0
- package/docs/commands/history.txt +5 -0
- package/docs/commands/init.txt +13 -0
- package/docs/commands/move.txt +10 -1
- package/docs/commands/remove.txt +12 -1
- package/docs/commands/rename.txt +5 -0
- package/docs/commands/restore.txt +6 -0
- package/docs/commands/sort.txt +18 -2
- package/docs/commands/sprint.txt +9 -0
- package/docs/commands/status.txt +10 -1
- package/docs/commands/task.txt +5 -0
- package/docs/commands/validate.txt +27 -0
- package/docs/filtering-and-sorting.md +218 -0
- package/docs/index-structure.md +94 -19
- package/docs/index.md +28 -2
- package/docs/migration-2.0.md +92 -0
- package/docs/multiple-boards.md +258 -0
- package/docs/quick-start.md +57 -1
- package/docs/task-structure.md +33 -3
- package/docs/views.md +229 -0
- package/example/README.md +93 -0
- package/example/advanced/.kanbn/index.md +26 -0
- package/example/advanced/.kanbn/tasks/add-rate-limiting.md +18 -0
- package/example/advanced/.kanbn/tasks/add-sso-support.md +15 -0
- package/example/advanced/.kanbn/tasks/migrate-to-new-cdn.md +14 -0
- package/example/advanced/.kanbn/tasks/refresh-marketing-site.md +14 -0
- package/example/advanced/.kanbn/tasks/rotate-api-keys.md +15 -0
- package/example/advanced/.kanbn/tasks/split-billing-service.md +17 -0
- package/example/advanced/.kanbn/tasks/upgrade-node-runtime.md +19 -0
- package/example/advanced/kanbn.yml +59 -0
- package/example/boards/.kanbn/design.md +31 -0
- package/example/boards/.kanbn/index.md +44 -0
- package/example/boards/.kanbn/tasks/add-usage-alert-emails.md +19 -0
- package/example/boards/.kanbn/tasks/build-tenant-settings-page.md +43 -0
- package/example/boards/.kanbn/tasks/create-organization-switcher.md +44 -0
- package/example/boards/.kanbn/tasks/design-onboarding-checklist.md +22 -0
- package/example/boards/.kanbn/tasks/refresh-marketing-site.md +28 -0
- package/example/boards/.kanbn/tasks/ship-billing-portal.md +29 -0
- package/example/views/.kanbn/index.md +140 -0
- package/example/views/.kanbn/tasks/add-audit-log-export.md +18 -0
- package/example/views/.kanbn/tasks/add-dark-mode-toggle.md +16 -0
- package/example/views/.kanbn/tasks/build-webhook-retry-queue.md +15 -0
- package/example/views/.kanbn/tasks/fix-avatar-upload-crash.md +13 -0
- package/example/views/.kanbn/tasks/fix-expired-session-redirect.md +15 -0
- package/example/views/.kanbn/tasks/investigate-offline-mode.md +12 -0
- package/example/views/.kanbn/tasks/rewrite-search-indexer.md +12 -0
- package/example/views/.kanbn/tasks/tidy-up-settings-copy.md +12 -0
- package/package.json +12 -9
- package/routes/add.json +35 -11
- package/routes/archive.json +10 -2
- package/routes/board.json +11 -3
- package/routes/boards.json +30 -0
- package/routes/burndown.json +23 -7
- package/routes/comment.json +14 -4
- package/routes/edit.json +33 -10
- package/routes/find.json +37 -12
- package/routes/gantt.json +20 -6
- package/routes/history.json +39 -25
- package/routes/init.json +3 -1
- package/routes/move.json +22 -6
- package/routes/remove.json +15 -4
- package/routes/rename.json +11 -3
- package/routes/restore.json +8 -2
- package/routes/sort.json +35 -11
- package/routes/sprint.json +14 -4
- package/routes/status.json +23 -7
- package/routes/task.json +10 -2
- package/routes/validate.json +19 -4
- package/skills/kanbn-plan/SKILL.md +10 -1
- package/skills/kanbn-plan/references/index-structure.md +1 -0
- package/skills/kanbn-plan/references/task-structure.md +2 -0
- package/skills/kanbn-replan/SKILL.md +6 -1
- package/src/board.js +2 -1
- package/src/controller/add.js +52 -46
- package/src/controller/archive.js +8 -4
- package/src/controller/board.js +9 -4
- package/src/controller/boards.js +140 -0
- package/src/controller/burndown.js +9 -5
- package/src/controller/comment.js +9 -5
- package/src/controller/edit.js +74 -17
- package/src/controller/find.js +12 -9
- package/src/controller/gantt.js +8 -4
- package/src/controller/history.js +8 -4
- package/src/controller/init.js +39 -4
- package/src/controller/move.js +69 -15
- package/src/controller/remove.js +34 -11
- package/src/controller/rename.js +8 -4
- package/src/controller/restore.js +23 -8
- package/src/controller/sort.js +19 -3
- package/src/controller/sprint.js +31 -7
- package/src/controller/status.js +20 -4
- package/src/controller/task.js +22 -9
- package/src/controller/validate.js +139 -23
- package/src/git-user-name.js +19 -0
- package/src/main.d.ts +184 -6
- package/src/main.js +1642 -221
- package/src/parse-index.js +17 -0
- package/src/parse-markdown.js +3 -1
- package/src/parse-task.js +44 -1
- package/src/utility.js +166 -1
- package/PLANS.md +0 -9
- /package/example/{.kanbn → basic/.kanbn}/index.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/add-basic-activity-feed.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/add-passwordless-login-option.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/add-usage-alert-email-thresholds.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/build-email-template-system.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/build-invoice-download-endpoint.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/build-tenant-settings-page.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/create-organization-switcher.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/create-sandbox-environment-provisioner.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/create-self-serve-cancellation-flow.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/define-product-pricing-strategy.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/design-onboarding-checklist.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/design-team-invite-expiry-flow.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-data-retention-policy-jobs.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-feature-flags-foundation.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-project-creation-wizard.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-stripe-webhook-signature-check.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-team-permissions-ui.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-user-signup-and-login.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/integrate-crm-lead-sync.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/legal-review-terms-and-privacy.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/migrate-legacy-events-to-new-schema.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/optimize-dashboard-first-load.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/prototype-report-export-scheduler.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/publish-internal-qa-checklist.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/setup-ci-pipeline.md +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-07-09T15:00:00.000Z
|
|
3
|
+
tags:
|
|
4
|
+
- Medium
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Add Usage Alert Emails
|
|
8
|
+
|
|
9
|
+
Warn an organisation by email when it crosses 80% and 100% of its plan's usage allowance.
|
|
10
|
+
|
|
11
|
+
Engineering-only work, so it never reaches the design board.
|
|
12
|
+
|
|
13
|
+
## History
|
|
14
|
+
|
|
15
|
+
- type: created
|
|
16
|
+
date: 2026-07-09T15:00:00.000Z
|
|
17
|
+
column: Backlog
|
|
18
|
+
fromProgress: 0
|
|
19
|
+
toProgress: 0
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-07-02T09:15:00.000Z
|
|
3
|
+
updated: 2026-07-14T11:30:00.000Z
|
|
4
|
+
started: 2026-07-10T09:00:00.000Z
|
|
5
|
+
designStartedAt: 2026-07-06T10:00:00.000Z
|
|
6
|
+
assigned: priya
|
|
7
|
+
tags:
|
|
8
|
+
- Medium
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Build Tenant Settings Page
|
|
12
|
+
|
|
13
|
+
A single place for an organisation's owner to manage name, logo, timezone and default roles.
|
|
14
|
+
|
|
15
|
+
This task is on both boards: `In Progress` on the engineering board and `Designing` on the design
|
|
16
|
+
board. Its `started` date is the engineering start; `designStartedAt` is when design picked it up.
|
|
17
|
+
|
|
18
|
+
## Sub-tasks
|
|
19
|
+
|
|
20
|
+
- [x] Settings form layout
|
|
21
|
+
- [ ] Logo upload and cropping
|
|
22
|
+
- [ ] Role defaults
|
|
23
|
+
|
|
24
|
+
## History
|
|
25
|
+
|
|
26
|
+
- type: created
|
|
27
|
+
date: 2026-07-02T09:15:00.000Z
|
|
28
|
+
column: Backlog
|
|
29
|
+
fromProgress: 0
|
|
30
|
+
toProgress: 0
|
|
31
|
+
- type: added
|
|
32
|
+
date: 2026-07-06T10:00:00.000Z
|
|
33
|
+
column: Ideas
|
|
34
|
+
board: design
|
|
35
|
+
- type: moved
|
|
36
|
+
date: 2026-07-06T10:00:00.000Z
|
|
37
|
+
fromColumn: Ideas
|
|
38
|
+
toColumn: Designing
|
|
39
|
+
board: design
|
|
40
|
+
- type: moved
|
|
41
|
+
date: 2026-07-10T09:00:00.000Z
|
|
42
|
+
fromColumn: Backlog
|
|
43
|
+
toColumn: 'In Progress'
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-07-03T14:00:00.000Z
|
|
3
|
+
updated: 2026-07-12T16:45:00.000Z
|
|
4
|
+
designStartedAt: 2026-07-05T09:30:00.000Z
|
|
5
|
+
designSignedOffAt: 2026-07-12T16:45:00.000Z
|
|
6
|
+
assigned: sam
|
|
7
|
+
tags:
|
|
8
|
+
- Small
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Create Organization Switcher
|
|
12
|
+
|
|
13
|
+
A dropdown for moving between the organisations a user belongs to, without signing out.
|
|
14
|
+
|
|
15
|
+
Design has finished with this one - it sits in `Signed Off` on the design board - but engineering
|
|
16
|
+
hasn't started it, so it's still in `Todo` on the main board. Because the design board reads
|
|
17
|
+
`designSignedOffAt` rather than the shared `completed` field, finishing it here doesn't mark it done
|
|
18
|
+
for engineering.
|
|
19
|
+
|
|
20
|
+
## Sub-tasks
|
|
21
|
+
|
|
22
|
+
- [ ] Switcher component
|
|
23
|
+
- [ ] Persist last-used organisation
|
|
24
|
+
|
|
25
|
+
## History
|
|
26
|
+
|
|
27
|
+
- type: created
|
|
28
|
+
date: 2026-07-03T14:00:00.000Z
|
|
29
|
+
column: Backlog
|
|
30
|
+
fromProgress: 0
|
|
31
|
+
toProgress: 0
|
|
32
|
+
- type: added
|
|
33
|
+
date: 2026-07-05T09:30:00.000Z
|
|
34
|
+
column: Designing
|
|
35
|
+
board: design
|
|
36
|
+
- type: moved
|
|
37
|
+
date: 2026-07-08T10:00:00.000Z
|
|
38
|
+
fromColumn: Backlog
|
|
39
|
+
toColumn: Todo
|
|
40
|
+
- type: moved
|
|
41
|
+
date: 2026-07-12T16:45:00.000Z
|
|
42
|
+
fromColumn: Designing
|
|
43
|
+
toColumn: 'Signed Off'
|
|
44
|
+
board: design
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-07-11T13:20:00.000Z
|
|
3
|
+
assigned: priya
|
|
4
|
+
tags:
|
|
5
|
+
- Small
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Design Onboarding Checklist
|
|
9
|
+
|
|
10
|
+
An in-product checklist walking a new organisation through its first week.
|
|
11
|
+
|
|
12
|
+
This one is only on the design board - engineering hasn't picked it up, so it isn't on the main
|
|
13
|
+
board at all. `kanbn status --untracked` would not list it: it is tracked, just not here.
|
|
14
|
+
|
|
15
|
+
## History
|
|
16
|
+
|
|
17
|
+
- type: created
|
|
18
|
+
date: 2026-07-11T13:20:00.000Z
|
|
19
|
+
column: Ideas
|
|
20
|
+
board: design
|
|
21
|
+
fromProgress: 0
|
|
22
|
+
toProgress: 0
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-07-05T08:00:00.000Z
|
|
3
|
+
updated: 2026-07-13T09:00:00.000Z
|
|
4
|
+
designStartedAt: 2026-07-13T09:00:00.000Z
|
|
5
|
+
assigned: priya
|
|
6
|
+
tags:
|
|
7
|
+
- Large
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Refresh Marketing Site
|
|
11
|
+
|
|
12
|
+
New landing page, pricing page and case studies, ahead of the autumn launch.
|
|
13
|
+
|
|
14
|
+
Design has started, engineering hasn't - `Designing` on the design board, `Backlog` on the main one.
|
|
15
|
+
This is the shape that makes per-board state fields worth having: the task genuinely is in flight on
|
|
16
|
+
one board and untouched on the other.
|
|
17
|
+
|
|
18
|
+
## History
|
|
19
|
+
|
|
20
|
+
- type: created
|
|
21
|
+
date: 2026-07-05T08:00:00.000Z
|
|
22
|
+
column: Backlog
|
|
23
|
+
fromProgress: 0
|
|
24
|
+
toProgress: 0
|
|
25
|
+
- type: added
|
|
26
|
+
date: 2026-07-13T09:00:00.000Z
|
|
27
|
+
column: Designing
|
|
28
|
+
board: design
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-06-24T10:00:00.000Z
|
|
3
|
+
updated: 2026-07-07T17:10:00.000Z
|
|
4
|
+
started: 2026-06-26T09:00:00.000Z
|
|
5
|
+
completed: 2026-07-07T17:10:00.000Z
|
|
6
|
+
assigned: sam
|
|
7
|
+
tags:
|
|
8
|
+
- Large
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Ship Billing Portal
|
|
12
|
+
|
|
13
|
+
Self-serve plan changes, payment method updates and invoice history.
|
|
14
|
+
|
|
15
|
+
## History
|
|
16
|
+
|
|
17
|
+
- type: created
|
|
18
|
+
date: 2026-06-24T10:00:00.000Z
|
|
19
|
+
column: Backlog
|
|
20
|
+
fromProgress: 0
|
|
21
|
+
toProgress: 0
|
|
22
|
+
- type: moved
|
|
23
|
+
date: 2026-06-26T09:00:00.000Z
|
|
24
|
+
fromColumn: Backlog
|
|
25
|
+
toColumn: 'In Progress'
|
|
26
|
+
- type: moved
|
|
27
|
+
date: 2026-07-07T17:10:00.000Z
|
|
28
|
+
fromColumn: 'In Progress'
|
|
29
|
+
toColumn: Done
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
startedColumns:
|
|
3
|
+
- 'In Progress'
|
|
4
|
+
completedColumns:
|
|
5
|
+
- Done
|
|
6
|
+
hiddenColumns:
|
|
7
|
+
- Icebox
|
|
8
|
+
taskWorkloadTags:
|
|
9
|
+
Tiny: 1
|
|
10
|
+
Small: 2
|
|
11
|
+
Medium: 3
|
|
12
|
+
Large: 5
|
|
13
|
+
Huge: 8
|
|
14
|
+
views:
|
|
15
|
+
|
|
16
|
+
# The index columns, spelled out explicitly. Note that a view column with no
|
|
17
|
+
# filters would show *every* task, not the tasks in a column of that name.
|
|
18
|
+
- name: 'default'
|
|
19
|
+
columns:
|
|
20
|
+
- name: 'Backlog'
|
|
21
|
+
filters:
|
|
22
|
+
column: 'Backlog'
|
|
23
|
+
- name: 'In Progress'
|
|
24
|
+
filters:
|
|
25
|
+
column: 'In Progress'
|
|
26
|
+
- name: 'Done'
|
|
27
|
+
filters:
|
|
28
|
+
column: 'Done'
|
|
29
|
+
|
|
30
|
+
# The same columns, grouped into one lane per assignee.
|
|
31
|
+
# Lane filters are merged over each column's filters.
|
|
32
|
+
- name: 'by-assignee'
|
|
33
|
+
columns:
|
|
34
|
+
- name: 'Backlog'
|
|
35
|
+
filters:
|
|
36
|
+
column: 'Backlog'
|
|
37
|
+
- name: 'In Progress'
|
|
38
|
+
filters:
|
|
39
|
+
column: 'In Progress'
|
|
40
|
+
- name: 'Done'
|
|
41
|
+
filters:
|
|
42
|
+
column: 'Done'
|
|
43
|
+
lanes:
|
|
44
|
+
- name: 'Ana'
|
|
45
|
+
filters:
|
|
46
|
+
assigned: '^Ana$'
|
|
47
|
+
- name: 'Ben'
|
|
48
|
+
filters:
|
|
49
|
+
assigned: '^Ben$'
|
|
50
|
+
- name: 'Unassigned'
|
|
51
|
+
filters:
|
|
52
|
+
assigned: '^$'
|
|
53
|
+
|
|
54
|
+
# A root filter narrows the whole view to bugs before columns are built.
|
|
55
|
+
# The second column has no filters, so within this view it shows all bugs.
|
|
56
|
+
- name: 'triage'
|
|
57
|
+
filters:
|
|
58
|
+
tag: Bug
|
|
59
|
+
columns:
|
|
60
|
+
- name: 'Due before Aug 2026'
|
|
61
|
+
filters:
|
|
62
|
+
due:
|
|
63
|
+
- 2020-01-01
|
|
64
|
+
- 2026-08-01
|
|
65
|
+
sorters:
|
|
66
|
+
- field: workload
|
|
67
|
+
order: descending
|
|
68
|
+
- name: 'All bugs'
|
|
69
|
+
sorters:
|
|
70
|
+
- field: name
|
|
71
|
+
order: ascending
|
|
72
|
+
|
|
73
|
+
# Columns and lanes don't have to correspond to index columns at all.
|
|
74
|
+
- name: 'workload'
|
|
75
|
+
columns:
|
|
76
|
+
- name: 'Small (1-2)'
|
|
77
|
+
filters:
|
|
78
|
+
workload:
|
|
79
|
+
- 1
|
|
80
|
+
- 2
|
|
81
|
+
- name: 'Medium (3-5)'
|
|
82
|
+
filters:
|
|
83
|
+
workload:
|
|
84
|
+
- 3
|
|
85
|
+
- 5
|
|
86
|
+
- name: 'Large (6+)'
|
|
87
|
+
filters:
|
|
88
|
+
workload:
|
|
89
|
+
- 6
|
|
90
|
+
- 99
|
|
91
|
+
lanes:
|
|
92
|
+
- name: 'Not started'
|
|
93
|
+
filters:
|
|
94
|
+
column: 'Backlog'
|
|
95
|
+
- name: 'Started'
|
|
96
|
+
filters:
|
|
97
|
+
column: 'In Progress'
|
|
98
|
+
|
|
99
|
+
# A view that defines its own columns ignores hiddenColumns, so this one
|
|
100
|
+
# also shows tasks in the hidden Icebox column.
|
|
101
|
+
- name: 'everything'
|
|
102
|
+
columns:
|
|
103
|
+
- name: 'All tasks (including Icebox)'
|
|
104
|
+
sorters:
|
|
105
|
+
- field: column
|
|
106
|
+
order: ascending
|
|
107
|
+
- field: name
|
|
108
|
+
order: ascending
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
# Views Example
|
|
112
|
+
|
|
113
|
+
A small board used to demonstrate views, lanes, filters and sorters. Try:
|
|
114
|
+
|
|
115
|
+
- `kanbn board`
|
|
116
|
+
- `kanbn board -v default`
|
|
117
|
+
- `kanbn board -v by-assignee`
|
|
118
|
+
- `kanbn board -v triage`
|
|
119
|
+
- `kanbn board -v workload`
|
|
120
|
+
- `kanbn board -v everything`
|
|
121
|
+
|
|
122
|
+
## Backlog
|
|
123
|
+
|
|
124
|
+
- [add-audit-log-export](tasks/add-audit-log-export.md)
|
|
125
|
+
- [fix-avatar-upload-crash](tasks/fix-avatar-upload-crash.md)
|
|
126
|
+
- [rewrite-search-indexer](tasks/rewrite-search-indexer.md)
|
|
127
|
+
- [tidy-up-settings-copy](tasks/tidy-up-settings-copy.md)
|
|
128
|
+
|
|
129
|
+
## In Progress
|
|
130
|
+
|
|
131
|
+
- [fix-expired-session-redirect](tasks/fix-expired-session-redirect.md)
|
|
132
|
+
- [build-webhook-retry-queue](tasks/build-webhook-retry-queue.md)
|
|
133
|
+
|
|
134
|
+
## Done
|
|
135
|
+
|
|
136
|
+
- [add-dark-mode-toggle](tasks/add-dark-mode-toggle.md)
|
|
137
|
+
|
|
138
|
+
## Icebox
|
|
139
|
+
|
|
140
|
+
- [investigate-offline-mode](tasks/investigate-offline-mode.md)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-07-02T09:00:00.000Z
|
|
3
|
+
updated: 2026-07-02T09:00:00.000Z
|
|
4
|
+
assigned: Ana
|
|
5
|
+
due: 2026-09-30T17:00:00.000Z
|
|
6
|
+
tags:
|
|
7
|
+
- Feature
|
|
8
|
+
- Medium
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Add Audit Log Export
|
|
12
|
+
|
|
13
|
+
Let admins download an audit log as CSV.
|
|
14
|
+
|
|
15
|
+
## Sub-tasks
|
|
16
|
+
|
|
17
|
+
- [ ] Add an export endpoint
|
|
18
|
+
- [ ] Add a download button to the audit log page
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-06-20T09:00:00.000Z
|
|
3
|
+
updated: 2026-07-01T09:00:00.000Z
|
|
4
|
+
started: 2026-06-22T09:00:00.000Z
|
|
5
|
+
completed: 2026-07-01T09:00:00.000Z
|
|
6
|
+
assigned: Ana
|
|
7
|
+
progress: 1
|
|
8
|
+
due: 2026-07-01T17:00:00.000Z
|
|
9
|
+
tags:
|
|
10
|
+
- Feature
|
|
11
|
+
- Small
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Add Dark Mode Toggle
|
|
15
|
+
|
|
16
|
+
Add a dark mode toggle to the account menu.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-07-07T09:00:00.000Z
|
|
3
|
+
updated: 2026-07-14T09:00:00.000Z
|
|
4
|
+
started: 2026-07-11T09:00:00.000Z
|
|
5
|
+
assigned: Ben
|
|
6
|
+
progress: 0.3
|
|
7
|
+
due: 2026-10-01T17:00:00.000Z
|
|
8
|
+
tags:
|
|
9
|
+
- Feature
|
|
10
|
+
- Large
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Build Webhook Retry Queue
|
|
14
|
+
|
|
15
|
+
Retry failed webhook deliveries with exponential backoff.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-07-06T09:00:00.000Z
|
|
3
|
+
updated: 2026-07-12T09:00:00.000Z
|
|
4
|
+
started: 2026-07-10T09:00:00.000Z
|
|
5
|
+
assigned: Ana
|
|
6
|
+
progress: 0.5
|
|
7
|
+
due: 2026-07-25T17:00:00.000Z
|
|
8
|
+
tags:
|
|
9
|
+
- Bug
|
|
10
|
+
- Medium
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Fix Expired Session Redirect
|
|
14
|
+
|
|
15
|
+
Expired sessions redirect to the dashboard instead of the login page.
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@basementuniverse/kanbn",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "A CLI Kanban application",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"test": "KANBN_ENV=test qunit ./test/**/*.test.js"
|
|
7
|
+
"test": "KANBN_ENV=test qunit ./test/**/*.test.js",
|
|
8
|
+
"coverage": "KANBN_ENV=test c8 --reporter=text --reporter=html --include=src/** --include=index.js qunit ./test/**/*.test.js"
|
|
8
9
|
},
|
|
9
10
|
"preferGlobal": true,
|
|
10
11
|
"bin": {
|
|
@@ -17,7 +18,7 @@
|
|
|
17
18
|
"url": "git+https://github.com/basementuniverse/kanbn.git"
|
|
18
19
|
},
|
|
19
20
|
"engines": {
|
|
20
|
-
"node": ">=
|
|
21
|
+
"node": ">=16.13.0"
|
|
21
22
|
},
|
|
22
23
|
"keywords": [
|
|
23
24
|
"kanbn",
|
|
@@ -37,7 +38,6 @@
|
|
|
37
38
|
"dotenv": "^8.2.0",
|
|
38
39
|
"front-matter": "^4.0.2",
|
|
39
40
|
"fuzzy": "^0.1.3",
|
|
40
|
-
"git-user-name": "^2.0.0",
|
|
41
41
|
"glob-promise": "^3.4.0",
|
|
42
42
|
"humanize-duration": "^3.25.0",
|
|
43
43
|
"inquirer": "^7.3.3",
|
|
@@ -46,24 +46,27 @@
|
|
|
46
46
|
"inquirer-recursive": "github:basementuniverse/inquirer-recursive",
|
|
47
47
|
"inquirer-select-line": "github:basementuniverse/inquirer-select-line",
|
|
48
48
|
"jsonschema": "^1.4.0",
|
|
49
|
-
"marked": "^
|
|
50
|
-
"marked-terminal": "^
|
|
51
|
-
"minimist": "^1.2.
|
|
49
|
+
"marked": "^4.3.0",
|
|
50
|
+
"marked-terminal": "^5.2.0",
|
|
51
|
+
"minimist": "^1.2.8",
|
|
52
52
|
"rimraf": "^3.0.2",
|
|
53
|
-
"terminal-kit": "^1.
|
|
53
|
+
"terminal-kit": "^3.1.4",
|
|
54
54
|
"yamljs": "^0.3.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@types/typescript": "^2.0.0",
|
|
58
|
+
"c8": "^12.0.0",
|
|
58
59
|
"capture-console": "^1.0.1",
|
|
59
60
|
"faker": "^5.1.0",
|
|
60
61
|
"mock-argv": "^1.1.10",
|
|
61
|
-
"mock-fs": "^4.13.0",
|
|
62
62
|
"mock-require": "^3.0.3",
|
|
63
63
|
"mock-stdin": "^1.0.0",
|
|
64
64
|
"mockdate": "^3.0.2",
|
|
65
65
|
"qunit": "^2.13.0",
|
|
66
66
|
"strip-ansi": "^6.0.0",
|
|
67
67
|
"typescript": "^4.9.3"
|
|
68
|
+
},
|
|
69
|
+
"overrides": {
|
|
70
|
+
"tmp": "^0.2.7"
|
|
68
71
|
}
|
|
69
72
|
}
|
package/routes/add.json
CHANGED
|
@@ -18,19 +18,43 @@
|
|
|
18
18
|
"due",
|
|
19
19
|
"plannedStart",
|
|
20
20
|
"plannedFinish",
|
|
21
|
-
"progress"
|
|
21
|
+
"progress",
|
|
22
|
+
"board"
|
|
22
23
|
],
|
|
23
24
|
"alias": {
|
|
24
|
-
"interactive": [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
25
|
+
"interactive": [
|
|
26
|
+
"i"
|
|
27
|
+
],
|
|
28
|
+
"name": [
|
|
29
|
+
"n"
|
|
30
|
+
],
|
|
31
|
+
"description": [
|
|
32
|
+
"d"
|
|
33
|
+
],
|
|
34
|
+
"column": [
|
|
35
|
+
"c"
|
|
36
|
+
],
|
|
37
|
+
"sub-task": [
|
|
38
|
+
"s"
|
|
39
|
+
],
|
|
40
|
+
"tag": [
|
|
41
|
+
"t"
|
|
42
|
+
],
|
|
43
|
+
"relation": [
|
|
44
|
+
"r"
|
|
45
|
+
],
|
|
46
|
+
"due": [
|
|
47
|
+
"e"
|
|
48
|
+
],
|
|
49
|
+
"assigned": [
|
|
50
|
+
"a"
|
|
51
|
+
],
|
|
52
|
+
"untracked": [
|
|
53
|
+
"u"
|
|
54
|
+
],
|
|
55
|
+
"board": [
|
|
56
|
+
"b"
|
|
57
|
+
]
|
|
34
58
|
}
|
|
35
59
|
},
|
|
36
60
|
"controller": "./src/controller/add",
|
package/routes/archive.json
CHANGED
package/routes/board.json
CHANGED
|
@@ -9,11 +9,19 @@
|
|
|
9
9
|
"json"
|
|
10
10
|
],
|
|
11
11
|
"string": [
|
|
12
|
-
"view"
|
|
12
|
+
"view",
|
|
13
|
+
"board"
|
|
13
14
|
],
|
|
14
15
|
"alias": {
|
|
15
|
-
"view": [
|
|
16
|
-
|
|
16
|
+
"view": [
|
|
17
|
+
"v"
|
|
18
|
+
],
|
|
19
|
+
"json": [
|
|
20
|
+
"j"
|
|
21
|
+
],
|
|
22
|
+
"board": [
|
|
23
|
+
"b"
|
|
24
|
+
]
|
|
17
25
|
}
|
|
18
26
|
},
|
|
19
27
|
"controller": "./src/controller/board",
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Boards",
|
|
3
|
+
"commands": [
|
|
4
|
+
"boards"
|
|
5
|
+
],
|
|
6
|
+
"args": {
|
|
7
|
+
"boolean": [
|
|
8
|
+
"json",
|
|
9
|
+
"tasks",
|
|
10
|
+
"all",
|
|
11
|
+
"force"
|
|
12
|
+
],
|
|
13
|
+
"string": [
|
|
14
|
+
"rename",
|
|
15
|
+
"delete",
|
|
16
|
+
"name"
|
|
17
|
+
],
|
|
18
|
+
"alias": {
|
|
19
|
+
"json": ["j"],
|
|
20
|
+
"tasks": ["t"],
|
|
21
|
+
"all": ["a"],
|
|
22
|
+
"force": ["f"],
|
|
23
|
+
"rename": ["r"],
|
|
24
|
+
"delete": ["d"],
|
|
25
|
+
"name": ["n"]
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"controller": "./src/controller/boards",
|
|
29
|
+
"help": "./docs/commands/boards.txt"
|
|
30
|
+
}
|
package/routes/burndown.json
CHANGED
|
@@ -13,15 +13,31 @@
|
|
|
13
13
|
"sprint",
|
|
14
14
|
"assigned",
|
|
15
15
|
"column",
|
|
16
|
-
"normalise"
|
|
16
|
+
"normalise",
|
|
17
|
+
"board"
|
|
17
18
|
],
|
|
18
19
|
"alias": {
|
|
19
|
-
"json": [
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
"json": [
|
|
21
|
+
"j"
|
|
22
|
+
],
|
|
23
|
+
"date": [
|
|
24
|
+
"d"
|
|
25
|
+
],
|
|
26
|
+
"sprint": [
|
|
27
|
+
"p"
|
|
28
|
+
],
|
|
29
|
+
"assigned": [
|
|
30
|
+
"a"
|
|
31
|
+
],
|
|
32
|
+
"column": [
|
|
33
|
+
"c"
|
|
34
|
+
],
|
|
35
|
+
"normalise": [
|
|
36
|
+
"n"
|
|
37
|
+
],
|
|
38
|
+
"board": [
|
|
39
|
+
"b"
|
|
40
|
+
]
|
|
25
41
|
}
|
|
26
42
|
},
|
|
27
43
|
"controller": "./src/controller/burndown",
|