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,406 +0,0 @@
1
- # Codebase Audit Report — Savepoint
2
-
3
- ## 1. Executive Summary
4
-
5
- **Savepoint** is a small, well-structured Go CLI + TUI tool (~133 KB of production code across 42 source files) that implements a file-based project state machine with a kanban-style terminal board. It uses the Charmbracelet stack (Bubble Tea, Lip Gloss) for TUI rendering and YAML frontmatter-based markdown files as its data layer.
6
-
7
- ### What is working well
8
-
9
- - **File-per-responsibility is followed diligently.** Nearly every `.go` file does one job. The `board/` package is split into `model.go`, `view.go`, `update.go`, `card.go`, `column.go`, etc. This maps to the project's own code-style rules and makes individual files easy to reason about.
10
- - **Test coverage is strong.** 38 test files totalling ~213 KB — roughly 1.6× the production code. All packages except `buildtool` and `styles` have tests, and integration tests exist for `board` and `init`.
11
- - **Clean dependency tree.** Only 2 direct dependencies (`bubbletea`, `fsnotify`) plus the Charmbracelet ecosystem for rendering. No framework bloat.
12
- - **All tests pass.** `go test ./...` reports zero failures.
13
- - **Data model is honest.** The `data` package cleanly separates parsing, lifecycle validation, writing, and discovery. The frontmatter-based approach is simple and appropriate for the project's scale.
14
- - **The doctor/diagnostics subsystem is thorough.** Checks config, router, structure, dependencies, orphans, audit state, and quality gates — with actionable repair suggestions.
15
-
16
- ### Biggest risks
17
-
18
- 1. **`update.go` is a 522-line monolith** with the `Update()` method containing a deeply nested key-dispatch switch. It is the hardest file to extend or test in isolation.
19
- 2. **Duplicated YAML-frontmatter read/write/parse logic** appears in `write.go`, `parser.go`, `board.go`, and `checks.go` — each creating `NewParser()` independently and re-implementing body extraction.
20
- 3. **No interfaces used for I/O boundaries.** The `Discover`, `Parser`, `ConfigReader`, `RouterReader` types are all concrete structs with no interfaces, making them impossible to mock without test fixtures on disk.
21
- 4. **Committed binaries** (`savepoint`, `savepoint.exe`, `dist/`) inflate the repository and cause spurious diffs.
22
-
23
- ### Extensibility
24
-
25
- The project is easy to extend for new checks, overlays, and commands, but harder to extend for new data sources or rendering backends because I/O is baked into concrete functions.
26
-
27
- ### Architecture fit
28
-
29
- The architecture (flat `internal/` packages, Elm-like TUI model, embedded templates) is well-suited for a small-to-medium CLI tool. No over-engineering is evident.
30
-
31
- ---
32
-
33
- ## 2. Severity-Ranked Recommendations
34
-
35
- ### Critical
36
-
37
- No critical issues were found. The application builds, tests pass, and the data model is consistent.
38
-
39
- ---
40
-
41
- ### High
42
-
43
- #### H1 — Committed binaries in the repository
44
-
45
- - **Finding:** `savepoint` (5.5 MB), `savepoint.exe` (6.0 MB), and `ink-cli-ui-design.zip` (15 KB) are tracked in Git.
46
- - **Why it matters:** Bloats clone size, causes merge noise, and risks accidentally shipping stale binaries.
47
- - **Evidence:** [.gitignore](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/.gitignore) does not exclude the root binaries. `dist/` is also checked in.
48
- - **Recommended fix:** Add `savepoint`, `savepoint.exe`, `dist/`, and `*.zip` to `.gitignore`. Run `git rm --cached savepoint savepoint.exe dist/ ink-cli-ui-design.zip`. Build in CI only.
49
- - **Estimated effort:** Small
50
-
51
- #### H2 — `update.go` complexity: God-method Update()
52
-
53
- - **Finding:** [update.go](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/update.go) is 522 lines. The `Update()` method alone spans lines 19–192 with 4 levels of nesting inside `case tea.KeyMsg`.
54
- - **Why it matters:** Adding a new keybinding or overlay requires editing a deeply nested switch. Bug surface area grows with each addition.
55
- - **Evidence:** The space-bar handler (lines 132–158) and backspace handler (lines 159–181) have nearly identical structure — find-task-by-ID, mutate, write, refresh.
56
- - **Recommended fix:** Extract key handlers into named methods: `handleAdvanceTask()`, `handleRetreatTask()`, `handleSetPriority()`. Extract `updateBoardKeys()` and `updateOverlayKeys()` from the top-level switch.
57
- - **Estimated effort:** Medium
58
-
59
- #### H3 — Duplicated frontmatter body-extraction logic
60
-
61
- - **Finding:** The pattern "extract frontmatter → unmarshal YAML → compute body start offset → reconstruct file" appears in:
62
- - [write.go:updateFrontmatterField](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/data/write.go#L40-L83) (lines 40–83)
63
- - [write.go:WriteTaskStatus](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/data/write.go#L85-L150) (lines 85–150)
64
- - The magic `delimLen := 4; bodyStart := delimLen + len(raw) + delimLen` appears in both
65
- - **Why it matters:** A change to frontmatter format (e.g. supporting `---` on the same line as metadata) must be patched in multiple places. The body-offset calculation is fragile.
66
- - **Evidence:** Lines 74–79 and 140–145 of `write.go` are identical.
67
- - **Recommended fix:** Extract a `SplitFrontmatterBody(content string) (yaml string, body string, err error)` function and use it in all write paths.
68
- - **Estimated effort:** Small
69
-
70
- #### H4 — No interfaces for data-access types
71
-
72
- - **Finding:** `Discover`, `Parser`, `ConfigReader`, `RouterReader` are all concrete structs. Every consumer calls `data.NewDiscover()`, `data.NewParser()`, etc. directly.
73
- - **Why it matters:** Test helpers in `board` and `doctor` must create real filesystem fixtures to test business logic. This is expensive and brittle.
74
- - **Evidence:** [board.go](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/board.go) lines 37, 85, 130 all call `data.NewDiscover()` with no injection point. [checks.go](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/doctor/checks.go) does the same (lines 116, 293, 454, 525).
75
- - **Recommended fix:** Define interfaces at the consumer side (e.g. `type taskDiscoverer interface { ListReleases(root string) ([]data.ReleaseInfo, error) ... }`). Keep the existing structs as the production implementations. Accept the interface in board/doctor constructors.
76
- - **Estimated effort:** Medium
77
-
78
- ---
79
-
80
- ### Medium
81
-
82
- #### M1 — `Discover` is instantiated repeatedly with no state
83
-
84
- - **Finding:** `data.NewDiscover()` returns `&Discover{}` — a zero-value struct. It is re-created in `board.go` (twice), `checks.go` (4 times), `main.go` (once).
85
- - **Why it matters:** Unnecessary allocation noise and a missed opportunity for future caching (e.g., directory memoization).
86
- - **Evidence:** [discover.go](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/data/discover.go) — `Discover` has zero fields.
87
- - **Recommended fix:** Either make `Discover` methods package-level functions (since there's no state) or make it a singleton / accept it as a dependency.
88
- - **Estimated effort:** Small
89
-
90
- #### M2 — `Parser` and `ConfigReader` are similarly stateless singletons
91
-
92
- - **Finding:** Same pattern as M1. `NewParser()` returns `&Parser{}` — no configuration.
93
- - **Why it matters:** Code reads as if these types might have configuration, but they don't. This is an accidental abstraction that adds indirection without benefit.
94
- - **Evidence:** [parser.go:12-14](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/data/parser.go#L12-L14), [config.go:52-54](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/data/config.go#L52-L54)
95
- - **Recommended fix:** Convert to package-level functions unless interfaces are introduced (per H4).
96
- - **Estimated effort:** Small
97
-
98
- #### M3 — `newProgramModel()` contains a hardcoded epic slug
99
-
100
- - **Finding:** [board.go:33](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/board.go#L32-L34) — `NewModel(nil, "v1", "E03-board-tui-core")` is a leftover from development.
101
- - **Why it matters:** If `newProgramModel()` is ever called without the project-loading path, it shows stale default data.
102
- - **Evidence:** The function is declared but never called in production (the real path is `newProjectModel`). However it is exported-adjacent and could confuse contributors.
103
- - **Recommended fix:** Delete `newProgramModel()` or replace the hardcoded values with empty strings.
104
- - **Estimated effort:** Small
105
-
106
- #### M4 — `repairs.go` reimplements `strings.Contains`
107
-
108
- - **Finding:** [repairs.go:50-61](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/doctor/repairs.go#L50-L61) defines custom `contains()` and `indexOf()` functions that do exactly what `strings.Contains` does.
109
- - **Why it matters:** Standard library duplication is a maintainability red flag and confuses readers.
110
- - **Evidence:** `func contains(s, substr string) bool` vs `strings.Contains`.
111
- - **Recommended fix:** Replace with `strings.Contains`.
112
- - **Estimated effort:** Small
113
-
114
- #### M5 — `buildtool/main.go` reimplements `strings.TrimSpace`
115
-
116
- - **Finding:** [buildtool/main.go:211-219](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/buildtool/main.go#L211-L219) defines a custom `trimSpace()` function that trims `\n\r\t `.
117
- - **Why it matters:** `strings.TrimSpace` exists in the standard library with identical behaviour.
118
- - **Evidence:** The function is only called once, on line 199.
119
- - **Recommended fix:** Replace with `strings.TrimSpace(string(output))`.
120
- - **Estimated effort:** Small
121
-
122
- #### M6 — `buildtool` has no tests
123
-
124
- - **Finding:** `internal/buildtool` is the only production package with `[no test files]`.
125
- - **Why it matters:** Build/dist logic is the kind of code most likely to break silently across platforms.
126
- - **Evidence:** `go test ./...` output shows `? github.com/opencode/savepoint/internal/buildtool [no test files]`.
127
- - **Recommended fix:** Add tests for `run()`, `version()`, `splitCommand()`, and `writeTarGz()` at minimum. The `run()` function is already well-structured for testing.
128
- - **Estimated effort:** Medium
129
-
130
- #### M7 — `splitCommand` in `gates.go` is a naïve shell tokeniser
131
-
132
- - **Finding:** [gates.go:101-124](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/doctor/gates.go#L101-L124) handles only double-quote grouping — no escaping, no single quotes, no backslash-escapes.
133
- - **Why it matters:** Users configuring quality gates with complex commands (e.g., `go test -run "Test Foo"`) may get unexpected tokenisation.
134
- - **Evidence:** `case c == '"': inQuote = !inQuote` — no escape handling.
135
- - **Recommended fix:** Document the limitation or use `shellwords` parsing. For this project size, documenting the limitation is sufficient.
136
- - **Estimated effort:** Small
137
-
138
- #### M8 — `epicDetailBody` and `epicAuditBody` duplicate frontmatter stripping
139
-
140
- - **Finding:** Both [epicDetailBody](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/epic_panel.go#L43-L91) and [epicAuditBody](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/epic_panel.go#L118-L168) contain identical YAML frontmatter stripping logic (lines 50–60 and 125–134).
141
- - **Why it matters:** Duplicated logic that must be changed in lockstep.
142
- - **Evidence:** Compare lines 51–59 with 126–133 — identical block.
143
- - **Recommended fix:** Extract a `stripFrontmatter(content string) []string` helper.
144
- - **Estimated effort:** Small
145
-
146
- ---
147
-
148
- ### Low
149
-
150
- #### L1 — `ColumnType` and `TaskStatus` are parallel enumerations for the same concept
151
-
152
- - **Finding:** [task.go](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/data/task.go) defines both `ColumnType` (`planned`, `in_progress`, `done`) and `TaskStatus` (`planned`, `in_progress`, `done`, `audited`). The `Task` struct has both `Column ColumnType` and `Status string`.
153
- - **Why it matters:** Two representations of the same state create confusion. `syncTaskStatus` in `transitions.go` manually keeps them in sync.
154
- - **Evidence:** [transitions.go:57-59](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/transitions.go#L57-L59) — `t.Status = string(t.Column)`.
155
- - **Recommended fix:** Consider unifying into a single `TaskStatus` type and deriving the column from it. Low priority since both are kept in sync.
156
- - **Estimated effort:** Medium
157
-
158
- #### L2 — `package.json` exists for npm distribution but `scripts.test` is misleading
159
-
160
- - **Finding:** [package.json:24](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/package.json#L24) — `"test": "savepoint init"` — this is not a real test.
161
- - **Why it matters:** Running `npm test` will scaffold a project in the current directory rather than running tests.
162
- - **Recommended fix:** Change to `"test": "echo \"Run 'make test' for Go tests\""` or remove the scripts section.
163
- - **Estimated effort:** Small
164
-
165
- #### L3 — `shortID` and `shortRouterID` are near-duplicates
166
-
167
- - **Finding:** [card.go:shortID](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/card.go#L119-L127) and [view.go:shortRouterID](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/view.go#L160-L169) extract the same pattern (last segment after `/`, prefix before `-`).
168
- - **Why it matters:** Minor duplication — both are small helpers but do the same thing.
169
- - **Recommended fix:** Consolidate into one exported `ShortID(full string) string` function.
170
- - **Estimated effort:** Small
171
-
172
- #### L4 — `epicIndex` and `releaseIndex` are identical functions
173
-
174
- - **Finding:** [epic_panel.go:epicIndex](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/epic_panel.go#L249-L256) and [release.go:releaseIndex](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/release.go#L35-L42) have identical logic — find a string in a slice, return 0 if not found.
175
- - **Why it matters:** Two functions doing the same thing.
176
- - **Recommended fix:** Extract `sliceIndex(items []string, target string) int`.
177
- - **Estimated effort:** Small
178
-
179
- #### L5 — Unused function `taskLabel` in `column.go`
180
-
181
- - **Finding:** [column.go:91-96](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/column.go#L91-L96) defines `taskLabel` but it is never called.
182
- - **Why it matters:** Dead code.
183
- - **Recommended fix:** Delete it.
184
- - **Estimated effort:** Small
185
-
186
- #### L6 — `loadAllTasks` in `board.go` wraps `loadBoardData` but discards 4 return values
187
-
188
- - **Finding:** [board.go:125-128](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/board.go#L125-L128) — `func loadAllTasks(root string) ([]data.Task, error)` is defined but never called.
189
- - **Why it matters:** Dead code.
190
- - **Recommended fix:** Delete it.
191
- - **Estimated effort:** Small
192
-
193
- #### L7 — No linter configured
194
-
195
- - **Finding:** No `.golangci.yml` or linter configuration in the repository.
196
- - **Why it matters:** Lint could catch many of the issues in this audit automatically (dead code, duplicate functions, etc.).
197
- - **Recommended fix:** Add a basic `.golangci.yml` with `unused`, `errcheck`, `staticcheck`, and `govet`.
198
- - **Estimated effort:** Small
199
-
200
- ---
201
-
202
- ## 3. Complexity & Modularity Review
203
-
204
- ### Overly large files or functions
205
-
206
- | File | Lines | Concern |
207
- |------|-------|---------|
208
- | [update.go](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/update.go) | 522 | `Update()` is 170 lines; `updateOverlay()` is 100 lines |
209
- | [checks.go](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/doctor/checks.go) | 586 | Reasonable for a checks aggregator, but could be split by check type |
210
- | [write.go](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/data/write.go) | 217 | Two large functions with duplicated body-offset arithmetic |
211
-
212
- ### Tight coupling
213
-
214
- - **Board → data:** The board package imports `data` for models, parsing, and writing. This is appropriate for a small project.
215
- - **Board → os:** `model.go` and `update.go` call `os.ReadFile`, `os.Stat`, and `os.WriteFile` directly. This couples business logic to the filesystem. Not a problem today but will make unit tests slower if the board grows.
216
-
217
- ### Repeated logic
218
-
219
- 1. Frontmatter stripping (3 places)
220
- 2. `shortID` extraction (2 places)
221
- 3. `indexOf` / `epicIndex` / `releaseIndex` pattern (3 places)
222
- 4. Space-bar and Backspace handlers in `update.go` (nearly identical structure)
223
- 5. `Discover` instantiation (7 places)
224
-
225
- ### Poor naming
226
-
227
- None found. Naming is consistently clear and idiomatic Go.
228
-
229
- ### Unclear data flow
230
-
231
- The `Task.Status` vs `Task.Column` duality is the main source of confusion. `Status` is the string from the YAML, `Column` is the normalised enum, and `syncTaskStatus` bridges them. A newcomer would need to trace this chain.
232
-
233
- ### Components doing too much
234
-
235
- `update.go`'s `Update()` handles: quit, overlays (epic, release, help, detail, epic-detail), navigation (left, right, up, down, pgup, pgdown), task transitions (space, backspace), router priority (p), epic panel focus switching, and window resize. This should be 3–4 functions.
236
-
237
- ### Missing abstraction
238
-
239
- A `FrontmatterDocument` type that encapsulates "parse YAML → modify → reserialise with body preserved" would eliminate the duplicated write logic.
240
-
241
- ### Excessive abstraction
242
-
243
- The `Discover`, `Parser`, `ConfigReader`, and `RouterReader` structs are over-abstracted — they hold no state and exist only as method namespaces. They should be either interfaces (H4) or package-level functions (M2).
244
-
245
- ---
246
-
247
- ## 4. Architecture Review
248
-
249
- ### Folder organisation ✅
250
-
251
- ```
252
- savepoint/
253
- ├── cmd/ # CLI arg parsing — clean separation from execution
254
- ├── internal/
255
- │ ├── board/ # TUI model/view/update — Elm architecture
256
- │ ├── buildtool/ # Standalone Go binary for build automation
257
- │ ├── data/ # Models, parsing, writing, discovery
258
- │ ├── doctor/ # Read-only diagnostics
259
- │ ├── init/ # Scaffolding
260
- │ └── styles/ # Centralised palette + styles
261
- ├── templates/ # Embedded scaffold templates
262
- └── agent-skills/ # Prompt documents for AI agents
263
- ```
264
-
265
- This structure is clean and appropriate. `cmd/` handles arg parsing, `internal/` contains all logic, templates are embedded. No changes recommended.
266
-
267
- ### Domain boundaries ✅
268
-
269
- Boundaries are sensible. `data` owns models and persistence, `board` owns presentation, `doctor` owns diagnostics. No circular dependencies.
270
-
271
- ### State management
272
-
273
- The Bubble Tea `Model` struct has 27 fields. This is on the upper bound of manageable. If the TUI grows, consider grouping related fields into sub-structs (e.g., `EpicPanelState`, `OverlayState`).
274
-
275
- ### API / data layer
276
-
277
- The data layer is file-based (markdown + YAML frontmatter). This is the right choice for the project's stated design philosophy of "slow down, write things down." No database or network calls exist.
278
-
279
- ### Configuration approach ✅
280
-
281
- `config.yml` with defaults baked into Go code. Clean and simple.
282
-
283
- ### Error handling strategy
284
-
285
- Error handling is generally good — errors are wrapped with `fmt.Errorf("context: %w", err)` consistently. One concern: `reloadTasks` in [watch.go:58](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/watch.go#L56-L64) silently swallows all errors by returning `nil`:
286
-
287
- ```go
288
- tasks, releases, releaseEpics, epicStatuses, err := loadBoardData(root)
289
- if err != nil {
290
- return nil // error silently dropped
291
- }
292
- ```
293
-
294
- This means a malformed task file will cause the board to silently stop refreshing. Consider emitting an `errorMsg` type instead.
295
-
296
- ---
297
-
298
- ## 5. Best-Practice Review
299
-
300
- ### Framework conventions ✅
301
-
302
- The Bubble Tea Model/Update/View pattern is followed correctly. Messages are properly typed. Commands are returned where appropriate.
303
-
304
- ### Type safety ✅
305
-
306
- Custom types (`ColumnType`, `ProgressStage`, `OverlayType`, `TaskStatus`) are used appropriately instead of raw strings. The `ColumnType` → `ColumnType` validation in `lifecycle.go` is solid.
307
-
308
- ### Linting/formatting ⚠️
309
-
310
- No linter is configured. `go fmt` appears to have been run (code is consistently formatted), but static analysis tools like `staticcheck` or `golangci-lint` would catch the dead code and duplication issues found in this audit.
311
-
312
- ### Testing approach ✅
313
-
314
- Strong test coverage. Tests use filesystem fixtures (temp directories) and verify behaviour end-to-end. The `board` package has both unit tests and integration tests. The test-to-code ratio of ~1.6:1 is excellent.
315
-
316
- ### Dependency management ✅
317
-
318
- `go.mod` is clean. Only 2 direct dependencies. All indirect deps are from the Charmbracelet ecosystem. `go.sum` is checked in (correct for Go modules).
319
-
320
- ### Build/deployment setup ⚠️
321
-
322
- The `buildtool` is a self-contained Go binary invoked via `go run ./internal/buildtool`. This is creative but unconventional — most Go projects use `goreleaser` or direct `go build` invocations. The approach works but:
323
- - No CI configuration is visible (no `.github/workflows/`, no `Makefile` CI target)
324
- - Binaries are committed to the repo (H1)
325
-
326
- ### Environment variable handling ✅
327
-
328
- `NO_COLOR` and `COLORTERM` are respected in [theme.go](file:///c:/Users/User/Branding/03-VIBE-LAB/savepoint/internal/board/theme.go). No secrets or sensitive env vars are used.
329
-
330
- ### Logging/debugging practices ⚠️
331
-
332
- No logging at all. The TUI uses `StatusMessage` for user feedback, but there is no debug log for filesystem operations, parser errors, or watcher events. For a TUI tool, this is borderline acceptable, but a `--verbose` or `--debug` flag that writes to a log file would help troubleshoot issues in the field.
333
-
334
- ---
335
-
336
- ## 6. Refactor Roadmap
337
-
338
- ### Phase 1 — Safe cleanup
339
-
340
- **Objective:** Remove dead code, fix obvious duplication, improve hygiene.
341
-
342
- | Task | Risk |
343
- |------|------|
344
- | Delete `taskLabel()` from `column.go` | None |
345
- | Delete `loadAllTasks()` from `board.go` | None |
346
- | Delete or update `newProgramModel()` in `board.go` | None |
347
- | Replace custom `contains`/`indexOf` in `repairs.go` with `strings.Contains` | None |
348
- | Replace custom `trimSpace` in `buildtool/main.go` with `strings.TrimSpace` | None |
349
- | Add `savepoint`, `savepoint.exe`, `dist/`, `*.zip` to `.gitignore` and remove from tracking | None |
350
- | Fix `package.json` test script | None |
351
- | Add `.golangci.yml` with basic linters | None |
352
-
353
- **Expected benefit:** Cleaner codebase, smaller repo, automated lint catches.
354
- **Risk level:** Low.
355
-
356
- ---
357
-
358
- ### Phase 2 — Structural improvements
359
-
360
- **Objective:** Reduce duplication, improve modularity, make key files easier to extend.
361
-
362
- | Task | Risk |
363
- |------|------|
364
- | Extract `SplitFrontmatterBody()` in `data` package; refactor `write.go` | Low — well-tested |
365
- | Extract `stripFrontmatter()` helper for `epic_panel.go` | Low |
366
- | Consolidate `shortID` / `shortRouterID` into one function | Low |
367
- | Consolidate `epicIndex` / `releaseIndex` into `sliceIndex` | Low |
368
- | Split `Update()` into `handleBoardKey()`, `handleOverlayKey()`, and named action methods | Medium — many tests depend on exact Update behaviour |
369
- | Group `Model` fields into sub-structs (`EpicPanelState`, `OverlayState`) | Medium |
370
- | Convert stateless data types to package-level functions or introduce consumer-defined interfaces | Medium |
371
-
372
- **Expected benefit:** Easier to add features, reduced duplication, more testable.
373
- **Risk level:** Medium.
374
-
375
- ---
376
-
377
- ### Phase 3 — Hardening
378
-
379
- **Objective:** Improve error handling, add diagnostic capabilities, fill test gaps.
380
-
381
- | Task | Risk |
382
- |------|------|
383
- | Handle `reloadTasks` errors by emitting an `errorMsg` instead of returning `nil` | Low |
384
- | Add `buildtool` tests | Low |
385
- | Add `--verbose` debug logging to a log file | Low |
386
- | Document `splitCommand` tokenisation limitations | None |
387
- | Add CI workflow (GitHub Actions) with `make build && make test` | Low |
388
- | Unify `ColumnType` / `TaskStatus` into a single status model | Medium — data format change |
389
-
390
- **Expected benefit:** Fewer silent failures, better debugging, CI safety net.
391
- **Risk level:** Low–Medium.
392
-
393
- ---
394
-
395
- ## 7. Top 10 Action List
396
-
397
- - [ ] **1. Add binaries to `.gitignore` and remove from Git tracking** — Severity: High — Files: `.gitignore`, `savepoint`, `savepoint.exe`, `dist/`, `ink-cli-ui-design.zip` — Benefit: Repo shrinks by 12 MB+, eliminates merge noise
398
- - [ ] **2. Extract `SplitFrontmatterBody()` to deduplicate write logic** — Severity: High — Files: `internal/data/write.go` — Benefit: Single source of truth for frontmatter reconstruction
399
- - [ ] **3. Split `Update()` into named key-handler methods** — Severity: High — Files: `internal/board/update.go` — Benefit: 170-line method becomes 5–6 focused methods; easier to extend
400
- - [ ] **4. Delete dead code: `taskLabel()`, `loadAllTasks()`, `newProgramModel()`** — Severity: Low — Files: `internal/board/column.go`, `internal/board/board.go` — Benefit: Less confusion for contributors
401
- - [ ] **5. Replace custom `contains`/`indexOf`/`trimSpace` with stdlib** — Severity: Medium — Files: `internal/doctor/repairs.go`, `internal/buildtool/main.go` — Benefit: Idiomatic Go, less code to maintain
402
- - [ ] **6. Extract `stripFrontmatter()` helper for `epic_panel.go`** — Severity: Medium — Files: `internal/board/epic_panel.go` — Benefit: DRY, consistent behaviour
403
- - [ ] **7. Add `.golangci.yml` linter configuration** — Severity: Medium — Files: project root — Benefit: Automated detection of dead code, unchecked errors, and style issues
404
- - [ ] **8. Handle `reloadTasks` errors instead of silently swallowing** — Severity: Medium — Files: `internal/board/watch.go` — Benefit: Board surfaces parse errors to the user instead of silently freezing
405
- - [ ] **9. Add tests for `buildtool`** — Severity: Medium — Files: `internal/buildtool/` — Benefit: Cross-platform build confidence
406
- - [ ] **10. Consolidate `shortID`/`shortRouterID` and `epicIndex`/`releaseIndex` duplicates** — Severity: Low — Files: `internal/board/card.go`, `internal/board/view.go`, `internal/board/epic_panel.go`, `internal/board/release.go` — Benefit: Single source of truth for slug extraction and list search