savepoint 1.0.1 → 1.0.2
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/.claude/settings.local.json +4 -1
- package/.savepoint/Design.md +22 -17
- package/.savepoint/audit/v1/E01/proposals.md +168 -0
- package/.savepoint/audit/v1/E01/snapshot.md +78 -0
- package/.savepoint/audit/{E01-go-setup → v1/E01-go-setup}/proposals.md +7 -7
- package/.savepoint/audit/{E01-go-setup → v1/E01-go-setup}/snapshot.md +2 -2
- package/.savepoint/audit/{E01-scaffolding → v1/E01-scaffolding}/proposals/AGENTS.md +5 -5
- package/.savepoint/audit/{E02-data-readers → v1/E02-data-readers}/proposals.md +20 -20
- package/.savepoint/audit/{E02-data-readers → v1/E02-data-readers}/snapshot.md +1 -1
- package/.savepoint/audit/{E03-board-tui-core → v1/E03-board-tui-core}/proposals.md +11 -11
- package/.savepoint/audit/{E03-board-tui-core → v1/E03-board-tui-core}/snapshot.md +1 -1
- package/.savepoint/audit/{E04-board-components → v1/E04-board-components}/proposals.md +14 -14
- package/.savepoint/audit/{E04-board-components → v1/E04-board-components}/snapshot.md +1 -1
- package/.savepoint/audit/{E05-init-command → v1/E05-init-command}/snapshot.md +1 -1
- package/.savepoint/audit/{E05-phase-transitions → v1/E05-phase-transitions}/proposals.md +4 -4
- package/.savepoint/audit/{E05-phase-transitions → v1/E05-phase-transitions}/snapshot.md +1 -1
- package/.savepoint/audit/{E06-atari-noir-layout → v1/E06-atari-noir-layout}/proposals.md +2 -2
- package/.savepoint/audit/{E07-audit-pipeline → v1/E07-audit-pipeline}/snapshot.md +6 -6
- package/.savepoint/audit/v1.1/E02-cross-platform-compatibility/proposals.md +114 -0
- package/.savepoint/audit/v1.1/E02-cross-platform-compatibility/snapshot.md +41 -0
- package/.savepoint/audit/v1.1/E04-epic-navigation/proposals.md +156 -0
- package/.savepoint/audit/v1.1/E04-epic-navigation/snapshot.md +48 -0
- package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md +1 -1
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T005-layout.md +1 -1
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T002-card.md +1 -1
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T006-help-overlay.md +1 -1
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/{Design.md → E06-Detail.md} +5 -3
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md +1 -1
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T003-footer-status-bar.md +1 -1
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md +1 -1
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T010-auto-refresh-watcher.md +2 -0
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/{Design.md → E01-Detail.md} +9 -1
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/{T007-next-activity-header.md → T001-next-activity-header.md} +13 -12
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T002-rename-epic-design-files.md +9 -9
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T003-rename-release-prd.md +2 -2
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T004-update-instruction-files.md +13 -12
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T005-update-cross-references.md +14 -13
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T006-column-and-detail-scrolling.md +25 -15
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T007-column-focus-border-stability.md +57 -0
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/{Design.md → E02-Detail.md} +12 -3
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T001-fix-makefile.md +11 -8
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T002-linux-build-target.md +12 -7
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T003-macos-build-target.md +9 -5
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T004-smoke-tests-and-artifacts.md +30 -9
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Detail.md +32 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T001-border-resize-fix.md +40 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T002-next-activity-below-header.md +64 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T003-checkbox-rendering-fix.md +56 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T005-unify-status-glyphs.md +65 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T006-forced-256-color-profile.md +36 -0
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Detail.md +51 -0
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T001-sidebar-focusable-navigation.md +65 -0
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T002-epic-detail-overlay.md +73 -0
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T003-epic-status-glyphs.md +73 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md +45 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md +34 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md +30 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T003-update-design-md.md +33 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T004-implement-m-hotkey.md +88 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T005-update-help-overlay.md +30 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T006-tests-and-quality-gates.md +46 -0
- package/.savepoint/releases/v1.1/v1.1-PRD.md +79 -0
- package/.savepoint/router.md +33 -105
- package/AGENTS.md +56 -113
- package/Makefile +19 -3
- package/README.md +6 -5
- package/agent-skills/savepoint-audit/SKILL.md +6 -6
- package/agent-skills/savepoint-build-task/SKILL.md +2 -2
- package/agent-skills/savepoint-create-plan/SKILL.md +3 -3
- package/agent-skills/savepoint-create-task/SKILL.md +2 -2
- package/agent-skills/savepoint-draft-prd/SKILL.md +1 -1
- package/agent-skills/savepoint-system-design/SKILL.md +1 -1
- package/internal/board/board.go +43 -27
- package/internal/board/board_test.go +71 -0
- package/internal/board/card.go +34 -3
- package/internal/board/card_test.go +105 -12
- package/internal/board/column.go +40 -5
- package/internal/board/column_test.go +60 -13
- package/internal/board/detail.go +107 -25
- package/internal/board/detail_test.go +117 -26
- package/internal/board/epic_panel.go +105 -8
- package/internal/board/epic_panel_test.go +343 -5
- package/internal/board/layout.go +12 -2
- package/internal/board/layout_test.go +17 -0
- package/internal/board/model.go +141 -24
- package/internal/board/render_policy_test.go +77 -0
- package/internal/board/status.go +23 -0
- package/internal/board/update.go +276 -8
- package/internal/board/update_test.go +166 -0
- package/internal/board/view.go +131 -17
- package/internal/board/view_test.go +159 -1
- package/internal/board/watch.go +24 -6
- package/internal/buildtool/main.go +219 -0
- package/internal/data/parser.go +8 -0
- package/internal/data/parser_test.go +35 -0
- package/internal/data/task.go +10 -0
- package/internal/styles/palette.go +3 -3
- package/internal/styles/styles.go +39 -12
- package/main.go +9 -0
- package/package.json +1 -1
- package/savepoint +0 -0
- package/savepoint.exe +0 -0
- package/templates/project/.savepoint/router.md +6 -5
- package/templates/project/AGENTS.md +47 -101
- package/templates/prompts/audit-reconciliation.prompt.md +6 -6
- package/templates/prompts/epic-design.prompt.md +3 -3
- package/templates/prompts/task-breakdown.prompt.md +1 -1
- package/templates/prompts/task-building.prompt.md +1 -1
- package/templates/prompts/task-planning.prompt.md +1 -1
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T001-border-resize-fix.md +0 -36
- package/main.exe +0 -0
- /package/.savepoint/audit/{E01-scaffolding → v1/E01-scaffolding}/proposals/Design.md +0 -0
- /package/.savepoint/audit/{E01-scaffolding → v1/E01-scaffolding}/proposals/epic-Design.md +0 -0
- /package/.savepoint/audit/{E01-scaffolding → v1/E01-scaffolding}/proposals/quality-review.md +0 -0
- /package/.savepoint/audit/{E01-scaffolding → v1/E01-scaffolding}/snapshot.md +0 -0
- /package/.savepoint/audit/{E02-data-model → v1/E02-data-model}/snapshot.md +0 -0
- /package/.savepoint/audit/{E03-cli-foundation → v1/E03-cli-foundation}/snapshot.md +0 -0
- /package/.savepoint/audit/{E04-templates-and-prompts → v1/E04-templates-and-prompts}/snapshot.md +0 -0
- /package/.savepoint/audit/{E06-atari-noir-layout → v1/E06-atari-noir-layout}/snapshot.md +0 -0
- /package/.savepoint/audit/{E06-tui-board → v1/E06-tui-board}/snapshot.md +0 -0
- /package/.savepoint/audit/{E08-board-workflow-cleanup → v1/E08-board-workflow-cleanup}/snapshot.md +0 -0
- /package/.savepoint/releases/v1/epics/E01-go-setup/{Design.md → E01-Detail.md} +0 -0
- /package/.savepoint/releases/v1/epics/E02-data-readers/{Design.md → E02-Detail.md} +0 -0
- /package/.savepoint/releases/v1/epics/E03-board-tui-core/{Design.md → E03-Detail.md} +0 -0
- /package/.savepoint/releases/v1/epics/E04-board-components/{Design.md → E04-Detail.md} +0 -0
- /package/.savepoint/releases/v1/epics/E05-phase-transitions/{Design.md → E05-Detail.md} +0 -0
- /package/.savepoint/releases/v1/{PRD.md → v1-PRD.md} +0 -0
|
@@ -31,29 +31,29 @@
|
|
|
31
31
|
## Insert After
|
|
32
32
|
|
|
33
33
|
```md
|
|
34
|
-
| `internal/data/errors.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/
|
|
34
|
+
| `internal/data/errors.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Shared data-reader boundary error sentinels |
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
## With
|
|
38
38
|
|
|
39
39
|
```md
|
|
40
|
-
| `internal/board/model.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
41
|
-
| `internal/board/update.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
42
|
-
| `internal/board/layout.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
43
|
-
| `internal/board/view.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
44
|
-
| `internal/board/column.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/
|
|
45
|
-
| `internal/board/card.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/
|
|
46
|
-
| `internal/board/epic_panel.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/
|
|
47
|
-
| `internal/board/detail.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/
|
|
48
|
-
| `internal/board/release.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/
|
|
49
|
-
| `internal/board/help.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/
|
|
50
|
-
| `internal/styles/*.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/
|
|
51
|
-
| `internal/board/*_test.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
40
|
+
| `internal/board/model.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Bubble Tea board state for grouped tasks, focused column/task, selected release/epic, responsive size, and active overlay |
|
|
41
|
+
| `internal/board/update.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Keyboard and window-size update handling for board navigation, overlays, selectors, and quit behavior |
|
|
42
|
+
| `internal/board/layout.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Responsive board geometry breakpoints and column/sidebar width calculation |
|
|
43
|
+
| `internal/board/view.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Board view composition, status bar, responsive columns, and overlay placement helpers |
|
|
44
|
+
| `internal/board/column.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md) | Column renderer with status header, task count, empty state, and focused border styling |
|
|
45
|
+
| `internal/board/card.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md) | Task card renderer with phase glyphs, metadata dimming, truncation, and focus styling |
|
|
46
|
+
| `internal/board/epic_panel.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md) | Wide epic sidebar and narrow epic selector dropdown renderers |
|
|
47
|
+
| `internal/board/detail.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md) | Task detail overlay renderer with task metadata, description, acceptance criteria, and phase labels |
|
|
48
|
+
| `internal/board/release.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md) | Release selector dropdown renderer and current-release cursor lookup |
|
|
49
|
+
| `internal/board/help.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md) | Keyboard shortcut help overlay renderer |
|
|
50
|
+
| `internal/styles/*.go` | [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md) | Atari-Noir Lip Gloss palette and shared board, card, overlay, glyph, status, and tag styles |
|
|
51
|
+
| `internal/board/*_test.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) / [E04-board-components](.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md) | Go board model, layout, update, view, component, selector, detail, and help tests |
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
## Target File
|
|
55
55
|
|
|
56
|
-
`.savepoint/releases/v1/epics/E04-board-components/
|
|
56
|
+
`.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md`
|
|
57
57
|
|
|
58
58
|
## Insert After
|
|
59
59
|
|
|
@@ -16,7 +16,7 @@ next_action: "Epic E04-board-components complete. Start a new agent session for
|
|
|
16
16
|
|
|
17
17
|
## Epic Scope
|
|
18
18
|
|
|
19
|
-
Epic design: `.savepoint/releases/v1/epics/E04-board-components/
|
|
19
|
+
Epic design: `.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md`
|
|
20
20
|
|
|
21
21
|
Tasks:
|
|
22
22
|
|
|
@@ -64,7 +64,7 @@ test/
|
|
|
64
64
|
| `.savepoint/audit/E05-init-command/proposals.md` | Single audit proposal bundle, pending. |
|
|
65
65
|
| `.savepoint/metrics/context-bench.md` | Context rows for E05 task building. |
|
|
66
66
|
| `AGENTS.md` | Codebase Map needs E05 module refresh. |
|
|
67
|
-
| `.savepoint/releases/v1/epics/E05-init-command/
|
|
67
|
+
| `.savepoint/releases/v1/epics/E05-init-command/E05-Detail.md` | Epic Design needs implemented-as notes. |
|
|
68
68
|
|
|
69
69
|
## New files introduced by E05
|
|
70
70
|
|
|
@@ -23,19 +23,19 @@
|
|
|
23
23
|
## Insert After
|
|
24
24
|
|
|
25
25
|
```md
|
|
26
|
-
| `internal/data/errors.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/
|
|
26
|
+
| `internal/data/errors.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Shared data-reader boundary error sentinels |
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
## With
|
|
30
30
|
|
|
31
31
|
```md
|
|
32
|
-
| `internal/data/write.go` | [E05-phase-transitions](.savepoint/releases/v1/epics/E05-phase-transitions/
|
|
33
|
-
| `internal/board/transitions.go` | [E05-phase-transitions](.savepoint/releases/v1/epics/E05-phase-transitions/
|
|
32
|
+
| `internal/data/write.go` | [E05-phase-transitions](.savepoint/releases/v1/epics/E05-phase-transitions/E05-Detail.md) | Mtime-checked task status/phase and router current-state write helpers |
|
|
33
|
+
| `internal/board/transitions.go` | [E05-phase-transitions](.savepoint/releases/v1/epics/E05-phase-transitions/E05-Detail.md) | Board phase advance/retreat lifecycle and dependency gate checks |
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
## Target File
|
|
37
37
|
|
|
38
|
-
`.savepoint/releases/v1/epics/E05-phase-transitions/
|
|
38
|
+
`.savepoint/releases/v1/epics/E05-phase-transitions/E05-Detail.md`
|
|
39
39
|
|
|
40
40
|
## Insert After
|
|
41
41
|
|
|
@@ -14,7 +14,7 @@ next_action: "Epic E05-phase-transitions is complete. Start a new agent session
|
|
|
14
14
|
|
|
15
15
|
## Epic Scope
|
|
16
16
|
|
|
17
|
-
- `.savepoint/releases/v1/epics/E05-phase-transitions/
|
|
17
|
+
- `.savepoint/releases/v1/epics/E05-phase-transitions/E05-Detail.md`
|
|
18
18
|
- `.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T001-phase-stepping.md`
|
|
19
19
|
- `.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T002-gates.md`
|
|
20
20
|
- `.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T003-write-task.md`
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
|
|
61
61
|
## Target File
|
|
62
62
|
|
|
63
|
-
`.savepoint/releases/v1/epics/E06-atari-noir-layout/
|
|
63
|
+
`.savepoint/releases/v1/epics/E06-atari-noir-layout/E06-Detail.md`
|
|
64
64
|
|
|
65
65
|
## Replace
|
|
66
66
|
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
|
|
77
77
|
## Target File
|
|
78
78
|
|
|
79
|
-
`.savepoint/releases/v1/epics/E06-atari-noir-layout/
|
|
79
|
+
`.savepoint/releases/v1/epics/E06-atari-noir-layout/E06-Detail.md`
|
|
80
80
|
|
|
81
81
|
## Insert After
|
|
82
82
|
|
|
@@ -32,18 +32,18 @@ next_action: Run savepoint audit for E07-audit-pipeline.
|
|
|
32
32
|
| M | .claude/settings.local.json |
|
|
33
33
|
| M | .savepoint/Design.md |
|
|
34
34
|
| M | .savepoint/metrics/context-bench.md |
|
|
35
|
-
| M | .savepoint/releases/v1/PRD.md |
|
|
36
|
-
| M | .savepoint/releases/v1/epics/E05-init-command/
|
|
35
|
+
| M | .savepoint/releases/v1/v1-PRD.md |
|
|
36
|
+
| M | .savepoint/releases/v1/epics/E05-init-command/E05-Detail.md |
|
|
37
37
|
| M | .savepoint/releases/v1/epics/E05-init-command/tasks/T001-init-cli-contract.md |
|
|
38
38
|
| M | .savepoint/releases/v1/epics/E05-init-command/tasks/T002-target-validation.md |
|
|
39
39
|
| M | .savepoint/releases/v1/epics/E05-init-command/tasks/T003-scaffold-writer.md |
|
|
40
40
|
| M | .savepoint/releases/v1/epics/E05-init-command/tasks/T004-magic-prompt-and-clipboard.md |
|
|
41
41
|
| M | .savepoint/releases/v1/epics/E05-init-command/tasks/T005-dev-deps-install-option.md |
|
|
42
42
|
| M | .savepoint/releases/v1/epics/E05-init-command/tasks/T006-init-command-integration.md |
|
|
43
|
-
| M | .savepoint/releases/v1/epics/E06-tui-board/
|
|
44
|
-
| D | .savepoint/releases/v1/epics/E08-doctor-command/
|
|
45
|
-
| D | .savepoint/releases/v1/epics/E09-docs-and-packaging/
|
|
46
|
-
| D | .savepoint/releases/v1/epics/E10-release-validation/
|
|
43
|
+
| M | .savepoint/releases/v1/epics/E06-tui-board/E06-Detail.md |
|
|
44
|
+
| D | .savepoint/releases/v1/epics/E08-doctor-command/E08-Detail.md |
|
|
45
|
+
| D | .savepoint/releases/v1/epics/E09-docs-and-packaging/E09-Detail.md |
|
|
46
|
+
| D | .savepoint/releases/v1/epics/E10-release-validation/E10-Detail.md |
|
|
47
47
|
| M | .savepoint/router.md |
|
|
48
48
|
| M | .savepoint/visual-identity.md |
|
|
49
49
|
| M | AGENTS.md |
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Audit Proposals: v1.1 E02 Cross-Platform Compatibility
|
|
2
|
+
|
|
3
|
+
## Target File
|
|
4
|
+
|
|
5
|
+
`.savepoint/Design.md`
|
|
6
|
+
|
|
7
|
+
## Replace
|
|
8
|
+
|
|
9
|
+
```md
|
|
10
|
+
## 12. Distribution & build
|
|
11
|
+
|
|
12
|
+
> Audit note: the live repository is transitioning from the documented TypeScript/Node implementation to a Go module (`github.com/opencode/savepoint`). The architecture document still contains substantial TypeScript-era implementation detail and should be reconciled as Go epics are audited.
|
|
13
|
+
|
|
14
|
+
- **License:** MIT.
|
|
15
|
+
- **Install:** primary `npx savepoint init`, persistent `npm i -g savepoint` → `savepoint`.
|
|
16
|
+
- **Runtime:** Node 20.10+ LTS, ESM-only, no native deps. macOS / Linux / Windows-Terminal.
|
|
17
|
+
- **Repo:** single package. TypeScript strict. `tsup` build → `dist/`. Bin `dist/cli.js` shebanged.
|
|
18
|
+
- **No telemetry.** Ever.
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## With
|
|
22
|
+
|
|
23
|
+
```md
|
|
24
|
+
## 12. Distribution & build
|
|
25
|
+
|
|
26
|
+
> Audit note: the live repository is now a Go module (`github.com/opencode/savepoint`). Remaining TypeScript-era distribution details should be removed as Go epics are audited.
|
|
27
|
+
|
|
28
|
+
- **License:** MIT.
|
|
29
|
+
- **Runtime:** Go CLI binary. Source builds with `go build`; tests run with `go test ./...`.
|
|
30
|
+
- **Local build:** `make build` builds `savepoint` and injects `main.version` from `VERSION`.
|
|
31
|
+
- **Cross-platform builds:** `make build-all` cross-compiles linux-amd64, linux-arm64, darwin-amd64, and darwin-arm64 raw binaries into `dist/{platform}-{arch}/savepoint`.
|
|
32
|
+
- **Artifacts:** `make dist` creates versioned `.tar.gz` archives in `dist/` for the Linux and Darwin targets.
|
|
33
|
+
- **Smoke validation:** `make smoke-test` builds the local binary and runs `./savepoint --version` as a headless exit-0 check.
|
|
34
|
+
- **No telemetry.** Ever.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Target File
|
|
38
|
+
|
|
39
|
+
`AGENTS.md`
|
|
40
|
+
|
|
41
|
+
## Replace
|
|
42
|
+
|
|
43
|
+
```md
|
|
44
|
+
| `main.go` | CLI Entrypoint and root command wiring |
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## With
|
|
48
|
+
|
|
49
|
+
```md
|
|
50
|
+
| `main.go` | CLI entrypoint, root command wiring, and `--version` handling via build-time version injection |
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Target File
|
|
54
|
+
|
|
55
|
+
`.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/E02-Detail.md`
|
|
56
|
+
|
|
57
|
+
## Insert After
|
|
58
|
+
|
|
59
|
+
```md
|
|
60
|
+
## Architectural notes
|
|
61
|
+
|
|
62
|
+
- All Go code uses `path/filepath` — no syscalls are platform-specific
|
|
63
|
+
- Bubble Tea handles terminal differences across platforms
|
|
64
|
+
- No Go build tags or platform-specific files needed
|
|
65
|
+
- This is purely a build-tooling and release-workflow epic
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## With
|
|
69
|
+
|
|
70
|
+
```md
|
|
71
|
+
## Implemented as
|
|
72
|
+
|
|
73
|
+
- `Makefile` now has `build-linux`, `build-darwin`, `build-all`, `dist`, and `smoke-test` targets.
|
|
74
|
+
- `VERSION` defaults from `git describe --tags --abbrev=0` with a `v0.0.0` fallback and is injected into the binary with `-ldflags "-X main.version=$(VERSION)"`.
|
|
75
|
+
- `main.go` handles `--version` before launching the TUI, which gives smoke tests a non-interactive success path.
|
|
76
|
+
- `dist/` remains ignored by git and contains both raw cross-compiled binaries and versioned `.tar.gz` archives for Linux and Darwin builds.
|
|
77
|
+
- Windows zip packaging was not implemented in this epic; the final implementation covers the Linux and Darwin targets named in the epic's build-all definition of done.
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Target File
|
|
81
|
+
|
|
82
|
+
`.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/E02-Detail.md`
|
|
83
|
+
|
|
84
|
+
## Replace
|
|
85
|
+
|
|
86
|
+
```md
|
|
87
|
+
- [x] Makefile replaced with Go-native commands (no `rm`, `cp`, `mkdir`)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## With
|
|
91
|
+
|
|
92
|
+
```md
|
|
93
|
+
- [ ] Makefile replaced with Go-native commands (no `rm`, `cp`, `mkdir`)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Quality Review
|
|
97
|
+
|
|
98
|
+
## Must Fix Before Close
|
|
99
|
+
|
|
100
|
+
- `Makefile`: `clean` still runs `rm -rf dist/`, which violates T001 acceptance criteria: "`make clean` removes the binary without using `rm -f` or other Unix-only commands" and "No shell commands in Makefile are platform-dependent."
|
|
101
|
+
- `Makefile`: `build-linux` and `build-darwin` still use `mkdir -p` and inline `GOOS=... GOARCH=...` environment assignment. That is fine for Linux, macOS, Git Bash, and WSL, but it is not a shell-agnostic Makefile implementation.
|
|
102
|
+
- `Makefile`: `dist` relies on `tar`, so packaging is not yet toolchain-native or Windows-shell portable.
|
|
103
|
+
- `.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T004-smoke-tests-and-artifacts.md`: the task says `go test ./...` was not run even though the task completion protocol requires the full quality-gate suite before `status: done`.
|
|
104
|
+
|
|
105
|
+
## Carry Forward
|
|
106
|
+
|
|
107
|
+
- Windows `.zip` artifacts were deferred in T004. Keep that as a known scope gap unless the project narrows E02 explicitly to Linux and Darwin distribution.
|
|
108
|
+
- Consider moving cross-platform build and archive logic into a tiny Go helper if the project wants true shell portability while keeping `make` as the human entrypoint.
|
|
109
|
+
|
|
110
|
+
## Already Fixed
|
|
111
|
+
|
|
112
|
+
- `main.go` has a headless `--version` path, so smoke testing no longer needs to start the TUI.
|
|
113
|
+
- Linux and Darwin raw binary targets exist for amd64 and arm64.
|
|
114
|
+
- `AGENTS.md` already documents `build-all`, `dist`, and `smoke-test`.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Audit Snapshot: v1.1 E02 Cross-Platform Compatibility
|
|
2
|
+
|
|
3
|
+
Manual snapshot created because the audit CLI snapshot was missing while the router is already in `audit-pending`.
|
|
4
|
+
|
|
5
|
+
## Epic
|
|
6
|
+
|
|
7
|
+
- Release: `v1.1`
|
|
8
|
+
- Epic: `E02-cross-platform-compatibility`
|
|
9
|
+
- Source: `.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/E02-Detail.md`
|
|
10
|
+
- Router state: `audit-pending`
|
|
11
|
+
|
|
12
|
+
## Completed Tasks
|
|
13
|
+
|
|
14
|
+
- `E02-cross-platform-compatibility/T001-fix-makefile`
|
|
15
|
+
- `E02-cross-platform-compatibility/T002-linux-build-target`
|
|
16
|
+
- `E02-cross-platform-compatibility/T003-macos-build-target`
|
|
17
|
+
- `E02-cross-platform-compatibility/T004-smoke-tests-and-artifacts`
|
|
18
|
+
|
|
19
|
+
## Changed Files Listed By Task Logs
|
|
20
|
+
|
|
21
|
+
- `Makefile`
|
|
22
|
+
- `AGENTS.md`
|
|
23
|
+
- `.gitignore`
|
|
24
|
+
- `main.go`
|
|
25
|
+
- `internal/board/board.go`
|
|
26
|
+
|
|
27
|
+
## Drift Notes Found
|
|
28
|
+
|
|
29
|
+
- `main.go`: added `version` package-level var and `--version` arg check. Not yet in Codebase Map.
|
|
30
|
+
|
|
31
|
+
## Verification Reported By Tasks
|
|
32
|
+
|
|
33
|
+
- T001: `go build -o savepoint main.go` PASS, `go test ./...` PASS, `go clean` PASS
|
|
34
|
+
- T002: `go build` PASS, `go test ./...` PASS; Linux binaries reported as ELF for amd64 and arm64
|
|
35
|
+
- T003: `go build` PASS, `go test ./...` PASS; Darwin binaries reported as Mach-O for amd64 and arm64
|
|
36
|
+
- T004: `go build` PASS, `./savepoint --version` PASS; `go test ./...` not run
|
|
37
|
+
|
|
38
|
+
## Audit Notes
|
|
39
|
+
|
|
40
|
+
- The final `Makefile` includes cross-compile and packaging targets, but still contains Unix shell forms in `clean`, `build-linux`, `build-darwin`, `dist`, and `VERSION`.
|
|
41
|
+
- `T004` explicitly deferred Windows zip artifacts; the implemented release artifacts cover Linux and Darwin only.
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Audit Proposals: v1.1 E04 Epic Navigation
|
|
2
|
+
|
|
3
|
+
## Target File
|
|
4
|
+
|
|
5
|
+
`.savepoint/Design.md`
|
|
6
|
+
|
|
7
|
+
## Replace
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
last_audited: E01-tui-optimisation (2026-05-02)
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## With
|
|
14
|
+
|
|
15
|
+
```yaml
|
|
16
|
+
last_audited: E04-epic-navigation (2026-05-02)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Target File
|
|
20
|
+
|
|
21
|
+
`.savepoint/Design.md`
|
|
22
|
+
|
|
23
|
+
## Replace
|
|
24
|
+
|
|
25
|
+
```md
|
|
26
|
+
- **Board command** (`savepoint board`) reads project state, renders the Atari-Noir TUI board, supports release/epic filtering, detail overlays, task status transitions with mtime-guarded writes, release/epic-scoped router priority markers, fsnotify-based task auto-refresh (epic E06), header Next Activity display, height-aware column/detail viewport scrolling, and stable focused/unfocused column border geometry (v1.1 E01).
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## With
|
|
30
|
+
|
|
31
|
+
```md
|
|
32
|
+
- **Board command** (`savepoint board`) reads project state, renders the Atari-Noir TUI board, supports release/epic filtering, detail overlays, task status transitions with mtime-guarded writes, release/epic-scoped router priority markers, fsnotify-based task auto-refresh (epic E06), header Next Activity display, height-aware column/detail viewport scrolling, stable focused/unfocused column border geometry (v1.1 E01), and a focusable wide-screen epic sidebar with purple epic focus, epic detail overlays, and status glyphs loaded from epic detail frontmatter (v1.1 E04).
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Target File
|
|
36
|
+
|
|
37
|
+
`.savepoint/Design.md`
|
|
38
|
+
|
|
39
|
+
## Replace
|
|
40
|
+
|
|
41
|
+
```md
|
|
42
|
+
**Layout:** single screen with a 3-column task board (`planned`, `in_progress`, `done`), optional epic sidebar on wide terminals, centered overlays for release/epic/help/task detail, static Atari-Noir header/footer, full-width dividers, uniform black TUI backgrounds, and navigation hints. The header can show a compact right-aligned Next Activity value from router state. Columns and detail overlays use height-aware viewport slicing with subtle above/more scroll indicators. Focused and unfocused columns preserve the same rounded-border geometry so focus changes do not shift content. Non-TTY output remains a plain table fallback.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## With
|
|
46
|
+
|
|
47
|
+
```md
|
|
48
|
+
**Layout:** single screen with a 3-column task board (`planned`, `in_progress`, `done`), optional epic sidebar on wide terminals, centered overlays for release/epic/help/task/epic-detail views, static Atari-Noir header/footer, full-width dividers, uniform black TUI backgrounds, and navigation hints. The header can show a compact right-aligned Next Activity value from router state. Columns and detail overlays use height-aware viewport slicing with subtle above/more scroll indicators. Focused and unfocused columns preserve the same rounded-border geometry so focus changes do not shift content. On terminals at least 120 columns wide, the epic sidebar is focusable from the Planned column; it uses the purple epic accent for focused panel borders, focused epic labels, and epic detail overlays while task-column focus remains orange. Non-TTY output remains a plain table fallback.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Target File
|
|
52
|
+
|
|
53
|
+
`.savepoint/Design.md`
|
|
54
|
+
|
|
55
|
+
## Replace
|
|
56
|
+
|
|
57
|
+
```md
|
|
58
|
+
**Board persistence and refresh:** task status transitions write canonical task frontmatter through `internal/data.WriteTaskStatus` with mtime conflict checks. The board treats `Model.Root` as the `.savepoint` directory, watches `.savepoint/releases/` recursively with fsnotify, adds watches for newly-created release/epic/task directories, and reloads task plus release/epic index data after debounced file changes. Router priority markers match release + epic + task, not only the short `T###` value; completed cards render with the orange build glyph even if they previously matched router priority.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## With
|
|
62
|
+
|
|
63
|
+
```md
|
|
64
|
+
**Board persistence and refresh:** task status transitions write canonical task frontmatter through `internal/data.WriteTaskStatus` with mtime conflict checks. The board treats `Model.Root` as the `.savepoint` directory, watches `.savepoint/releases/` recursively with fsnotify, adds watches for newly-created release/epic/task directories, and reloads task plus release/epic index data plus epic status metadata after debounced file changes. Router priority markers match release + epic + task, not only the short `T###` value; completed cards render with the orange build glyph even if they previously matched router priority. Epic status glyphs are cached from each epic's `E##-Detail.md` frontmatter and shown in the wide epic sidebar only.
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Target File
|
|
68
|
+
|
|
69
|
+
`AGENTS.md`
|
|
70
|
+
|
|
71
|
+
## Replace
|
|
72
|
+
|
|
73
|
+
```md
|
|
74
|
+
| `internal/board/` | TUI board models, layout, rendering, overlays, task transitions, router priority markers, and fsnotify refresh |
|
|
75
|
+
| `internal/data/` | Task/router/config models, frontmatter parsing, checklist state parsing, mtime-guarded writes, discovery, and generic file readers |
|
|
76
|
+
| `internal/styles/` | Atari-Noir palette constants, terminal color fallbacks, shared TUI styles, stable column border styles, scroll indicators, semantic glyph/tag styles, and footer/header styling |
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## With
|
|
80
|
+
|
|
81
|
+
```md
|
|
82
|
+
| `internal/board/` | TUI board models, layout, rendering, overlays, focusable epic sidebar navigation, epic detail overlays, epic status glyph loading, task transitions, router priority markers, and fsnotify refresh |
|
|
83
|
+
| `internal/data/` | Task/router/config models, frontmatter parsing, checklist state parsing, mtime-guarded writes, discovery, and generic file readers |
|
|
84
|
+
| `internal/styles/` | Atari-Noir palette constants, terminal color fallbacks, shared TUI styles, stable column border styles, scroll indicators, purple epic navigation/detail styles, semantic glyph/tag styles, and footer/header styling |
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Target File
|
|
88
|
+
|
|
89
|
+
`.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Detail.md`
|
|
90
|
+
|
|
91
|
+
## Replace
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
status: planned
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## With
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
status: audited
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Target File
|
|
104
|
+
|
|
105
|
+
`.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Detail.md`
|
|
106
|
+
|
|
107
|
+
## Replace
|
|
108
|
+
|
|
109
|
+
```md
|
|
110
|
+
## Architectural notes
|
|
111
|
+
|
|
112
|
+
- `EpicPanelFocus bool` is a lightweight flag replacing the need for a new column type
|
|
113
|
+
- The epic detail overlay content is read from `E##-Detail.md` on the filesystem when Enter is pressed (not pre-loaded)
|
|
114
|
+
- Detail file path is deterministic: `{root}/releases/{release}/epics/{epic-slug}/{shortID}-Detail.md`
|
|
115
|
+
- If the detail file is missing, the overlay shows a "(no detail available)" message
|
|
116
|
+
- Column selection, task selection, and existing overlay behavior are completely unchanged
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## With
|
|
120
|
+
|
|
121
|
+
```md
|
|
122
|
+
## Architectural notes
|
|
123
|
+
|
|
124
|
+
- `EpicPanelFocus bool` is a lightweight flag replacing the need for a new column type
|
|
125
|
+
- The epic detail overlay content is read from `E##-Detail.md` on the filesystem when Enter is pressed (not pre-loaded)
|
|
126
|
+
- Detail file path is deterministic: `{root}/releases/{release}/epics/{epic-slug}/{shortID}-Detail.md`
|
|
127
|
+
- If the detail file is missing, the overlay shows a "(no detail available)" message
|
|
128
|
+
- Column selection, task selection, and existing overlay behavior are completely unchanged
|
|
129
|
+
|
|
130
|
+
## Implemented as
|
|
131
|
+
|
|
132
|
+
- `internal/board/model.go` adds `EpicPanelFocus`, `EpicPanelCursor`, `EpicDetailOffset`, `EpicDetailContent`, and `EpicStatus` model state.
|
|
133
|
+
- `internal/board/update.go` handles global keys before epic-panel routing, focuses the panel from the Planned column on wide layouts, changes the selected epic during panel cursor movement, writes router release/epic state, and opens the epic detail overlay on Enter.
|
|
134
|
+
- `internal/board/epic_panel.go` renders the purple-accented epic sidebar focus state, purple epic detail overlay, markdown detail body, and side-panel-only status glyph prefixes.
|
|
135
|
+
- `internal/board/board.go` loads epic status frontmatter during board-data loading; `internal/board/watch.go` carries that status map through reloads.
|
|
136
|
+
- Epic navigation deliberately uses `VibePurple` (`#B1A1DF`) for focused epic panel borders, focused epic labels, epic detail overlays, and epic/audit accents, while task-column focus remains Atari Orange.
|
|
137
|
+
- Implementation deviation: T001 originally said Enter in epic-panel focus selected the focused epic. The final behavior from T002 is that up/down selects and filters immediately, while Enter opens the epic detail overlay.
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Quality Review
|
|
141
|
+
|
|
142
|
+
## Must Fix Before Close
|
|
143
|
+
|
|
144
|
+
None.
|
|
145
|
+
|
|
146
|
+
## Carry Forward
|
|
147
|
+
|
|
148
|
+
- Accepted design decision: `RenderEpicDetail` intentionally omits the components/files table from the overlay for readability. The epic detail overlay shows the narrative sections and keeps implementation file mapping in the source `E##-Detail.md`.
|
|
149
|
+
- `readEpicDetailFile` falls back to `E##-Design.md` and then any `E##-*.md`, which is more permissive than the epic design's deterministic path. The fallback is harmless and user-friendly, but it should be documented if kept as product behavior.
|
|
150
|
+
- `epicPanelPageSize()` was added for eventual PgUp/PgDown support but is not currently used. This is minor dead code carried from the task plan and can be removed or wired in during a future sidebar paging task.
|
|
151
|
+
|
|
152
|
+
## Already Fixed
|
|
153
|
+
|
|
154
|
+
- Global `q`, `e`, `r`, and `?` keys are processed before epic-panel-specific key handling, so panel focus does not trap quit, release, epic dropdown, or help commands.
|
|
155
|
+
- Focused epic sidebar rendering uses purple focused border/title/item styles, making the colour-scheme shift from task orange to epic purple visible in the TUI.
|
|
156
|
+
- Focused board tests, `go build -o savepoint main.go`, and `go test ./...` pass.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: audit-snapshot
|
|
3
|
+
release: v1.1
|
|
4
|
+
epic: E04-epic-navigation
|
|
5
|
+
created: 2026-05-02
|
|
6
|
+
source: manual-router-snapshot
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Audit Snapshot: v1.1 E04 Epic Navigation
|
|
10
|
+
|
|
11
|
+
The audit CLI snapshot was missing when the router entered `audit-pending`. Per router guidance, this manual snapshot is scoped to the known epic and task records only.
|
|
12
|
+
|
|
13
|
+
## Epic Scope
|
|
14
|
+
|
|
15
|
+
- `.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Detail.md`
|
|
16
|
+
- `.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T001-sidebar-focusable-navigation.md`
|
|
17
|
+
- `.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T002-epic-detail-overlay.md`
|
|
18
|
+
- `.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T003-epic-status-glyphs.md`
|
|
19
|
+
|
|
20
|
+
## Changed Files Recorded by Tasks
|
|
21
|
+
|
|
22
|
+
- `internal/board/model.go`
|
|
23
|
+
- `internal/board/update.go`
|
|
24
|
+
- `internal/board/view.go`
|
|
25
|
+
- `internal/board/epic_panel.go`
|
|
26
|
+
- `internal/board/board.go`
|
|
27
|
+
- `internal/board/watch.go`
|
|
28
|
+
- `internal/board/epic_panel_test.go`
|
|
29
|
+
- `internal/board/update_test.go`
|
|
30
|
+
- `internal/board/board_test.go`
|
|
31
|
+
- `internal/styles/styles.go`
|
|
32
|
+
- `internal/styles/palette.go`
|
|
33
|
+
- `.savepoint/config.yml`
|
|
34
|
+
|
|
35
|
+
## Implemented Delta
|
|
36
|
+
|
|
37
|
+
- Wide-board epic sidebar is focusable from the Planned column and returns focus to the board with right arrow.
|
|
38
|
+
- Epic-panel up/down navigation selects the focused epic immediately, filters visible tasks, and writes release/epic router state.
|
|
39
|
+
- Enter from epic-panel focus opens an `EPIC DETAIL` overlay backed by the selected epic detail markdown file.
|
|
40
|
+
- Epic detail overlay supports esc/q close, line scrolling, and page scrolling.
|
|
41
|
+
- Epic status glyphs are loaded from each epic detail file's `status` frontmatter at board-data load time and propagated through reloads.
|
|
42
|
+
- Epic panel focus, epic item focus, epic detail overlay, and epic/audit accents now use `VibePurple` (`#B1A1DF`) rather than the orange task-column focus color.
|
|
43
|
+
|
|
44
|
+
## Verification Evidence
|
|
45
|
+
|
|
46
|
+
- `go test ./internal/board` passed.
|
|
47
|
+
- `go build -o savepoint main.go` passed.
|
|
48
|
+
- `go test ./...` passed.
|
|
@@ -27,7 +27,7 @@ depends_on: []
|
|
|
27
27
|
Files read:
|
|
28
28
|
|
|
29
29
|
- `.savepoint/router.md`
|
|
30
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/
|
|
30
|
+
- `.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md`
|
|
31
31
|
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md`
|
|
32
32
|
- `go.mod`
|
|
33
33
|
- `go.sum`
|
|
@@ -25,7 +25,7 @@ depends_on: [E03-board-tui-core/T004-styles]
|
|
|
25
25
|
|
|
26
26
|
## Context Log
|
|
27
27
|
|
|
28
|
-
Files read: internal/board/model.go, view.go, update.go, board.go, view_test.go, update_test.go, model_test.go, internal/styles/styles.go, go.mod, .savepoint/releases/v1/epics/E03-board-tui-core/
|
|
28
|
+
Files read: internal/board/model.go, view.go, update.go, board.go, view_test.go, update_test.go, model_test.go, internal/styles/styles.go, go.mod, .savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md
|
|
29
29
|
|
|
30
30
|
Estimated input tokens: ~6 000
|
|
31
31
|
|
|
@@ -26,7 +26,7 @@ depends_on: [E04-board-components/T001-column]
|
|
|
26
26
|
|
|
27
27
|
## Context Log
|
|
28
28
|
|
|
29
|
-
Files read: `internal/board/column.go`, `internal/board/column_test.go`, `internal/styles/styles.go`, `internal/styles/palette.go`, `internal/data/task.go`, `.savepoint/releases/v1/epics/E04-board-components/
|
|
29
|
+
Files read: `internal/board/column.go`, `internal/board/column_test.go`, `internal/styles/styles.go`, `internal/styles/palette.go`, `internal/data/task.go`, `.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md`, `AGENTS.md`, `.savepoint/router.md`
|
|
30
30
|
|
|
31
31
|
Estimated input tokens: ~4 000
|
|
32
32
|
|
|
@@ -24,7 +24,7 @@ depends_on: [E04-board-components/T005-release-dropdown]
|
|
|
24
24
|
|
|
25
25
|
## Context Log
|
|
26
26
|
|
|
27
|
-
Files read: `.savepoint/router.md`, `.savepoint/releases/v1/epics/E04-board-components/
|
|
27
|
+
Files read: `.savepoint/router.md`, `.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md`, this task file, `agent-skills/ink-tui-design/SKILL.md`, `.savepoint/visual-identity.md`, `internal/board/model.go`, `internal/board/update.go`, `internal/board/view.go`, `internal/board/detail.go`, `internal/board/epic_panel.go`, `internal/board/release.go`, `internal/board/update_test.go`, `internal/board/view_test.go`, `internal/board/detail_test.go`, `internal/board/release_test.go`, `internal/styles/styles.go`, `go.mod`, `Makefile`
|
|
28
28
|
Estimated input tokens: ~8500
|
|
29
29
|
Notes: Added help overlay renderer, `?` key handling, centered overlay rendering over dimmed board, and focused render/update/view tests. Focused test `go test ./internal/board/...` initially failed in the sandbox because Go could not access the external build cache; rerun with approved cache access passed. Quality gates: `go build ./...` pass, `go vet ./...` pass, `go test ./...` pass.
|
|
30
30
|
|
|
@@ -46,11 +46,11 @@ Update the existing TUI to align with the **Atari-Noir SavePoint design system**
|
|
|
46
46
|
- `internal/styles/palette.go` defines the Atari-Noir hex palette plus ANSI256/ANSI16 fallbacks.
|
|
47
47
|
- `internal/styles/styles.go` centralizes header, divider, footer, column, card, detail, glyph, and semantic tag styles.
|
|
48
48
|
- `internal/board/view.go` renders the static SavePoint header, explicit full-width top/bottom dividers, the static `PLAN │ BUILD │ AUDIT` footer, subdued navigation hints, and overlay composition.
|
|
49
|
-
- `internal/board/card.go` wraps long task titles instead of truncating them
|
|
50
|
-
- `internal/board/detail.go` adds spacing below Acceptance Criteria and Implementation Plan headings, renders checklist state with `☑`/`□`, and labels the router-priority task.
|
|
49
|
+
- `internal/board/card.go` wraps long task titles instead of truncating them, uses a green `▣` marker only for the release/epic/task-scoped router-priority task, and keeps all done cards on the orange build glyph.
|
|
50
|
+
- `internal/board/detail.go` adds spacing below Acceptance Criteria and Implementation Plan headings, renders checklist state with `☑`/`□`, and labels only the release/epic/task-scoped router-priority task.
|
|
51
51
|
- `internal/data/task.go` and `internal/data/parser.go` represent Implementation Plan items as `CheckItem{Text, Done}` and parse `- [x]`, `- [ ]`, and legacy `- ` items.
|
|
52
52
|
- `internal/data/write.go` persists task status and phase changes with mtime conflict protection.
|
|
53
|
-
- `internal/board/watch.go` adds fsnotify-based recursive release directory watching, 100ms debounce, and reload messages used by `internal/board/update.go`.
|
|
53
|
+
- `internal/board/watch.go` adds fsnotify-based recursive release directory watching from the `.savepoint/releases/` root, dynamically adds watches for newly-created subdirectories, applies a 100ms debounce, and sends reload messages used by `internal/board/update.go`.
|
|
54
54
|
|
|
55
55
|
## Implementation Deltas
|
|
56
56
|
|
|
@@ -58,3 +58,5 @@ Update the existing TUI to align with the **Atari-Noir SavePoint design system**
|
|
|
58
58
|
- Audit closeout removed unnecessary borders from unfocused header, board, column, card, and epic-panel surfaces while preserving Atari Orange borders for focused cards/columns and detail overlays.
|
|
59
59
|
- User-approved visual guardrail: Background, Surface, and Surface 2 are intentionally the same black value in the terminal TUI. Do not reintroduce subtly different background fills for panels/cards.
|
|
60
60
|
- The main view now renders explicit full-width divider lines with `styles.Divider` rather than relying on component frames as separators.
|
|
61
|
+
- Auto-refresh reload now refreshes both task data and release/epic indexes so newly-added task files and newly-added epic directories can appear without restarting the board.
|
|
62
|
+
- Router-priority matching is intentionally scoped by release and epic before task number; a router task of `T001` must not mark every epic's `T001` as priority.
|
package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md
CHANGED
|
@@ -27,7 +27,7 @@ depends_on: ["E06-atari-noir-layout/T001-color-system"]
|
|
|
27
27
|
|
|
28
28
|
Files read:
|
|
29
29
|
- `.savepoint/router.md`
|
|
30
|
-
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/
|
|
30
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/E06-Detail.md`
|
|
31
31
|
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md`
|
|
32
32
|
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T001-color-system.md`
|
|
33
33
|
- `.savepoint/visual-identity.md`
|
|
@@ -30,7 +30,7 @@ depends_on: ["E06-atari-noir-layout/T002-header-and-dividers"]
|
|
|
30
30
|
|
|
31
31
|
Files read:
|
|
32
32
|
- `.savepoint/router.md`
|
|
33
|
-
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/
|
|
33
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/E06-Detail.md`
|
|
34
34
|
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T003-footer-status-bar.md`
|
|
35
35
|
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md`
|
|
36
36
|
- `.savepoint/visual-identity.md`
|
package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md
CHANGED
|
@@ -26,7 +26,7 @@ depends_on: ["E06-atari-noir-layout/T001-color-system"]
|
|
|
26
26
|
|
|
27
27
|
Files read:
|
|
28
28
|
- `.savepoint/router.md`
|
|
29
|
-
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/
|
|
29
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/E06-Detail.md`
|
|
30
30
|
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md`
|
|
31
31
|
- `internal/styles/palette.go`
|
|
32
32
|
- `internal/styles/styles.go`
|
package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T010-auto-refresh-watcher.md
CHANGED
|
@@ -62,3 +62,5 @@ Notes:
|
|
|
62
62
|
- `data.Task` gained `Path` and `Mtime` (yaml:"-") fields populated in `loadEpicTasks`.
|
|
63
63
|
- Advance/Retreat disk writes live in `update.go`, not `transitions.go` (keeps transitions pure).
|
|
64
64
|
- Watcher created in `newProjectModel`; Init() subscribes if non-nil; nil watcher = test-safe.
|
|
65
|
+
- Follow-up fix (2026-05-02): `newWatcher` receives `root` as the `.savepoint` directory, so it watches `root/releases` directly rather than `.savepoint/.savepoint/releases`. Watch startup errors now fail model creation instead of being silently ignored.
|
|
66
|
+
- Follow-up fix (2026-05-02): file-change reloads refresh task data plus release/epic indexes, and create events add watches for newly-created directories before the debounced reload.
|