savepoint 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/.claude/settings.local.json +20 -0
  2. package/.prettierignore +4 -0
  3. package/.savepoint/Design.md +196 -0
  4. package/.savepoint/PRD.md +58 -0
  5. package/.savepoint/audit/E01-go-setup/proposals.md +166 -0
  6. package/.savepoint/audit/E01-go-setup/snapshot.md +71 -0
  7. package/.savepoint/audit/E01-scaffolding/proposals/AGENTS.md +66 -0
  8. package/.savepoint/audit/E01-scaffolding/proposals/Design.md +210 -0
  9. package/.savepoint/audit/E01-scaffolding/proposals/epic-Design.md +117 -0
  10. package/.savepoint/audit/E01-scaffolding/proposals/quality-review.md +101 -0
  11. package/.savepoint/audit/E01-scaffolding/snapshot.md +54 -0
  12. package/.savepoint/audit/E02-data-model/snapshot.md +128 -0
  13. package/.savepoint/audit/E02-data-readers/proposals.md +123 -0
  14. package/.savepoint/audit/E02-data-readers/snapshot.md +54 -0
  15. package/.savepoint/audit/E03-board-tui-core/proposals.md +146 -0
  16. package/.savepoint/audit/E03-board-tui-core/snapshot.md +57 -0
  17. package/.savepoint/audit/E03-cli-foundation/snapshot.md +106 -0
  18. package/.savepoint/audit/E04-board-components/proposals.md +118 -0
  19. package/.savepoint/audit/E04-board-components/snapshot.md +77 -0
  20. package/.savepoint/audit/E04-templates-and-prompts/snapshot.md +115 -0
  21. package/.savepoint/audit/E05-init-command/snapshot.md +125 -0
  22. package/.savepoint/audit/E05-phase-transitions/proposals.md +83 -0
  23. package/.savepoint/audit/E05-phase-transitions/snapshot.md +36 -0
  24. package/.savepoint/audit/E06-tui-board/snapshot.md +64 -0
  25. package/.savepoint/audit/E07-audit-pipeline/snapshot.md +165 -0
  26. package/.savepoint/audit/E08-board-workflow-cleanup/snapshot.md +65 -0
  27. package/.savepoint/config.yml +27 -0
  28. package/.savepoint/releases/v1/PRD.md +66 -0
  29. package/.savepoint/releases/v1/epics/E01-go-setup/Design.md +39 -0
  30. package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md +42 -0
  31. package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T002-entrypoint.md +23 -0
  32. package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T003-directory-structure.md +24 -0
  33. package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T004-makefile.md +23 -0
  34. package/.savepoint/releases/v1/epics/E02-data-readers/Design.md +61 -0
  35. package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T001-task-struct.md +29 -0
  36. package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T002-frontmatter-parser.md +30 -0
  37. package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T003-router-reader.md +29 -0
  38. package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T004-config-reader.md +29 -0
  39. package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T005-discovery.md +30 -0
  40. package/.savepoint/releases/v1/epics/E03-board-tui-core/Design.md +38 -0
  41. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T001-model.md +29 -0
  42. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T002-update-loop.md +30 -0
  43. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T003-view.md +34 -0
  44. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T004-styles.md +29 -0
  45. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T005-layout.md +42 -0
  46. package/.savepoint/releases/v1/epics/E04-board-components/Design.md +44 -0
  47. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T001-column.md +34 -0
  48. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T002-card.md +33 -0
  49. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T003-epic-panel.md +49 -0
  50. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T004-detail-overlay.md +40 -0
  51. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T005-release-dropdown.md +33 -0
  52. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T006-help-overlay.md +34 -0
  53. package/.savepoint/releases/v1/epics/E05-phase-transitions/Design.md +38 -0
  54. package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T001-phase-stepping.md +29 -0
  55. package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T002-gates.md +31 -0
  56. package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T003-write-task.md +31 -0
  57. package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T004-write-router.md +31 -0
  58. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/Design.md +42 -0
  59. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T001-color-system.md +39 -0
  60. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md +52 -0
  61. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T003-footer-status-bar.md +52 -0
  62. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md +53 -0
  63. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T005-restore-nav-hints.md +39 -0
  64. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T007-detail-card-fixes.md +36 -0
  65. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T008-checkbox-states.md +38 -0
  66. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T009-router-priority-marker.md +41 -0
  67. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T010-auto-refresh-watcher.md +61 -0
  68. package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/Design.md +39 -0
  69. package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T001-archive-epics.md +20 -0
  70. package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T002-rewrite-prd.md +22 -0
  71. package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T003-create-epic-stubs.md +24 -0
  72. package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T004-update-router.md +22 -0
  73. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/Design.md +118 -0
  74. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/handoff.md +9 -0
  75. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T001-package-baseline.md +45 -0
  76. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T002-typescript-build.md +48 -0
  77. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T003-vitest-smoke.md +43 -0
  78. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T004-lint-format-gates.md +45 -0
  79. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T005-scaffold-verification.md +40 -0
  80. package/.savepoint/releases/v1/epics/_archived/E02-data-model/Design.md +142 -0
  81. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T001-domain-ids-status.md +27 -0
  82. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T002-markdown-frontmatter-boundary.md +28 -0
  83. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T003-task-documents.md +29 -0
  84. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T004-release-epic-router-config-readers.md +30 -0
  85. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T005-dependency-validation.md +29 -0
  86. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T006-epic-task-set-reader.md +29 -0
  87. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T007-quality-gates.md +31 -0
  88. package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/Design.md +40 -0
  89. package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T001-phase-types.md +27 -0
  90. package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T002-phase-frontmatter.md +25 -0
  91. package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T003-simplify-config.md +26 -0
  92. package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T004-simplify-router-domain.md +24 -0
  93. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/Design.md +122 -0
  94. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T001-argument-parser-contract.md +28 -0
  95. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T002-help-text-generation.md +28 -0
  96. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T003-terminal-environment-detection.md +27 -0
  97. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T004-command-stub-modules.md +29 -0
  98. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T005-cli-runner-dispatch.md +34 -0
  99. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T006-entrypoint-quality-gates.md +32 -0
  100. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/Design.md +43 -0
  101. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T001-strip-args.md +26 -0
  102. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T002-strip-help.md +23 -0
  103. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T003-strip-run.md +23 -0
  104. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T004-delete-commands.md +24 -0
  105. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T005-update-cli-tests.md +22 -0
  106. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/Design.md +48 -0
  107. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T001-board-data-phases.md +26 -0
  108. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T002-phase-rendering.md +28 -0
  109. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T003-detail-pane-phases.md +27 -0
  110. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T004-phase-transitions.md +42 -0
  111. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T005-phase-gates.md +24 -0
  112. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T006-phase-write-back.md +24 -0
  113. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T007-remove-audit-flow.md +27 -0
  114. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T008-board-tests.md +25 -0
  115. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/Design.md +85 -0
  116. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T001-project-template-assets.md +17 -0
  117. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T002-release-and-prompt-assets.md +20 -0
  118. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T003-template-registry-renderer.md +22 -0
  119. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T004-template-integrity-tests.md +17 -0
  120. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T005-template-closeout-quality-gates.md +16 -0
  121. package/.savepoint/releases/v1/epics/_archived/E05-init-command/Design.md +88 -0
  122. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T001-init-cli-contract.md +22 -0
  123. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T002-target-validation.md +23 -0
  124. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T003-scaffold-writer.md +24 -0
  125. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T004-magic-prompt-and-clipboard.md +23 -0
  126. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T005-dev-deps-install-option.md +24 -0
  127. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T006-init-command-integration.md +28 -0
  128. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/Design.md +53 -0
  129. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T001-delete-dead-src.md +23 -0
  130. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T002-delete-dead-tests.md +26 -0
  131. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T003-delete-assets.md +25 -0
  132. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T004-clean-savepoint.md +28 -0
  133. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T005-rewrite-agents-md.md +28 -0
  134. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T006-clean-package-json.md +23 -0
  135. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T007-verify.md +25 -0
  136. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/Design.md +104 -0
  137. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T001-board-command-data.md +23 -0
  138. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T002-board-view-state.md +24 -0
  139. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T003-transition-gates-and-writes.md +25 -0
  140. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T004-terminal-theme.md +23 -0
  141. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T005-ink-board-ui.md +26 -0
  142. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T006-board-integration-audit-entry.md +24 -0
  143. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/Design.md +88 -0
  144. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T001-audit-cli-contract.md +23 -0
  145. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T002-quality-gate-runner.md +23 -0
  146. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T003-snapshot-and-prompt.md +23 -0
  147. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T004-audit-orchestration-router.md +27 -0
  148. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T005-proposal-validation-apply.md +25 -0
  149. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T006-audit-review-state.md +24 -0
  150. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T007-audit-review-ui.md +26 -0
  151. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T008-audit-pipeline-integration.md +24 -0
  152. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/Design.md +103 -0
  153. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T001-acceptance-criteria-model.md +30 -0
  154. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T002-release-task-set-reader.md +33 -0
  155. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T003-board-data-and-plain-output.md +34 -0
  156. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T004-board-selection-state.md +33 -0
  157. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T005-ink-board-layout-cleanup.md +37 -0
  158. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T006-task-detail-popup.md +36 -0
  159. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T007-templates-acceptance-criteria.md +34 -0
  160. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T008-board-workflow-integration.md +41 -0
  161. package/.savepoint/releases/v1/epics/_archived/E09-doctor-command/Design.md +70 -0
  162. package/.savepoint/releases/v1/epics/_archived/E10-docs-and-packaging/Design.md +68 -0
  163. package/.savepoint/releases/v1/epics/_archived/E11-release-validation/Design.md +68 -0
  164. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/Design.md +26 -0
  165. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T001-border-resize-fix.md +35 -0
  166. package/.savepoint/router.md +136 -0
  167. package/.savepoint/visual-identity.md +124 -0
  168. package/AGENTS.md +141 -0
  169. package/CLAUDE.md +1 -0
  170. package/GEMINI.md +1 -0
  171. package/LICENSE +21 -0
  172. package/Makefile +13 -0
  173. package/README.md +78 -0
  174. package/agent-skills/ink-tui-design/SKILL.md +309 -0
  175. package/agent-skills/ink-tui-design/references/component-patterns.md +371 -0
  176. package/agent-skills/ink-tui-design/references/hooks-guide.md +436 -0
  177. package/agent-skills/ink-tui-design/references/ink-gotchas.md +330 -0
  178. package/agent-skills/ink-tui-design/references/testing-patterns.md +384 -0
  179. package/agent-skills/savepoint-audit/SKILL.md +35 -0
  180. package/agent-skills/savepoint-build-task/SKILL.md +39 -0
  181. package/agent-skills/savepoint-create-plan/SKILL.md +28 -0
  182. package/agent-skills/savepoint-create-task/SKILL.md +31 -0
  183. package/agent-skills/savepoint-draft-prd/SKILL.md +32 -0
  184. package/agent-skills/savepoint-system-design/SKILL.md +33 -0
  185. package/agent-skills/superpowers/brainstorming/SKILL.md +165 -0
  186. package/agent-skills/superpowers/brainstorming/visual-companion.md +304 -0
  187. package/agent-skills/superpowers/dispatching-parallel-agents/SKILL.md +193 -0
  188. package/agent-skills/superpowers/executing-plans/SKILL.md +77 -0
  189. package/agent-skills/superpowers/finishing-a-development-branch/SKILL.md +213 -0
  190. package/agent-skills/superpowers/receiving-code-review/SKILL.md +226 -0
  191. package/agent-skills/superpowers/requesting-code-review/SKILL.md +115 -0
  192. package/agent-skills/superpowers/requesting-code-review/code-reviewer.md +160 -0
  193. package/agent-skills/superpowers/subagent-driven-development/SKILL.md +292 -0
  194. package/agent-skills/superpowers/subagent-driven-development/code-quality-reviewer-prompt.md +27 -0
  195. package/agent-skills/superpowers/subagent-driven-development/implementer-prompt.md +113 -0
  196. package/agent-skills/superpowers/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  197. package/agent-skills/superpowers/systematic-debugging/SKILL.md +305 -0
  198. package/agent-skills/superpowers/systematic-debugging/condition-based-waiting.md +122 -0
  199. package/agent-skills/superpowers/systematic-debugging/defense-in-depth.md +130 -0
  200. package/agent-skills/superpowers/systematic-debugging/root-cause-tracing.md +183 -0
  201. package/agent-skills/superpowers/test-driven-development/SKILL.md +389 -0
  202. package/agent-skills/superpowers/test-driven-development/testing-anti-patterns.md +317 -0
  203. package/agent-skills/superpowers/verification-before-completion/SKILL.md +147 -0
  204. package/agent-skills/superpowers/writing-plans/SKILL.md +159 -0
  205. package/agent-skills/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
  206. package/assets/banner.png +0 -0
  207. package/assets/logo.png +0 -0
  208. package/assets/strawman.png +0 -0
  209. package/go.mod +33 -0
  210. package/go.sum +73 -0
  211. package/ink-cli-ui-design.zip +0 -0
  212. package/internal/board/board.go +121 -0
  213. package/internal/board/board_test.go +99 -0
  214. package/internal/board/card.go +72 -0
  215. package/internal/board/card_test.go +111 -0
  216. package/internal/board/column.go +61 -0
  217. package/internal/board/column_test.go +81 -0
  218. package/internal/board/detail.go +140 -0
  219. package/internal/board/detail_test.go +233 -0
  220. package/internal/board/epic_panel.go +69 -0
  221. package/internal/board/epic_panel_test.go +246 -0
  222. package/internal/board/help.go +40 -0
  223. package/internal/board/help_test.go +85 -0
  224. package/internal/board/layout.go +58 -0
  225. package/internal/board/layout_test.go +89 -0
  226. package/internal/board/model.go +151 -0
  227. package/internal/board/model_test.go +67 -0
  228. package/internal/board/release.go +42 -0
  229. package/internal/board/release_test.go +177 -0
  230. package/internal/board/transitions.go +88 -0
  231. package/internal/board/transitions_test.go +141 -0
  232. package/internal/board/update.go +155 -0
  233. package/internal/board/update_test.go +128 -0
  234. package/internal/board/view.go +190 -0
  235. package/internal/board/view_test.go +147 -0
  236. package/internal/data/config.go +87 -0
  237. package/internal/data/config_test.go +73 -0
  238. package/internal/data/discover.go +152 -0
  239. package/internal/data/discover_test.go +106 -0
  240. package/internal/data/errors.go +9 -0
  241. package/internal/data/lifecycle.go +37 -0
  242. package/internal/data/lifecycle_test.go +38 -0
  243. package/internal/data/parser.go +189 -0
  244. package/internal/data/parser_test.go +216 -0
  245. package/internal/data/router.go +52 -0
  246. package/internal/data/router_test.go +35 -0
  247. package/internal/data/task.go +46 -0
  248. package/internal/data/task_test.go +51 -0
  249. package/internal/data/write.go +144 -0
  250. package/internal/data/write_test.go +456 -0
  251. package/internal/styles/palette.go +47 -0
  252. package/internal/styles/styles.go +122 -0
  253. package/main.exe +0 -0
  254. package/main.go +11 -0
  255. package/package.json +25 -0
  256. package/savepoint +0 -0
  257. package/savepoint.exe +0 -0
  258. package/scripts/vitest-preload.cjs +95 -0
  259. package/templates/project/.savepoint/Design.md +47 -0
  260. package/templates/project/.savepoint/PRD.md +34 -0
  261. package/templates/project/.savepoint/config.yml +27 -0
  262. package/templates/project/.savepoint/router.md +152 -0
  263. package/templates/project/.savepoint/visual-identity.md +122 -0
  264. package/templates/project/AGENTS.md +130 -0
  265. package/templates/prompts/audit-reconciliation.prompt.md +67 -0
  266. package/templates/prompts/design.prompt.md +43 -0
  267. package/templates/prompts/epic-design.prompt.md +43 -0
  268. package/templates/prompts/magic-prompt.prompt.md +7 -0
  269. package/templates/prompts/prd.prompt.md +42 -0
  270. package/templates/prompts/task-breakdown.prompt.md +54 -0
  271. package/templates/prompts/task-building.prompt.md +38 -0
  272. package/templates/prompts/task-planning.prompt.md +53 -0
  273. package/templates/release/v1/PRD.md +37 -0
