savepoint 1.0.2 → 1.0.4
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 +12 -1
- package/.github/workflows/ci.yml +20 -0
- package/.golangci.yml +11 -0
- package/.savepoint/Design.md +40 -38
- package/.savepoint/{audit/v1.1/E02-cross-platform-compatibility/proposals.md → releases/v1.1/epics/E02-cross-platform-compatibility/E02-Audit.md} +48 -38
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Audit.md +195 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Detail.md +14 -1
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T006-forced-256-color-profile.md +3 -3
- package/.savepoint/{audit/v1.1/E04-epic-navigation/proposals.md → releases/v1.1/epics/E04-epic-navigation/E04-Audit.md} +65 -54
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Audit.md +237 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md +25 -16
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md +17 -6
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md +15 -5
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T003-update-design-md.md +19 -5
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T004-implement-m-hotkey.md +11 -1
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T005-update-help-overlay.md +9 -6
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T006-tests-and-quality-gates.md +29 -13
- package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Audit.md +56 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Detail.md +63 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T005-proposals.md +44 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T007-apply-close.md +35 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T009-integration.md +40 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T010-audit-file-migration.md +45 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T011-model-tab-state.md +26 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T012-epic-audit-render.md +33 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T013-handle-tab-keys.md +34 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T014-tab-indicator.md +33 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Audit.md +336 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Detail.md +61 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T001-cli-entrypoint.md +37 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T002-target-validation.md +28 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T003-scaffold-writer.md +46 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T004-atomic-writes.md +27 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T005-magic-prompt.md +25 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T006-clipboard.md +26 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T007-integration-test.md +26 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Audit.md +333 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Detail.md +68 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T001-cli-entrypoint.md +26 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T002-non-tty-fallback.md +27 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T003-tui-app-shell.md +28 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T004-board-model.md +29 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T005-detail-pane.md +27 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T006-status-transitions.md +29 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T007-theme-fallbacks.md +29 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T008-integration-test.md +27 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Audit.md +207 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Detail.md +65 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T001-cli-entrypoint.md +24 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T002-config-router-validation.md +28 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T003-structure-checks.md +29 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T004-dependency-checks.md +27 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T005-audit-orphan-checks.md +28 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T006-quality-gates-report.md +31 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/E11-Detail.md +36 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T001-debug-logging.md +25 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T002-increase-debounce.md +21 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T003-error-handling.md +22 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T004-test-verify.md +29 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Audit.md +444 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Detail.md +45 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T001-default-phase.md +35 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T002-default-status.md +19 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T003-better-errors.md +29 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T004-validate-on-write.md +25 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T005-tests.md +37 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Audit.md +118 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Detail.md +73 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T001-safe-cleanup.md +66 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T002-bug-fixes.md +35 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T003-centralize-duplication.md +60 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T004-infrastructure.md +33 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T005-decompose-update.md +37 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T006-async-io.md +40 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T007-test-coverage.md +37 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Audit.md +267 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Detail.md +54 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T001-group-model.md +39 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T002-data-interfaces.md +42 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T003-discover-orphans.md +33 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T004-epic-panel-headings.md +35 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T005-shell-tokenization.md +27 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T006-unify-enums.md +29 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T007-testutil-package.md +28 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Audit.md +272 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Detail.md +60 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T001-benchmarks.md +31 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T002-fuzz-targets.md +34 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T003-debug-flag.md +30 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T004-dist-checksums.md +27 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T005-windows-targets.md +28 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T006-abbreviation-splitting.md +26 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T007-root-test-allowlist.md +33 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T008-ci-and-release-automation.md +46 -0
- package/.savepoint/releases/v1.1/epics/_archived/T001-cli-entrypoint.md +25 -0
- package/.savepoint/releases/v1.1/epics/_archived/T002-quality-gates.md +27 -0
- package/.savepoint/releases/v1.1/epics/_archived/T003-snapshot.md +27 -0
- package/.savepoint/releases/v1.1/epics/_archived/T004-ai-reconcile.md +29 -0
- package/.savepoint/releases/v1.1/epics/_archived/T006-tui-review.md +31 -0
- package/.savepoint/releases/v1.1/epics/_archived/T008-skip-handling.md +34 -0
- package/.savepoint/releases/v1.1/v1.1-PRD.md +67 -7
- package/.savepoint/router.md +10 -17
- package/AGENTS.md +39 -24
- package/Makefile +3 -1
- package/README.md +0 -1
- package/agent-skills/savepoint-audit/SKILL.md +86 -34
- package/agent-skills/savepoint-build-task/SKILL.md +7 -2
- package/agent-skills/savepoint-create-plan/SKILL.md +7 -2
- package/agent-skills/savepoint-create-task/SKILL.md +44 -31
- package/agent-skills/savepoint-draft-prd/SKILL.md +7 -2
- package/agent-skills/savepoint-system-design/SKILL.md +7 -2
- package/agent_skills_test.go +91 -0
- package/cmd/board.go +59 -0
- package/cmd/board_test.go +137 -0
- package/cmd/doctor.go +53 -0
- package/cmd/doctor_test.go +146 -0
- package/cmd/init.go +63 -0
- package/cmd/init_test.go +104 -0
- package/internal/board/board.go +44 -36
- package/internal/board/board_test.go +27 -82
- package/internal/board/card.go +43 -23
- package/internal/board/card_test.go +74 -5
- package/internal/board/column.go +75 -15
- package/internal/board/column_test.go +76 -2
- package/internal/board/debug.go +26 -0
- package/internal/board/debug_test.go +108 -0
- package/internal/board/detail.go +33 -47
- package/internal/board/detail_test.go +48 -0
- package/internal/board/epic_panel.go +120 -22
- package/internal/board/epic_panel_test.go +302 -17
- package/internal/board/help.go +1 -0
- package/internal/board/help_test.go +1 -0
- package/internal/board/integration_test.go +266 -0
- package/internal/board/interfaces.go +65 -0
- package/internal/board/interfaces_test.go +114 -0
- package/internal/board/io.go +93 -0
- package/internal/board/model.go +79 -118
- package/internal/board/plain.go +88 -0
- package/internal/board/plain_test.go +117 -0
- package/internal/board/release.go +1 -9
- package/internal/board/release_test.go +6 -6
- package/internal/board/status.go +4 -4
- package/internal/board/theme.go +24 -0
- package/internal/board/theme_test.go +31 -0
- package/internal/board/transitions.go +113 -88
- package/internal/board/transitions_test.go +164 -141
- package/internal/board/tui.go +32 -0
- package/internal/board/update.go +344 -215
- package/internal/board/update_test.go +326 -18
- package/internal/board/util.go +76 -0
- package/internal/board/view.go +31 -28
- package/internal/board/view_test.go +74 -2
- package/internal/board/watch.go +41 -5
- package/internal/buildtool/main.go +45 -15
- package/internal/buildtool/main_test.go +224 -0
- package/internal/data/config.go +17 -3
- package/internal/data/config_test.go +49 -0
- package/internal/data/discover.go +26 -0
- package/internal/data/discover_test.go +34 -10
- package/internal/data/errors.go +4 -0
- package/internal/data/fuzz_test.go +75 -0
- package/internal/data/lifecycle.go +13 -6
- package/internal/data/lifecycle_test.go +14 -11
- package/internal/data/parser.go +22 -6
- package/internal/data/parser_test.go +31 -7
- package/internal/data/task.go +0 -9
- package/internal/data/testdata/fuzz/FuzzSplitFrontmatterBody/68eb66b0fe91e7e3 +2 -0
- package/internal/data/write.go +88 -11
- package/internal/data/write_test.go +167 -0
- package/internal/doctor/checks.go +567 -0
- package/internal/doctor/checks_test.go +716 -0
- package/internal/doctor/gates.go +193 -0
- package/internal/doctor/gates_test.go +166 -0
- package/internal/doctor/interfaces.go +64 -0
- package/internal/doctor/interfaces_test.go +104 -0
- package/internal/doctor/repairs.go +80 -0
- package/internal/doctor/repairs_test.go +81 -0
- package/internal/doctor/report.go +157 -0
- package/internal/doctor/report_test.go +89 -0
- package/internal/init/clipboard.go +146 -0
- package/internal/init/clipboard_test.go +74 -0
- package/internal/init/install.go +16 -0
- package/internal/init/integration_test.go +197 -0
- package/internal/init/prompt.go +14 -0
- package/internal/init/prompt_test.go +77 -0
- package/internal/init/scaffold.go +59 -0
- package/internal/init/scaffold_test.go +179 -0
- package/internal/init/template_freshness_test.go +56 -0
- package/internal/init/validate.go +85 -0
- package/internal/init/validate_test.go +141 -0
- package/internal/init/write.go +73 -0
- package/internal/init/write_test.go +91 -0
- package/internal/styles/styles_test.go +133 -0
- package/internal/testutil/fixture.go +113 -0
- package/internal/testutil/fs.go +26 -0
- package/main.go +120 -4
- package/package.json +2 -2
- package/project-audit/audit_report_glm_5.1.md +411 -0
- package/project-audit/audit_report_opus_4.6.md +406 -0
- package/project-audit/consolidated-audit-report.md +456 -0
- package/templates/project/.savepoint/Design.md +2 -2
- package/templates/project/.savepoint/router.md +10 -10
- package/templates/project/AGENTS.md +33 -21
- package/templates/project/agent-skills/savepoint-audit/SKILL.md +87 -0
- package/templates/project/agent-skills/savepoint-build-task/SKILL.md +44 -0
- package/templates/project/agent-skills/savepoint-create-plan/SKILL.md +33 -0
- package/templates/project/agent-skills/savepoint-create-task/SKILL.md +44 -0
- package/templates/project/agent-skills/savepoint-draft-prd/SKILL.md +37 -0
- package/templates/project/agent-skills/savepoint-system-design/SKILL.md +38 -0
- package/templates/prompts/audit-reconciliation.prompt.md +33 -28
- package/templates/prompts/design.prompt.md +3 -1
- package/.savepoint/audit/v1/E01/proposals.md +0 -168
- package/.savepoint/audit/v1/E01/snapshot.md +0 -78
- package/.savepoint/audit/v1/E01-go-setup/proposals.md +0 -166
- package/.savepoint/audit/v1/E01-go-setup/snapshot.md +0 -71
- package/.savepoint/audit/v1/E01-scaffolding/proposals/AGENTS.md +0 -66
- package/.savepoint/audit/v1/E01-scaffolding/proposals/Design.md +0 -210
- package/.savepoint/audit/v1/E01-scaffolding/proposals/epic-Design.md +0 -117
- package/.savepoint/audit/v1/E01-scaffolding/proposals/quality-review.md +0 -101
- package/.savepoint/audit/v1/E01-scaffolding/snapshot.md +0 -54
- package/.savepoint/audit/v1/E02-data-model/snapshot.md +0 -128
- package/.savepoint/audit/v1/E02-data-readers/proposals.md +0 -123
- package/.savepoint/audit/v1/E02-data-readers/snapshot.md +0 -54
- package/.savepoint/audit/v1/E03-board-tui-core/proposals.md +0 -146
- package/.savepoint/audit/v1/E03-board-tui-core/snapshot.md +0 -57
- package/.savepoint/audit/v1/E03-cli-foundation/snapshot.md +0 -106
- package/.savepoint/audit/v1/E04-board-components/proposals.md +0 -118
- package/.savepoint/audit/v1/E04-board-components/snapshot.md +0 -77
- package/.savepoint/audit/v1/E04-templates-and-prompts/snapshot.md +0 -115
- package/.savepoint/audit/v1/E05-init-command/snapshot.md +0 -125
- package/.savepoint/audit/v1/E05-phase-transitions/proposals.md +0 -83
- package/.savepoint/audit/v1/E05-phase-transitions/snapshot.md +0 -36
- package/.savepoint/audit/v1/E06-atari-noir-layout/proposals.md +0 -130
- package/.savepoint/audit/v1/E06-atari-noir-layout/snapshot.md +0 -84
- package/.savepoint/audit/v1/E06-tui-board/snapshot.md +0 -64
- package/.savepoint/audit/v1/E07-audit-pipeline/snapshot.md +0 -165
- package/.savepoint/audit/v1/E08-board-workflow-cleanup/snapshot.md +0 -65
- package/.savepoint/audit/v1.1/E02-cross-platform-compatibility/snapshot.md +0 -41
- package/.savepoint/audit/v1.1/E04-epic-navigation/snapshot.md +0 -48
- package/ink-cli-ui-design.zip +0 -0
- package/savepoint +0 -0
- package/savepoint.exe +0 -0
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
# E01-go-setup Audit Proposals
|
|
2
|
-
|
|
3
|
-
## Target File
|
|
4
|
-
|
|
5
|
-
`.savepoint/Design.md`
|
|
6
|
-
|
|
7
|
-
## Replace
|
|
8
|
-
|
|
9
|
-
```md
|
|
10
|
-
## 12. Distribution & build
|
|
11
|
-
|
|
12
|
-
- **License:** MIT.
|
|
13
|
-
- **Install:** primary `npx savepoint init`, persistent `npm i -g savepoint` → `savepoint`.
|
|
14
|
-
- **Runtime:** Node 20.10+ LTS, ESM-only, no native deps. macOS / Linux / Windows-Terminal.
|
|
15
|
-
- **Repo:** single package. TypeScript strict. `tsup` build → `dist/`. Bin `dist/cli.js` shebanged.
|
|
16
|
-
- **No telemetry.** Ever.
|
|
17
|
-
- **Baseline scaffold:** established in epic `E01-scaffolding` (2026-04-27). Package name `savepoint`, version `0.1.0`. Build, typecheck, lint, format, and test gates all pass.
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## With
|
|
21
|
-
|
|
22
|
-
```md
|
|
23
|
-
## 12. Distribution & build
|
|
24
|
-
|
|
25
|
-
- **License:** MIT.
|
|
26
|
-
- **Install:** local Go build during the rewrite; public install channel remains release work.
|
|
27
|
-
- **Runtime:** Go 1.23+ target, single native binary. macOS / Linux / Windows-Terminal.
|
|
28
|
-
- **Repo:** Go module `github.com/opencode/savepoint`. Build with `go build`; test with `go test ./...`.
|
|
29
|
-
- **No telemetry.** Ever.
|
|
30
|
-
- **Go baseline scaffold:** established in epic `E01-go-setup` (2026-05-01). The project now has `go.mod`, `go.sum`, `main.go`, `internal/board`, and Makefile shortcuts for build/test/run/clean.
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Target File
|
|
34
|
-
|
|
35
|
-
`.savepoint/Design.md`
|
|
36
|
-
|
|
37
|
-
## Insert After
|
|
38
|
-
|
|
39
|
-
```md
|
|
40
|
-
## 8. TUI
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## With
|
|
44
|
-
|
|
45
|
-
```md
|
|
46
|
-
|
|
47
|
-
**Go rewrite baseline:** E01 creates a minimal Bubble Tea shell in `internal/board`. The root `main.go` delegates process startup to `board.Run()`, which owns the Bubble Tea program lifecycle. Later board epics should move richer rendering, input state, and styling into focused packages rather than expanding `main.go`.
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Target File
|
|
51
|
-
|
|
52
|
-
`AGENTS.md`
|
|
53
|
-
|
|
54
|
-
## Replace
|
|
55
|
-
|
|
56
|
-
~~~~md
|
|
57
|
-
## Build / Test / Run
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
npm run build # compile src/ → dist/cli.js via tsup (ESM, node20)
|
|
61
|
-
npm run typecheck # tsc --noEmit strict check (NodeNext)
|
|
62
|
-
npm run lint # eslint flat config — rejects any in TypeScript
|
|
63
|
-
npm run format:check # prettier check across src, test, config, markdown
|
|
64
|
-
npm test # vitest smoke suite
|
|
65
|
-
```
|
|
66
|
-
~~~~
|
|
67
|
-
|
|
68
|
-
## With
|
|
69
|
-
|
|
70
|
-
````md
|
|
71
|
-
## Build / Test / Run
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
go build ./... # compile all Go packages
|
|
75
|
-
go test ./... # run Go test suite
|
|
76
|
-
make build # shortcut: go build -o savepoint main.go
|
|
77
|
-
make test # shortcut: go test ./...
|
|
78
|
-
make run # shortcut: go run main.go
|
|
79
|
-
```
|
|
80
|
-
````
|
|
81
|
-
|
|
82
|
-
## Target File
|
|
83
|
-
|
|
84
|
-
`AGENTS.md`
|
|
85
|
-
|
|
86
|
-
## Replace
|
|
87
|
-
|
|
88
|
-
```md
|
|
89
|
-
<!-- AUTO-GENERATED BY savepoint audit. Do not edit manually. -->
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
## With
|
|
93
|
-
|
|
94
|
-
```md
|
|
95
|
-
<!-- AUTO-GENERATED BY savepoint audit. Do not edit manually. -->
|
|
96
|
-
|
|
97
|
-
| Module | Epic | Purpose |
|
|
98
|
-
| ------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------- |
|
|
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
|
-
```
|
|
105
|
-
|
|
106
|
-
## Target File
|
|
107
|
-
|
|
108
|
-
`.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md`
|
|
109
|
-
|
|
110
|
-
## Replace
|
|
111
|
-
|
|
112
|
-
```md
|
|
113
|
-
status: planned
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
## With
|
|
117
|
-
|
|
118
|
-
```md
|
|
119
|
-
status: audited
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Target File
|
|
123
|
-
|
|
124
|
-
`.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md`
|
|
125
|
-
|
|
126
|
-
## Insert After
|
|
127
|
-
|
|
128
|
-
```md
|
|
129
|
-
## Components and files
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
## With
|
|
133
|
-
|
|
134
|
-
```md
|
|
135
|
-
|
|
136
|
-
## Implemented as
|
|
137
|
-
|
|
138
|
-
- `go.mod` uses module path `github.com/opencode/savepoint` and Go `1.26.2` in the current local toolchain.
|
|
139
|
-
- `main.go` is intentionally thin and delegates to `internal/board.Run()`.
|
|
140
|
-
- `internal/board/board.go` contains the first Bubble Tea model, `q`/`ctrl+c` quit handling, and the program runner.
|
|
141
|
-
- `Makefile` provides build/test/run/clean shortcuts, but `make` is not available in the audited Windows environment.
|
|
142
|
-
- `cmd/` and `internal/styles/` currently exist as empty directories. Add placeholder files if those directories must survive git checkout before later epics add code.
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Quality Review
|
|
146
|
-
|
|
147
|
-
## Must Fix Before Close
|
|
148
|
-
|
|
149
|
-
- `internal/data/discover_test.go` fails `go test ./...` because imports `os` and `path/filepath` are unused. This is active E02 work, not E01 code, but it blocks the repo-level quality gate.
|
|
150
|
-
|
|
151
|
-
## Must Fix Before Next Epic
|
|
152
|
-
|
|
153
|
-
- `AGENTS.md` and `.savepoint/Design.md` still describe the old TypeScript/npm architecture and quality gates in several sections. Apply or refine the proposal sections above so future agents do not follow stale commands.
|
|
154
|
-
- `cmd/` and `internal/styles/` are empty directories. Git will not preserve them unless later code lands there or placeholders are added.
|
|
155
|
-
|
|
156
|
-
## Carry Forward
|
|
157
|
-
|
|
158
|
-
- `internal/board/board.go` currently writes errors to stderr inside `Run()` and `main.go` panics on the returned error. Before the CLI grows real command handling, centralize boundary error presentation so failures do not double-report or emit stack-like panic output.
|
|
159
|
-
- `Makefile` uses `rm -f savepoint`, which is fine under POSIX shells but is not enough for native Windows cleanup of `savepoint.exe`. Consider making clean cross-platform or documenting the expected shell.
|
|
160
|
-
|
|
161
|
-
## Already Fixed
|
|
162
|
-
|
|
163
|
-
- `go build ./...` passes outside the sandbox.
|
|
164
|
-
- The root TypeScript scaffold files are removed from the working tree as required by the E01 definition of done.
|
|
165
|
-
- `main.go` delegates to `internal/board`, and `q`/`ctrl+c` quit handling is implemented.
|
|
166
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md` now has checked implementation items and a `## Context Log`.
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: audit-snapshot
|
|
3
|
-
epic: E01-go-setup
|
|
4
|
-
created: 2026-05-01
|
|
5
|
-
mode: manual
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# E01-go-setup Audit Snapshot
|
|
9
|
-
|
|
10
|
-
Manual snapshot created because the router was already on E02 and the audit CLI is not the source of truth for this Go rewrite state.
|
|
11
|
-
|
|
12
|
-
## Epic Scope
|
|
13
|
-
|
|
14
|
-
- Initialize Go module `github.com/opencode/savepoint`.
|
|
15
|
-
- Add Bubble Tea, Lip Gloss, and YAML dependencies.
|
|
16
|
-
- Add root `main.go` entrypoint.
|
|
17
|
-
- Add `internal/board` Bubble Tea shell.
|
|
18
|
-
- Add `cmd/`, `internal/data/`, and `internal/styles/` directories.
|
|
19
|
-
- Add `Makefile` targets for build, test, run, and clean.
|
|
20
|
-
- Remove the old TypeScript/npm root scaffold.
|
|
21
|
-
|
|
22
|
-
## Files Read
|
|
23
|
-
|
|
24
|
-
- `.savepoint/router.md`
|
|
25
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md`
|
|
26
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md`
|
|
27
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T002-entrypoint.md`
|
|
28
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T003-directory-structure.md`
|
|
29
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T004-makefile.md`
|
|
30
|
-
- `agent-skills/ink-tui-design/SKILL.md`
|
|
31
|
-
- `.savepoint/visual-identity.md`
|
|
32
|
-
- `.savepoint/Design.md`
|
|
33
|
-
- `AGENTS.md`
|
|
34
|
-
- `go.mod`
|
|
35
|
-
- `go.sum`
|
|
36
|
-
- `main.go`
|
|
37
|
-
- `internal/board/board.go`
|
|
38
|
-
- `Makefile`
|
|
39
|
-
|
|
40
|
-
## Changed Files in Epic Scope
|
|
41
|
-
|
|
42
|
-
- `go.mod`
|
|
43
|
-
- `go.sum`
|
|
44
|
-
- `main.go`
|
|
45
|
-
- `internal/board/board.go`
|
|
46
|
-
- `Makefile`
|
|
47
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md`
|
|
48
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md`
|
|
49
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T002-entrypoint.md`
|
|
50
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T003-directory-structure.md`
|
|
51
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T004-makefile.md`
|
|
52
|
-
|
|
53
|
-
## Directory Checks
|
|
54
|
-
|
|
55
|
-
- `cmd/` exists.
|
|
56
|
-
- `internal/board/` exists and contains `board.go`.
|
|
57
|
-
- `internal/data/` exists but currently contains E02 data-reader work, outside E01 scope.
|
|
58
|
-
- `internal/styles/` exists but is empty.
|
|
59
|
-
|
|
60
|
-
## Verification
|
|
61
|
-
|
|
62
|
-
- `go env GOVERSION`: `go1.26.2`
|
|
63
|
-
- `go build ./...`: pass when run outside the sandbox.
|
|
64
|
-
- `go test ./...`: fail. Failure is in `internal/data/discover_test.go` from active E02 work: unused imports `os` and `path/filepath`.
|
|
65
|
-
- `make test`: not runnable in this Windows environment because `make` is not installed.
|
|
66
|
-
|
|
67
|
-
## Notes
|
|
68
|
-
|
|
69
|
-
- The router currently points to `E02-data-readers/T001-task-struct`, so this audit is an explicit manual override for E01.
|
|
70
|
-
- The working tree contains a broad TypeScript-to-Go rewrite. Deleted TypeScript files are not treated as E01 regressions because the E01 design explicitly requires removing the TypeScript root scaffold.
|
|
71
|
-
- Empty directories such as `cmd/` and `internal/styles/` are not represented by `git ls-files` unless placeholder files are added.
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
# Agents Guide
|
|
2
|
-
|
|
3
|
-
Welcome, AI agent. This project (`savepoint`) uses its own conventions to manage its own build. You are about to dogfood the workflow.
|
|
4
|
-
|
|
5
|
-
## Workflow
|
|
6
|
-
|
|
7
|
-
Before doing anything, read `.savepoint/router.md`. That file routes you to the next file based on the project's current state.
|
|
8
|
-
|
|
9
|
-
When you are about to write code, you must first read, in order:
|
|
10
|
-
|
|
11
|
-
1. `.savepoint/PRD.md` — what we are building and why
|
|
12
|
-
2. `.savepoint/Design.md` — how the system is architected
|
|
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
|
-
5. The active task file: `.savepoint/releases/v1/epics/{epic}/tasks/{NNN}-*.md`
|
|
16
|
-
|
|
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.
|
|
18
|
-
|
|
19
|
-
**Do not load files outside the current task scope** unless the task requires it. Token discipline is the wedge of this product; we honor it on ourselves.
|
|
20
|
-
|
|
21
|
-
## Build / Test / Run
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npm run build # compile src/ → dist/cli.js via tsup (ESM, node20)
|
|
25
|
-
npm run typecheck # tsc --noEmit strict check (NodeNext)
|
|
26
|
-
npm run lint # eslint flat config — rejects any in TypeScript
|
|
27
|
-
npm run format:check # prettier check across src, test, config, markdown
|
|
28
|
-
npm test # vitest smoke suite
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
> **Windows note:** `npm test` uses a custom preload script (`scripts/vitest-preload.cjs`) and `vitest.config.js` (not `.ts`) to work around a Windows-specific child_process/esbuild issue. This is transparent when running through npm scripts.
|
|
32
|
-
|
|
33
|
-
## Code Style
|
|
34
|
-
|
|
35
|
-
1. **One job per file.** If a file does two things, split it.
|
|
36
|
-
2. **One-sentence rule.** If you can't describe a function in one sentence, refactor.
|
|
37
|
-
3. **Test what branches.** Logic with if/else/switch gets a test. Pure rendering: skip.
|
|
38
|
-
4. **Types are documentation.** No `any`. Let the compiler help.
|
|
39
|
-
5. **Build, don't speculate.** No code for hypothetical futures.
|
|
40
|
-
6. **Errors at boundaries.** Handle failure where data enters or leaves the system.
|
|
41
|
-
7. **One source of truth.** State lives in one place. No syncing copies.
|
|
42
|
-
8. **Comments explain WHY,** not what. If removing the comment wouldn't confuse a future reader, delete it.
|
|
43
|
-
9. **Content in data files.** Markdown/JSON/YAML, not strings in code.
|
|
44
|
-
10. **Small diffs.** Each task touches as few files as possible.
|
|
45
|
-
|
|
46
|
-
## Codebase Map
|
|
47
|
-
|
|
48
|
-
<!-- AUTO-GENERATED BY savepoint audit. Do not edit manually. -->
|
|
49
|
-
|
|
50
|
-
| Module | Epic | Purpose |
|
|
51
|
-
| -------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------- |
|
|
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
|
-
|
|
56
|
-
<!-- END AUTO-GENERATED -->
|
|
57
|
-
|
|
58
|
-
## CLI rules for agents
|
|
59
|
-
|
|
60
|
-
**Never run `savepoint` commands.** The CLI is for the human. Edit files directly.
|
|
61
|
-
|
|
62
|
-
(For this repo specifically: `savepoint` doesn't exist yet — we're building it. Even once it exists, this rule stands.)
|
|
63
|
-
|
|
64
|
-
## Recommended planning models
|
|
65
|
-
|
|
66
|
-
For PRD/Design/Task planning, this workflow assumes a top-tier model: Claude Opus, Gemini 2.5 Pro, GPT-5.5, or equivalent. Lighter models may not follow embedded prompt instructions reliably. If you are not one of those, advise the user before proceeding with planning steps.
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: project-design
|
|
3
|
-
status: active
|
|
4
|
-
last_audited: E01-scaffolding (2026-04-27)
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Savepoint — System Architecture
|
|
8
|
-
|
|
9
|
-
> Project-level architecture. Audit-kept fresh: every epic's audit step merges its delta into this document.
|
|
10
|
-
>
|
|
11
|
-
> **Visual identity** lives separately in `.savepoint/visual-identity.md` and is loaded only for TUI/theme/visual tasks.
|
|
12
|
-
|
|
13
|
-
## 1. Architecture model
|
|
14
|
-
|
|
15
|
-
- **File-only.** No MCP server in v1. Agents read and edit Markdown + YAML files directly using their native file tools.
|
|
16
|
-
- **Agent-agnostic via the Router Pattern:**
|
|
17
|
-
1. `AGENTS.md` at the project root (spec-compliant; readable by all major coding agents).
|
|
18
|
-
2. `AGENTS.md` routes the agent into `.savepoint/router.md` (the state-machine file).
|
|
19
|
-
3. `.savepoint/router.md` conditionally points the agent at the next template prompt based on project state.
|
|
20
|
-
4. Templates contain **embedded HTML-comment instructions** (`<!-- AGENT: ... -->`) the agent follows verbatim.
|
|
21
|
-
- **Token-efficiency principle.**
|
|
22
|
-
- Cold session bootstrap: ~5–7K tokens (one-time per conversation).
|
|
23
|
-
- Per-task incremental: <2KB.
|
|
24
|
-
- Audit: 5–15KB.
|
|
25
|
-
- Anything that breaks these bounds violates the wedge.
|
|
26
|
-
|
|
27
|
-
## 2. Directory layout
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
<project-root>/
|
|
31
|
-
├── AGENTS.md ← uppercase, spec-standard, agent entry point
|
|
32
|
-
└── .savepoint/
|
|
33
|
-
├── PRD.md ← project vision (rare changes)
|
|
34
|
-
├── Design.md ← project architecture (this file)
|
|
35
|
-
├── visual-identity.md ← design system; loaded conditionally for TUI work
|
|
36
|
-
├── router.md ← state-machine routing
|
|
37
|
-
├── config.yml ← theme, quality_gates, verify_strict
|
|
38
|
-
├── audit/
|
|
39
|
-
│ └── {E##-epic}/
|
|
40
|
-
│ ├── snapshot.md
|
|
41
|
-
│ └── proposals/
|
|
42
|
-
└── releases/
|
|
43
|
-
└── v1/
|
|
44
|
-
├── PRD.md ← release-scoped PRD
|
|
45
|
-
└── epics/
|
|
46
|
-
└── E##-{epic-name}/
|
|
47
|
-
├── Design.md ← epic delta
|
|
48
|
-
└── tasks/
|
|
49
|
-
└── T001-slug.md
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
- `AGENTS.md` is at root (uppercase, cross-vendor spec).
|
|
53
|
-
- `Design.md` lives in `.savepoint/` (working doc, not public-facing).
|
|
54
|
-
- `visual-identity.md` is conditional — only loaded by router for TUI/theme/visual tasks.
|
|
55
|
-
- **Subtasks are inline checklists** inside the task `.md` — never separate files.
|
|
56
|
-
- Epic folders are prefixed for navigation (`E01-scaffolding/`). Task files and IDs are prefixed the same way (`T001-package-baseline.md`).
|
|
57
|
-
|
|
58
|
-
## 3. Hierarchy semantics
|
|
59
|
-
|
|
60
|
-
| Level | Definition |
|
|
61
|
-
| ------------ | -------------------------------------------------------------------------------------- |
|
|
62
|
-
| **Release** | The thing being built. One PRD per release. v1 = MVP. |
|
|
63
|
-
| **Epic** | A major feature within a release. Has its own Design.md (delta from project Design). |
|
|
64
|
-
| **Task** | Independently buildable. Objective-led. **Requires implementation plan before build.** |
|
|
65
|
-
| **Sub-task** | Inline checklist item — _evidence of the implementation plan_, not standalone work. |
|
|
66
|
-
|
|
67
|
-
## 4. Status model & gates
|
|
68
|
-
|
|
69
|
-
Five statuses, with explicit gates:
|
|
70
|
-
|
|
71
|
-
| Status | Meaning | Entry gate |
|
|
72
|
-
| ------------- | --------------------------------- | --------------------------------------------- |
|
|
73
|
-
| `backlog` | Task exists, no plan | created |
|
|
74
|
-
| `planned` | Implementation plan written | plan section non-empty |
|
|
75
|
-
| `in_progress` | AI building | all `depends_on` are `done` |
|
|
76
|
-
| `review` | Build done, awaiting verification | all sub-tasks checked off |
|
|
77
|
-
| `done` | Verified, locked | assertion + (configurable) quality gates pass |
|
|
78
|
-
|
|
79
|
-
- `blocked` is a **flag**, not a status — `in_progress` + `blocked: "reason"` is valid.
|
|
80
|
-
- Reverts allowed; reverting from `done` warns about audit staleness.
|
|
81
|
-
- **Verification mode is configurable per project** (`verify_strict: true|false`). Default: `false` (vibe-coder soft mode).
|
|
82
|
-
|
|
83
|
-
## 5. Dependencies
|
|
84
|
-
|
|
85
|
-
- Declared in YAML frontmatter: `depends_on: [E##-epic/T###-task-id, ...]` (repo-relative IDs).
|
|
86
|
-
- Cross-epic deps allowed but warned (signal that epic boundaries may be wrong).
|
|
87
|
-
- TUI shows blocked tasks as visually locked.
|
|
88
|
-
- `savepoint doctor` detects cycles.
|
|
89
|
-
|
|
90
|
-
## 6. CLI surface (5 commands, no more)
|
|
91
|
-
|
|
92
|
-
| Command | Purpose |
|
|
93
|
-
| ---------------------- | --------------------------------------------------------------------------------- |
|
|
94
|
-
| `savepoint init` | Scaffold `.savepoint/`, print magic prompt to stdout + clipboard |
|
|
95
|
-
| `savepoint board` | Launch TUI; auto-falls-back to plain table on non-TTY |
|
|
96
|
-
| `savepoint audit` | Run audit pipeline (`--skip --reason`, `--epic`) |
|
|
97
|
-
| `savepoint doctor` | Integrity check + ad-hoc quality-gate run + Layer-2 prompt for AI semantic review |
|
|
98
|
-
| `--version` / `--help` | Standard |
|
|
99
|
-
|
|
100
|
-
- Bare `savepoint` prints help.
|
|
101
|
-
- **Explicitly rejected:** `task new`, `epic new`, `release new`, `plan`, `next`, `status`, `task done`. All are file edits or TUI actions.
|
|
102
|
-
- **Agents must not run `savepoint` commands.** Stated in AGENTS.md.
|
|
103
|
-
|
|
104
|
-
**Names:** npm package `savepoint`; binary `savepoint`. No `vk` alias.
|
|
105
|
-
|
|
106
|
-
## 7. Audit pipeline (6 steps)
|
|
107
|
-
|
|
108
|
-
```
|
|
109
|
-
0. Quality Gates — CLI runs configured commands. Halts on failure if block_on_failure: true.
|
|
110
|
-
1. Snapshot — CLI writes file tree (gitignore-respecting) + changed-files list. NO code contents.
|
|
111
|
-
2. Diff Brief — State flips to audit_pending: {E##-epic}. Magic prompt printed to user.
|
|
112
|
-
3. Reconcile — Agent reads epic Design + snapshot + scoped code. Writes proposed updates to
|
|
113
|
-
.savepoint/audit/{E##-epic}/proposals/.
|
|
114
|
-
4. Review — TUI shows side-by-side per-proposal diff. Approve / reject / edit each.
|
|
115
|
-
5. Commit — Approved proposals overwrite live files. Epic gets status: audited. Next epic unlocks.
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
- **First epic = E01-scaffolding by convention.** First audit establishes the baseline. ✓ _E01-scaffolding audited 2026-04-27._
|
|
119
|
-
- `audit_pending` is a **hard gate**: next epic's tasks cannot enter `in_progress` until prior epic is `audited`.
|
|
120
|
-
- **High-divergence guard:** if a proposal changes >50% of the live file, TUI requires extra confirmation (threshold tunable in `config.yml`).
|
|
121
|
-
- **Skip allowed** via `savepoint audit --skip --reason "..."`. Logged to `.savepoint/audit-log.md`. Permanent `⚠ skipped` badge in TUI.
|
|
122
|
-
- **Codebase Map** auto-generated in `AGENTS.md` between markers — one line per top-level module pointing to its epic Design.
|
|
123
|
-
|
|
124
|
-
### Quality gates (audit step 0)
|
|
125
|
-
|
|
126
|
-
```yaml
|
|
127
|
-
# .savepoint/config.yml
|
|
128
|
-
quality_gates:
|
|
129
|
-
lint: "<command>" # null to disable
|
|
130
|
-
typecheck: "<command>"
|
|
131
|
-
test: "<command>"
|
|
132
|
-
block_on_failure: true
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
Three layers:
|
|
136
|
-
|
|
137
|
-
- **Layer 1 (mechanical):** user's chosen linter (we recommend, don't ship). TS: `eslint` + `dependency-cruiser`. Python: `radon` + `pylint`. Go: `gocyclo` + `staticcheck`. **Cross-language fallback:** `lizard`.
|
|
138
|
-
- **Layer 2 (AI semantic review):** baked into the audit reconcile prompt. Outputs `quality-review.md` proposal. **Advisory, not blocking.**
|
|
139
|
-
- **Layer 3:** `savepoint doctor` runs Layer 1 + prints Layer 2 prompt for ad-hoc use.
|
|
140
|
-
|
|
141
|
-
## 8. TUI
|
|
142
|
-
|
|
143
|
-
**Theming:** Atari-Noir is the default theme. **For full design tokens, palette, and rendering rules, see `.savepoint/visual-identity.md`** (loaded conditionally for TUI tasks). Live values in `config.yml` `theme:` section.
|
|
144
|
-
|
|
145
|
-
Acknowledged terminal limits: fonts, scanlines, glows, letter-spacing, mouse-driven motion don't translate. Lean on color discipline + box-drawing geometry + uppercase headings.
|
|
146
|
-
|
|
147
|
-
**Render fallbacks:** 256-color → 16-color hard-coded → `NO_COLOR=1` monochrome with glyphs → non-TTY plain table.
|
|
148
|
-
|
|
149
|
-
**Layout:** single screen — header (release/epic context) + 5-column Kanban + detail pane.
|
|
150
|
-
|
|
151
|
-
**Keybindings:** arrow + vim. `space`/`enter`/`e`/`r`/`R`/`E`/`A`/`q`. **No file watching MVP** (manual `r` refresh).
|
|
152
|
-
|
|
153
|
-
**Out of MVP:** file watching, drag-and-drop, multi-select, search, inline editing.
|
|
154
|
-
|
|
155
|
-
## 9. Concurrency
|
|
156
|
-
|
|
157
|
-
- **mtime-based optimistic concurrency.** TUI reads mtime, re-stats before write, prompts "Reload? [Y/n]" on conflict.
|
|
158
|
-
- Agents edit freely; the TUI defers.
|
|
159
|
-
- **No lockfile.**
|
|
160
|
-
|
|
161
|
-
## 10. Release versioning (PRDs)
|
|
162
|
-
|
|
163
|
-
- Sequential integer (`v1`, `v2`). Optional `name` in YAML.
|
|
164
|
-
- `savepoint doctor` warns when creating `v2` while `v1` has un-audited epics.
|
|
165
|
-
|
|
166
|
-
## 11. Failure modes
|
|
167
|
-
|
|
168
|
-
All routed through `savepoint doctor`. Doctor diagnoses and proposes; never auto-destructive.
|
|
169
|
-
|
|
170
|
-
| Failure | Behavior |
|
|
171
|
-
| -------------------------------------------- | ----------------------------------------------------------- |
|
|
172
|
-
| Corrupt YAML | Doctor flags file:line. TUI marks `⚠ corrupt`, refuses ops. |
|
|
173
|
-
| Missing dep | Doctor flags. TUI shows `⚠ broken dep`. |
|
|
174
|
-
| Dependency cycle | Doctor refuses to start either side; prints cycle path. |
|
|
175
|
-
| Duplicate task ID | Doctor flags. |
|
|
176
|
-
| Audit proposals without `audit_pending` flag | Doctor offers cleanup or restore. |
|
|
177
|
-
| Task in nonexistent epic | Doctor moves to `.savepoint/orphans/`. |
|
|
178
|
-
| Missing `config.yml` | All commands except `init` refuse. |
|
|
179
|
-
| Unknown CLI flag | Show help, exit 1. |
|
|
180
|
-
|
|
181
|
-
## 12. Distribution & build
|
|
182
|
-
|
|
183
|
-
- **License:** MIT.
|
|
184
|
-
- **Install:** primary `npx savepoint init`, persistent `npm i -g savepoint` → `savepoint`.
|
|
185
|
-
- **Runtime:** Node 20.10+ LTS, ESM-only, no native deps. macOS / Linux / Windows-Terminal.
|
|
186
|
-
- **Repo:** single package. TypeScript strict. `tsup` build → `dist/`. Bin `dist/cli.js` shebanged.
|
|
187
|
-
- **No telemetry.** Ever.
|
|
188
|
-
- **Baseline scaffold:** established in epic `E01-scaffolding` (2026-04-27). Package name `savepoint`, version `0.1.0`. Build, typecheck, lint, format, and test gates all pass.
|
|
189
|
-
|
|
190
|
-
## 13. Testing
|
|
191
|
-
|
|
192
|
-
| Layer | Tool | Coverage |
|
|
193
|
-
| -------------------------------------------------------- | -------------------------------- | ---------------------------------------------------------------------- |
|
|
194
|
-
| Unit: file ops, YAML, frontmatter, snapshot gen | `vitest` | High |
|
|
195
|
-
| Unit: state transitions, dep resolution, cycle detection | `vitest` | High |
|
|
196
|
-
| Integration: CLI commands in temp dirs | `vitest` + `tmp` | Medium |
|
|
197
|
-
| TUI reducers (state, isolated from rendering) | `vitest` + `ink-testing-library` | Medium |
|
|
198
|
-
| TUI rendering (snapshot tests) | — | **None.** Brittle. |
|
|
199
|
-
| End-to-end with real AI agents | Manual matrix | Pre-release: `[Claude, Cursor, Gemini, Aider]` × `[init, plan, audit]` |
|
|
200
|
-
|
|
201
|
-
~70% line coverage target; behavior coverage prioritized.
|
|
202
|
-
|
|
203
|
-
## 14. Package versioning
|
|
204
|
-
|
|
205
|
-
- `0.1.0` — first public release: scaffolding, status model, CLI, basic TUI, audit (no AI semantic review).
|
|
206
|
-
- `0.2.0` — AI semantic review + broader quality-gate language presets.
|
|
207
|
-
- `0.3.0` — file watching, search.
|
|
208
|
-
- `1.0.0` — MCP server + production stability.
|
|
209
|
-
|
|
210
|
-
Strict semver. Pre-1.0 minors may break.
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: epic-design
|
|
3
|
-
status: audited
|
|
4
|
-
audited: 2026-04-27
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Epic E01: scaffolding
|
|
8
|
-
|
|
9
|
-
## Purpose
|
|
10
|
-
|
|
11
|
-
Create the minimum production-ready TypeScript package foundation for `savepoint`, including build, test, lint, formatting, package metadata, and source tree conventions. This epic establishes the first auditable codebase baseline without implementing user-facing Savepoint behavior.
|
|
12
|
-
|
|
13
|
-
## What this epic adds
|
|
14
|
-
|
|
15
|
-
- A single-package Node 20.10+ TypeScript project using ESM.
|
|
16
|
-
- npm package metadata for package name `savepoint` and binary name `savepoint`.
|
|
17
|
-
- A `tsup` build that emits `dist/cli.js` with a Node shebang.
|
|
18
|
-
- Strict TypeScript configuration.
|
|
19
|
-
- Vitest test setup for future unit and integration tests.
|
|
20
|
-
- ESLint and Prettier configuration for mechanical quality gates.
|
|
21
|
-
- A minimal source layout that future epics can extend.
|
|
22
|
-
- Baseline npm scripts for build, typecheck, lint, format check, and test.
|
|
23
|
-
- Root documentation and ignore files needed for ordinary OSS development.
|
|
24
|
-
|
|
25
|
-
## Components and files
|
|
26
|
-
|
|
27
|
-
Expected files introduced by this epic:
|
|
28
|
-
|
|
29
|
-
| Path | Purpose |
|
|
30
|
-
| -------------------- | ------------------------------------------------------------------------ |
|
|
31
|
-
| `package.json` | Package metadata, bin mapping, scripts, dependencies, files allowlist. |
|
|
32
|
-
| `package-lock.json` | Locked dependency graph for repeatable installs. |
|
|
33
|
-
| `tsconfig.json` | Strict TypeScript compiler settings for ESM Node output. |
|
|
34
|
-
| `tsup.config.ts` | Build entry and output configuration. |
|
|
35
|
-
| `vitest.config.ts` | Test runner configuration. |
|
|
36
|
-
| `eslint.config.js` | Flat ESLint config for TypeScript. |
|
|
37
|
-
| `.prettierrc.json` | Formatting rules. |
|
|
38
|
-
| `.gitignore` | Ignore generated artifacts and local environment files. |
|
|
39
|
-
| `README.md` | Minimal development README until release docs expand it. |
|
|
40
|
-
| `LICENSE` | MIT license placeholder for the package. |
|
|
41
|
-
| `src/cli.ts` | Minimal executable entrypoint that prints help/version placeholder text. |
|
|
42
|
-
| `src/version.ts` | Single source for the package version used by the placeholder CLI. |
|
|
43
|
-
| `test/smoke.test.ts` | Baseline test proving the test runner and exported constants work. |
|
|
44
|
-
|
|
45
|
-
## Architectural delta
|
|
46
|
-
|
|
47
|
-
Before this epic, the repository contains only planning markdown and Savepoint workflow metadata. After this epic, it becomes an installable npm package skeleton with a compilable CLI entrypoint.
|
|
48
|
-
|
|
49
|
-
This does not add the actual Savepoint command system. The placeholder `src/cli.ts` exists only to validate packaging, shebang output, and the future binary surface. Real command dispatch belongs to `cli-foundation`.
|
|
50
|
-
|
|
51
|
-
## Boundaries
|
|
52
|
-
|
|
53
|
-
In scope:
|
|
54
|
-
|
|
55
|
-
- Configure the repo as an ESM-only TypeScript package.
|
|
56
|
-
- Make `npm run build`, `npm run typecheck`, `npm run lint`, and `npm test` meaningful.
|
|
57
|
-
- Keep runtime code minimal and dependency-light.
|
|
58
|
-
- Use package and binary name `savepoint`.
|
|
59
|
-
|
|
60
|
-
Out of scope:
|
|
61
|
-
|
|
62
|
-
- Argument parsing beyond placeholder help/version output.
|
|
63
|
-
- Reading or writing `.savepoint` project files.
|
|
64
|
-
- Implementing `init`, `board`, `audit`, or `doctor`.
|
|
65
|
-
- Ink, React, TUI rendering, theming, or visual identity work.
|
|
66
|
-
- Template content or Router Pattern prompt assets.
|
|
67
|
-
- Release publishing automation beyond package metadata basics.
|
|
68
|
-
|
|
69
|
-
## Quality gates
|
|
70
|
-
|
|
71
|
-
The scaffold supports these commands:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
npm run build
|
|
75
|
-
npm run typecheck
|
|
76
|
-
npm run lint
|
|
77
|
-
npm run format:check
|
|
78
|
-
npm test
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## Design constraints
|
|
82
|
-
|
|
83
|
-
- Keep files small and obvious; no framework or architecture abstractions before there is behavior to organize.
|
|
84
|
-
- Use strict typing from the first commit.
|
|
85
|
-
- Avoid `any`.
|
|
86
|
-
- Keep config conventional enough that a vibe coder can recognize and modify it.
|
|
87
|
-
- Do not add native dependencies.
|
|
88
|
-
- Do not add telemetry, update checks, analytics, or postinstall scripts.
|
|
89
|
-
|
|
90
|
-
## Open decisions
|
|
91
|
-
|
|
92
|
-
- The exact dependency versions are implementation details, but they should be current stable versions compatible with Node 20.10+.
|
|
93
|
-
- `README.md` should stay intentionally sparse in this epic; fuller public-facing docs belong to `docs-and-packaging`.
|
|
94
|
-
|
|
95
|
-
## Implemented as
|
|
96
|
-
|
|
97
|
-
Implemented on 2026-04-27 across tasks T001–T005. All quality gates pass.
|
|
98
|
-
|
|
99
|
-
**Deviations from original design:**
|
|
100
|
-
|
|
101
|
-
| Item | Deviation | Reason |
|
|
102
|
-
| ---------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
103
|
-
| `vitest.config.js` | Extra file not in design | `npm test` requires `--configLoader runner` pointing at a `.js` config on Windows; `.ts` config cannot be loaded directly in this execution path |
|
|
104
|
-
| `scripts/vitest-preload.cjs` | Extra file not in design | Windows runner executes a `net use` child_process call during Vitest startup; this CJS preload stubs that call and also stubs esbuild transforms to avoid a secondary Windows compat issue |
|
|
105
|
-
| `.prettierignore` | Extra file not in design | Standard convention; consistent with `.gitignore` exclusions |
|
|
106
|
-
|
|
107
|
-
**Dependency versions (pinned):**
|
|
108
|
-
|
|
109
|
-
| Package | Version |
|
|
110
|
-
| ------------------- | ------- |
|
|
111
|
-
| `typescript` | ^5.8.3 |
|
|
112
|
-
| `tsup` | ^8.5.1 |
|
|
113
|
-
| `vitest` | ^3.2.4 |
|
|
114
|
-
| `eslint` | ^9.33.0 |
|
|
115
|
-
| `typescript-eslint` | ^8.39.0 |
|
|
116
|
-
| `prettier` | ^3.6.2 |
|
|
117
|
-
| `@types/node` | ^24.1.0 |
|