savepoint 1.0.4 → 1.0.6

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 (425) hide show
  1. package/package.json +10 -3
  2. package/savepoint.exe +0 -0
  3. package/.claude/settings.local.json +0 -38
  4. package/.github/workflows/ci.yml +0 -20
  5. package/.golangci.yml +0 -11
  6. package/.prettierignore +0 -4
  7. package/.savepoint/Design.md +0 -207
  8. package/.savepoint/PRD.md +0 -58
  9. package/.savepoint/config.yml +0 -27
  10. package/.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md +0 -39
  11. package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md +0 -42
  12. package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T002-entrypoint.md +0 -23
  13. package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T003-directory-structure.md +0 -24
  14. package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T004-makefile.md +0 -23
  15. package/.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md +0 -61
  16. package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T001-task-struct.md +0 -29
  17. package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T002-frontmatter-parser.md +0 -30
  18. package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T003-router-reader.md +0 -29
  19. package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T004-config-reader.md +0 -29
  20. package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T005-discovery.md +0 -30
  21. package/.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md +0 -38
  22. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T001-model.md +0 -29
  23. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T002-update-loop.md +0 -30
  24. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T003-view.md +0 -34
  25. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T004-styles.md +0 -29
  26. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T005-layout.md +0 -42
  27. package/.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md +0 -44
  28. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T001-column.md +0 -34
  29. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T002-card.md +0 -33
  30. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T003-epic-panel.md +0 -49
  31. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T004-detail-overlay.md +0 -40
  32. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T005-release-dropdown.md +0 -33
  33. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T006-help-overlay.md +0 -34
  34. package/.savepoint/releases/v1/epics/E05-phase-transitions/E05-Detail.md +0 -38
  35. package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T001-phase-stepping.md +0 -29
  36. package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T002-gates.md +0 -31
  37. package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T003-write-task.md +0 -31
  38. package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T004-write-router.md +0 -31
  39. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/E06-Detail.md +0 -62
  40. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T001-color-system.md +0 -39
  41. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md +0 -52
  42. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T003-footer-status-bar.md +0 -52
  43. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md +0 -53
  44. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T005-restore-nav-hints.md +0 -39
  45. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T007-detail-card-fixes.md +0 -36
  46. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T008-checkbox-states.md +0 -40
  47. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T009-router-priority-marker.md +0 -48
  48. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T010-auto-refresh-watcher.md +0 -66
  49. package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/Design.md +0 -39
  50. package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T001-archive-epics.md +0 -20
  51. package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T002-rewrite-prd.md +0 -22
  52. package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T003-create-epic-stubs.md +0 -24
  53. package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T004-update-router.md +0 -22
  54. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/Design.md +0 -118
  55. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/handoff.md +0 -9
  56. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T001-package-baseline.md +0 -45
  57. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T002-typescript-build.md +0 -48
  58. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T003-vitest-smoke.md +0 -43
  59. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T004-lint-format-gates.md +0 -45
  60. package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T005-scaffold-verification.md +0 -40
  61. package/.savepoint/releases/v1/epics/_archived/E02-data-model/Design.md +0 -142
  62. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T001-domain-ids-status.md +0 -27
  63. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T002-markdown-frontmatter-boundary.md +0 -28
  64. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T003-task-documents.md +0 -29
  65. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T004-release-epic-router-config-readers.md +0 -30
  66. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T005-dependency-validation.md +0 -29
  67. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T006-epic-task-set-reader.md +0 -29
  68. package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T007-quality-gates.md +0 -31
  69. package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/Design.md +0 -40
  70. package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T001-phase-types.md +0 -27
  71. package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T002-phase-frontmatter.md +0 -25
  72. package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T003-simplify-config.md +0 -26
  73. package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T004-simplify-router-domain.md +0 -24
  74. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/Design.md +0 -122
  75. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T001-argument-parser-contract.md +0 -28
  76. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T002-help-text-generation.md +0 -28
  77. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T003-terminal-environment-detection.md +0 -27
  78. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T004-command-stub-modules.md +0 -29
  79. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T005-cli-runner-dispatch.md +0 -34
  80. package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T006-entrypoint-quality-gates.md +0 -32
  81. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/Design.md +0 -43
  82. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T001-strip-args.md +0 -26
  83. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T002-strip-help.md +0 -23
  84. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T003-strip-run.md +0 -23
  85. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T004-delete-commands.md +0 -24
  86. package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T005-update-cli-tests.md +0 -22
  87. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/Design.md +0 -48
  88. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T001-board-data-phases.md +0 -26
  89. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T002-phase-rendering.md +0 -28
  90. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T003-detail-pane-phases.md +0 -27
  91. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T004-phase-transitions.md +0 -42
  92. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T005-phase-gates.md +0 -24
  93. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T006-phase-write-back.md +0 -24
  94. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T007-remove-audit-flow.md +0 -27
  95. package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T008-board-tests.md +0 -25
  96. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/Design.md +0 -85
  97. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T001-project-template-assets.md +0 -17
  98. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T002-release-and-prompt-assets.md +0 -20
  99. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T003-template-registry-renderer.md +0 -22
  100. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T004-template-integrity-tests.md +0 -17
  101. package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T005-template-closeout-quality-gates.md +0 -16
  102. package/.savepoint/releases/v1/epics/_archived/E05-init-command/Design.md +0 -88
  103. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T001-init-cli-contract.md +0 -22
  104. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T002-target-validation.md +0 -23
  105. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T003-scaffold-writer.md +0 -24
  106. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T004-magic-prompt-and-clipboard.md +0 -23
  107. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T005-dev-deps-install-option.md +0 -24
  108. package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T006-init-command-integration.md +0 -28
  109. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/Design.md +0 -53
  110. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T001-delete-dead-src.md +0 -23
  111. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T002-delete-dead-tests.md +0 -26
  112. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T003-delete-assets.md +0 -25
  113. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T004-clean-savepoint.md +0 -28
  114. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T005-rewrite-agents-md.md +0 -28
  115. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T006-clean-package-json.md +0 -23
  116. package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T007-verify.md +0 -25
  117. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/Design.md +0 -104
  118. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T001-board-command-data.md +0 -23
  119. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T002-board-view-state.md +0 -24
  120. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T003-transition-gates-and-writes.md +0 -25
  121. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T004-terminal-theme.md +0 -23
  122. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T005-ink-board-ui.md +0 -26
  123. package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T006-board-integration-audit-entry.md +0 -24
  124. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/Design.md +0 -88
  125. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T001-audit-cli-contract.md +0 -23
  126. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T002-quality-gate-runner.md +0 -23
  127. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T003-snapshot-and-prompt.md +0 -23
  128. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T004-audit-orchestration-router.md +0 -27
  129. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T005-proposal-validation-apply.md +0 -25
  130. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T006-audit-review-state.md +0 -24
  131. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T007-audit-review-ui.md +0 -26
  132. package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T008-audit-pipeline-integration.md +0 -24
  133. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/Design.md +0 -103
  134. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T001-acceptance-criteria-model.md +0 -30
  135. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T002-release-task-set-reader.md +0 -33
  136. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T003-board-data-and-plain-output.md +0 -34
  137. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T004-board-selection-state.md +0 -33
  138. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T005-ink-board-layout-cleanup.md +0 -37
  139. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T006-task-detail-popup.md +0 -36
  140. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T007-templates-acceptance-criteria.md +0 -34
  141. package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T008-board-workflow-integration.md +0 -41
  142. package/.savepoint/releases/v1/epics/_archived/E09-doctor-command/Design.md +0 -70
  143. package/.savepoint/releases/v1/epics/_archived/E10-docs-and-packaging/Design.md +0 -68
  144. package/.savepoint/releases/v1/epics/_archived/E11-release-validation/Design.md +0 -68
  145. package/.savepoint/releases/v1/v1-PRD.md +0 -66
  146. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/E01-Detail.md +0 -40
  147. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T001-next-activity-header.md +0 -56
  148. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T002-rename-epic-design-files.md +0 -38
  149. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T003-rename-release-prd.md +0 -28
  150. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T004-update-instruction-files.md +0 -51
  151. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T005-update-cross-references.md +0 -45
  152. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T006-column-and-detail-scrolling.md +0 -68
  153. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T007-column-focus-border-stability.md +0 -57
  154. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/E02-Audit.md +0 -124
  155. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/E02-Detail.md +0 -49
  156. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T001-fix-makefile.md +0 -37
  157. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T002-linux-build-target.md +0 -38
  158. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T003-macos-build-target.md +0 -36
  159. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T004-smoke-tests-and-artifacts.md +0 -59
  160. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Audit.md +0 -195
  161. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Detail.md +0 -45
  162. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T001-border-resize-fix.md +0 -40
  163. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T002-next-activity-below-header.md +0 -64
  164. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T003-checkbox-rendering-fix.md +0 -56
  165. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T005-unify-status-glyphs.md +0 -65
  166. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T006-forced-256-color-profile.md +0 -36
  167. package/.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Audit.md +0 -167
  168. package/.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Detail.md +0 -51
  169. package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T001-sidebar-focusable-navigation.md +0 -65
  170. package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T002-epic-detail-overlay.md +0 -73
  171. package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T003-epic-status-glyphs.md +0 -73
  172. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Audit.md +0 -237
  173. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md +0 -54
  174. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md +0 -45
  175. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md +0 -40
  176. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T003-update-design-md.md +0 -47
  177. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T004-implement-m-hotkey.md +0 -98
  178. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T005-update-help-overlay.md +0 -33
  179. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T006-tests-and-quality-gates.md +0 -62
  180. package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Audit.md +0 -56
  181. package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Detail.md +0 -63
  182. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T005-proposals.md +0 -44
  183. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T007-apply-close.md +0 -35
  184. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T009-integration.md +0 -40
  185. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T010-audit-file-migration.md +0 -45
  186. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T011-model-tab-state.md +0 -26
  187. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T012-epic-audit-render.md +0 -33
  188. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T013-handle-tab-keys.md +0 -34
  189. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T014-tab-indicator.md +0 -33
  190. package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Audit.md +0 -336
  191. package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Detail.md +0 -61
  192. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T001-cli-entrypoint.md +0 -37
  193. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T002-target-validation.md +0 -28
  194. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T003-scaffold-writer.md +0 -46
  195. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T004-atomic-writes.md +0 -27
  196. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T005-magic-prompt.md +0 -25
  197. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T006-clipboard.md +0 -26
  198. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T007-integration-test.md +0 -26
  199. package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Audit.md +0 -333
  200. package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Detail.md +0 -68
  201. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T001-cli-entrypoint.md +0 -26
  202. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T002-non-tty-fallback.md +0 -27
  203. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T003-tui-app-shell.md +0 -28
  204. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T004-board-model.md +0 -29
  205. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T005-detail-pane.md +0 -27
  206. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T006-status-transitions.md +0 -29
  207. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T007-theme-fallbacks.md +0 -29
  208. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T008-integration-test.md +0 -27
  209. package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Audit.md +0 -207
  210. package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Detail.md +0 -65
  211. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T001-cli-entrypoint.md +0 -24
  212. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T002-config-router-validation.md +0 -28
  213. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T003-structure-checks.md +0 -29
  214. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T004-dependency-checks.md +0 -27
  215. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T005-audit-orphan-checks.md +0 -28
  216. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T006-quality-gates-report.md +0 -31
  217. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/E11-Detail.md +0 -36
  218. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T001-debug-logging.md +0 -25
  219. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T002-increase-debounce.md +0 -21
  220. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T003-error-handling.md +0 -22
  221. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T004-test-verify.md +0 -29
  222. package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Audit.md +0 -444
  223. package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Detail.md +0 -45
  224. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T001-default-phase.md +0 -35
  225. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T002-default-status.md +0 -19
  226. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T003-better-errors.md +0 -29
  227. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T004-validate-on-write.md +0 -25
  228. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T005-tests.md +0 -37
  229. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Audit.md +0 -118
  230. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Detail.md +0 -73
  231. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T001-safe-cleanup.md +0 -66
  232. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T002-bug-fixes.md +0 -35
  233. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T003-centralize-duplication.md +0 -60
  234. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T004-infrastructure.md +0 -33
  235. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T005-decompose-update.md +0 -37
  236. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T006-async-io.md +0 -40
  237. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T007-test-coverage.md +0 -37
  238. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Audit.md +0 -267
  239. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Detail.md +0 -54
  240. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T001-group-model.md +0 -39
  241. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T002-data-interfaces.md +0 -42
  242. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T003-discover-orphans.md +0 -33
  243. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T004-epic-panel-headings.md +0 -35
  244. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T005-shell-tokenization.md +0 -27
  245. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T006-unify-enums.md +0 -29
  246. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T007-testutil-package.md +0 -28
  247. package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Audit.md +0 -272
  248. package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Detail.md +0 -60
  249. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T001-benchmarks.md +0 -31
  250. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T002-fuzz-targets.md +0 -34
  251. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T003-debug-flag.md +0 -30
  252. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T004-dist-checksums.md +0 -27
  253. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T005-windows-targets.md +0 -28
  254. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T006-abbreviation-splitting.md +0 -26
  255. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T007-root-test-allowlist.md +0 -33
  256. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T008-ci-and-release-automation.md +0 -46
  257. package/.savepoint/releases/v1.1/epics/_archived/T001-cli-entrypoint.md +0 -25
  258. package/.savepoint/releases/v1.1/epics/_archived/T002-quality-gates.md +0 -27
  259. package/.savepoint/releases/v1.1/epics/_archived/T003-snapshot.md +0 -27
  260. package/.savepoint/releases/v1.1/epics/_archived/T004-ai-reconcile.md +0 -29
  261. package/.savepoint/releases/v1.1/epics/_archived/T006-tui-review.md +0 -31
  262. package/.savepoint/releases/v1.1/epics/_archived/T008-skip-handling.md +0 -34
  263. package/.savepoint/releases/v1.1/v1.1-PRD.md +0 -139
  264. package/.savepoint/router.md +0 -57
  265. package/.savepoint/visual-identity.md +0 -125
  266. package/AGENTS.md +0 -99
  267. package/CLAUDE.md +0 -1
  268. package/GEMINI.md +0 -1
  269. package/Makefile +0 -31
  270. package/agent-skills/ink-tui-design/SKILL.md +0 -309
  271. package/agent-skills/ink-tui-design/references/component-patterns.md +0 -371
  272. package/agent-skills/ink-tui-design/references/hooks-guide.md +0 -436
  273. package/agent-skills/ink-tui-design/references/ink-gotchas.md +0 -330
  274. package/agent-skills/ink-tui-design/references/testing-patterns.md +0 -384
  275. package/agent-skills/savepoint-audit/SKILL.md +0 -87
  276. package/agent-skills/savepoint-build-task/SKILL.md +0 -44
  277. package/agent-skills/savepoint-create-plan/SKILL.md +0 -33
  278. package/agent-skills/savepoint-create-task/SKILL.md +0 -44
  279. package/agent-skills/savepoint-draft-prd/SKILL.md +0 -37
  280. package/agent-skills/savepoint-system-design/SKILL.md +0 -38
  281. package/agent-skills/superpowers/brainstorming/SKILL.md +0 -165
  282. package/agent-skills/superpowers/brainstorming/visual-companion.md +0 -304
  283. package/agent-skills/superpowers/dispatching-parallel-agents/SKILL.md +0 -193
  284. package/agent-skills/superpowers/executing-plans/SKILL.md +0 -77
  285. package/agent-skills/superpowers/finishing-a-development-branch/SKILL.md +0 -213
  286. package/agent-skills/superpowers/receiving-code-review/SKILL.md +0 -226
  287. package/agent-skills/superpowers/requesting-code-review/SKILL.md +0 -115
  288. package/agent-skills/superpowers/requesting-code-review/code-reviewer.md +0 -160
  289. package/agent-skills/superpowers/subagent-driven-development/SKILL.md +0 -292
  290. package/agent-skills/superpowers/subagent-driven-development/code-quality-reviewer-prompt.md +0 -27
  291. package/agent-skills/superpowers/subagent-driven-development/implementer-prompt.md +0 -113
  292. package/agent-skills/superpowers/subagent-driven-development/spec-reviewer-prompt.md +0 -61
  293. package/agent-skills/superpowers/systematic-debugging/SKILL.md +0 -305
  294. package/agent-skills/superpowers/systematic-debugging/condition-based-waiting.md +0 -122
  295. package/agent-skills/superpowers/systematic-debugging/defense-in-depth.md +0 -130
  296. package/agent-skills/superpowers/systematic-debugging/root-cause-tracing.md +0 -183
  297. package/agent-skills/superpowers/test-driven-development/SKILL.md +0 -389
  298. package/agent-skills/superpowers/test-driven-development/testing-anti-patterns.md +0 -317
  299. package/agent-skills/superpowers/verification-before-completion/SKILL.md +0 -147
  300. package/agent-skills/superpowers/writing-plans/SKILL.md +0 -159
  301. package/agent-skills/superpowers/writing-plans/plan-document-reviewer-prompt.md +0 -49
  302. package/agent_skills_test.go +0 -91
  303. package/assets/banner.png +0 -0
  304. package/assets/logo.png +0 -0
  305. package/assets/strawman.png +0 -0
  306. package/cmd/board.go +0 -59
  307. package/cmd/board_test.go +0 -137
  308. package/cmd/doctor.go +0 -53
  309. package/cmd/doctor_test.go +0 -146
  310. package/cmd/init.go +0 -63
  311. package/cmd/init_test.go +0 -104
  312. package/go.mod +0 -36
  313. package/go.sum +0 -75
  314. package/internal/board/board.go +0 -181
  315. package/internal/board/board_test.go +0 -168
  316. package/internal/board/card.go +0 -129
  317. package/internal/board/card_test.go +0 -287
  318. package/internal/board/column.go +0 -156
  319. package/internal/board/column_test.go +0 -210
  320. package/internal/board/debug.go +0 -26
  321. package/internal/board/debug_test.go +0 -108
  322. package/internal/board/detail.go +0 -218
  323. package/internal/board/detail_test.go +0 -388
  324. package/internal/board/epic_panel.go +0 -264
  325. package/internal/board/epic_panel_test.go +0 -869
  326. package/internal/board/help.go +0 -41
  327. package/internal/board/help_test.go +0 -86
  328. package/internal/board/integration_test.go +0 -266
  329. package/internal/board/interfaces.go +0 -65
  330. package/internal/board/interfaces_test.go +0 -114
  331. package/internal/board/io.go +0 -93
  332. package/internal/board/layout.go +0 -68
  333. package/internal/board/layout_test.go +0 -106
  334. package/internal/board/model.go +0 -235
  335. package/internal/board/model_test.go +0 -67
  336. package/internal/board/plain.go +0 -88
  337. package/internal/board/plain_test.go +0 -117
  338. package/internal/board/release.go +0 -34
  339. package/internal/board/release_test.go +0 -177
  340. package/internal/board/render_policy_test.go +0 -77
  341. package/internal/board/status.go +0 -23
  342. package/internal/board/theme.go +0 -24
  343. package/internal/board/theme_test.go +0 -31
  344. package/internal/board/transitions.go +0 -113
  345. package/internal/board/transitions_test.go +0 -164
  346. package/internal/board/tui.go +0 -32
  347. package/internal/board/update.go +0 -575
  348. package/internal/board/update_test.go +0 -602
  349. package/internal/board/util.go +0 -76
  350. package/internal/board/view.go +0 -317
  351. package/internal/board/view_test.go +0 -377
  352. package/internal/board/watch.go +0 -136
  353. package/internal/buildtool/main.go +0 -249
  354. package/internal/buildtool/main_test.go +0 -224
  355. package/internal/data/config.go +0 -101
  356. package/internal/data/config_test.go +0 -122
  357. package/internal/data/discover.go +0 -178
  358. package/internal/data/discover_test.go +0 -130
  359. package/internal/data/errors.go +0 -13
  360. package/internal/data/fuzz_test.go +0 -75
  361. package/internal/data/lifecycle.go +0 -44
  362. package/internal/data/lifecycle_test.go +0 -41
  363. package/internal/data/parser.go +0 -243
  364. package/internal/data/parser_test.go +0 -281
  365. package/internal/data/router.go +0 -52
  366. package/internal/data/router_test.go +0 -35
  367. package/internal/data/task.go +0 -57
  368. package/internal/data/task_test.go +0 -51
  369. package/internal/data/testdata/fuzz/FuzzSplitFrontmatterBody/68eb66b0fe91e7e3 +0 -2
  370. package/internal/data/write.go +0 -221
  371. package/internal/data/write_test.go +0 -623
  372. package/internal/doctor/checks.go +0 -567
  373. package/internal/doctor/checks_test.go +0 -716
  374. package/internal/doctor/gates.go +0 -193
  375. package/internal/doctor/gates_test.go +0 -166
  376. package/internal/doctor/interfaces.go +0 -64
  377. package/internal/doctor/interfaces_test.go +0 -104
  378. package/internal/doctor/repairs.go +0 -80
  379. package/internal/doctor/repairs_test.go +0 -81
  380. package/internal/doctor/report.go +0 -157
  381. package/internal/doctor/report_test.go +0 -89
  382. package/internal/init/clipboard.go +0 -146
  383. package/internal/init/clipboard_test.go +0 -74
  384. package/internal/init/install.go +0 -16
  385. package/internal/init/integration_test.go +0 -197
  386. package/internal/init/prompt.go +0 -14
  387. package/internal/init/prompt_test.go +0 -77
  388. package/internal/init/scaffold.go +0 -59
  389. package/internal/init/scaffold_test.go +0 -179
  390. package/internal/init/template_freshness_test.go +0 -56
  391. package/internal/init/validate.go +0 -85
  392. package/internal/init/validate_test.go +0 -141
  393. package/internal/init/write.go +0 -73
  394. package/internal/init/write_test.go +0 -91
  395. package/internal/styles/palette.go +0 -49
  396. package/internal/styles/styles.go +0 -139
  397. package/internal/styles/styles_test.go +0 -133
  398. package/internal/testutil/fixture.go +0 -113
  399. package/internal/testutil/fs.go +0 -26
  400. package/main.go +0 -136
  401. package/project-audit/audit_report_glm_5.1.md +0 -411
  402. package/project-audit/audit_report_opus_4.6.md +0 -406
  403. package/project-audit/consolidated-audit-report.md +0 -456
  404. package/scripts/vitest-preload.cjs +0 -95
  405. package/templates/project/.savepoint/Design.md +0 -47
  406. package/templates/project/.savepoint/PRD.md +0 -34
  407. package/templates/project/.savepoint/config.yml +0 -27
  408. package/templates/project/.savepoint/router.md +0 -153
  409. package/templates/project/.savepoint/visual-identity.md +0 -122
  410. package/templates/project/AGENTS.md +0 -88
  411. package/templates/project/agent-skills/savepoint-audit/SKILL.md +0 -87
  412. package/templates/project/agent-skills/savepoint-build-task/SKILL.md +0 -44
  413. package/templates/project/agent-skills/savepoint-create-plan/SKILL.md +0 -33
  414. package/templates/project/agent-skills/savepoint-create-task/SKILL.md +0 -44
  415. package/templates/project/agent-skills/savepoint-draft-prd/SKILL.md +0 -37
  416. package/templates/project/agent-skills/savepoint-system-design/SKILL.md +0 -38
  417. package/templates/prompts/audit-reconciliation.prompt.md +0 -72
  418. package/templates/prompts/design.prompt.md +0 -45
  419. package/templates/prompts/epic-design.prompt.md +0 -43
  420. package/templates/prompts/magic-prompt.prompt.md +0 -7
  421. package/templates/prompts/prd.prompt.md +0 -42
  422. package/templates/prompts/task-breakdown.prompt.md +0 -54
  423. package/templates/prompts/task-building.prompt.md +0 -38
  424. package/templates/prompts/task-planning.prompt.md +0 -53
  425. package/templates/release/v1/PRD.md +0 -37