package/README.md ADDED
@@ -0,0 +1,78 @@
1
+ ![Savepoint Logo](assets/logo.png)
2
+
3
+ # 💾 SAVEPOINT
4
+
5
+ > **Hard Gates. Zero Drift. All Vibe.**
6
+
7
+ Built for **vibe coders** on tight token budgets who still want to ship.
8
+
9
+ ```bash
10
+ npx savepoint init
11
+ ```
12
+
13
+ I love building side projects with AI. It feels like magic. But the reality of "vibe coding" is that it usually falls apart on day three. Not because the model is bad, but because there are no boundaries.
14
+
15
+ AI-driven development fails for three specific reasons:
16
+
17
+ 1. **The Drift:** Your `Design.md` and agent instructions go stale after the first iteration; nobody updates them.
18
+ 2. **Token Bloat:** Monolithic backlogs and MCP overhead burn your context window — and your budget.
19
+ 3. **The Chaos:** No repeatable process from a "vibe" to a working MVP.
20
+
21
+ **Savepoint is a baby gate for AI agents.**
22
+
23
+ It’s a simple, file-based state machine and cinematic Terminal UI (TUI) designed to force you—and your agent (Claude, Cursor, Aider, Gemini)—to slow down, write down what you're actually building, and check your work before moving on.
24
+
25
+ No database. No proprietary cloud. **No telemetry, ever.** Your filesystem is the map, and Savepoint keeps the agent on it.
26
+
27
+ ---
28
+
29
+ ## 🔄 The Loop (Driven by Agent Skills)
30
+
31
+ Savepoint turns your project into a series of hard gates, enforced by **six bundled custom agent skills** (`draft-prd`, `system-design`, `create-plan`, `create-task`, `build-task`, `audit`). You cannot move forward until the current gate is cleared.
32
+
33
+ `[ PRD ]` **→** `[ DESIGN ]` **→** `[ EPICS ]` **→** `[ TASKS ]` **→** `[ BUILD ]` **→** `[ AUDIT ]`
34
+
35
+ Small scopes. Small context windows. No wandering.
36
+
37
+ - **The PRD Gate (`draft-prd`):** The agent interviews you to ensure your idea is crisp enough for a V1 before writing any architecture.
38
+ - **The Design Gate (`system-design`):** Write down what you actually want. If you can't explain it simply in a markdown file, the AI is going to make a mess of it.
39
+ - **The Plan Gate (`create-plan` & `create-task`):** Break the idea down into small, manageable steps. No giant leaps. This becomes the checklist the AI _must_ follow.
40
+ - **The Build Gate (`build-task`):** The AI writes code for one small step at a time. The scope stays tight so it doesn't wander off into the weeds. It logs "Drift Notes" instead of cowboy-coding architectural changes.
41
+ - **The Audit Gate (`audit`):** Before moving on, we stop and check. Does the code match the plan? We don't advance until the map matches the territory.
42
+
43
+ > 🔒 **The Audit Loop** — When the last task in an epic moves to `done`, the next epic stays _locked_ until your docs (`Design.md`, `AGENTS.md`, and the epic's own design) are reconciled with the actual code via the audit agent. **No existing markdown-first task tool has this gate.**
44
+
45
+ ---
46
+
47
+ ## 🛠 The Stack (Atari-Noir)
48
+
49
+ Built for a cinematic, technical feel without the bloat.
50
+
51
+ - **Cinematic TUI:** Built with Ink. It feels like a proper terminal tool, not a web app ported to a CLI.
52
+ - **File-First:** Your project's state lives in markdown and JSON files right next to your code.
53
+ - **Agent-Agnostic:** Claude, Cursor, Aider, Gemini — if it reads markdown and edits files, it works. No MCP server. No per-agent adapters.
54
+ - **Token-Efficient by Design:** Tasks read <2KB of context. Audits stay under ~15KB. No more burning your AI budget on bloated backlogs.
55
+
56
+ ---
57
+
58
+ ## 💻 Commands (0.1.0-MVP)
59
+
60
+ | Command | Action |
61
+ | :----------------- | :--------------------------------------------------------------------------------------------------- |
62
+ | `savepoint init` | Scaffold the loop, write your `AGENTS.md` guide, drop the baby gates, and generate the magic prompt. |
63
+ | `savepoint board` | Launch the Atari-Noir Kanban TUI to track the vibe. |
64
+ | `savepoint audit` | Stop the AI. Sync the map with the territory. |
65
+ | `savepoint doctor` | Check the integrity of the state machine. |
66
+
67
+ ---
68
+
69
+ ## 🪞 Recursive Construction
70
+
71
+ I am building Savepoint to dogfood the very workflow it enables. **This entire repository is being built by agents, guided by Savepoint’s own state machine.**
72
+
73
+ I’m sharing it to prove a point: The real power of AI isn't just the size of the LLM—it’s the structure you give it. Token-efficient, documentation-first development is the only way to build at scale with AI without losing your mind.
74
+
75
+ **The goal:** Go from `npx savepoint init` to a merged epic in one weekend.
76
+
77
+ **License:** MIT
78
+ **Status:** Recursive Construction (v1 MVP in progress)
@@ -0,0 +1,309 @@
1
+ ---
2
+ name: ink-tui-design
3
+ description: |
4
+ Ink.js TUI design and implementation guide with visual design vocabulary.
5
+ Use when:
6
+ (1) Creating or modifying Ink.js components for the savepoint TUI
7
+ (2) Implementing useInput/useApp hooks
8
+ (3) Solving emoji/icon width issues (string-width)
9
+ (4) Terminal responsive layout and dynamic height calculations
10
+ (5) Keyboard input handling (Enter, Ctrl+C, conflicts)
11
+ (6) Multi-width character (CJK) cursor issues
12
+ (7) CLI UI test design (ink-testing-library)
13
+ (8) Performance optimization (React.memo, custom comparators)
14
+ (9) Visual design decisions for terminal rendering
15
+ (10) Non-TTY fallback rendering
16
+ ---
17
+
18
+ # Ink TUI Design
19
+
20
+ A unified guide for building terminal UIs with Ink.js, combining implementation
21
+ mechanics and visual design vocabulary. This skill owns the **how** of TUI
22
+ implementation. The **what** of visual direction (palette, spacing, signature
23
+ patterns) lives in `.savepoint/visual-identity.md` and always wins when the two
24
+ diverge.
25
+
26
+ ## Quick Start
27
+
28
+ ### New Component
29
+
30
+ 1. Determine component type: Screen / Part / Common
31
+ 2. Read [component-patterns.md](references/component-patterns.md) for the pattern
32
+ 3. Read [ink-gotchas.md](references/ink-gotchas.md) if this component uses
33
+ emoji, `useInput`, or `Ctrl+C` handling
34
+ 4. Add types where needed
35
+ 5. Implement the component
36
+ 6. Write tests (see [testing-patterns.md](references/testing-patterns.md))
37
+
38
+ ### Common Problem Solving
39
+
40
+ | Problem | Reference |
41
+ | ------------------------ | ------------------------------------------------------------------- |
42
+ | Emoji width misalignment | [ink-gotchas.md#icon-emoji-width](references/ink-gotchas.md) |
43
+ | Ctrl+C fired twice | [ink-gotchas.md#ctrlc-handling](references/ink-gotchas.md) |
44
+ | useInput conflicts | [ink-gotchas.md#useinput-conflicts](references/ink-gotchas.md) |
45
+ | Enter key propagates | [ink-gotchas.md#enter-double-fire](references/ink-gotchas.md) |
46
+ | CJK cursor drift | [ink-gotchas.md#cjk-cursor](references/ink-gotchas.md) |
47
+ | Layout breaks on resize | [ink-gotchas.md#layout-breaks](references/ink-gotchas.md) |
48
+ | console.log interferes | [ink-gotchas.md#consolelog-interference](references/ink-gotchas.md) |
49
+ | Ink color type errors | [ink-gotchas.md#ink-color-types](references/ink-gotchas.md) |
50
+
51
+ ## Directory Conventions
52
+
53
+ Match the project structure under `src/tui/`:
54
+
55
+ ```
56
+ src/tui/
57
+ ├── App.tsx # Root Ink component — board, detail pane, input routing
58
+ ├── Board.tsx # Main kanban-style board view
59
+ ├── DetailPane.tsx # Expanded task detail overlay
60
+ ├── state/ # Pure reducer and view-state logic
61
+ │ ├── reducer.ts # Board navigation, selection, refresh state
62
+ │ ├── app-reducer.ts # App-level state (screen stack, mode)
63
+ │ └── view-state.ts # Derived view models
64
+ ├── io/ # Transition gates and write helpers
65
+ │ ├── gates.ts # Can-transition? rules before writing status
66
+ │ └── write-status.ts # File-backed status updates with mtime checks
67
+ ├── theme/ # Color capability detection and palette
68
+ │ ├── index.ts # Theme exports
69
+ │ ├── palette.ts # Color constants (ANSI 256, true color fallbacks)
70
+ │ └── capability.ts # Terminal color support detection
71
+ ├── render/ # Non-TTY and plain-text rendering
72
+ │ ├── plain-table.ts # Deterministic table layout for CI/pipes
73
+ │ └── errors.ts # Warning and error message formatting
74
+ └── audit-review/ # Audit mode screens (optional, per epic)
75
+ ├── AuditReviewApp.tsx
76
+ ├── ProposalList.tsx
77
+ ├── OperationDetail.tsx
78
+ ├── state.ts
79
+ └── summary.ts
80
+ ```
81
+
82
+ Rules:
83
+
84
+ - **One job per file.** A component that both renders and manages data state
85
+ should be split into a Screen wrapper (state) and a Part (rendering).
86
+ - **State is explicit and local.** Keep UI state in the smallest surface that
87
+ needs it. Derive view data from project files, never invent hidden state.
88
+ - **Test branching, navigation, render output, and non-TTY fallbacks.** Every
89
+ component with `if/else/switch` gets a test. Pure rendering without branches
90
+ may skip.
91
+
92
+ ## Component Classification
93
+
94
+ ### Screen
95
+
96
+ - Represents a complete interactive view
97
+ - Handles keyboard input via `useInput`
98
+ - Uses a 3-layer layout: Header / Content / Footer
99
+ - Owns screen-specific business logic and state
100
+
101
+ ### Part
102
+
103
+ - Reusable, stateless rendering unit
104
+ - Optimized with `React.memo`
105
+ - Receives all data through props
106
+
107
+ ### Common
108
+
109
+ - Basic input primitives (Select, Confirm, Input)
110
+ - Supports both controlled and uncontrolled modes
111
+
112
+ See [component-patterns.md](references/component-patterns.md) for complete
113
+ examples of each classification.
114
+
115
+ ## Visual Design for Terminals
116
+
117
+ > **Override authority:** `.savepoint/visual-identity.md` owns the project's
118
+ > Atari-Noir design system (palette, spacing rhythm, signature patterns). The
119
+ > following is a general vocabulary. When they conflict, always defer to
120
+ > `visual-identity.md`.
121
+
122
+ ### Box Drawing & Borders
123
+
124
+ Choose border styles that express intent:
125
+
126
+ | Style | Characters | Mood |
127
+ | ----------- | ---------- | ------------------------------ |
128
+ | Single line | `┌─┐│└┘` | Clean, modern, minimal |
129
+ | Double line | `╔═╗║╚╝` | Bold, formal, retro-mainframe |
130
+ | Rounded | `╭─╮│╰╯` | Soft, friendly |
131
+ | Heavy | `┏━┓┃┗┛` | Strong, industrial |
132
+ | ASCII | `+-+\|` | Retro, universal compatibility |
133
+
134
+ This project's default is **single line** in quiet `#1A1A1A` per
135
+ `visual-identity.md`. Use double line only for modal title bars or audit
136
+ headers. Avoid defaulting to plain ASCII unless targeting very old terminals.
137
+
138
+ ### Color Strategies
139
+
140
+ | Strategy | When to use |
141
+ | ------------------- | ----------------------------------------------------------------------- |
142
+ | ANSI 16 | Maximum compatibility; craft combinations beyond default red/green/blue |
143
+ | 256-color | Richer palettes; gradients and subtle background variations |
144
+ | True color (24-bit) | Full spectrum; smooth transitions, background tints |
145
+ | Monochrome | Single color with intensity variations (dim, normal, bold, reverse) |
146
+
147
+ This project prefers **true color with 256/16 fallbacks**. See `theme/capability.ts`
148
+ for detection and `theme/palette.ts` for the Atari-Noir color constants.
149
+
150
+ Create atmosphere with:
151
+
152
+ - Background color blocks for panels (not giant fills — intentional accents)
153
+ - Color-coded semantic meaning (reinforce with text; never rely on color alone)
154
+ - Inverted/reverse video for the active/focused row
155
+ - Dim text for secondary info, bold for primary
156
+
157
+ ### Typography & Text Hierarchy
158
+
159
+ The terminal is all typography. Make it count:
160
+
161
+ - **Weight:** Bold for primary actions and headers; dim for metadata
162
+ - **Case:** UPPERCASE for section headers; sentence case for body
163
+ - **Symbols:** Enrich with `→ • ◆ ★ ⚡ λ ∴ ≡` and status glyphs
164
+ - **Custom bullets:** Replace `-` with `▸ ◉ ✓ ⬢ ›` where it adds clarity
165
+ - **Letter spacing:** Simulate with spaces for impact headers where the medium
166
+ allows (fixed-width cells limit this)
167
+
168
+ ### Layout Principles
169
+
170
+ - **Panels & Windows:** Distinct regions with quiet borders. Depth from
171
+ contrast/glow, not heavy shadows.
172
+ - **Columns:** Side-by-side using careful spacing. Keep layout compact and
173
+ readable on narrow terminals first.
174
+ - **Whitespace:** Generous padding inside panels; breathing room between
175
+ sections.
176
+ - **Density:** Match to purpose. The board view is information-dense; audit
177
+ review breathes more.
178
+ - **Hierarchy:** Clear visual distinction between primary content, secondary
179
+ info, and chrome.
180
+
181
+ ### Data Display
182
+
183
+ | Element | Technique |
184
+ | ----------------- | ---------------------------------------------------------------- |
185
+ | Status indicators | `●` green/live, `○` empty, `◐` partial, `✓` complete, `✗` failed |
186
+ | Sparklines | `▁▂▃▄▅▆▇█` for inline mini-charts |
187
+ | Horizontal bars | Block characters for proportional comparison |
188
+ | Trees | `├── └── │` for hierarchies |
189
+ | Gauges | `[████████░░]` with percentage |
190
+
191
+ ### Decorative Elements
192
+
193
+ - **Dividers:** `─────` `═══` `••••••` `░░░░░░` — match tone to section
194
+ - **Section markers:** `▶ SECTION`, `[ SECTION ]`, `─── SECTION ───`, `◆ SECTION`
195
+ - **Icons:** Prefer semantic Unicode or Nerd Font icons. Always apply width
196
+ overrides for emoji (see Pattern 1 below).
197
+
198
+ ### Anti-Patterns to Avoid
199
+
200
+ Never ship generic terminal aesthetics:
201
+
202
+ - Plain unformatted text output
203
+ - Default colors without intentional palette
204
+ - `[INFO]`, `[ERROR]` prefixes without styling
205
+ - Simple `----` dividers everywhere
206
+ - Walls of unstructured text
207
+ - Generic progress bars without personality
208
+ - Boring help text formatting
209
+ - Inconsistent spacing and alignment
210
+ - Accidental line wrapping (treat as a bug)
211
+ - Relying on color alone for state changes
212
+
213
+ ## Key Patterns
214
+
215
+ ### 1. Icon Width Overrides
216
+
217
+ `string-width` v8+ miscalculates some emoji widths. Override explicitly:
218
+
219
+ ```typescript
220
+ const iconWidthOverrides: Record<string, number> = {
221
+ "⚡": 1,
222
+ "✨": 1,
223
+ "✅": 1,
224
+ "⚠️": 1,
225
+ "🟢": 1,
226
+ "🟠": 1,
227
+ };
228
+
229
+ const getIconWidth = (icon: string): number => {
230
+ const baseWidth = stringWidth(icon);
231
+ const override = iconWidthOverrides[icon];
232
+ return override !== undefined ? Math.max(baseWidth, override) : baseWidth;
233
+ };
234
+
235
+ const padIcon = (icon: string, columnWidth = 2): string => {
236
+ const width = getIconWidth(icon);
237
+ const padding = Math.max(0, columnWidth - width);
238
+ return icon + " ".repeat(padding);
239
+ };
240
+ ```
241
+
242
+ ### 2. useInput Conflict Avoidance
243
+
244
+ Multiple `useInput` hooks all receive input. Guard each handler:
245
+
246
+ ```typescript
247
+ useInput((input, key) => {
248
+ if (disabled) return; // Do nothing when this component is inactive
249
+ if (key.return) {
250
+ onSelect(selectedItem);
251
+ }
252
+ });
253
+ ```
254
+
255
+ ### 3. Ctrl+C Handling
256
+
257
+ ```typescript
258
+ render(<App />, { exitOnCtrlC: false });
259
+
260
+ // Inside the component
261
+ useInput((input, key) => {
262
+ if (key.ctrl && input === "c") {
263
+ cleanup();
264
+ exit();
265
+ }
266
+ });
267
+ ```
268
+
269
+ ### 4. Dynamic Height Calculation
270
+
271
+ ```typescript
272
+ const { rows } = useTerminalSize();
273
+ const headerLines = 2;
274
+ const footerLines = 1;
275
+ const contentHeight = rows - headerLines - footerLines;
276
+ const listLimit = Math.max(5, contentHeight);
277
+ ```
278
+
279
+ ### 5. React.memo + Custom Comparison
280
+
281
+ ```typescript
282
+ function arePropsEqual<T>(prev: Props<T>, next: Props<T>): boolean {
283
+ if (prev.items.length !== next.items.length) return false;
284
+ for (let i = 0; i < prev.items.length; i++) {
285
+ if (prev.items[i].value !== next.items[i].value) return false;
286
+ }
287
+ return true;
288
+ }
289
+
290
+ export const Select = React.memo(SelectComponent, arePropsEqual);
291
+ ```
292
+
293
+ ## Detailed References
294
+
295
+ - **Ink.js Gotchas & Common Problems**: [references/ink-gotchas.md](references/ink-gotchas.md)
296
+ - **Component Design Patterns**: [references/component-patterns.md](references/component-patterns.md)
297
+ - **Custom Hooks Guide**: [references/hooks-guide.md](references/hooks-guide.md)
298
+ - **Testing Patterns**: [references/testing-patterns.md](references/testing-patterns.md)
299
+
300
+ ## Visual Identity Authority
301
+
302
+ All aesthetic decisions — palette, spacing, signature patterns, motion, tone —
303
+ are owned by `.savepoint/visual-identity.md`. When implementing a TUI feature:
304
+
305
+ 1. Read `visual-identity.md` first if the task touches rendering, theme, or
306
+ visual design.
307
+ 2. Return to this skill for Ink mechanics, component patterns, and testing.
308
+ 3. If `visual-identity.md` says "quiet borders" and this skill says "double-line
309
+ headers," `visual-identity.md` wins.