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.
Files changed (242) hide show
  1. package/.claude/settings.local.json +12 -1
  2. package/.github/workflows/ci.yml +20 -0
  3. package/.golangci.yml +11 -0
  4. package/.savepoint/Design.md +40 -38
  5. package/.savepoint/{audit/v1.1/E02-cross-platform-compatibility/proposals.md → releases/v1.1/epics/E02-cross-platform-compatibility/E02-Audit.md} +48 -38
  6. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Audit.md +195 -0
  7. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Detail.md +14 -1
  8. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T006-forced-256-color-profile.md +3 -3
  9. package/.savepoint/{audit/v1.1/E04-epic-navigation/proposals.md → releases/v1.1/epics/E04-epic-navigation/E04-Audit.md} +65 -54
  10. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Audit.md +237 -0
  11. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md +25 -16
  12. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md +17 -6
  13. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md +15 -5
  14. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T003-update-design-md.md +19 -5
  15. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T004-implement-m-hotkey.md +11 -1
  16. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T005-update-help-overlay.md +9 -6
  17. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T006-tests-and-quality-gates.md +29 -13
  18. package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Audit.md +56 -0
  19. package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Detail.md +63 -0
  20. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T005-proposals.md +44 -0
  21. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T007-apply-close.md +35 -0
  22. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T009-integration.md +40 -0
  23. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T010-audit-file-migration.md +45 -0
  24. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T011-model-tab-state.md +26 -0
  25. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T012-epic-audit-render.md +33 -0
  26. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T013-handle-tab-keys.md +34 -0
  27. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T014-tab-indicator.md +33 -0
  28. package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Audit.md +336 -0
  29. package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Detail.md +61 -0
  30. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T001-cli-entrypoint.md +37 -0
  31. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T002-target-validation.md +28 -0
  32. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T003-scaffold-writer.md +46 -0
  33. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T004-atomic-writes.md +27 -0
  34. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T005-magic-prompt.md +25 -0
  35. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T006-clipboard.md +26 -0
  36. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T007-integration-test.md +26 -0
  37. package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Audit.md +333 -0
  38. package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Detail.md +68 -0
  39. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T001-cli-entrypoint.md +26 -0
  40. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T002-non-tty-fallback.md +27 -0
  41. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T003-tui-app-shell.md +28 -0
  42. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T004-board-model.md +29 -0
  43. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T005-detail-pane.md +27 -0
  44. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T006-status-transitions.md +29 -0
  45. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T007-theme-fallbacks.md +29 -0
  46. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T008-integration-test.md +27 -0
  47. package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Audit.md +207 -0
  48. package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Detail.md +65 -0
  49. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T001-cli-entrypoint.md +24 -0
  50. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T002-config-router-validation.md +28 -0
  51. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T003-structure-checks.md +29 -0
  52. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T004-dependency-checks.md +27 -0
  53. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T005-audit-orphan-checks.md +28 -0
  54. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T006-quality-gates-report.md +31 -0
  55. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/E11-Detail.md +36 -0
  56. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T001-debug-logging.md +25 -0
  57. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T002-increase-debounce.md +21 -0
  58. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T003-error-handling.md +22 -0
  59. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T004-test-verify.md +29 -0
  60. package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Audit.md +444 -0
  61. package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Detail.md +45 -0
  62. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T001-default-phase.md +35 -0
  63. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T002-default-status.md +19 -0
  64. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T003-better-errors.md +29 -0
  65. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T004-validate-on-write.md +25 -0
  66. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T005-tests.md +37 -0
  67. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Audit.md +118 -0
  68. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Detail.md +73 -0
  69. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T001-safe-cleanup.md +66 -0
  70. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T002-bug-fixes.md +35 -0
  71. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T003-centralize-duplication.md +60 -0
  72. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T004-infrastructure.md +33 -0
  73. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T005-decompose-update.md +37 -0
  74. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T006-async-io.md +40 -0
  75. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T007-test-coverage.md +37 -0
  76. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Audit.md +267 -0
  77. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Detail.md +54 -0
  78. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T001-group-model.md +39 -0
  79. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T002-data-interfaces.md +42 -0
  80. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T003-discover-orphans.md +33 -0
  81. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T004-epic-panel-headings.md +35 -0
  82. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T005-shell-tokenization.md +27 -0
  83. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T006-unify-enums.md +29 -0
  84. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T007-testutil-package.md +28 -0
  85. package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Audit.md +272 -0
  86. package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Detail.md +60 -0
  87. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T001-benchmarks.md +31 -0
  88. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T002-fuzz-targets.md +34 -0
  89. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T003-debug-flag.md +30 -0
  90. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T004-dist-checksums.md +27 -0
  91. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T005-windows-targets.md +28 -0
  92. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T006-abbreviation-splitting.md +26 -0
  93. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T007-root-test-allowlist.md +33 -0
  94. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T008-ci-and-release-automation.md +46 -0
  95. package/.savepoint/releases/v1.1/epics/_archived/T001-cli-entrypoint.md +25 -0
  96. package/.savepoint/releases/v1.1/epics/_archived/T002-quality-gates.md +27 -0
  97. package/.savepoint/releases/v1.1/epics/_archived/T003-snapshot.md +27 -0
  98. package/.savepoint/releases/v1.1/epics/_archived/T004-ai-reconcile.md +29 -0
  99. package/.savepoint/releases/v1.1/epics/_archived/T006-tui-review.md +31 -0
  100. package/.savepoint/releases/v1.1/epics/_archived/T008-skip-handling.md +34 -0
  101. package/.savepoint/releases/v1.1/v1.1-PRD.md +67 -7
  102. package/.savepoint/router.md +10 -17
  103. package/AGENTS.md +39 -24
  104. package/Makefile +3 -1
  105. package/README.md +0 -1
  106. package/agent-skills/savepoint-audit/SKILL.md +86 -34
  107. package/agent-skills/savepoint-build-task/SKILL.md +7 -2
  108. package/agent-skills/savepoint-create-plan/SKILL.md +7 -2
  109. package/agent-skills/savepoint-create-task/SKILL.md +44 -31
  110. package/agent-skills/savepoint-draft-prd/SKILL.md +7 -2
  111. package/agent-skills/savepoint-system-design/SKILL.md +7 -2
  112. package/agent_skills_test.go +91 -0
  113. package/cmd/board.go +59 -0
  114. package/cmd/board_test.go +137 -0
  115. package/cmd/doctor.go +53 -0
  116. package/cmd/doctor_test.go +146 -0
  117. package/cmd/init.go +63 -0
  118. package/cmd/init_test.go +104 -0
  119. package/internal/board/board.go +44 -36
  120. package/internal/board/board_test.go +27 -82
  121. package/internal/board/card.go +43 -23
  122. package/internal/board/card_test.go +74 -5
  123. package/internal/board/column.go +75 -15
  124. package/internal/board/column_test.go +76 -2
  125. package/internal/board/debug.go +26 -0
  126. package/internal/board/debug_test.go +108 -0
  127. package/internal/board/detail.go +33 -47
  128. package/internal/board/detail_test.go +48 -0
  129. package/internal/board/epic_panel.go +120 -22
  130. package/internal/board/epic_panel_test.go +302 -17
  131. package/internal/board/help.go +1 -0
  132. package/internal/board/help_test.go +1 -0
  133. package/internal/board/integration_test.go +266 -0
  134. package/internal/board/interfaces.go +65 -0
  135. package/internal/board/interfaces_test.go +114 -0
  136. package/internal/board/io.go +93 -0
  137. package/internal/board/model.go +79 -118
  138. package/internal/board/plain.go +88 -0
  139. package/internal/board/plain_test.go +117 -0
  140. package/internal/board/release.go +1 -9
  141. package/internal/board/release_test.go +6 -6
  142. package/internal/board/status.go +4 -4
  143. package/internal/board/theme.go +24 -0
  144. package/internal/board/theme_test.go +31 -0
  145. package/internal/board/transitions.go +113 -88
  146. package/internal/board/transitions_test.go +164 -141
  147. package/internal/board/tui.go +32 -0
  148. package/internal/board/update.go +344 -215
  149. package/internal/board/update_test.go +326 -18
  150. package/internal/board/util.go +76 -0
  151. package/internal/board/view.go +31 -28
  152. package/internal/board/view_test.go +74 -2
  153. package/internal/board/watch.go +41 -5
  154. package/internal/buildtool/main.go +45 -15
  155. package/internal/buildtool/main_test.go +224 -0
  156. package/internal/data/config.go +17 -3
  157. package/internal/data/config_test.go +49 -0
  158. package/internal/data/discover.go +26 -0
  159. package/internal/data/discover_test.go +34 -10
  160. package/internal/data/errors.go +4 -0
  161. package/internal/data/fuzz_test.go +75 -0
  162. package/internal/data/lifecycle.go +13 -6
  163. package/internal/data/lifecycle_test.go +14 -11
  164. package/internal/data/parser.go +22 -6
  165. package/internal/data/parser_test.go +31 -7
  166. package/internal/data/task.go +0 -9
  167. package/internal/data/testdata/fuzz/FuzzSplitFrontmatterBody/68eb66b0fe91e7e3 +2 -0
  168. package/internal/data/write.go +88 -11
  169. package/internal/data/write_test.go +167 -0
  170. package/internal/doctor/checks.go +567 -0
  171. package/internal/doctor/checks_test.go +716 -0
  172. package/internal/doctor/gates.go +193 -0
  173. package/internal/doctor/gates_test.go +166 -0
  174. package/internal/doctor/interfaces.go +64 -0
  175. package/internal/doctor/interfaces_test.go +104 -0
  176. package/internal/doctor/repairs.go +80 -0
  177. package/internal/doctor/repairs_test.go +81 -0
  178. package/internal/doctor/report.go +157 -0
  179. package/internal/doctor/report_test.go +89 -0
  180. package/internal/init/clipboard.go +146 -0
  181. package/internal/init/clipboard_test.go +74 -0
  182. package/internal/init/install.go +16 -0
  183. package/internal/init/integration_test.go +197 -0
  184. package/internal/init/prompt.go +14 -0
  185. package/internal/init/prompt_test.go +77 -0
  186. package/internal/init/scaffold.go +59 -0
  187. package/internal/init/scaffold_test.go +179 -0
  188. package/internal/init/template_freshness_test.go +56 -0
  189. package/internal/init/validate.go +85 -0
  190. package/internal/init/validate_test.go +141 -0
  191. package/internal/init/write.go +73 -0
  192. package/internal/init/write_test.go +91 -0
  193. package/internal/styles/styles_test.go +133 -0
  194. package/internal/testutil/fixture.go +113 -0
  195. package/internal/testutil/fs.go +26 -0
  196. package/main.go +120 -4
  197. package/package.json +2 -2
  198. package/project-audit/audit_report_glm_5.1.md +411 -0
  199. package/project-audit/audit_report_opus_4.6.md +406 -0
  200. package/project-audit/consolidated-audit-report.md +456 -0
  201. package/templates/project/.savepoint/Design.md +2 -2
  202. package/templates/project/.savepoint/router.md +10 -10
  203. package/templates/project/AGENTS.md +33 -21
  204. package/templates/project/agent-skills/savepoint-audit/SKILL.md +87 -0
  205. package/templates/project/agent-skills/savepoint-build-task/SKILL.md +44 -0
  206. package/templates/project/agent-skills/savepoint-create-plan/SKILL.md +33 -0
  207. package/templates/project/agent-skills/savepoint-create-task/SKILL.md +44 -0
  208. package/templates/project/agent-skills/savepoint-draft-prd/SKILL.md +37 -0
  209. package/templates/project/agent-skills/savepoint-system-design/SKILL.md +38 -0
  210. package/templates/prompts/audit-reconciliation.prompt.md +33 -28
  211. package/templates/prompts/design.prompt.md +3 -1
  212. package/.savepoint/audit/v1/E01/proposals.md +0 -168
  213. package/.savepoint/audit/v1/E01/snapshot.md +0 -78
  214. package/.savepoint/audit/v1/E01-go-setup/proposals.md +0 -166
  215. package/.savepoint/audit/v1/E01-go-setup/snapshot.md +0 -71
  216. package/.savepoint/audit/v1/E01-scaffolding/proposals/AGENTS.md +0 -66
  217. package/.savepoint/audit/v1/E01-scaffolding/proposals/Design.md +0 -210
  218. package/.savepoint/audit/v1/E01-scaffolding/proposals/epic-Design.md +0 -117
  219. package/.savepoint/audit/v1/E01-scaffolding/proposals/quality-review.md +0 -101
  220. package/.savepoint/audit/v1/E01-scaffolding/snapshot.md +0 -54
  221. package/.savepoint/audit/v1/E02-data-model/snapshot.md +0 -128
  222. package/.savepoint/audit/v1/E02-data-readers/proposals.md +0 -123
  223. package/.savepoint/audit/v1/E02-data-readers/snapshot.md +0 -54
  224. package/.savepoint/audit/v1/E03-board-tui-core/proposals.md +0 -146
  225. package/.savepoint/audit/v1/E03-board-tui-core/snapshot.md +0 -57
  226. package/.savepoint/audit/v1/E03-cli-foundation/snapshot.md +0 -106
  227. package/.savepoint/audit/v1/E04-board-components/proposals.md +0 -118
  228. package/.savepoint/audit/v1/E04-board-components/snapshot.md +0 -77
  229. package/.savepoint/audit/v1/E04-templates-and-prompts/snapshot.md +0 -115
  230. package/.savepoint/audit/v1/E05-init-command/snapshot.md +0 -125
  231. package/.savepoint/audit/v1/E05-phase-transitions/proposals.md +0 -83
  232. package/.savepoint/audit/v1/E05-phase-transitions/snapshot.md +0 -36
  233. package/.savepoint/audit/v1/E06-atari-noir-layout/proposals.md +0 -130
  234. package/.savepoint/audit/v1/E06-atari-noir-layout/snapshot.md +0 -84
  235. package/.savepoint/audit/v1/E06-tui-board/snapshot.md +0 -64
  236. package/.savepoint/audit/v1/E07-audit-pipeline/snapshot.md +0 -165
  237. package/.savepoint/audit/v1/E08-board-workflow-cleanup/snapshot.md +0 -65
  238. package/.savepoint/audit/v1.1/E02-cross-platform-compatibility/snapshot.md +0 -41
  239. package/.savepoint/audit/v1.1/E04-epic-navigation/snapshot.md +0 -48
  240. package/ink-cli-ui-design.zip +0 -0
  241. package/savepoint +0 -0
  242. 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 |