@@ -1,91 +0,0 @@
1
- package init
2
-
3
- import (
4
- "os"
5
- "path/filepath"
6
- "strings"
7
- "testing"
8
-
9
- "github.com/opencode/savepoint/internal/testutil"
10
- )
11
-
12
- func TestAtomicWrite_createsFile(t *testing.T) {
13
- dir := t.TempDir()
14
- target := filepath.Join(dir, "output.txt")
15
-
16
- if err := AtomicWrite(target, []byte("hello")); err != nil {
17
- t.Fatalf("AtomicWrite() error = %v", err)
18
- }
19
-
20
- data, err := os.ReadFile(target)
21
- if err != nil {
22
- t.Fatal(err)
23
- }
24
- if string(data) != "hello" {
25
- t.Fatalf("got %q, want %q", string(data), "hello")
26
- }
27
- }
28
-
29
- func TestAtomicWrite_replacesExistingFile(t *testing.T) {
30
- dir := t.TempDir()
31
- target := filepath.Join(dir, "output.txt")
32
- testutil.WriteFile(t, target, "old")
33
-
34
- if err := AtomicWrite(target, []byte("new")); err != nil {
35
- t.Fatalf("AtomicWrite() error = %v", err)
36
- }
37
-
38
- data, err := os.ReadFile(target)
39
- if err != nil {
40
- t.Fatal(err)
41
- }
42
- if string(data) != "new" {
43
- t.Fatalf("got %q, want %q", string(data), "new")
44
- }
45
-
46
- assertNoWriteArtifacts(t, dir)
47
- }
48
-
49
- func TestAtomicWrite_noTempFileLeftBehind(t *testing.T) {
50
- dir := t.TempDir()
51
- target := filepath.Join(dir, "output.txt")
52
-
53
- if err := AtomicWrite(target, []byte("data")); err != nil {
54
- t.Fatalf("AtomicWrite() error = %v", err)
55
- }
56
-
57
- assertNoWriteArtifacts(t, dir)
58
- }
59
-
60
- func TestAtomicWrite_handlesNestedDirectories(t *testing.T) {
61
- dir := t.TempDir()
62
- target := filepath.Join(dir, "deep", "nested", "output.txt")
63
-
64
- // Parent directories must exist before calling AtomicWrite
65
- testutil.MkdirAll(t, filepath.Dir(target))
66
-
67
- if err := AtomicWrite(target, []byte("nested")); err != nil {
68
- t.Fatalf("AtomicWrite() error = %v", err)
69
- }
70
-
71
- if _, err := os.Stat(target); err != nil {
72
- t.Errorf("target not created: %v", err)
73
- }
74
- }
75
-
76
- func assertNoWriteArtifacts(t *testing.T, dir string) {
77
- t.Helper()
78
-
79
- entries, err := os.ReadDir(dir)
80
- if err != nil {
81
- t.Fatal(err)
82
- }
83
- for _, e := range entries {
84
- if strings.HasPrefix(e.Name(), ".tmp-") && strings.HasSuffix(e.Name(), ".write") {
85
- t.Errorf("temp file %q left behind after successful write", e.Name())
86
- }
87
- if strings.HasSuffix(e.Name(), ".savepoint-bak") {
88
- t.Errorf("backup file %q left behind after successful write", e.Name())
89
- }
90
- }
91
- }
@@ -1,49 +0,0 @@
1
- package styles
2
-
3
- // Truecolor hex constants (Atari-Noir palette).
4
- // Background, Surface, and Surface2 intentionally share one black value so the
5
- // terminal stays visually flat; hierarchy comes from spacing, dividers, and accents.
6
- const (
7
- Background = "#000000"
8
- Surface = "#000000"
9
- Surface2 = "#000000"
10
- Border = "#1A1A1A"
11
- BorderSubtle = "#222222"
12
- PrimaryText = "#F0E6DA"
13
- AtariOrange = "#FC6323"
14
- NPPGreen = "#A4C639"
15
- VibePurple = "#B1A1DF"
16
- )
17
-
18
- // 256-color (ANSI256) fallbacks — nearest terminal approximations
19
- const (
20
- Background256 = "16"
21
- Surface256 = "16"
22
- Surface2256 = "16"
23
- Border256 = "234"
24
- BorderSubtle256 = "235"
25
- PrimaryText256 = "230"
26
- AtariOrange256 = "208"
27
- NPPGreen256 = "148"
28
- VibePurple256 = "147"
29
- )
30
-
31
- // 16-color (basic ANSI) fallbacks
32
- const (
33
- Background16 = "0" // black
34
- Surface16 = "0" // black
35
- Surface216 = "0" // black
36
- Border16 = "0" // black
37
- BorderSubtle16 = "8" // dark gray
38
- PrimaryText16 = "15" // bright white
39
- AtariOrange16 = "9" // bright red (closest to orange)
40
- NPPGreen16 = "2" // green
41
- VibePurple16 = "5" // magenta
42
- Dim16 = "8" // dark gray
43
- )
44
-
45
- // Dim: muted foreground for metadata
46
- const (
47
- Dim = "#777777"
48
- Dim256 = "243"
49
- )
@@ -1,139 +0,0 @@
1
- package styles
2
-
3
- import "github.com/charmbracelet/lipgloss"
4
-
5
- func color(hex, ansi256, ansi string) lipgloss.CompleteColor {
6
- return lipgloss.CompleteColor{TrueColor: hex, ANSI256: ansi256, ANSI: ansi}
7
- }
8
-
9
- var (
10
- clrOrange = color(AtariOrange, AtariOrange256, AtariOrange16)
11
- clrText = color(PrimaryText, PrimaryText256, PrimaryText16)
12
- clrBorder = color(BorderSubtle, BorderSubtle256, BorderSubtle16)
13
- clrSurface = color(Surface2, Surface2256, Surface216) // intentionally black
14
- clrSurfaceDark = color(Surface, Surface256, Surface16) // intentionally black
15
- clrGreen = color(NPPGreen, NPPGreen256, NPPGreen16)
16
- clrPurple = color(VibePurple, VibePurple256, VibePurple16)
17
- clrDim = color(Dim, Dim256, Dim16)
18
- )
19
-
20
- var boxBorder = lipgloss.NormalBorder()
21
-
22
- var (
23
- HeaderIcon = lipgloss.NewStyle().
24
- Foreground(clrOrange).
25
- Bold(true)
26
-
27
- HeaderText = lipgloss.NewStyle().
28
- Foreground(clrText)
29
-
30
- Divider = lipgloss.NewStyle().
31
- Foreground(clrBorder)
32
-
33
- HeaderFrame = lipgloss.NewStyle().
34
- Padding(1, 1)
35
-
36
- BoardFrame = lipgloss.NewStyle()
37
-
38
- Column = lipgloss.NewStyle().
39
- Padding(0, 1)
40
-
41
- ColumnUnfocused = lipgloss.NewStyle().
42
- BorderStyle(boxBorder).
43
- BorderForeground(clrBorder).
44
- Padding(0, 1)
45
-
46
- ColumnFocused = lipgloss.NewStyle().
47
- BorderStyle(boxBorder).
48
- BorderForeground(clrOrange).
49
- Padding(0, 1)
50
-
51
- ColumnTitle = lipgloss.NewStyle().
52
- Foreground(clrText).
53
- Bold(true)
54
-
55
- ColumnTitleFocused = lipgloss.NewStyle().
56
- Foreground(clrOrange).
57
- Bold(true)
58
-
59
- TaskItem = lipgloss.NewStyle().
60
- Foreground(clrText)
61
-
62
- TaskItemFocused = lipgloss.NewStyle().
63
- Foreground(clrOrange)
64
-
65
- StatusBar = lipgloss.NewStyle().
66
- Foreground(clrText)
67
-
68
- EpicPanel = lipgloss.NewStyle().
69
- BorderStyle(boxBorder).
70
- BorderForeground(clrBorder).
71
- Padding(0, 1)
72
-
73
- EpicItemFocused = lipgloss.NewStyle().
74
- Foreground(clrPurple)
75
-
76
- EpicTitleFocused = lipgloss.NewStyle().
77
- Foreground(clrPurple).
78
- Bold(true)
79
-
80
- EpicPanelFocused = lipgloss.NewStyle().
81
- BorderStyle(boxBorder).
82
- BorderForeground(clrPurple).
83
- Padding(0, 1)
84
-
85
- Card = lipgloss.NewStyle().
86
- Padding(0, 1)
87
-
88
- CardFocused = lipgloss.NewStyle().
89
- BorderStyle(boxBorder).
90
- BorderForeground(clrOrange).
91
- Padding(0, 1)
92
-
93
- CardMeta = lipgloss.NewStyle().Foreground(clrDim)
94
- ScrollIndicator = lipgloss.NewStyle().
95
- Foreground(clrDim).
96
- Faint(true)
97
-
98
- GlyphBuild = lipgloss.NewStyle().Foreground(clrOrange)
99
- GlyphTest = lipgloss.NewStyle().Foreground(clrGreen)
100
- GlyphAudit = lipgloss.NewStyle().Foreground(clrPurple)
101
-
102
- DetailOverlay = lipgloss.NewStyle().
103
- BorderStyle(boxBorder).
104
- BorderForeground(clrOrange).
105
- Padding(0, 1)
106
-
107
- EpicDetailOverlay = lipgloss.NewStyle().
108
- BorderStyle(boxBorder).
109
- BorderForeground(clrPurple).
110
- Padding(0, 1)
111
-
112
- // Footer phase styles
113
- FooterPhasePlan = lipgloss.NewStyle().
114
- Foreground(clrPurple).
115
- Bold(true)
116
-
117
- FooterPhaseBuild = lipgloss.NewStyle().
118
- Foreground(clrOrange).
119
- Bold(true)
120
-
121
- FooterPhaseAudit = lipgloss.NewStyle().
122
- Foreground(clrGreen).
123
- Bold(true)
124
-
125
- FooterDivider = lipgloss.NewStyle().
126
- Foreground(clrBorder)
127
-
128
- FooterHints = lipgloss.NewStyle().
129
- Foreground(clrDim)
130
-
131
- HeaderRight = lipgloss.NewStyle().
132
- Foreground(clrDim)
133
-
134
- RootLine = lipgloss.NewStyle()
135
-
136
- // Tag styles for semantic encoding
137
- TagDone = lipgloss.NewStyle().Foreground(clrGreen)
138
- TagAI = lipgloss.NewStyle().Foreground(clrPurple)
139
- )
@@ -1,133 +0,0 @@
1
- package styles
2
-
3
- import (
4
- "testing"
5
-
6
- "github.com/charmbracelet/lipgloss"
7
- )
8
-
9
- func TestPaletteConstants_present(t *testing.T) {
10
- // Truecolor tier
11
- if Background == "" {
12
- t.Error("Background constant is empty")
13
- }
14
- if Surface == "" {
15
- t.Error("Surface constant is empty")
16
- }
17
- if Surface2 == "" {
18
- t.Error("Surface2 constant is empty")
19
- }
20
- if Border == "" {
21
- t.Error("Border constant is empty")
22
- }
23
- if BorderSubtle == "" {
24
- t.Error("BorderSubtle constant is empty")
25
- }
26
- if PrimaryText == "" {
27
- t.Error("PrimaryText constant is empty")
28
- }
29
- if AtariOrange == "" {
30
- t.Error("AtariOrange constant is empty")
31
- }
32
- if NPPGreen == "" {
33
- t.Error("NPPGreen constant is empty")
34
- }
35
- if VibePurple == "" {
36
- t.Error("VibePurple constant is empty")
37
- }
38
- if Dim == "" {
39
- t.Error("Dim constant is empty")
40
- }
41
- }
42
-
43
- func TestPaletteConstants_256tier(t *testing.T) {
44
- if Background256 == "" {
45
- t.Error("Background256 constant is empty")
46
- }
47
- if Surface256 == "" {
48
- t.Error("Surface256 constant is empty")
49
- }
50
- if Surface2256 == "" {
51
- t.Error("Surface2256 constant is empty")
52
- }
53
- if Border256 == "" {
54
- t.Error("Border256 constant is empty")
55
- }
56
- if BorderSubtle256 == "" {
57
- t.Error("BorderSubtle256 constant is empty")
58
- }
59
- if PrimaryText256 == "" {
60
- t.Error("PrimaryText256 constant is empty")
61
- }
62
- if AtariOrange256 == "" {
63
- t.Error("AtariOrange256 constant is empty")
64
- }
65
- if NPPGreen256 == "" {
66
- t.Error("NPPGreen256 constant is empty")
67
- }
68
- if VibePurple256 == "" {
69
- t.Error("VibePurple256 constant is empty")
70
- }
71
- if Dim256 == "" {
72
- t.Error("Dim256 constant is empty")
73
- }
74
- }
75
-
76
- func TestPaletteConstants_16tier(t *testing.T) {
77
- if Background16 == "" {
78
- t.Error("Background16 constant is empty")
79
- }
80
- if Surface16 == "" {
81
- t.Error("Surface16 constant is empty")
82
- }
83
- if Surface216 == "" {
84
- t.Error("Surface216 constant is empty")
85
- }
86
- if Border16 == "" {
87
- t.Error("Border16 constant is empty")
88
- }
89
- if BorderSubtle16 == "" {
90
- t.Error("BorderSubtle16 constant is empty")
91
- }
92
- if PrimaryText16 == "" {
93
- t.Error("PrimaryText16 constant is empty")
94
- }
95
- if AtariOrange16 == "" {
96
- t.Error("AtariOrange16 constant is empty")
97
- }
98
- if NPPGreen16 == "" {
99
- t.Error("NPPGreen16 constant is empty")
100
- }
101
- if VibePurple16 == "" {
102
- t.Error("VibePurple16 constant is empty")
103
- }
104
- }
105
-
106
- func TestColor(t *testing.T) {
107
- c := color("#FF0000", "196", "9")
108
- expected := lipgloss.CompleteColor{TrueColor: "#FF0000", ANSI256: "196", ANSI: "9"}
109
- if c != expected {
110
- t.Errorf("color() = %+v, want %+v", c, expected)
111
- }
112
- }
113
-
114
- func TestColor_usesPaletteConstants(t *testing.T) {
115
- c := color(AtariOrange, AtariOrange256, AtariOrange16)
116
- if c.TrueColor != AtariOrange {
117
- t.Errorf("color TrueColor = %q, want %q", c.TrueColor, AtariOrange)
118
- }
119
- if c.ANSI256 != AtariOrange256 {
120
- t.Errorf("color ANSI256 = %q, want %q", c.ANSI256, AtariOrange256)
121
- }
122
- if c.ANSI != AtariOrange16 {
123
- t.Errorf("color ANSI = %q, want %q", c.ANSI, AtariOrange16)
124
- }
125
- }
126
-
127
- func TestColor_returnsCompleteColor(t *testing.T) {
128
- var cc lipgloss.CompleteColor
129
- cc = color(Background, Background256, Background16)
130
- if cc.TrueColor != Background {
131
- t.Errorf("expected TrueColor %q, got %q", Background, cc.TrueColor)
132
- }
133
- }
@@ -1,113 +0,0 @@
1
- package testutil
2
-
3
- import (
4
- "fmt"
5
- "path/filepath"
6
- "strings"
7
- "testing"
8
- )
9
-
10
- // WriteRouter writes a router.md at root with the given fields.
11
- // If nextAction is empty, it defaults to "".
12
- func WriteRouter(t testing.TB, root, state, release, epic, task, nextAction string) {
13
- t.Helper()
14
- if nextAction == "" {
15
- nextAction = `""`
16
- } else {
17
- nextAction = `"` + nextAction + `"`
18
- }
19
- if task == "" {
20
- task = `""`
21
- } else {
22
- task = `"` + task + `"`
23
- }
24
- content := "# Agent State Machine\n\n## Current state\n\n```yaml\nstate: " + state + "\nrelease: " + release + "\nepic: " + epic + "\ntask: " + task + "\nnext_action: " + nextAction + "\n```\n"
25
- WriteFile(t, filepath.Join(root, "router.md"), content)
26
- }
27
-
28
- // WriteReleasePRD writes a minimal release PRD file.
29
- func WriteReleasePRD(t testing.TB, releasePath string) {
30
- t.Helper()
31
- releaseID := filepath.Base(releasePath)
32
- WriteFile(t, filepath.Join(releasePath, releaseID+"-PRD.md"), "---\ntype: project-prd\nstatus: active\n---\n\n# Release\n")
33
- }
34
-
35
- // WriteEpicDetail writes a minimal epic detail file.
36
- func WriteEpicDetail(t testing.TB, epicPath, prefix string) {
37
- t.Helper()
38
- WriteFile(t, filepath.Join(epicPath, prefix+"-Detail.md"), "---\ntype: epic-design\nstatus: planned\n---\n\n# Epic\n")
39
- }
40
-
41
- // TaskFixture describes a task file to create.
42
- type TaskFixture struct {
43
- Slug string // e.g. "T001-task" — becomes filename
44
- Release string // optional; omitted if empty
45
- Status string
46
- Phase string // optional; omitted if empty
47
- Objective string
48
- DependsOn []string // optional; defaults to empty list
49
- Body string // optional; defaults to minimal body
50
- Extra map[string]string // optional; extra frontmatter fields
51
- }
52
-
53
- // WriteTask writes a task file in the savepoint directory structure.
54
- func WriteTask(t testing.TB, root, release, epic string, task TaskFixture) {
55
- t.Helper()
56
- path := filepath.Join(root, "releases", release, "epics", epic, "tasks", task.Slug+".md")
57
- id := epic + "/" + task.Slug
58
-
59
- var b strings.Builder
60
- b.WriteString("---\n")
61
- b.WriteString("id: " + id + "\n")
62
- if task.Release != "" {
63
- b.WriteString("release: " + task.Release + "\n")
64
- }
65
- b.WriteString("status: " + task.Status + "\n")
66
- if task.Phase != "" {
67
- b.WriteString("phase: " + task.Phase + "\n")
68
- }
69
- b.WriteString("objective: \"" + task.Objective + "\"\n")
70
-
71
- deps := "[]"
72
- if len(task.DependsOn) > 0 {
73
- quoted := make([]string, len(task.DependsOn))
74
- for i, d := range task.DependsOn {
75
- quoted[i] = fmt.Sprintf("%q", d)
76
- }
77
- deps = "[" + strings.Join(quoted, ", ") + "]"
78
- }
79
- b.WriteString("depends_on: " + deps + "\n")
80
- for k, v := range task.Extra {
81
- b.WriteString(k + ": " + v + "\n")
82
- }
83
- b.WriteString("---\n\n")
84
-
85
- if task.Body != "" {
86
- b.WriteString(task.Body)
87
- } else {
88
- b.WriteString("# " + task.Slug + "\n\n## Acceptance Criteria\n\n- it works\n")
89
- }
90
-
91
- WriteFile(t, path, b.String())
92
- }
93
-
94
- // SetupMinimalProject creates a minimal valid savepoint project structure.
95
- // It creates config.yml, router.md, release PRD, epic detail, and the directory tree.
96
- func SetupMinimalProject(t testing.TB, root, release, epic string) {
97
- t.Helper()
98
- releasePath := filepath.Join(root, "releases", release)
99
- //nolint:gocritic // assignment to same epicPath variable is fine
100
- epicPath := filepath.Join(releasePath, "epics", epic)
101
- tasksPath := filepath.Join(epicPath, "tasks")
102
- MkdirAll(t, tasksPath)
103
-
104
- prefix := epic
105
- if idx := strings.IndexByte(epic, '-'); idx != -1 {
106
- prefix = epic[:idx]
107
- }
108
-
109
- WriteFile(t, filepath.Join(root, "config.yml"), "quality_gates:\n lint: null\n typecheck: null\n test: null\ntheme:\n bg: \"#000\"\n")
110
- WriteRouter(t, root, "task-building", release, epic, "", "")
111
- WriteReleasePRD(t, releasePath)
112
- WriteEpicDetail(t, epicPath, prefix)
113
- }
@@ -1,26 +0,0 @@
1
- package testutil
2
-
3
- import (
4
- "os"
5
- "path/filepath"
6
- "testing"
7
- )
8
-
9
- // WriteFile writes content to path, creating parent directories if needed.
10
- func WriteFile(t testing.TB, path, content string) {
11
- t.Helper()
12
- if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
13
- t.Fatal(err)
14
- }
15
- if err := os.WriteFile(path, []byte(content), 0644); err != nil {
16
- t.Fatal(err)
17
- }
18
- }
19
-
20
- // MkdirAll creates directories with mode 0755, fatal on error.
21
- func MkdirAll(t testing.TB, path string) {
22
- t.Helper()
23
- if err := os.MkdirAll(path, 0755); err != nil {
24
- t.Fatal(err)
25
- }
26
- }
package/main.go DELETED
@@ -1,136 +0,0 @@
1
- package main
2
-
3
- import (
4
- "context"
5
- "embed"
6
- "fmt"
7
- "io/fs"
8
- "os"
9
-
10
- "github.com/opencode/savepoint/cmd"
11
- "github.com/opencode/savepoint/internal/board"
12
- "github.com/opencode/savepoint/internal/data"
13
- "github.com/opencode/savepoint/internal/doctor"
14
- savepointinit "github.com/opencode/savepoint/internal/init"
15
- )
16
-
17
- //go:embed templates/project
18
- //go:embed templates/project/.savepoint
19
- //go:embed templates/prompts
20
- var projectTemplates embed.FS
21
-
22
- var version = "dev"
23
-
24
- func main() {
25
- args, debug := stripDebugFlag(os.Args[1:])
26
- if debug || os.Getenv("SAVEPOINT_DEBUG") != "" {
27
- board.SetDebug(true)
28
- }
29
-
30
- if len(args) > 0 {
31
- switch args[0] {
32
- case "--version":
33
- fmt.Println(version)
34
- os.Exit(0)
35
- case "init":
36
- if err := cmd.RunInit(context.Background(), args[1:], os.Stdout, initRunner); err != nil {
37
- fmt.Fprintln(os.Stderr, err)
38
- os.Exit(1)
39
- }
40
- os.Exit(0)
41
- case "board":
42
- if err := cmd.RunBoard(context.Background(), args[1:], os.Stdout, func(opts cmd.BoardOptions) error {
43
- return board.RunWithFilters(opts.Release, opts.Epic)
44
- }); err != nil {
45
- fmt.Fprintln(os.Stderr, err)
46
- os.Exit(1)
47
- }
48
- os.Exit(0)
49
- case "doctor":
50
- code, err := cmd.RunDoctor(context.Background(), args[1:], os.Stdout, func(opts cmd.DoctorOptions) (int, error) {
51
- return runDoctorChecks(opts)
52
- })
53
- if err != nil {
54
- fmt.Fprintln(os.Stderr, err)
55
- }
56
- os.Exit(code)
57
- }
58
- }
59
- if err := board.Run(); err != nil {
60
- panic(err)
61
- }
62
- }
63
-
64
- // stripDebugFlag removes --debug from args and reports whether it was present.
65
- func stripDebugFlag(args []string) ([]string, bool) {
66
- out := make([]string, 0, len(args))
67
- found := false
68
- for _, a := range args {
69
- if a == "--debug" {
70
- found = true
71
- } else {
72
- out = append(out, a)
73
- }
74
- }
75
- return out, found
76
- }
77
-
78
- func runDoctorChecks(opts cmd.DoctorOptions) (int, error) {
79
- discover := data.NewDiscover()
80
- root, err := discover.FindSavepointRoot(".")
81
- if err != nil {
82
- return 2, fmt.Errorf("savepoint root not found: %w", err)
83
- }
84
-
85
- report := doctor.RunAllChecks(root, opts.Epic)
86
- fmt.Fprint(os.Stdout, report.Format())
87
-
88
- if report.HasProblems() {
89
- return 1, nil
90
- }
91
- return 0, nil
92
- }
93
-
94
- func initRunner(ctx context.Context, opts cmd.InitOptions) error {
95
- if err := savepointinit.ValidateTarget(opts.Dir, opts.Force); err != nil {
96
- return err
97
- }
98
-
99
- sub, err := fs.Sub(projectTemplates, "templates/project")
100
- if err != nil {
101
- return fmt.Errorf("cannot load templates: %w", err)
102
- }
103
-
104
- projectName := savepointinit.ProjectNameFromDir(opts.Dir)
105
- if err := savepointinit.Scaffold(sub, opts.Dir, projectName, opts.Force); err != nil {
106
- return err
107
- }
108
-
109
- promptSub, err := fs.Sub(projectTemplates, "templates/prompts")
110
- if err != nil {
111
- return fmt.Errorf("cannot load prompt templates: %w", err)
112
- }
113
-
114
- prompt, err := savepointinit.RenderMagicPrompt(promptSub, projectName)
115
- if err != nil {
116
- return fmt.Errorf("render magic prompt: %w", err)
117
- }
118
-
119
- fmt.Println(prompt)
120
-
121
- result := savepointinit.CopyToClipboard(prompt)
122
- switch result.Status {
123
- case savepointinit.ClipboardCopied:
124
- fmt.Fprintf(os.Stderr, "prompt copied to clipboard via %s\n", result.Tool)
125
- case savepointinit.ClipboardFailed:
126
- fmt.Fprintf(os.Stderr, "warning: clipboard copy failed: %s\n", result.Message)
127
- }
128
-
129
- if opts.Install {
130
- if err := savepointinit.InstallDependencies(opts.Dir); err != nil {
131
- return err
132
- }
133
- }
134
-
135
- return nil
136
- }