savepoint 1.0.1 → 1.0.3

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 (278) hide show
  1. package/.claude/settings.local.json +15 -1
  2. package/.golangci.yml +11 -0
  3. package/.savepoint/Design.md +52 -46
  4. package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md +1 -1
  5. package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T005-layout.md +1 -1
  6. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T002-card.md +1 -1
  7. package/.savepoint/releases/v1/epics/E04-board-components/tasks/T006-help-overlay.md +1 -1
  8. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/{Design.md → E06-Detail.md} +5 -3
  9. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md +1 -1
  10. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T003-footer-status-bar.md +1 -1
  11. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md +1 -1
  12. package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T010-auto-refresh-watcher.md +2 -0
  13. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/{Design.md → E01-Detail.md} +9 -1
  14. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/{T007-next-activity-header.md → T001-next-activity-header.md} +13 -12
  15. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T002-rename-epic-design-files.md +9 -9
  16. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T003-rename-release-prd.md +2 -2
  17. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T004-update-instruction-files.md +13 -12
  18. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T005-update-cross-references.md +14 -13
  19. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T006-column-and-detail-scrolling.md +25 -15
  20. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T007-column-focus-border-stability.md +57 -0
  21. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/E02-Audit.md +124 -0
  22. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/{Design.md → E02-Detail.md} +12 -3
  23. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T001-fix-makefile.md +11 -8
  24. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T002-linux-build-target.md +12 -7
  25. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T003-macos-build-target.md +9 -5
  26. package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T004-smoke-tests-and-artifacts.md +30 -9
  27. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Audit.md +195 -0
  28. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Detail.md +45 -0
  29. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T001-border-resize-fix.md +40 -0
  30. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T002-next-activity-below-header.md +64 -0
  31. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T003-checkbox-rendering-fix.md +56 -0
  32. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T005-unify-status-glyphs.md +65 -0
  33. package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T006-forced-256-color-profile.md +36 -0
  34. package/.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Audit.md +167 -0
  35. package/.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Detail.md +51 -0
  36. package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T001-sidebar-focusable-navigation.md +65 -0
  37. package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T002-epic-detail-overlay.md +73 -0
  38. package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T003-epic-status-glyphs.md +73 -0
  39. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Audit.md +237 -0
  40. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md +54 -0
  41. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md +45 -0
  42. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md +40 -0
  43. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T003-update-design-md.md +47 -0
  44. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T004-implement-m-hotkey.md +98 -0
  45. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T005-update-help-overlay.md +33 -0
  46. package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T006-tests-and-quality-gates.md +62 -0
  47. package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Audit.md +56 -0
  48. package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Detail.md +63 -0
  49. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T005-proposals.md +44 -0
  50. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T007-apply-close.md +35 -0
  51. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T009-integration.md +40 -0
  52. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T010-audit-file-migration.md +45 -0
  53. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T011-model-tab-state.md +26 -0
  54. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T012-epic-audit-render.md +33 -0
  55. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T013-handle-tab-keys.md +34 -0
  56. package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T014-tab-indicator.md +33 -0
  57. package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Audit.md +336 -0
  58. package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Detail.md +61 -0
  59. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T001-cli-entrypoint.md +37 -0
  60. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T002-target-validation.md +28 -0
  61. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T003-scaffold-writer.md +46 -0
  62. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T004-atomic-writes.md +27 -0
  63. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T005-magic-prompt.md +25 -0
  64. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T006-clipboard.md +26 -0
  65. package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T007-integration-test.md +26 -0
  66. package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Audit.md +333 -0
  67. package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Detail.md +68 -0
  68. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T001-cli-entrypoint.md +26 -0
  69. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T002-non-tty-fallback.md +27 -0
  70. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T003-tui-app-shell.md +28 -0
  71. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T004-board-model.md +29 -0
  72. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T005-detail-pane.md +27 -0
  73. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T006-status-transitions.md +29 -0
  74. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T007-theme-fallbacks.md +29 -0
  75. package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T008-integration-test.md +27 -0
  76. package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Audit.md +207 -0
  77. package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Detail.md +65 -0
  78. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T001-cli-entrypoint.md +24 -0
  79. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T002-config-router-validation.md +28 -0
  80. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T003-structure-checks.md +29 -0
  81. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T004-dependency-checks.md +27 -0
  82. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T005-audit-orphan-checks.md +28 -0
  83. package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T006-quality-gates-report.md +31 -0
  84. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/E11-Detail.md +36 -0
  85. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T001-debug-logging.md +25 -0
  86. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T002-increase-debounce.md +21 -0
  87. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T003-error-handling.md +22 -0
  88. package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T004-test-verify.md +29 -0
  89. package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Audit.md +444 -0
  90. package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Detail.md +45 -0
  91. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T001-default-phase.md +35 -0
  92. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T002-default-status.md +19 -0
  93. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T003-better-errors.md +29 -0
  94. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T004-validate-on-write.md +25 -0
  95. package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T005-tests.md +37 -0
  96. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Audit.md +118 -0
  97. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Detail.md +73 -0
  98. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T001-safe-cleanup.md +66 -0
  99. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T002-bug-fixes.md +35 -0
  100. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T003-centralize-duplication.md +60 -0
  101. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T004-infrastructure.md +33 -0
  102. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T005-decompose-update.md +37 -0
  103. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T006-async-io.md +40 -0
  104. package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T007-test-coverage.md +37 -0
  105. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Audit.md +267 -0
  106. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Detail.md +54 -0
  107. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T001-group-model.md +39 -0
  108. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T002-data-interfaces.md +42 -0
  109. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T003-discover-orphans.md +33 -0
  110. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T004-epic-panel-headings.md +35 -0
  111. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T005-shell-tokenization.md +27 -0
  112. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T006-unify-enums.md +29 -0
  113. package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T007-testutil-package.md +28 -0
  114. package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Detail.md +43 -0
  115. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T001-benchmarks.md +31 -0
  116. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T002-fuzz-targets.md +28 -0
  117. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T003-debug-flag.md +30 -0
  118. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T004-dist-checksums.md +27 -0
  119. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T005-windows-targets.md +28 -0
  120. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T006-abbreviation-splitting.md +26 -0
  121. package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T007-root-test-allowlist.md +28 -0
  122. package/.savepoint/releases/v1.1/epics/_archived/T001-cli-entrypoint.md +25 -0
  123. package/.savepoint/releases/v1.1/epics/_archived/T002-quality-gates.md +27 -0
  124. package/.savepoint/releases/v1.1/epics/_archived/T003-snapshot.md +27 -0
  125. package/.savepoint/releases/v1.1/epics/_archived/T004-ai-reconcile.md +29 -0
  126. package/.savepoint/releases/v1.1/epics/_archived/T006-tui-review.md +31 -0
  127. package/.savepoint/releases/v1.1/epics/_archived/T008-skip-handling.md +34 -0
  128. package/.savepoint/releases/v1.1/v1.1-PRD.md +139 -0
  129. package/.savepoint/router.md +29 -108
  130. package/AGENTS.md +69 -111
  131. package/Makefile +19 -3
  132. package/README.md +6 -6
  133. package/agent-skills/savepoint-audit/SKILL.md +87 -35
  134. package/agent-skills/savepoint-build-task/SKILL.md +9 -4
  135. package/agent-skills/savepoint-create-plan/SKILL.md +10 -5
  136. package/agent-skills/savepoint-create-task/SKILL.md +44 -31
  137. package/agent-skills/savepoint-draft-prd/SKILL.md +8 -3
  138. package/agent-skills/savepoint-system-design/SKILL.md +8 -3
  139. package/agent_skills_test.go +91 -0
  140. package/cmd/board.go +59 -0
  141. package/cmd/board_test.go +137 -0
  142. package/cmd/doctor.go +53 -0
  143. package/cmd/doctor_test.go +146 -0
  144. package/cmd/init.go +63 -0
  145. package/cmd/init_test.go +104 -0
  146. package/internal/board/board.go +69 -49
  147. package/internal/board/board_test.go +83 -67
  148. package/internal/board/card.go +71 -20
  149. package/internal/board/card_test.go +141 -12
  150. package/internal/board/column.go +77 -11
  151. package/internal/board/column_test.go +63 -13
  152. package/internal/board/detail.go +107 -72
  153. package/internal/board/detail_test.go +117 -26
  154. package/internal/board/epic_panel.go +211 -18
  155. package/internal/board/epic_panel_test.go +637 -14
  156. package/internal/board/help.go +1 -0
  157. package/internal/board/help_test.go +1 -0
  158. package/internal/board/integration_test.go +266 -0
  159. package/internal/board/interfaces.go +65 -0
  160. package/internal/board/interfaces_test.go +114 -0
  161. package/internal/board/io.go +93 -0
  162. package/internal/board/layout.go +12 -2
  163. package/internal/board/layout_test.go +17 -0
  164. package/internal/board/model.go +130 -52
  165. package/internal/board/plain.go +88 -0
  166. package/internal/board/plain_test.go +117 -0
  167. package/internal/board/release.go +1 -9
  168. package/internal/board/release_test.go +6 -6
  169. package/internal/board/render_policy_test.go +77 -0
  170. package/internal/board/status.go +23 -0
  171. package/internal/board/theme.go +24 -0
  172. package/internal/board/theme_test.go +31 -0
  173. package/internal/board/transitions.go +113 -88
  174. package/internal/board/transitions_test.go +164 -141
  175. package/internal/board/tui.go +32 -0
  176. package/internal/board/update.go +472 -94
  177. package/internal/board/update_test.go +447 -0
  178. package/internal/board/util.go +76 -0
  179. package/internal/board/view.go +139 -22
  180. package/internal/board/view_test.go +171 -3
  181. package/internal/board/watch.go +57 -9
  182. package/internal/buildtool/main.go +211 -0
  183. package/internal/buildtool/main_test.go +46 -0
  184. package/internal/data/config.go +17 -3
  185. package/internal/data/config_test.go +49 -0
  186. package/internal/data/discover.go +26 -0
  187. package/internal/data/discover_test.go +34 -10
  188. package/internal/data/errors.go +4 -0
  189. package/internal/data/lifecycle.go +13 -6
  190. package/internal/data/lifecycle_test.go +14 -11
  191. package/internal/data/parser.go +29 -6
  192. package/internal/data/parser_test.go +66 -7
  193. package/internal/data/task.go +1 -0
  194. package/internal/data/write.go +85 -11
  195. package/internal/data/write_test.go +167 -0
  196. package/internal/doctor/checks.go +567 -0
  197. package/internal/doctor/checks_test.go +716 -0
  198. package/internal/doctor/gates.go +193 -0
  199. package/internal/doctor/gates_test.go +166 -0
  200. package/internal/doctor/interfaces.go +64 -0
  201. package/internal/doctor/interfaces_test.go +104 -0
  202. package/internal/doctor/repairs.go +80 -0
  203. package/internal/doctor/repairs_test.go +81 -0
  204. package/internal/doctor/report.go +157 -0
  205. package/internal/doctor/report_test.go +89 -0
  206. package/internal/init/clipboard.go +146 -0
  207. package/internal/init/clipboard_test.go +74 -0
  208. package/internal/init/install.go +16 -0
  209. package/internal/init/integration_test.go +197 -0
  210. package/internal/init/prompt.go +14 -0
  211. package/internal/init/prompt_test.go +77 -0
  212. package/internal/init/scaffold.go +59 -0
  213. package/internal/init/scaffold_test.go +179 -0
  214. package/internal/init/template_freshness_test.go +56 -0
  215. package/internal/init/validate.go +85 -0
  216. package/internal/init/validate_test.go +141 -0
  217. package/internal/init/write.go +73 -0
  218. package/internal/init/write_test.go +91 -0
  219. package/internal/styles/palette.go +3 -3
  220. package/internal/styles/styles.go +39 -12
  221. package/internal/styles/styles_test.go +133 -0
  222. package/internal/testutil/fixture.go +113 -0
  223. package/internal/testutil/fs.go +26 -0
  224. package/main.go +107 -1
  225. package/package.json +2 -2
  226. package/project-audit/audit_report_glm_5.1.md +411 -0
  227. package/project-audit/audit_report_opus_4.6 +406 -0
  228. package/project-audit/consolidated-audit-report.md +456 -0
  229. package/savepoint +0 -0
  230. package/templates/project/.savepoint/Design.md +2 -2
  231. package/templates/project/.savepoint/router.md +15 -14
  232. package/templates/project/AGENTS.md +56 -98
  233. package/templates/project/agent-skills/savepoint-audit/SKILL.md +87 -0
  234. package/templates/project/agent-skills/savepoint-build-task/SKILL.md +44 -0
  235. package/templates/project/agent-skills/savepoint-create-plan/SKILL.md +33 -0
  236. package/templates/project/agent-skills/savepoint-create-task/SKILL.md +44 -0
  237. package/templates/project/agent-skills/savepoint-draft-prd/SKILL.md +37 -0
  238. package/templates/project/agent-skills/savepoint-system-design/SKILL.md +38 -0
  239. package/templates/prompts/audit-reconciliation.prompt.md +35 -30
  240. package/templates/prompts/design.prompt.md +3 -1
  241. package/templates/prompts/epic-design.prompt.md +3 -3
  242. package/templates/prompts/task-breakdown.prompt.md +1 -1
  243. package/templates/prompts/task-building.prompt.md +1 -1
  244. package/templates/prompts/task-planning.prompt.md +1 -1
  245. package/.savepoint/audit/E01-go-setup/proposals.md +0 -166
  246. package/.savepoint/audit/E01-go-setup/snapshot.md +0 -71
  247. package/.savepoint/audit/E01-scaffolding/proposals/AGENTS.md +0 -66
  248. package/.savepoint/audit/E01-scaffolding/proposals/Design.md +0 -210
  249. package/.savepoint/audit/E01-scaffolding/proposals/epic-Design.md +0 -117
  250. package/.savepoint/audit/E01-scaffolding/proposals/quality-review.md +0 -101
  251. package/.savepoint/audit/E01-scaffolding/snapshot.md +0 -54
  252. package/.savepoint/audit/E02-data-model/snapshot.md +0 -128
  253. package/.savepoint/audit/E02-data-readers/proposals.md +0 -123
  254. package/.savepoint/audit/E02-data-readers/snapshot.md +0 -54
  255. package/.savepoint/audit/E03-board-tui-core/proposals.md +0 -146
  256. package/.savepoint/audit/E03-board-tui-core/snapshot.md +0 -57
  257. package/.savepoint/audit/E03-cli-foundation/snapshot.md +0 -106
  258. package/.savepoint/audit/E04-board-components/proposals.md +0 -118
  259. package/.savepoint/audit/E04-board-components/snapshot.md +0 -77
  260. package/.savepoint/audit/E04-templates-and-prompts/snapshot.md +0 -115
  261. package/.savepoint/audit/E05-init-command/snapshot.md +0 -125
  262. package/.savepoint/audit/E05-phase-transitions/proposals.md +0 -83
  263. package/.savepoint/audit/E05-phase-transitions/snapshot.md +0 -36
  264. package/.savepoint/audit/E06-atari-noir-layout/proposals.md +0 -130
  265. package/.savepoint/audit/E06-atari-noir-layout/snapshot.md +0 -84
  266. package/.savepoint/audit/E06-tui-board/snapshot.md +0 -64
  267. package/.savepoint/audit/E07-audit-pipeline/snapshot.md +0 -165
  268. package/.savepoint/audit/E08-board-workflow-cleanup/snapshot.md +0 -65
  269. package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T001-border-resize-fix.md +0 -36
  270. package/ink-cli-ui-design.zip +0 -0
  271. package/main.exe +0 -0
  272. package/savepoint.exe +0 -0
  273. /package/.savepoint/releases/v1/epics/E01-go-setup/{Design.md → E01-Detail.md} +0 -0
  274. /package/.savepoint/releases/v1/epics/E02-data-readers/{Design.md → E02-Detail.md} +0 -0
  275. /package/.savepoint/releases/v1/epics/E03-board-tui-core/{Design.md → E03-Detail.md} +0 -0
  276. /package/.savepoint/releases/v1/epics/E04-board-components/{Design.md → E04-Detail.md} +0 -0
  277. /package/.savepoint/releases/v1/epics/E05-phase-transitions/{Design.md → E05-Detail.md} +0 -0
  278. /package/.savepoint/releases/v1/{PRD.md → v1-PRD.md} +0 -0
