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
package/.savepoint/Design.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: project-design
|
|
3
3
|
status: active
|
|
4
|
-
last_audited:
|
|
4
|
+
last_audited: v1.1/E02-cross-platform-compatibility (2026-05-02)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Savepoint — System Architecture
|
|
@@ -14,7 +14,7 @@ last_audited: E06-atari-noir-layout (2026-05-02)
|
|
|
14
14
|
|
|
15
15
|
- **File-only.** No MCP server in v1. Agents read and edit Markdown + YAML files directly using their native file tools.
|
|
16
16
|
- **Agent routing:** AGENTS.md → `.savepoint/router.md` → template prompts. See AGENTS.md Workflow section.
|
|
17
|
-
- **Bundled Agent Skills:** Savepoint ships with custom skills (`draft-prd`, `system-design`, `create-plan`, `create-task`, `build-task`, `audit`) to enforce each phase of the state machine.
|
|
17
|
+
- **Bundled Agent Skills:** Savepoint ships with custom skills (`savepoint-draft-prd`, `savepoint-system-design`, `savepoint-create-plan`, `savepoint-create-task`, `savepoint-build-task`, `savepoint-audit`) to enforce each phase of the state machine.
|
|
18
18
|
- **Token-efficiency principle.**
|
|
19
19
|
- Cold session bootstrap: ~5–7K tokens (one-time per conversation).
|
|
20
20
|
- Per-task incremental: <2KB.
|
|
@@ -23,7 +23,7 @@ last_audited: E06-atari-noir-layout (2026-05-02)
|
|
|
23
23
|
- **Go data-reader boundary:** established in epic `E02-data-readers` (2026-05-01). `internal/data` owns Savepoint file parsing and discovery for the Go implementation: task frontmatter models, markdown YAML extraction, router state parsing, config theme defaults, release/epic/task directory listing, and boundary error sentinels.
|
|
24
24
|
- **Template assets** live under `templates/` with helpers in `src/templates/` (epic E04).
|
|
25
25
|
- **Init command** (`savepoint init`) validates, scaffolds, prints prompt, clipboard, optional install (epic E05).
|
|
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, router priority markers,
|
|
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, 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).
|
|
27
27
|
- **Audit pipeline** (`savepoint audit`) resolves epic, skips, quality gates, snapshots, router transition, proposal review (epic E07).
|
|
28
28
|
|
|
29
29
|
## 2. Directory layout
|
|
@@ -40,14 +40,13 @@ last_audited: E06-atari-noir-layout (2026-05-02)
|
|
|
40
40
|
├── audit/
|
|
41
41
|
│ └── {E##-epic}/
|
|
42
42
|
│ ├── snapshot.md
|
|
43
|
-
│ └── proposals
|
|
44
|
-
│ └── proposals.md
|
|
43
|
+
│ └── proposals.md
|
|
45
44
|
└── releases/
|
|
46
|
-
└── v1
|
|
47
|
-
├── PRD.md
|
|
45
|
+
└── {release}/ ← e.g. v1, v1.1
|
|
46
|
+
├── {release}-PRD.md ← release-scoped PRD
|
|
48
47
|
└── epics/
|
|
49
48
|
└── E##-{epic-name}/
|
|
50
|
-
├──
|
|
49
|
+
├── E##-Detail.md ← epic delta
|
|
51
50
|
└── tasks/
|
|
52
51
|
└── T001-slug.md
|
|
53
52
|
```
|
|
@@ -59,7 +58,7 @@ AGENTS.md at root (uppercase, cross-vendor spec). Design.md in `.savepoint/` (wo
|
|
|
59
58
|
| Level | Definition |
|
|
60
59
|
| ------------ | -------------------------------------------------------------------------------------- |
|
|
61
60
|
| **Release** | The thing being built. One PRD per release. v1 = MVP. |
|
|
62
|
-
| **Epic** | A major feature within a release. Has its own
|
|
61
|
+
| **Epic** | A major feature within a release. Has its own E##-Detail.md (delta from project Design). |
|
|
63
62
|
| **Task** | Independently buildable. Objective-led. **Requires implementation plan before build.** |
|
|
64
63
|
| **Sub-task** | Inline checklist item — _evidence of the implementation plan_, not standalone work. |
|
|
65
64
|
|
|
@@ -104,7 +103,7 @@ Three statuses, with explicit gates:
|
|
|
104
103
|
0. Quality Gates — CLI runs configured commands. Halts on failure if block_on_failure: true.
|
|
105
104
|
1. Snapshot — CLI writes file tree (gitignore-respecting) + changed-files list. NO code contents.
|
|
106
105
|
2. Diff Brief — State flips to audit_pending: {E##-epic}. Magic prompt printed to user.
|
|
107
|
-
3. Reconcile — Agent reads epic
|
|
106
|
+
3. Reconcile — Agent reads epic E##-Detail.md + snapshot + scoped code. Writes one proposal bundle to
|
|
108
107
|
.savepoint/audit/{E##-epic}/proposals.md.
|
|
109
108
|
4. Review — TUI shows side-by-side per-proposal diff. Approve / reject / edit each.
|
|
110
109
|
5. Commit — Approved proposals overwrite live files. Epic gets status: audited. Next epic unlocks.
|
|
@@ -115,7 +114,7 @@ Three statuses, with explicit gates:
|
|
|
115
114
|
- **Skip allowed** via `savepoint audit --skip --reason "..."`. Logged to `.savepoint/audit-log.md`. Permanent `⚠ skipped` badge in TUI.
|
|
116
115
|
- **Proposal bundles** use delta-shaped edits: `Insert After`, `Replace`, or `Delete` blocks anchored to exact text.
|
|
117
116
|
- **Quality review** is a section inside the proposal bundle.
|
|
118
|
-
- **Snapshot availability is an audit precondition.** The router should enter `audit-pending` only after `.savepoint/audit/{E##-epic}/snapshot.md` exists.
|
|
117
|
+
- **Snapshot availability is an audit precondition.** The router should enter `audit-pending` only after `.savepoint/audit/{release}/{E##-epic}/snapshot.md` exists.
|
|
119
118
|
|
|
120
119
|
Three layers:
|
|
121
120
|
|
|
@@ -131,11 +130,15 @@ Acknowledged terminal limits: fonts, scanlines, glows, letter-spacing, mouse-dri
|
|
|
131
130
|
|
|
132
131
|
**Render fallbacks:** 256-color → 16-color hard-coded → `NO_COLOR=1` monochrome with glyphs → non-TTY plain table.
|
|
133
132
|
|
|
134
|
-
**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
|
|
133
|
+
**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.
|
|
135
134
|
|
|
136
135
|
**Visual guardrail:** the terminal board intentionally uses one black background for Background, Surface, and Surface 2. Do not restore subtly different dark panel fills; depth should come from spacing, dividers, glyphs, and focused Atari Orange borders.
|
|
137
136
|
|
|
138
|
-
**
|
|
137
|
+
**Terminal color policy:** the board must use a deterministic Lipgloss color profile and one canonical terminal black across truecolor, ANSI256, and ANSI fallbacks. In 256-color mode, Background, Surface, and Surface 2 must map to the same actual black value, not adjacent dark-gray values. Full-screen/root surfaces may paint that one black background for consistency; nested task cards, task text, glyphs, tags, metadata, and router-priority labels should remain foreground-only unless a component explicitly owns a filled visual region. This prevents padded text from creating gray bars in terminals such as PowerShell, Windows Terminal, VS Code terminal, and Warp.
|
|
138
|
+
|
|
139
|
+
**Border policy:** focus must not change geometry or introduce terminal-specific broken border rendering. Use one consistent box-border family across columns, cards, and overlays. If rounded borders render as dash bars or broken segments in Warp, prefer the single-line border style already allowed by `.savepoint/visual-identity.md`; do not mix rounded and single-line borders as an ad-hoc per-component workaround.
|
|
140
|
+
|
|
141
|
+
**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.
|
|
139
142
|
|
|
140
143
|
**Implementation modules:** see AGENTS.md Codebase Map.
|
|
141
144
|
|
|
@@ -169,12 +172,14 @@ All failure modes are diagnosed by `savepoint doctor`. Doctor diagnoses and prop
|
|
|
169
172
|
|
|
170
173
|
## 12. Distribution & build
|
|
171
174
|
|
|
172
|
-
> Audit note: the live repository is
|
|
175
|
+
> 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.
|
|
173
176
|
|
|
174
177
|
- **License:** MIT.
|
|
175
|
-
- **
|
|
176
|
-
- **
|
|
177
|
-
- **
|
|
178
|
+
- **Runtime:** Go CLI binary. Source builds with `go build`; tests run with `go test ./...`.
|
|
179
|
+
- **Local build:** `make build` delegates to `internal/buildtool`, builds `savepoint` or `savepoint.exe`, and injects `main.version` from `VERSION` or the latest git tag.
|
|
180
|
+
- **Cross-platform builds:** `make build-all` cross-compiles linux-amd64, linux-arm64, darwin-amd64, and darwin-arm64 raw binaries into `dist/{platform}-{arch}/savepoint`.
|
|
181
|
+
- **Artifacts:** `make dist` creates versioned `.tar.gz` archives in `dist/` for the Linux and Darwin targets using Go archive APIs, not shell `tar`.
|
|
182
|
+
- **Smoke validation:** `make smoke-test` builds the local binary and runs `--version` as a headless exit-0 check.
|
|
178
183
|
- **No telemetry.** Ever.
|
|
179
184
|
|
|
180
185
|
## 13. Testing
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Audit Proposals: v1.1 E01 TUI Optimisation
|
|
2
|
+
|
|
3
|
+
## Target File
|
|
4
|
+
|
|
5
|
+
`.savepoint/Design.md`
|
|
6
|
+
|
|
7
|
+
## Replace
|
|
8
|
+
|
|
9
|
+
```md
|
|
10
|
+
last_audited: E06-atari-noir-layout (2026-05-02)
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## With
|
|
14
|
+
|
|
15
|
+
```md
|
|
16
|
+
last_audited: E01-tui-optimisation (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, router priority markers, and fsnotify-based task auto-refresh (epic E06).
|
|
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, 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).
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Target File
|
|
36
|
+
|
|
37
|
+
`.savepoint/Design.md`
|
|
38
|
+
|
|
39
|
+
## Replace
|
|
40
|
+
|
|
41
|
+
```md
|
|
42
|
+
│ └── {E##-epic}/
|
|
43
|
+
│ ├── snapshot.md
|
|
44
|
+
│ └── proposals/
|
|
45
|
+
│ └── proposals.md
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## With
|
|
49
|
+
|
|
50
|
+
```md
|
|
51
|
+
│ └── {E##-epic}/
|
|
52
|
+
│ ├── snapshot.md
|
|
53
|
+
│ └── proposals.md
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Target File
|
|
57
|
+
|
|
58
|
+
`.savepoint/Design.md`
|
|
59
|
+
|
|
60
|
+
## Replace
|
|
61
|
+
|
|
62
|
+
```md
|
|
63
|
+
└── E##-{epic-name}/
|
|
64
|
+
├── Design.md ← epic delta
|
|
65
|
+
└── tasks/
|
|
66
|
+
└── T001-slug.md
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## With
|
|
70
|
+
|
|
71
|
+
```md
|
|
72
|
+
└── E##-{epic-name}/
|
|
73
|
+
├── E##-Detail.md ← epic delta
|
|
74
|
+
└── tasks/
|
|
75
|
+
└── T001-slug.md
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Target File
|
|
79
|
+
|
|
80
|
+
`.savepoint/Design.md`
|
|
81
|
+
|
|
82
|
+
## Replace
|
|
83
|
+
|
|
84
|
+
```md
|
|
85
|
+
| **Epic** | A major feature within a release. Has its own Design.md (delta from project Design). |
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## With
|
|
89
|
+
|
|
90
|
+
```md
|
|
91
|
+
| **Epic** | A major feature within a release. Has its own E##-Detail.md (delta from project Design). |
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Target File
|
|
95
|
+
|
|
96
|
+
`.savepoint/Design.md`
|
|
97
|
+
|
|
98
|
+
## Replace
|
|
99
|
+
|
|
100
|
+
```md
|
|
101
|
+
**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. Non-TTY output remains a plain table fallback.
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## With
|
|
105
|
+
|
|
106
|
+
```md
|
|
107
|
+
**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.
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Target File
|
|
111
|
+
|
|
112
|
+
`AGENTS.md`
|
|
113
|
+
|
|
114
|
+
## Replace
|
|
115
|
+
|
|
116
|
+
```md
|
|
117
|
+
| `internal/styles/` | Atari-Noir palette constants, terminal color fallbacks, shared TUI styles, semantic glyph/tag styles, and footer/header styling |
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## With
|
|
121
|
+
|
|
122
|
+
```md
|
|
123
|
+
| `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 |
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Target File
|
|
127
|
+
|
|
128
|
+
`.savepoint/releases/v1.1/epics/E01-tui-optimisation/E01-Detail.md`
|
|
129
|
+
|
|
130
|
+
## Replace
|
|
131
|
+
|
|
132
|
+
```md
|
|
133
|
+
## Components and files
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## With
|
|
137
|
+
|
|
138
|
+
```md
|
|
139
|
+
## Implemented As
|
|
140
|
+
|
|
141
|
+
- Header Next Activity rendering is implemented in `internal/board/view.go` using `FormatNextActivity` and `styles.HeaderRight`.
|
|
142
|
+
- Column and detail scrolling are implemented through `ColumnOffsets`, `DetailOffset`, height-aware layout, viewport slicing, and subtle scroll indicators in `internal/board/model.go`, `internal/board/layout.go`, `internal/board/update.go`, `internal/board/column.go`, and `internal/board/detail.go`.
|
|
143
|
+
- Focus border stability is implemented by rendering unfocused columns with `styles.ColumnUnfocused`, matching focused column border dimensions while using the subtle border color.
|
|
144
|
+
- Naming conventions were reconciled across workflow docs: per-epic `Design.md` files became `E##-Detail.md`, and release `PRD.md` became `{release}-PRD.md`.
|
|
145
|
+
- The originally listed fsnotify watcher scope was already present from the prior TUI epic and was reviewed as existing behavior rather than newly introduced in this epic.
|
|
146
|
+
|
|
147
|
+
## Components and files
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Quality Review
|
|
151
|
+
|
|
152
|
+
## Must Fix Before Close
|
|
153
|
+
|
|
154
|
+
No remaining must-fix items.
|
|
155
|
+
|
|
156
|
+
## Carry Forward
|
|
157
|
+
|
|
158
|
+
- `make build && make test` could not be verified directly in this environment. The audit verified the underlying Go gates with `go build ./...` and `go test ./...`, both passing.
|
|
159
|
+
- `internal/board/update.go` allows `DetailOffset` to grow beyond the rendered detail body and relies on render-time clamping. This is not currently user-visible breakage, but a future cleanup could clamp detail scrolling against actual visible body height to keep model state closer to rendered state.
|
|
160
|
+
|
|
161
|
+
## Already Fixed
|
|
162
|
+
|
|
163
|
+
- Stale unchecked implementation checklist items in `T001-next-activity-header.md`, `T004-update-instruction-files.md`, and `T005-update-cross-references.md` were reconciled after audit verification.
|
|
164
|
+
- Column viewport slicing and subtle scroll indicators are covered by `internal/board/column_test.go`.
|
|
165
|
+
- Detail overlay scrolling is covered by `internal/board/detail_test.go`.
|
|
166
|
+
- Height-aware layout is covered by `internal/board/layout_test.go`.
|
|
167
|
+
- Header Next Activity rendering and truncation are covered by `internal/board/view_test.go`.
|
|
168
|
+
- Focused and unfocused column border dimensions are covered by `TestRenderColumn_focusStatesUseStableBorderDimensions`.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Audit Snapshot: v1.1 E01 TUI Optimisation
|
|
2
|
+
|
|
3
|
+
Manual snapshot created because the audit CLI snapshot was missing and the router permits one manual snapshot when the CLI is unavailable.
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
- Release: `v1.1`
|
|
8
|
+
- Epic: `E01-tui-optimisation`
|
|
9
|
+
- Router state at audit start: `audit-pending`
|
|
10
|
+
- Next action: `Audit v1.1 E01 TUI optimisation.`
|
|
11
|
+
|
|
12
|
+
## Epic Files
|
|
13
|
+
|
|
14
|
+
- `.savepoint/releases/v1.1/epics/E01-tui-optimisation/E01-Detail.md`
|
|
15
|
+
- `.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T001-next-activity-header.md`
|
|
16
|
+
- `.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T002-rename-epic-design-files.md`
|
|
17
|
+
- `.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T003-rename-release-prd.md`
|
|
18
|
+
- `.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T004-update-instruction-files.md`
|
|
19
|
+
- `.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T005-update-cross-references.md`
|
|
20
|
+
- `.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T006-column-and-detail-scrolling.md`
|
|
21
|
+
- `.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T007-column-focus-border-stability.md`
|
|
22
|
+
|
|
23
|
+
## Changed Source And Test Files Reviewed
|
|
24
|
+
|
|
25
|
+
- `internal/board/layout.go`
|
|
26
|
+
- `internal/board/view.go`
|
|
27
|
+
- `internal/board/column.go`
|
|
28
|
+
- `internal/board/detail.go`
|
|
29
|
+
- `internal/board/model.go`
|
|
30
|
+
- `internal/board/update.go`
|
|
31
|
+
- `internal/board/watch.go`
|
|
32
|
+
- `internal/styles/styles.go`
|
|
33
|
+
- `internal/board/column_test.go`
|
|
34
|
+
- `internal/board/detail_test.go`
|
|
35
|
+
- `internal/board/layout_test.go`
|
|
36
|
+
- `internal/board/view_test.go`
|
|
37
|
+
|
|
38
|
+
## Documentation And Workflow Files In Scope
|
|
39
|
+
|
|
40
|
+
- `.savepoint/Design.md`
|
|
41
|
+
- `AGENTS.md`
|
|
42
|
+
- `.savepoint/router.md`
|
|
43
|
+
- `agent-skills/savepoint-audit/SKILL.md`
|
|
44
|
+
- `agent-skills/savepoint-build-task/SKILL.md`
|
|
45
|
+
- `agent-skills/savepoint-create-plan/SKILL.md`
|
|
46
|
+
- `agent-skills/savepoint-create-task/SKILL.md`
|
|
47
|
+
- `agent-skills/savepoint-system-design/SKILL.md`
|
|
48
|
+
- `templates/project/AGENTS.md`
|
|
49
|
+
- `templates/project/.savepoint/router.md`
|
|
50
|
+
- `templates/prompts/task-breakdown.prompt.md`
|
|
51
|
+
- `templates/prompts/task-building.prompt.md`
|
|
52
|
+
- `templates/prompts/task-planning.prompt.md`
|
|
53
|
+
|
|
54
|
+
## Implemented Delta Observed
|
|
55
|
+
|
|
56
|
+
- Board header can show a right-aligned `Next Activity:` label from parsed router state.
|
|
57
|
+
- Release PRD naming moved from `PRD.md` to `{release}-PRD.md`.
|
|
58
|
+
- Epic design naming moved from per-epic `Design.md` to `E##-Detail.md`.
|
|
59
|
+
- TUI columns use height-aware virtual viewport slicing with above/more scroll indicators.
|
|
60
|
+
- Detail overlay accepts terminal-height-derived caps and scroll offsets.
|
|
61
|
+
- Model state now tracks per-column offsets and detail offsets.
|
|
62
|
+
- Column navigation and page keys keep the focused task visible.
|
|
63
|
+
- Unfocused columns now use a rounded-border style matching focused column dimensions.
|
|
64
|
+
- `internal/styles/styles.go` added `HeaderRight`, `ScrollIndicator`, and `ColumnUnfocused`.
|
|
65
|
+
|
|
66
|
+
## Drift Notes Found
|
|
67
|
+
|
|
68
|
+
- `T007-column-focus-border-stability.md`: `internal/styles/styles.go` added exported `ColumnUnfocused` style, not yet in Codebase Map.
|
|
69
|
+
|
|
70
|
+
## Verification Performed During Audit
|
|
71
|
+
|
|
72
|
+
- `go build ./...`: passed.
|
|
73
|
+
- `go test ./...`: passed.
|
|
74
|
+
|
|
75
|
+
## Audit Caveats
|
|
76
|
+
|
|
77
|
+
- The required `make build && make test` gate was not rerun because this environment has used direct Go equivalents for recent task closeout when `make` is unavailable.
|
|
78
|
+
- Must-fix follow-up applied: `T001-next-activity-header.md`, `T004-update-instruction-files.md`, and `T005-update-cross-references.md` no longer contain unchecked implementation checklist items.
|
|
@@ -96,16 +96,16 @@ make run # shortcut: go run main.go
|
|
|
96
96
|
|
|
97
97
|
| Module | Epic | Purpose |
|
|
98
98
|
| ------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------- |
|
|
99
|
-
| `go.mod` | [E01-go-setup](.savepoint/releases/v1/epics/E01-go-setup/
|
|
100
|
-
| `go.sum` | [E01-go-setup](.savepoint/releases/v1/epics/E01-go-setup/
|
|
101
|
-
| `main.go` | [E01-go-setup](.savepoint/releases/v1/epics/E01-go-setup/
|
|
102
|
-
| `Makefile` | [E01-go-setup](.savepoint/releases/v1/epics/E01-go-setup/
|
|
103
|
-
| `internal/board/board.go` | [E01-go-setup](.savepoint/releases/v1/epics/E01-go-setup/
|
|
99
|
+
| `go.mod` | [E01-go-setup](.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md) | Go module definition for the Savepoint CLI rewrite |
|
|
100
|
+
| `go.sum` | [E01-go-setup](.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md) | Dependency checksums for Bubble Tea, Lip Gloss, YAML, and deps |
|
|
101
|
+
| `main.go` | [E01-go-setup](.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md) | Process entrypoint; delegates Bubble Tea startup to board.Run |
|
|
102
|
+
| `Makefile` | [E01-go-setup](.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md) | Local build, test, run, and clean shortcuts |
|
|
103
|
+
| `internal/board/board.go` | [E01-go-setup](.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md) | Minimal Bubble Tea model, quit handling, and program lifecycle |
|
|
104
104
|
```
|
|
105
105
|
|
|
106
106
|
## Target File
|
|
107
107
|
|
|
108
|
-
`.savepoint/releases/v1/epics/E01-go-setup/
|
|
108
|
+
`.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md`
|
|
109
109
|
|
|
110
110
|
## Replace
|
|
111
111
|
|
|
@@ -121,7 +121,7 @@ status: audited
|
|
|
121
121
|
|
|
122
122
|
## Target File
|
|
123
123
|
|
|
124
|
-
`.savepoint/releases/v1/epics/E01-go-setup/
|
|
124
|
+
`.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md`
|
|
125
125
|
|
|
126
126
|
## Insert After
|
|
127
127
|
|
|
@@ -22,7 +22,7 @@ Manual snapshot created because the router was already on E02 and the audit CLI
|
|
|
22
22
|
## Files Read
|
|
23
23
|
|
|
24
24
|
- `.savepoint/router.md`
|
|
25
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/
|
|
25
|
+
- `.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md`
|
|
26
26
|
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md`
|
|
27
27
|
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T002-entrypoint.md`
|
|
28
28
|
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T003-directory-structure.md`
|
|
@@ -44,7 +44,7 @@ Manual snapshot created because the router was already on E02 and the audit CLI
|
|
|
44
44
|
- `main.go`
|
|
45
45
|
- `internal/board/board.go`
|
|
46
46
|
- `Makefile`
|
|
47
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/
|
|
47
|
+
- `.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md`
|
|
48
48
|
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md`
|
|
49
49
|
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T002-entrypoint.md`
|
|
50
50
|
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T003-directory-structure.md`
|
|
@@ -10,8 +10,8 @@ When you are about to write code, you must first read, in order:
|
|
|
10
10
|
|
|
11
11
|
1. `.savepoint/PRD.md` — what we are building and why
|
|
12
12
|
2. `.savepoint/Design.md` — how the system is architected
|
|
13
|
-
3. The release PRD: `.savepoint/releases/v1/PRD.md`
|
|
14
|
-
4. The epic
|
|
13
|
+
3. The release PRD: `.savepoint/releases/v1/v1-PRD.md`
|
|
14
|
+
4. The epic E##-Detail.md: `.savepoint/releases/v1/epics/{epic}/E##-Detail.md`
|
|
15
15
|
5. The active task file: `.savepoint/releases/v1/epics/{epic}/tasks/{NNN}-*.md`
|
|
16
16
|
|
|
17
17
|
**Conditional read:** if the active task touches TUI rendering, theme, or visual design, also read `.savepoint/visual-identity.md`. Otherwise skip it — it's ~1.8K tokens you don't need.
|
|
@@ -49,9 +49,9 @@ npm test # vitest smoke suite
|
|
|
49
49
|
|
|
50
50
|
| Module | Epic | Purpose |
|
|
51
51
|
| -------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------- |
|
|
52
|
-
| `src/cli.ts` | [E01-scaffolding](.savepoint/releases/v1/epics/E01-scaffolding/
|
|
53
|
-
| `src/version.ts` | [E01-scaffolding](.savepoint/releases/v1/epics/E01-scaffolding/
|
|
54
|
-
| `test/smoke.test.ts` | [E01-scaffolding](.savepoint/releases/v1/epics/E01-scaffolding/
|
|
52
|
+
| `src/cli.ts` | [E01-scaffolding](.savepoint/releases/v1/epics/E01-scaffolding/E01-Detail.md) | CLI entrypoint; placeholder help/version output |
|
|
53
|
+
| `src/version.ts` | [E01-scaffolding](.savepoint/releases/v1/epics/E01-scaffolding/E01-Detail.md) | Single source for package version string |
|
|
54
|
+
| `test/smoke.test.ts` | [E01-scaffolding](.savepoint/releases/v1/epics/E01-scaffolding/E01-Detail.md) | Baseline Vitest smoke test proving test runner works |
|
|
55
55
|
|
|
56
56
|
<!-- END AUTO-GENERATED -->
|
|
57
57
|
|
|
@@ -42,35 +42,35 @@
|
|
|
42
42
|
## Replace
|
|
43
43
|
|
|
44
44
|
```md
|
|
45
|
-
| `src/domain/config.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
46
|
-
| `src/domain/epic.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
47
|
-
| `src/domain/ids.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
48
|
-
| `src/domain/release.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
49
|
-
| `src/domain/router.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
50
|
-
| `src/domain/status.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
51
|
-
| `src/domain/task.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
52
|
-
| `src/fs/markdown.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
53
|
-
| `src/fs/project.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
54
|
-
| `src/readers/config.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
55
|
-
| `src/readers/epic.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
56
|
-
| `src/readers/release.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
57
|
-
| `src/readers/router.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
58
|
-
| `src/readers/tasks.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/
|
|
45
|
+
| `src/domain/config.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Config defaults and typed project config model |
|
|
46
|
+
| `src/domain/epic.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Epic Design frontmatter model and validation |
|
|
47
|
+
| `src/domain/ids.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Release, epic, and task ID parsing and formatting |
|
|
48
|
+
| `src/domain/release.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Release PRD frontmatter model and validation |
|
|
49
|
+
| `src/domain/router.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Router state values and validation |
|
|
50
|
+
| `src/domain/status.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Task status values and transition validation |
|
|
51
|
+
| `src/domain/task.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Task frontmatter/document model and validation |
|
|
52
|
+
| `src/fs/markdown.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Markdown/frontmatter reader with path-aware boundary errors |
|
|
53
|
+
| `src/fs/project.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Project root discovery and scoped `.savepoint` path helpers |
|
|
54
|
+
| `src/readers/config.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Read-only `config.yml` reader with defaults |
|
|
55
|
+
| `src/readers/epic.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Read-only epic Design reader |
|
|
56
|
+
| `src/readers/release.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Read-only release PRD reader |
|
|
57
|
+
| `src/readers/router.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Read-only router Current state reader |
|
|
58
|
+
| `src/readers/tasks.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Epic task-set reader with graph validation |
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
## With
|
|
62
62
|
|
|
63
63
|
```md
|
|
64
|
-
| `internal/data/task.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/
|
|
65
|
-
| `internal/data/parser.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/
|
|
66
|
-
| `internal/data/router.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/
|
|
67
|
-
| `internal/data/config.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/
|
|
68
|
-
| `internal/data/discover.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/
|
|
64
|
+
| `internal/data/task.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Task, column, progress stage, dependency, and metadata structs for Go data readers |
|
|
65
|
+
| `internal/data/parser.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Markdown YAML frontmatter extraction and task frontmatter parsing |
|
|
66
|
+
| `internal/data/router.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Router current-state YAML block extraction and parsing |
|
|
67
|
+
| `internal/data/config.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Savepoint config/theme parsing with default theme fallback |
|
|
68
|
+
| `internal/data/discover.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | `.savepoint` root discovery and release, epic, and task directory listing |
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
## Target File
|
|
72
72
|
|
|
73
|
-
`.savepoint/releases/v1/epics/E02-data-readers/
|
|
73
|
+
`.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md`
|
|
74
74
|
|
|
75
75
|
## Insert After
|
|
76
76
|
|
|
@@ -21,7 +21,7 @@ next_action: "Audit E02-data-readers: all 5 tasks done. Start fresh session for
|
|
|
21
21
|
|
|
22
22
|
## Epic Scope
|
|
23
23
|
|
|
24
|
-
- `.savepoint/releases/v1/epics/E02-data-readers/
|
|
24
|
+
- `.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md`
|
|
25
25
|
- `.savepoint/releases/v1/epics/E02-data-readers/tasks/T001-task-struct.md`
|
|
26
26
|
- `.savepoint/releases/v1/epics/E02-data-readers/tasks/T002-frontmatter-parser.md`
|
|
27
27
|
- `.savepoint/releases/v1/epics/E02-data-readers/tasks/T003-router-reader.md`
|
|
@@ -49,25 +49,25 @@ Acknowledged terminal limits: fonts, scanlines, glows, letter-spacing, mouse-dri
|
|
|
49
49
|
## Insert After
|
|
50
50
|
|
|
51
51
|
```md
|
|
52
|
-
| `internal/data/errors.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/
|
|
52
|
+
| `internal/data/errors.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Shared data-reader boundary error sentinels |
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
## With
|
|
56
56
|
|
|
57
57
|
```md
|
|
58
|
-
| `internal/board/board.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
59
|
-
| `internal/board/model.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
60
|
-
| `internal/board/update.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
61
|
-
| `internal/board/view.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
62
|
-
| `internal/board/layout.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
63
|
-
| `internal/styles/palette.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
64
|
-
| `internal/styles/styles.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
65
|
-
| `internal/board/*_test.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
58
|
+
| `internal/board/board.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Bubble Tea board entrypoint and program launch |
|
|
59
|
+
| `internal/board/model.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Board model state, constructor, task grouping, and initialization |
|
|
60
|
+
| `internal/board/update.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Board key handling, quit behavior, column focus navigation, and terminal resize updates |
|
|
61
|
+
| `internal/board/view.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Lip Gloss view composition for header, responsive board columns, epic panel, tasks, and status bar |
|
|
62
|
+
| `internal/board/layout.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Responsive board breakpoint and column width calculations |
|
|
63
|
+
| `internal/styles/palette.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Atari-Noir terminal color constants and 256-color/16-color fallbacks |
|
|
64
|
+
| `internal/styles/styles.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Reusable Lip Gloss styles for board chrome, focused state, task rows, status, tags, and epic panel |
|
|
65
|
+
| `internal/board/*_test.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Unit tests for board model, update loop, layout breakpoints, and rendered output |
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
## Target File
|
|
69
69
|
|
|
70
|
-
`.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
70
|
+
`.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md`
|
|
71
71
|
|
|
72
72
|
## Replace
|
|
73
73
|
|
|
@@ -85,7 +85,7 @@ status: implemented
|
|
|
85
85
|
|
|
86
86
|
## Target File
|
|
87
87
|
|
|
88
|
-
`.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
88
|
+
`.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md`
|
|
89
89
|
|
|
90
90
|
## Insert After
|
|
91
91
|
|
|
@@ -22,7 +22,7 @@ next_action: "E03-board-tui-core complete. Start a new agent session for the aud
|
|
|
22
22
|
|
|
23
23
|
## Epic Scope
|
|
24
24
|
|
|
25
|
-
- `.savepoint/releases/v1/epics/E03-board-tui-core/
|
|
25
|
+
- `.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md`
|
|
26
26
|
- `.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T001-model.md`
|
|
27
27
|
- `.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T002-update-loop.md`
|
|
28
28
|
- `.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T003-view.md`
|