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
@@ -0,0 +1,210 @@
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.
@@ -0,0 +1,117 @@
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 |
@@ -0,0 +1,101 @@
1
+ ---
2
+ type: quality-review
3
+ epic: E01-scaffolding
4
+ reviewed: 2026-04-27
5
+ advisory: true
6
+ ---
7
+
8
+ # Quality Review: E01-scaffolding
9
+
10
+ Semantic review of the scaffolded source against the 10 Code Style rules from `AGENTS.md`. Advisory only — no blocking issues.
11
+
12
+ ---
13
+
14
+ ## Rule-by-rule findings
15
+
16
+ ### 1. One job per file ✓
17
+
18
+ `src/cli.ts` handles argument dispatch and output. `src/version.ts` is a single export. No file does two things.
19
+
20
+ ### 2. One-sentence rule ✓
21
+
22
+ `printHelp()` — prints the placeholder help banner. `main()` — dispatches on argv and calls the appropriate output function. Both are one-sentence describable.
23
+
24
+ ### 3. Test what branches ⚠ advisory
25
+
26
+ `src/cli.ts` has a branch on `command === "--version"`. The smoke test in `test/smoke.test.ts` only covers `src/version.ts`. The CLI dispatch logic is untested.
27
+
28
+ This is acceptable at scaffold stage — the branches contain only placeholder output and will be replaced in `cli-foundation`. Flag for that epic: when real dispatch lands, cover every branch.
29
+
30
+ ### 4. Types are documentation ✓
31
+
32
+ No `any` anywhere in source or test. Return types are declared (`void`). ESLint is configured to error on `@typescript-eslint/no-explicit-any`.
33
+
34
+ ### 5. Build, don't speculate ✓
35
+
36
+ No abstraction layers, registries, or plugin systems. Placeholder CLI is minimal: two functions and a `main()` call. Nothing exists for hypothetical future behavior.
37
+
38
+ ### 6. Errors at boundaries ✓ (n/a at scaffold)
39
+
40
+ No real system boundaries in placeholder code. The CLI entrypoint reads only `process.argv`, which cannot throw. Acceptable for a placeholder.
41
+
42
+ ### 7. One source of truth ✓
43
+
44
+ Version string is declared once in `src/version.ts` and imported by `src/cli.ts`. `package.json` also contains `"version": "0.1.0"` — this is expected (npm requires it there), not a violation. When the CLI reads its own version at runtime, it imports from `src/version.ts`, not from `package.json` directly.
45
+
46
+ > **Recommendation for `cli-foundation`:** consider whether `version.ts` should derive from `package.json` at build time (via `tsup` banner injection or a build-time const) to eliminate the manual sync requirement. Not urgent at `0.1.0`.
47
+
48
+ ### 8. Comments explain WHY ✓
49
+
50
+ No comments in any source file. Config files have no inline comments. Good.
51
+
52
+ ### 9. Content in data files ✓ (n/a at scaffold)
53
+
54
+ No user-facing content exists yet. Config is in conventional JSON/TS config files.
55
+
56
+ ### 10. Small diffs ✓
57
+
58
+ Epic split into 5 tasks with clear separation: package metadata → TypeScript build → test runner → lint/format → verification. Each task touched a minimal set of files with declared dependencies.
59
+
60
+ ---
61
+
62
+ ## Structural observations
63
+
64
+ ### Dual vitest config files
65
+
66
+ `vitest.config.ts` and `vitest.config.js` are identical. The `.js` variant is the one actually used by `npm test` (required for `--configLoader runner`). The `.ts` variant is unused but exists as the "source of truth" for IDE tooling and type checking.
67
+
68
+ **Recommendation:** document this in a comment in `vitest.config.ts`, or remove it and keep only `.js`. The dual-file situation will confuse future contributors who edit `.ts` expecting it to take effect.
69
+
70
+ ### scripts/vitest-preload.cjs complexity
71
+
72
+ The preload script stubs two unrelated things: a `net use` child_process call (Windows network drive detection in Vitest's environment) and `esbuild.transform`/`transformSync` (a secondary Windows compat issue). The stubs are correct and well-structured.
73
+
74
+ **Recommendation:** add a single-line comment per stub explaining the specific Windows issue being worked around (bug reference or symptom description). The WHY is not obvious — a future contributor would not know whether these stubs are still needed after a Vitest upgrade.
75
+
76
+ ### test/smoke.test.ts include pattern
77
+
78
+ `vitest.config.js` uses `include: ["test/**/*.test.js"]` but the actual test file is `smoke.test.ts`. This works because Vitest transforms TypeScript to JS before matching, but the pattern is misleading.
79
+
80
+ **Recommendation:** change include to `["test/**/*.test.ts"]` to match what actually exists in the repo.
81
+
82
+ ---
83
+
84
+ ## Must Fix Before Close
85
+
86
+ None.
87
+
88
+ ## Carry Forward
89
+
90
+ - Add CLI branch tests when real dispatch is implemented in `E03-cli-foundation`.
91
+ - Decide in `E03-cli-foundation` whether `src/version.ts` should derive from `package.json`.
92
+
93
+ ## Already Fixed
94
+
95
+ - `vitest.config.ts` now documents the dual-config setup.
96
+ - `scripts/vitest-preload.cjs` now explains the Windows `net use` and esbuild workarounds.
97
+ - Vitest include patterns now match `test/**/*.test.ts`.
98
+
99
+ ## Summary
100
+
101
+ No blocking issues remain for `E01-scaffolding`.
@@ -0,0 +1,54 @@
1
+ ---
2
+ type: audit-snapshot
3
+ epic: E01-scaffolding
4
+ created: 2026-04-27
5
+ ---
6
+
7
+ # Audit Snapshot: E01-scaffolding
8
+
9
+ All files are new — this is the first auditable baseline.
10
+
11
+ ## Source file tree
12
+
13
+ ```
14
+ src/
15
+ cli.ts — CLI entrypoint; placeholder help/version output
16
+ version.ts — single export for package version string
17
+ test/
18
+ smoke.test.ts — Vitest smoke test asserting exported version
19
+ scripts/
20
+ vitest-preload.cjs — Windows runner workaround (stubs net use + esbuild)
21
+ ```
22
+
23
+ ## Config / metadata files
24
+
25
+ | Path | Purpose |
26
+ | ------------------- | ------------------------------------------------------------------ |
27
+ | `package.json` | Package name, bin mapping, scripts, devDependencies |
28
+ | `package-lock.json` | Locked dependency graph |
29
+ | `tsconfig.json` | Strict NodeNext TypeScript compiler settings |
30
+ | `tsup.config.ts` | Build entry and output config (ESM, node20) |
31
+ | `vitest.config.ts` | Vitest config (TypeScript source) |
32
+ | `vitest.config.js` | Vitest config (JS copy used by npm test via --configLoader runner) |
33
+ | `eslint.config.js` | Flat ESLint config — rejects `any` in TypeScript |
34
+ | `.prettierrc.json` | Prettier rules (double quotes, trailing commas) |
35
+ | `.prettierignore` | Excludes dist/, coverage/, node_modules/ from formatting |
36
+ | `.gitignore` | Excludes generated artifacts and local env files |
37
+ | `README.md` | Minimal development README |
38
+ | `LICENSE` | MIT license |
39
+
40
+ ## Quality gates (all passed)
41
+
42
+ - `npm run build` ✓
43
+ - `npm run typecheck` ✓
44
+ - `npm run lint` ✓
45
+ - `npm run format:check` ✓
46
+ - `npm test` ✓
47
+
48
+ ## Deviations from epic Design
49
+
50
+ | Item | Status | Note |
51
+ | ---------------------------- | ------ | --------------------------------------------------------------------------- |
52
+ | `vitest.config.js` | extra | Duplicate of `.ts` variant; required for `--configLoader runner` on Windows |
53
+ | `scripts/vitest-preload.cjs` | extra | Windows-specific: stubs `net use` child_process call and esbuild transforms |
54
+ | `.prettierignore` | extra | Not listed in Design but conventional; consistent with `.gitignore` |
@@ -0,0 +1,128 @@
1
+ ---
2
+ type: audit-snapshot
3
+ epic: E02-data-model
4
+ created: 2026-04-27
5
+ manual: true
6
+ ---
7
+
8
+ # Audit Snapshot: E02-data-model
9
+
10
+ Manual snapshot generated because `savepoint audit` is not implemented yet.
11
+
12
+ ## Source file tree
13
+
14
+ ```
15
+ src/
16
+ domain/
17
+ config.ts - config defaults and typed project config model
18
+ epic.ts - epic Design frontmatter model
19
+ ids.ts - release, epic, and task ID parsing/formatting
20
+ release.ts - release PRD frontmatter model
21
+ router.ts - router state model and validation
22
+ status.ts - task status values and transition validation
23
+ task.ts - task frontmatter and document validation
24
+ fs/
25
+ markdown.ts - markdown/frontmatter read boundary with path-aware errors
26
+ project.ts - .savepoint root and scoped path helpers
27
+ readers/
28
+ config.ts - read-only config.yml reader
29
+ epic.ts - read-only epic Design reader
30
+ release.ts - read-only release PRD reader
31
+ router.ts - read-only router Current state reader
32
+ tasks.ts - epic task-set reader with graph validation
33
+ validation/
34
+ dependencies.ts - duplicate ID, missing dependency, and cycle detection
35
+ test/
36
+ domain/ - unit tests for config, epic, IDs, release, router, status, task
37
+ fs/ - unit tests for markdown and project helpers
38
+ readers/ - unit tests for config, epic, release, router, task-set readers
39
+ validation/ - unit tests for dependency graph validation
40
+ ```
41
+
42
+ ## Config / metadata changes
43
+
44
+ | Path | Purpose |
45
+ | ------------------------ | -------------------------------------------------------------- |
46
+ | `package.json` | Adds `js-yaml` runtime dependency and `@types/js-yaml`. |
47
+ | `package-lock.json` | Locks the new YAML parser dependency graph. |
48
+ | `.prettierignore` | Excludes `.claude/` from Prettier traversal. |
49
+ | `.savepoint/router.md` | Manually advances E02 to `audit-pending`. |
50
+ | `AGENTS.md` | Workflow text was tightened during E02 planning/building. |
51
+ | `README.md` | Marketing/readme copy changed outside the E02 runtime layer. |
52
+ | `.savepoint/metrics/*` | Context-benchmark notes changed outside the E02 runtime layer. |
53
+ | `E02-data-model/tasks/*` | Seven planned and completed E02 task files. |
54
+
55
+ ## Changed files
56
+
57
+ Tracked modified files:
58
+
59
+ - `.prettierignore`
60
+ - `.savepoint/metrics/context-bench.md`
61
+ - `.savepoint/router.md`
62
+ - `AGENTS.md`
63
+ - `README.md`
64
+ - `package-lock.json`
65
+ - `package.json`
66
+
67
+ New E02 files:
68
+
69
+ - `.savepoint/releases/v1/epics/E02-data-model/tasks/T001-domain-ids-status.md`
70
+ - `.savepoint/releases/v1/epics/E02-data-model/tasks/T002-markdown-frontmatter-boundary.md`
71
+ - `.savepoint/releases/v1/epics/E02-data-model/tasks/T003-task-documents.md`
72
+ - `.savepoint/releases/v1/epics/E02-data-model/tasks/T004-release-epic-router-config-readers.md`
73
+ - `.savepoint/releases/v1/epics/E02-data-model/tasks/T005-dependency-validation.md`
74
+ - `.savepoint/releases/v1/epics/E02-data-model/tasks/T006-epic-task-set-reader.md`
75
+ - `.savepoint/releases/v1/epics/E02-data-model/tasks/T007-quality-gates.md`
76
+ - `src/domain/config.ts`
77
+ - `src/domain/epic.ts`
78
+ - `src/domain/ids.ts`
79
+ - `src/domain/release.ts`
80
+ - `src/domain/router.ts`
81
+ - `src/domain/status.ts`
82
+ - `src/domain/task.ts`
83
+ - `src/fs/markdown.ts`
84
+ - `src/fs/project.ts`
85
+ - `src/readers/config.ts`
86
+ - `src/readers/epic.ts`
87
+ - `src/readers/release.ts`
88
+ - `src/readers/router.ts`
89
+ - `src/readers/tasks.ts`
90
+ - `src/validation/dependencies.ts`
91
+ - `test/domain/config.test.ts`
92
+ - `test/domain/epic.test.ts`
93
+ - `test/domain/ids.test.ts`
94
+ - `test/domain/release.test.ts`
95
+ - `test/domain/router.test.ts`
96
+ - `test/domain/status.test.ts`
97
+ - `test/domain/task.test.ts`
98
+ - `test/fs/markdown.test.ts`
99
+ - `test/fs/project.test.ts`
100
+ - `test/readers/config.test.ts`
101
+ - `test/readers/epic.test.ts`
102
+ - `test/readers/release.test.ts`
103
+ - `test/readers/router.test.ts`
104
+ - `test/readers/tasks.test.ts`
105
+ - `test/validation/dependencies.test.ts`
106
+
107
+ Local untracked file outside E02 scope:
108
+
109
+ - `.claude/settings.local.json`
110
+
111
+ ## Quality gates
112
+
113
+ - `npm run build` passed.
114
+ - `npm run typecheck` passed.
115
+ - `npm run lint` passed.
116
+ - `npm run format:check` initially failed on E02 task markdown; after Prettier formatting, it passed.
117
+ - `npm test` passed outside the sandbox: 16 files, 176 tests. Inside the sandbox it failed with `spawn EPERM` while Vitest/esbuild tried to start a child process.
118
+
119
+ ## Deviations from epic Design
120
+
121
+ | Item | Status | Note |
122
+ | --------------------- | ------ | ------------------------------------------------------------------------------------------- |
123
+ | Audit snapshot | manual | Generated by the agent because the E07 audit CLI does not exist yet. |
124
+ | Router state | manual | Advanced directly to `audit-pending` for E02 because the CLI transition does not exist yet. |
125
+ | `done` transitions | fixed | `done -> review` is allowed so completed work can be reopened for audit-stale rechecks. |
126
+ | Config accent values | fixed | Config defaults ignore non-string custom accent values before merging. |
127
+ | README/metrics edits | extra | Present in working tree but not part of the E02 data-model runtime layer. |
128
+ | `.claude/` local file | extra | Local untracked settings are ignored by Prettier but not by Git. |