@@ -0,0 +1,73 @@
1
+ ---
2
+ id: E04-epic-navigation/T002-epic-detail-overlay
3
+ status: done
4
+ objective: "Add Epic Detail overlay showing E##-Detail.md content, triggered by Enter on a focused epic"
5
+ depends_on:
6
+ - E04-epic-navigation/T001-sidebar-focusable-navigation
7
+ ---
8
+
9
+ # T002: Epic Detail Overlay
10
+
11
+ ## Acceptance Criteria
12
+
13
+ - Pressing `Enter` on a focused epic in the sidebar opens a centered overlay titled "EPIC DETAIL"
14
+ - The overlay content is read from the epic's `E##-Detail.md` file on disk
15
+ - If the file exists, it shows: epic title, purpose, definition of done, and the components table (rendered as text)
16
+ - If the file does not exist, the overlay shows an informative "(no detail available)" message
17
+ - The overlay is height-capped at ~70% of terminal height with scroll indicators (↑/↓) for overflow
18
+ - `↑`/`k` and `↓`/`j` scroll the detail content (reuses existing scroll indicator pattern from `detail.go`)
19
+ - `PgUp`/`PgDown` scroll in page increments
20
+ - `Esc` or `q` closes the overlay and returns to epic panel focus
21
+ - The overlay uses `styles.DetailOverlay` for consistent visual styling with task detail
22
+
23
+ ## Implementation Plan
24
+
25
+ - [x] Add `OverlayEpicDetail OverlayType = "detail-epic"` to `model.go`
26
+ - [x] Add `EpicDetailOffset int` to `Model` in `model.go`
27
+ - [x] Add `EpicDetailContent string` to `Model` in `model.go` (cached content of the detail file)
28
+
29
+ - [x] In `epic_panel.go` — add `RenderEpicDetail(epicID, content string, overlayW, maxHeight, offset int) string`:
30
+ - Parse frontmatter lines from the markdown content (lines between `---` markers) for metadata display
31
+ - Render header: epic ID and title from markdown heading
32
+ - Render body: the rest of the markdown content as plain text (no markdown rendering)
33
+ - Use `visibleDetailLines` from `detail.go` for height-capped scrolling
34
+ - Reuse `styles.DetailOverlay`, `styles.ColumnTitleFocused`, `styles.CardMeta`, `styles.ColumnTitle`
35
+
36
+ - [x] In `update.go` — when `m.EpicPanelFocus && enter`:
37
+ - Derive detail file path: `{m.Root}/releases/{m.SelectedRelease}/epics/{epicSlug}/{shortID(epicSlug)}-Detail.md`
38
+ - Read the file content with `os.ReadFile`
39
+ - If error (file missing, etc.), set `m.EpicDetailContent = "(no detail available)"`
40
+ - Set `m.Overlay = OverlayEpicDetail`, `m.EpicDetailOffset = 0`
41
+ - Cache the content in `m.EpicDetailContent`
42
+
43
+ - [x] In `updateOverlay` in `update.go` — match `OverlayEpicDetail` and handle:
44
+ - `esc`/`q` → `OverlayNone` (exit back to epic panel focus)
45
+ - `up`/`k` → decrement `EpicDetailOffset` if > 0
46
+ - `down`/`j` → increment `EpicDetailOffset`
47
+ - `pgup`/`pgdown` → page scroll using existing `detailPageSize()`
48
+
49
+ - [x] In `view.go` — match `OverlayEpicDetail` and call `RenderEpicDetail(...)` with the cached content
50
+ - [x] Reuse `visibleDetailLines`, `clampDetailOffset`, `detailRow`, `WrapText` from `detail.go` — no need to copy
51
+ - [x] Run `make build && make test` to verify no regressions
52
+
53
+ ## Context Log
54
+
55
+ Files read:
56
+ - `internal/board/model.go`
57
+ - `internal/board/update.go`
58
+ - `internal/board/view.go`
59
+ - `internal/board/epic_panel.go`
60
+ - `internal/board/detail.go`
61
+ - `internal/board/card.go` — `shortID` helper
62
+ - `.savepoint/releases/v1.1/epics/E01-tui-optimisation/E01-Detail.md` — example detail file
63
+
64
+ Estimated input tokens: ~2800
65
+
66
+ Quality gate: `go build` ✓, `go test ./...` ✓ (all 3 packages pass)
67
+
68
+ Notes:
69
+ - `detail.go` functions `visibleDetailLines`, `clampDetailOffset`, `WrapText` are unexported — `epic_panel.go` is in the same `board` package so they're accessible
70
+ - Content loading is synchronous (simple file read) — no async command needed
71
+ - `shortID` extracts "E04" from "E04-epic-navigation" via first `-` split
72
+ - Updated `TestUpdate_epicPanelEnterSelectsFocusedEpic` → `TestUpdate_epicPanelEnterOpensDetailOverlay` to reflect T002 behavior change
73
+ - Added 7 new tests covering overlay open, scroll, pgup/pgdown, esc close, view rendering, no-content fallback
@@ -0,0 +1,73 @@
1
+ ---
2
+ id: E04-epic-navigation/T003-epic-status-glyphs
3
+ status: done
4
+ objective: "Add status glyphs to the epic sidebar showing each epic's lifecycle state"
5
+ depends_on:
6
+ - E04-epic-navigation/T001-sidebar-focusable-navigation
7
+ ---
8
+
9
+ # T003: Epic Status Glyphs in Side Panel
10
+
11
+ ## Acceptance Criteria
12
+
13
+ - Each epic in the sidebar shows a status glyph prefix: `○` for `planned`, `▶` for `in_progress`, `◉` for `done`, `✓` for `audited`, space for unknown
14
+ - The glyph is styled: `○` in dim, `▶` in orange, `◉` in green, `✓` in green — matching the status colour convention
15
+ - The status is read from the `status:` field in each epic's `E##-Detail.md` frontmatter at load time
16
+ - Only the **side panel** is affected — the `E` key dropdown overlay is unchanged
17
+ - The status map is loaded once during `loadBoardData` and cached in the Model (no per-frame file I/O)
18
+ - If an epic's detail file is missing or has no `status` frontmatter, the glyph defaults to a space (no indicator)
19
+ - All existing epic sidebar rendering (focus highlighting, cursor, active marker, selected marker) works unchanged
20
+ - `make build && make test` pass
21
+
22
+ ## Implementation Plan
23
+
24
+ - [x] Add `EpicStatus map[string]string` to `Model` in `model.go` — keyed by epic ID, values like `"planned"`, `"in_progress"`, `"done"`, `"audited"`
25
+ - [x] In `board.go` — update `loadBoardData` to load epic statuses:
26
+ - After listing epics for a release, iterate each epic's directory
27
+ - Build detail file path: `filepath.Join(epic.Path, shortID(epic.ID)+"-Detail.md")`
28
+ - Read the file with `os.ReadFile`
29
+ - Parse frontmatter with `data.NewParser().ParseFrontmatter(string(content))`
30
+ - Extract `"status"` from the returned map; if missing, skip
31
+ - Store in `epicStatuses[epic.ID]` — collect all epics across releases into the map
32
+ - [x] Pass `epicStatuses map[string]string` through the `reloadMsg` pipeline so dynamic reloads preserve glyphs
33
+ - [x] In `epic_panel.go` — update `RenderEpicSidebar` signature to accept `status map[string]string`
34
+ - [x] Add a helper function `epicSidebarGlyph(status map[string]string, epicID string) string`:
35
+ - `"planned"` → styles.CardMeta.Render("○")
36
+ - `"in_progress"` → styles.GlyphBuild.Render("▶")
37
+ - `"done"` → styles.TagDone.Render("◉")
38
+ - `"audited"` → styles.TagDone.Render("✓")
39
+ - default → " " (single space)
40
+ - [x] In `RenderEpicSidebar` — prepend the glyph to each epic label: `"▶ E01-tui-optimisation"`
41
+ - [x] In `view.go` — pass `m.EpicStatus` to `RenderEpicSidebar`
42
+ - [x] Handle `EpicStatus` in `reloadMsg` handler in `update.go` — store the map when tasks reload
43
+ - [x] Update `reloadMsg` struct in `watch.go` to carry `epicStatuses map[string]string`
44
+ - [x] Run `make build && make test` to verify no regressions
45
+
46
+ ## Context Log
47
+
48
+ Files read:
49
+ - `internal/board/model.go`
50
+ - `internal/board/epic_panel.go`
51
+ - `internal/board/view.go`
52
+ - `internal/board/board.go`
53
+ - `internal/board/watch.go`
54
+ - `internal/board/update.go`
55
+ - `internal/board/card.go` — glyph pattern reference
56
+ - `internal/styles/styles.go` — existing style constants
57
+ - `internal/data/parser.go` — `ParseFrontmatter` for YAML extraction
58
+ - `.savepoint/releases/v1.1/epics/E01-tui-optimisation/E01-Detail.md` — example frontmatter with status field
59
+ - `.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T001-sidebar-focusable-navigation.md` — dependency status check
60
+ - `internal/board/epic_panel_test.go` — updated RenderEpicSidebar test calls
61
+
62
+ Estimated input tokens: 1800
63
+
64
+ Notes:
65
+ - Reuses `data.NewParser().ParseFrontmatter()` which already handles YAML frontmatter extraction
66
+ - Reuses `shortID()` from `card.go` (same package) to derive the detail file name
67
+ - The `E` key dropdown in `epic_panel.go` (`RenderEpicDropdown`) is intentionally NOT updated — side panel only per user preference
68
+ - Function named `epicSidebarGlyph` (not `epicStatusGlyph`) — takes `(map[string]string, string)` for nil-safe lookup
69
+ - `go build` + `go test ./...` pass
70
+
71
+ ## Drift Notes
72
+
73
+ No drift — all changes are within existing files and follow established patterns.
@@ -0,0 +1,237 @@
1
+ ---
2
+ type: audit-findings
3
+ audited: 2026-05-02
4
+ ---
5
+
6
+ # Audit Findings: E05 Tasking Permissions
7
+
8
+ ## Main Findings
9
+
10
+ E05 verified the tasking-permissions shift from the planned `m` hotkey to the final `p` priority hotkey, along with explicit router priority writes that stay in `task-building` and leave audit handoff as an explicit workflow step.
11
+
12
+ The audit found documentation drift rather than a core behavior failure: live implementation and tests used `p`, while several planning documents still referred to `m`. The file-specific reconciliation blocks are retained under Proposed Changes for apply/close testing.
13
+
14
+ ## Code Style Review
15
+
16
+
17
+ - [ ] One job per file
18
+ - [ ] One-sentence functions
19
+ - [ ] Test branches
20
+ - [ ] Types are documentation
21
+ - [ ] Build, don't speculate
22
+ - [ ] Errors at boundaries
23
+ - [ ] One source of truth
24
+ - [ ] Comments explain WHY
25
+ - [ ] Content in data files
26
+ - [ ] Small diffs
27
+
28
+ ## Proposed Changes
29
+
30
+ ### Target File
31
+
32
+ `.savepoint/Design.md`
33
+
34
+ ### Replace
35
+
36
+ ```md
37
+ - Router updates are explicit TUI actions: after setting a task to `in_progress`, the agent prompts the user to press `m` in the board to update `.savepoint/router.md` to the focused task. Navigation alone must not change router state.
38
+ ```
39
+
40
+ ### With
41
+
42
+ ```md
43
+ - Router updates are explicit TUI actions: after setting a task to `in_progress`, the agent prompts the user to press `p` in the board to mark the focused task as router priority. Navigation alone must not change router task priority.
44
+ ```
45
+
46
+ ---
47
+
48
+ ### Target File
49
+
50
+ `.savepoint/Design.md`
51
+
52
+ ### Replace
53
+
54
+ ```md
55
+ **Keybindings:** arrow/vim navigation, enter advances, backspace retreats, r/R refreshes, a/A exits toward audit review when proposals exist, q quits.
56
+ ```
57
+
58
+ ### With
59
+
60
+ ```md
61
+ **Keybindings:** arrow/vim navigation, enter opens focused task detail, space advances, backspace retreats, `p` marks the focused non-done task as router priority, `r`/`R` opens release selection or refreshes where supported, `?` opens help, and `q` quits or closes overlays.
62
+ ```
63
+
64
+ ---
65
+
66
+ ### Target File
67
+
68
+ `AGENTS.md`
69
+
70
+ ### Replace
71
+
72
+ ```md
73
+ 3. After setting `in_progress`, press `m` in the TUI to update the router
74
+ ```
75
+
76
+ ### With
77
+
78
+ ```md
79
+ 3. After setting `in_progress`, press `p` in the TUI to mark the focused task as router priority
80
+ ```
81
+
82
+ ---
83
+
84
+ ### Target File
85
+
86
+ `.savepoint/router.md`
87
+
88
+ ### Replace
89
+
90
+ ```md
91
+ **Next:** When starting work, set task `status: in_progress` and press `m` in TUI to update router task. Execute plan, tick checkboxes, run quality gates, update router to next task or `audit-pending`. Stop.
92
+ ```
93
+
94
+ ### With
95
+
96
+ ```md
97
+ **Next:** When starting work, set task `status: in_progress` and press `p` in TUI to mark the focused task as router priority. Execute plan, tick checkboxes, run quality gates, update router to next task or `audit-pending`. Stop.
98
+ ```
99
+
100
+ ---
101
+
102
+ ### Target File
103
+
104
+ `.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md`
105
+
106
+ ### Replace
107
+
108
+ ```yaml
109
+ status: planned
110
+ ```
111
+
112
+ ### With
113
+
114
+ ```yaml
115
+ status: audited
116
+ ```
117
+
118
+ ---
119
+
120
+ ### Target File
121
+
122
+ `.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md`
123
+
124
+ ### Replace
125
+
126
+ ```md
127
+ - TUI `m` hotkey implemented: sets router's `task` field to the currently focused task; detects if it's the last uncompleted task in the epic → sets `audit-pending` state
128
+ - Help overlay shows `m` key binding
129
+ ```
130
+
131
+ ### With
132
+
133
+ ```md
134
+ - TUI `p` priority hotkey implemented: sets router's `task` field to the currently focused non-done task and keeps router state as `task-building`
135
+ - Help overlay shows `p` key binding
136
+ ```
137
+
138
+ ---
139
+
140
+ ### Target File
141
+
142
+ `.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md`
143
+
144
+ ### Replace
145
+
146
+ ```md
147
+ - The `m` hotkey reads the currently focused task, not the epic panel cursor
148
+ - Router state derivation from task:
149
+ - Task is the last uncompleted task in its epic → `state: audit-pending`, `task: <empty>`
150
+ - Otherwise → `state: task-building`, `task: <full-task-id>`
151
+ - `release` and `epic` are always set from the focused task
152
+ - The `m` key does nothing when no task is focused, or when focused on a `done` task
153
+ - The `m` key is independent of navigation — user can browse freely without router drift
154
+ - No code enforcement against agents writing `done`. This is a documentation-only trust boundary. AGENTS.md is the contract.
155
+ ```
156
+
157
+ ### With
158
+
159
+ ```md
160
+ - The `p` hotkey reads the currently focused task, not the epic panel cursor.
161
+ - Router priority writes always set `state: task-building`, `task: <full-task-id>`, `release`, `epic`, and `next_action` from the focused task.
162
+ - The `p` key does nothing when no task is focused, when an overlay is open, or when focused on a `done` task.
163
+ - The `p` key is independent of navigation — user can browse freely without router task drift.
164
+ - Audit state is not inferred by the priority key; audit handoff remains an explicit workflow/router closeout action.
165
+ - No code enforcement prevents agents from writing `done`. This is a documentation-only trust boundary. AGENTS.md is the contract.
166
+
167
+ ## Implemented as
168
+
169
+ - `AGENTS.md`, `templates/project/AGENTS.md`, and phase skill guides now describe the three-status canon and agent/user task-status ownership boundary.
170
+ - `.savepoint/router.md` was simplified around the current state machine and task-building handoff.
171
+ - `.savepoint/Design.md` Section 4 records that agents may only set `in_progress`; user-only operations are `done` and retreat.
172
+ - `internal/board/model.go` adds `writeRouterTask(task data.Task)`, which reads the current router, writes release/epic/task/state/next_action via `data.WriteRouterState`, and updates in-memory router fields.
173
+ - `internal/board/update.go` handles `p` before normal navigation when no overlay is open, no-ops for done tasks, and writes user-visible status messages.
174
+ - `internal/board/help.go` and `internal/board/view.go` advertise `p: Priority` and render priority/status feedback in the footer.
175
+ - `internal/board/update_test.go`, `help_test.go`, `view_test.go`, `card_test.go`, and transition tests cover priority routing, done-task no-op, overlay no-op, help text, footer status feedback, and transition messages.
176
+ - Implementation deviation: the original design specified `m` and last-task `audit-pending` derivation. The final behavior uses `p` and keeps priority writes in `task-building` so audit handoff remains explicit.
177
+ ```
178
+
179
+ ---
180
+
181
+ ### Target File
182
+
183
+ `.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T005-update-help-overlay.md`
184
+
185
+ ### Replace
186
+
187
+ ```yaml
188
+ objective: "Add `m` key binding to the TUI help overlay"
189
+ ```
190
+
191
+ ### With
192
+
193
+ ```yaml
194
+ objective: "Add `p` priority key binding to the TUI help overlay"
195
+ ```
196
+
197
+ ---
198
+
199
+ ### Target File
200
+
201
+ `.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T005-update-help-overlay.md`
202
+
203
+ ### Replace
204
+
205
+ ```md
206
+ # T005: Update Help Overlay
207
+
208
+ ## Acceptance Criteria
209
+
210
+ - Help overlay (`?` key) shows `m` key binding: "m: update router"
211
+ - Key binding appears with consistent styling in the shortcuts list
212
+ - No other help entries modified
213
+
214
+ ## Implementation Plan
215
+
216
+ - [ ] Add `helpRow("m", "update router")` to `RenderHelp` in `help.go`
217
+ - [ ] Run `make build && make test` to verify
218
+ ```
219
+
220
+ ### With
221
+
222
+ ```md
223
+ # T005: Update Help Overlay
224
+
225
+ ## Acceptance Criteria
226
+
227
+ - Help overlay (`?` key) shows `p` key binding for router priority
228
+ - Key binding appears with consistent styling in the shortcuts list
229
+ - No unrelated help entries modified
230
+
231
+ ## Implementation Plan
232
+
233
+ - [x] Add the `p` priority shortcut to `RenderHelp` in `help.go`
234
+ - [x] Verify with `go build -o savepoint.exe main.go` and `go test ./...`
235
+ ```
236
+
237
+ ---
@@ -0,0 +1,54 @@
1
+ ---
2
+ type: epic-design
3
+ status: audited
4
+ ---
5
+
6
+ # Epic E05: Tasking Permissions & Router Updates
7
+
8
+ ## Purpose
9
+
10
+ Restrict agent task status mutation to `in_progress` only (no `done`, no retreat). Add an explicit TUI priority hotkey (`p`) to update the router to the focused non-done task, decoupling router task priority from navigation. The user retains full control over `done` transitions and retreats via the board.
11
+
12
+ ## Definition of Done
13
+
14
+ - AGENTS.md updated: agents set `status: in_progress` when starting implementation; only user can set `done` or retreat
15
+ - Router.md updated: document that agent sets router task when starting work via explicit `p` action
16
+ - Design.md Section 4 updated: status model distinguishes agent vs user capabilities
17
+ - TUI `p` priority hotkey implemented: sets router's `task` field to the currently focused non-done task and keeps router state as `task-building`
18
+ - Help overlay shows `p` key binding
19
+ - `make build && make test` passes
20
+
21
+ ## Components and files
22
+
23
+ | Path | Purpose |
24
+ |------|---------|
25
+ | `AGENTS.md` | Remove "set status: done" from Task Completion Protocol; add `in_progress` guidance |
26
+ | `.savepoint/router.md` | Add agent router-update guidance in task-building state |
27
+ | `.savepoint/Design.md` | Revise Section 4 status model: agent `in_progress` only, user `done`/retreat only |
28
+ | `.savepoint/releases/v1.1/v1.1-PRD.md` | Add E05 to epic breakdown |
29
+ | `.savepoint/router.md` | Update current state for E05/T001 |
30
+ | `internal/board/update.go` | Add `p` key handler for explicit router priority update |
31
+ | `internal/board/model.go` | Add `writeRouterTask()` method to update router release, epic, task, state, and next action |
32
+ | `internal/board/help.go` | Add `p` key to keyboard shortcuts |
33
+ | `internal/data/router.go` | No changes needed (WriteRouterState already supports all fields) |
34
+ | `internal/data/write.go` | No changes needed |
35
+
36
+ ## Architectural notes
37
+
38
+ - The `p` hotkey reads the currently focused task, not the epic panel cursor.
39
+ - Router priority writes always set `state: task-building`, `task: <full-task-id>`, `release`, `epic`, and `next_action` from the focused task.
40
+ - The `p` key does nothing when no task is focused, when an overlay is open, or when focused on a `done` task.
41
+ - The `p` key is independent of navigation — user can browse freely without router task drift.
42
+ - Audit state is not inferred by the priority key; audit handoff remains an explicit workflow/router closeout action.
43
+ - No code enforcement prevents agents from writing `done`. This is a documentation-only trust boundary. AGENTS.md is the contract.
44
+
45
+ ## Implemented as
46
+
47
+ - `AGENTS.md`, `templates/project/AGENTS.md`, and phase skill guides now describe the three-status canon and agent/user task-status ownership boundary.
48
+ - `.savepoint/router.md` was simplified around the current state machine and task-building handoff.
49
+ - `.savepoint/Design.md` Section 4 records that agents may only set `in_progress`; user-only operations are `done` and retreat.
50
+ - `internal/board/model.go` adds `writeRouterTask(task data.Task)`, which reads the current router, writes release/epic/task/state/next_action via `data.WriteRouterState`, and updates in-memory router fields.
51
+ - `internal/board/update.go` handles `p` before normal navigation when no overlay is open, no-ops for done tasks, and writes user-visible status messages.
52
+ - `internal/board/help.go` and `internal/board/view.go` advertise `p: Priority` and render priority/status feedback in the footer.
53
+ - `internal/board/update_test.go`, `help_test.go`, `view_test.go`, `card_test.go`, and transition tests cover priority routing, done-task no-op, overlay no-op, help text, footer status feedback, and transition messages.
54
+ - Implementation deviation: the original design specified `m` and last-task `audit-pending` derivation. The final behavior uses `p` and keeps priority writes in `task-building` so audit handoff remains explicit.
@@ -0,0 +1,45 @@
1
+ ---
2
+ id: E05-tasking-permissions/T001-update-agents-md
3
+ status: done
4
+ objective: "Update AGENTS.md to remove agent 'set status: done' permission and add 'set status: in_progress' guidance with router update instruction"
5
+ depends_on: []
6
+ ---
7
+
8
+ # T001: Update AGENTS.md
9
+
10
+ ## Acceptance Criteria
11
+
12
+ - Task Completion Protocol no longer says "Set the task frontmatter to `status: done`"
13
+ - Protocol says "When starting implementation, set `status: in_progress`"
14
+ - Protocol says "After setting `in_progress`, press `m` in the TUI to update the router"
15
+ - The words "Set the task frontmatter to `status: done`" are removed or replaced
16
+ - Audit Handoff Rule still says the agent updates router.md to `state: audit-pending` when all tasks are done (this is router state, not task state)
17
+
18
+ ## Implementation Plan
19
+
20
+ - [x] In AGENTS.md `## Task Completion Protocol`: replace "Set the task frontmatter to `status: done`" with appropriate guidance
21
+ - [x] In AGENTS.md `## Task Completion Protocol` step 7: keep router update for `audit-pending` (that's router state, not task status)
22
+ - [x] In AGENTS.md add note under `## Task Status Canon` about agent vs user capabilities
23
+ - [x] Run `make build && make test` to verify
24
+
25
+ ## Context Log
26
+
27
+ Files read:
28
+ - AGENTS.md
29
+ - .savepoint/router.md
30
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md
31
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md
32
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md
33
+ - agent-skills/savepoint-build-task/SKILL.md
34
+ - Makefile
35
+
36
+ Files edited:
37
+ - AGENTS.md
38
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md
39
+ - .savepoint/router.md
40
+
41
+ Estimated input tokens: 6500
42
+
43
+ Notes:
44
+ - `make build && make test` could not run literally because `make` is unavailable in this environment.
45
+ - Equivalent gates passed: `go run ./internal/buildtool -version "" build` and `go test ./...`.
@@ -0,0 +1,40 @@
1
+ ---
2
+ id: E05-tasking-permissions/T002-update-router-md
3
+ status: done
4
+ objective: "Add agent router-update guidance to router.md task-building state and update current state for E05"
5
+ depends_on: ["E05-tasking-permissions/T001-update-agents-md"]
6
+ ---
7
+
8
+ # T002: Update Router.md
9
+
10
+ ## Acceptance Criteria
11
+
12
+ - Router.md `task-building` state section includes guidance: "When starting work, set task `status: in_progress` and press `m` in TUI to update router task"
13
+ - Current state in router.md updated to point to E05/T001
14
+ - Router.md continues to describe `audit-pending` transition correctly (user confirms, router updates)
15
+
16
+ ## Implementation Plan
17
+
18
+ - [x] Edit `.savepoint/router.md` `task-building` state block to add agent router-update instruction
19
+ - [x] Update router.md `## Current state` yaml block to point to E05 tasking-permissions epic
20
+ - [x] Run `make build && make test` to verify
21
+
22
+ ## Context Log
23
+
24
+ Files read:
25
+ - .savepoint/router.md
26
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md
27
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md
28
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md
29
+ - agent-skills/savepoint-build-task/SKILL.md
30
+
31
+ Files edited:
32
+ - .savepoint/router.md
33
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md
34
+
35
+ Estimated input tokens: 5200
36
+
37
+ Notes:
38
+ - `make build && make test` could not run literally because `make` is unavailable in this environment.
39
+ - Equivalent gates passed: `go run ./internal/buildtool -version "" build` and `go test ./...`.
40
+ - Router current state already pointed to E05/T002. I left it on the active task instead of moving it backward to completed dependency T001.
@@ -0,0 +1,47 @@
1
+ ---
2
+ id: E05-tasking-permissions/T003-update-design-md
3
+ status: done
4
+ objective: "Revise Design.md Section 4 to document agent vs user task status capabilities"
5
+ depends_on: ["E05-tasking-permissions/T001-update-agents-md"]
6
+ ---
7
+
8
+ # T003: Update Design.md
9
+
10
+ ## Acceptance Criteria
11
+
12
+ - Design.md Section 4 (`## 4. Status model & gates`) documents:
13
+ - Agent can only set `status: in_progress`
14
+ - Only user can set `status: done` or retreat
15
+ - Router update is explicit via TUI `m` key, not automatic on navigation
16
+ - `last_audited` field updated (or not — this is documenting current design, not auditing)
17
+ - No other sections modified
18
+
19
+ ## Implementation Plan
20
+
21
+ - [x] Edit `.savepoint/Design.md` Section 4 to add new permission row or note
22
+ - [x] Update `last_audited` in frontmatter
23
+ - [x] Run `make build && make test` to verify
24
+
25
+ ## Context Log
26
+
27
+ Files read:
28
+ - .savepoint/Design.md
29
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md
30
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md
31
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md
32
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T003-update-design-md.md
33
+ - .savepoint/router.md
34
+ - agent-skills/savepoint-build-task/SKILL.md
35
+ - Makefile
36
+
37
+ Files edited:
38
+ - .savepoint/Design.md
39
+ - .savepoint/router.md
40
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T003-update-design-md.md
41
+
42
+ Estimated input tokens: 8500
43
+
44
+ Notes:
45
+ - `make build && make test` could not run literally because `make` is unavailable in this environment.
46
+ - Equivalent gates passed: `go run ./internal/buildtool -version "" build` and `go test ./...`.
47
+ - Task remains `status: in_progress`; only the user may set `status: done`.
@@ -0,0 +1,98 @@
1
+ ---
2
+ id: E05-tasking-permissions/T004-implement-m-hotkey
3
+ status: done
4
+ objective: "Implement TUI `m` hotkey that explicitly sets the router's task from the currently focused task"
5
+ depends_on: ["E05-tasking-permissions/T002-update-router-md", "E05-tasking-permissions/T003-update-design-md"]
6
+ ---
7
+
8
+ # T004: Implement TUI `m` hotkey
9
+
10
+ ## Acceptance Criteria
11
+
12
+ - Pressing `m` in the TUI board (when no overlay is open) reads the currently focused task and updates `router.md` with:
13
+ - `release`: from focused task
14
+ - `epic`: from focused task
15
+ - `task`: full task ID
16
+ - `state`: `task-building` (or `audit-pending` if last uncompleted task in epic)
17
+ - Pressing `m` when no task is focused does nothing
18
+ - Pressing `m` when focused on a `done` task does nothing (or shows status message)
19
+ - Router `task` field in `writeRouterReleaseEpic` is now set explicitly (currently it writes release+epic only)
20
+ - The `m` key does NOT work when any overlay is open (consistent with other board keys)
21
+ - The `m` key displays a status message confirming the router update: "Router set to {release} {epic}/{task}" or "Audit pending for {epic}" if last task
22
+
23
+ ## Implementation Plan
24
+
25
+ - [x] Add `writeRouterTask(task data.Task)` method to `model.go`: reads current router, sets release/epic/task/state fields, writes via `data.WriteRouterState`
26
+ - [x] Add `m` key handler in `update.go` main switch (before epic panel routing, like `q`/`e`/`r`/`?`)
27
+ - [x] Handler: calls `focusedTask()` to get current task, calls `m.writeRouterTask()`, sets `m.StatusMessage` on success/error
28
+ - [x] Detect "last uncompleted task in epic" logic: scan `m.AllTasks` for the same epic, check if any are not done
29
+ - [x] Update `writeRouterReleaseEpic()` is unchanged (still only writes release+epic, used by navigation)
30
+ - [x] Run `make build && make test` to verify
31
+
32
+ ## Strategic Visual Rework Plan
33
+
34
+ This task is reopened because the `m` hotkey work exposed router-priority and board rendering paths where terminal color fallback behavior still makes the TUI look patchy between black and gray. Do not continue with incremental one-widget fixes. Apply one bottom-up rendering policy.
35
+
36
+ - [x] Force Lipgloss to a deterministic 256-color profile before board rendering starts.
37
+ - [x] Change black 256-color fallbacks for Background, Surface, and Surface 2 to the same actual ANSI256 black value.
38
+ - [x] Centralize the background policy in `internal/styles/styles.go`: TUI surfaces emit no explicit background escapes; terminal default background remains the single source of truth.
39
+ - [x] Remove or avoid explicit background fills from nested panels/cards where they create padded gray bars.
40
+ - [x] Normalize focus borders across task columns, task cards, overlays, and epic sidebar. Prefer single-line box borders if rounded borders continue rendering as dash bars in Warp.
41
+ - [x] Add regression tests that fail if rendered board/card/router-priority output emits explicit background escapes.
42
+ - [x] Verify representative board states in both Windows Terminal and Warp after code tests pass.
43
+
44
+ ## Context Log
45
+
46
+ Files read:
47
+ - .savepoint/router.md
48
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md
49
+ - .savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T004-implement-m-hotkey.md
50
+ - internal/board/model.go
51
+ - internal/board/update.go
52
+ - internal/board/update_test.go
53
+ - internal/board/board.go
54
+ - internal/board/view.go
55
+ - internal/board/column_test.go
56
+ - internal/board/view_test.go
57
+ - internal/board/render_policy_test.go
58
+ - internal/styles/palette.go
59
+ - internal/styles/styles.go
60
+ - internal/data/router.go
61
+ - internal/data/write.go
62
+
63
+ Estimated input tokens: 12000
64
+
65
+ Notes:
66
+ - Focused task comes from `m.Tasks[m.FocusedColumn][m.FocusedTask]`
67
+ - Router state derivation: if all other tasks in the same epic+release are `done`, set `state: audit-pending` and clear `task`; otherwise `state: task-building` with the task ID
68
+ - Focused test: `go test ./internal/board` passed
69
+ - Quality gate: `make build` could not run because `make` is unavailable in this shell
70
+ - Quality gate equivalent: `go run ./internal/buildtool build` passed
71
+ - Quality gate equivalent: `go test ./...` passed
72
+ - Strategic color rework: `lipgloss.SetColorProfile(termenv.ANSI256)` is set before board rendering.
73
+ - Strategic color rework: Background, Surface, and Surface 2 ANSI256 fallbacks now all use `16`.
74
+ - Strategic color rework: nested task/card/panel text no longer paints gray background fills; root-level full-width lines also avoid explicit background escapes.
75
+ - Strategic border rework: rounded borders replaced with single-line borders to avoid Warp dash-bar artifacts.
76
+ - Regression scan: no `RoundedBorder`, rounded border glyphs, or ANSI256 gray background fallback codes (`232`/`233`) remain under `internal/`.
77
+ - Remaining manual check: visually compare representative board states in Windows Terminal and Warp.
78
+ - Follow-up color consistency pass: removed explicit background painting from `Divider`, `HeaderFrame`, `BoardFrame`, and `RootLine`; this avoids mixing terminal-default cells with `48;5;16` cells after nested style resets.
79
+ - Regression tightened: `internal/board/render_policy_test.go` now fails on any `48;` background escape or basic black `40m` escape across board, card, detail, release/epic dropdown, and help render paths.
80
+ - Focused test: `go test ./internal/board` passed after the no-background policy change.
81
+ - Quality gate: `make build` still cannot run because `make` is unavailable in this shell.
82
+ - Quality gate equivalent: `go run ./internal/buildtool build` passed after the no-background policy change.
83
+ - Quality gate equivalent: `go test ./...` passed after the no-background policy change.
84
+ - Manual verification: user confirmed closeout after the PowerShell/Warp color consistency pass.
85
+ - Closeout focused test: `go test ./internal/board` passed.
86
+ - Closeout quality gate: `make build` failed because `make` is unavailable in this shell.
87
+ - Closeout quality gate equivalent: `go run ./internal/buildtool build` passed.
88
+ - Closeout quality gate equivalent: `go test ./...` passed.
89
+ - 2026-05-02 r1.1 E05 T04 pass: task frontmatter set to `status: in_progress`, `phase: test`; router updated to active T004 task.
90
+ - Dependency correction: replaced stale nonexistent `T005-add-help-entry` dependency with `T003-update-design-md`.
91
+ - Focused test: `go test ./internal/board` passed.
92
+ - Quality gate: `make build` failed because `make` is unavailable in this shell.
93
+ - Quality gate equivalent: `go run ./internal/buildtool build` passed.
94
+ - Quality gate equivalent: `go test ./...` passed.
95
+ - Follow-up fix: `m` handler was updating `StatusMessage`, but the footer never rendered that message; `internal/board/view.go` now shows status feedback between the phase line and key hints.
96
+ - Added regression coverage in `internal/board/view_test.go` for footer status rendering.
97
+ - Focused test: `go test ./internal/board` passed after status rendering fix.
98
+ - Quality gate equivalent: `go test ./...` passed after status rendering fix.