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.
- package/.claude/settings.local.json +15 -1
- package/.golangci.yml +11 -0
- package/.savepoint/Design.md +52 -46
- package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md +1 -1
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T005-layout.md +1 -1
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T002-card.md +1 -1
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T006-help-overlay.md +1 -1
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/{Design.md → E06-Detail.md} +5 -3
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md +1 -1
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T003-footer-status-bar.md +1 -1
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md +1 -1
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T010-auto-refresh-watcher.md +2 -0
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/{Design.md → E01-Detail.md} +9 -1
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/{T007-next-activity-header.md → T001-next-activity-header.md} +13 -12
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T002-rename-epic-design-files.md +9 -9
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T003-rename-release-prd.md +2 -2
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T004-update-instruction-files.md +13 -12
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T005-update-cross-references.md +14 -13
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T006-column-and-detail-scrolling.md +25 -15
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T007-column-focus-border-stability.md +57 -0
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/E02-Audit.md +124 -0
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/{Design.md → E02-Detail.md} +12 -3
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T001-fix-makefile.md +11 -8
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T002-linux-build-target.md +12 -7
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T003-macos-build-target.md +9 -5
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T004-smoke-tests-and-artifacts.md +30 -9
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Audit.md +195 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Detail.md +45 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T001-border-resize-fix.md +40 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T002-next-activity-below-header.md +64 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T003-checkbox-rendering-fix.md +56 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T005-unify-status-glyphs.md +65 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T006-forced-256-color-profile.md +36 -0
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Audit.md +167 -0
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Detail.md +51 -0
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T001-sidebar-focusable-navigation.md +65 -0
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T002-epic-detail-overlay.md +73 -0
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T003-epic-status-glyphs.md +73 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Audit.md +237 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md +54 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md +45 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md +40 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T003-update-design-md.md +47 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T004-implement-m-hotkey.md +98 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T005-update-help-overlay.md +33 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T006-tests-and-quality-gates.md +62 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Audit.md +56 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Detail.md +63 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T005-proposals.md +44 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T007-apply-close.md +35 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T009-integration.md +40 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T010-audit-file-migration.md +45 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T011-model-tab-state.md +26 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T012-epic-audit-render.md +33 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T013-handle-tab-keys.md +34 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T014-tab-indicator.md +33 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Audit.md +336 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Detail.md +61 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T001-cli-entrypoint.md +37 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T002-target-validation.md +28 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T003-scaffold-writer.md +46 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T004-atomic-writes.md +27 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T005-magic-prompt.md +25 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T006-clipboard.md +26 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T007-integration-test.md +26 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Audit.md +333 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Detail.md +68 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T001-cli-entrypoint.md +26 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T002-non-tty-fallback.md +27 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T003-tui-app-shell.md +28 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T004-board-model.md +29 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T005-detail-pane.md +27 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T006-status-transitions.md +29 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T007-theme-fallbacks.md +29 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T008-integration-test.md +27 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Audit.md +207 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Detail.md +65 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T001-cli-entrypoint.md +24 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T002-config-router-validation.md +28 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T003-structure-checks.md +29 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T004-dependency-checks.md +27 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T005-audit-orphan-checks.md +28 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T006-quality-gates-report.md +31 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/E11-Detail.md +36 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T001-debug-logging.md +25 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T002-increase-debounce.md +21 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T003-error-handling.md +22 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T004-test-verify.md +29 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Audit.md +444 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Detail.md +45 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T001-default-phase.md +35 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T002-default-status.md +19 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T003-better-errors.md +29 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T004-validate-on-write.md +25 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T005-tests.md +37 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Audit.md +118 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Detail.md +73 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T001-safe-cleanup.md +66 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T002-bug-fixes.md +35 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T003-centralize-duplication.md +60 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T004-infrastructure.md +33 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T005-decompose-update.md +37 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T006-async-io.md +40 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T007-test-coverage.md +37 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Audit.md +267 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Detail.md +54 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T001-group-model.md +39 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T002-data-interfaces.md +42 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T003-discover-orphans.md +33 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T004-epic-panel-headings.md +35 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T005-shell-tokenization.md +27 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T006-unify-enums.md +29 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T007-testutil-package.md +28 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Detail.md +43 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T001-benchmarks.md +31 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T002-fuzz-targets.md +28 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T003-debug-flag.md +30 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T004-dist-checksums.md +27 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T005-windows-targets.md +28 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T006-abbreviation-splitting.md +26 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T007-root-test-allowlist.md +28 -0
- package/.savepoint/releases/v1.1/epics/_archived/T001-cli-entrypoint.md +25 -0
- package/.savepoint/releases/v1.1/epics/_archived/T002-quality-gates.md +27 -0
- package/.savepoint/releases/v1.1/epics/_archived/T003-snapshot.md +27 -0
- package/.savepoint/releases/v1.1/epics/_archived/T004-ai-reconcile.md +29 -0
- package/.savepoint/releases/v1.1/epics/_archived/T006-tui-review.md +31 -0
- package/.savepoint/releases/v1.1/epics/_archived/T008-skip-handling.md +34 -0
- package/.savepoint/releases/v1.1/v1.1-PRD.md +139 -0
- package/.savepoint/router.md +29 -108
- package/AGENTS.md +69 -111
- package/Makefile +19 -3
- package/README.md +6 -6
- package/agent-skills/savepoint-audit/SKILL.md +87 -35
- package/agent-skills/savepoint-build-task/SKILL.md +9 -4
- package/agent-skills/savepoint-create-plan/SKILL.md +10 -5
- package/agent-skills/savepoint-create-task/SKILL.md +44 -31
- package/agent-skills/savepoint-draft-prd/SKILL.md +8 -3
- package/agent-skills/savepoint-system-design/SKILL.md +8 -3
- package/agent_skills_test.go +91 -0
- package/cmd/board.go +59 -0
- package/cmd/board_test.go +137 -0
- package/cmd/doctor.go +53 -0
- package/cmd/doctor_test.go +146 -0
- package/cmd/init.go +63 -0
- package/cmd/init_test.go +104 -0
- package/internal/board/board.go +69 -49
- package/internal/board/board_test.go +83 -67
- package/internal/board/card.go +71 -20
- package/internal/board/card_test.go +141 -12
- package/internal/board/column.go +77 -11
- package/internal/board/column_test.go +63 -13
- package/internal/board/detail.go +107 -72
- package/internal/board/detail_test.go +117 -26
- package/internal/board/epic_panel.go +211 -18
- package/internal/board/epic_panel_test.go +637 -14
- package/internal/board/help.go +1 -0
- package/internal/board/help_test.go +1 -0
- package/internal/board/integration_test.go +266 -0
- package/internal/board/interfaces.go +65 -0
- package/internal/board/interfaces_test.go +114 -0
- package/internal/board/io.go +93 -0
- package/internal/board/layout.go +12 -2
- package/internal/board/layout_test.go +17 -0
- package/internal/board/model.go +130 -52
- package/internal/board/plain.go +88 -0
- package/internal/board/plain_test.go +117 -0
- package/internal/board/release.go +1 -9
- package/internal/board/release_test.go +6 -6
- package/internal/board/render_policy_test.go +77 -0
- package/internal/board/status.go +23 -0
- package/internal/board/theme.go +24 -0
- package/internal/board/theme_test.go +31 -0
- package/internal/board/transitions.go +113 -88
- package/internal/board/transitions_test.go +164 -141
- package/internal/board/tui.go +32 -0
- package/internal/board/update.go +472 -94
- package/internal/board/update_test.go +447 -0
- package/internal/board/util.go +76 -0
- package/internal/board/view.go +139 -22
- package/internal/board/view_test.go +171 -3
- package/internal/board/watch.go +57 -9
- package/internal/buildtool/main.go +211 -0
- package/internal/buildtool/main_test.go +46 -0
- package/internal/data/config.go +17 -3
- package/internal/data/config_test.go +49 -0
- package/internal/data/discover.go +26 -0
- package/internal/data/discover_test.go +34 -10
- package/internal/data/errors.go +4 -0
- package/internal/data/lifecycle.go +13 -6
- package/internal/data/lifecycle_test.go +14 -11
- package/internal/data/parser.go +29 -6
- package/internal/data/parser_test.go +66 -7
- package/internal/data/task.go +1 -0
- package/internal/data/write.go +85 -11
- package/internal/data/write_test.go +167 -0
- package/internal/doctor/checks.go +567 -0
- package/internal/doctor/checks_test.go +716 -0
- package/internal/doctor/gates.go +193 -0
- package/internal/doctor/gates_test.go +166 -0
- package/internal/doctor/interfaces.go +64 -0
- package/internal/doctor/interfaces_test.go +104 -0
- package/internal/doctor/repairs.go +80 -0
- package/internal/doctor/repairs_test.go +81 -0
- package/internal/doctor/report.go +157 -0
- package/internal/doctor/report_test.go +89 -0
- package/internal/init/clipboard.go +146 -0
- package/internal/init/clipboard_test.go +74 -0
- package/internal/init/install.go +16 -0
- package/internal/init/integration_test.go +197 -0
- package/internal/init/prompt.go +14 -0
- package/internal/init/prompt_test.go +77 -0
- package/internal/init/scaffold.go +59 -0
- package/internal/init/scaffold_test.go +179 -0
- package/internal/init/template_freshness_test.go +56 -0
- package/internal/init/validate.go +85 -0
- package/internal/init/validate_test.go +141 -0
- package/internal/init/write.go +73 -0
- package/internal/init/write_test.go +91 -0
- package/internal/styles/palette.go +3 -3
- package/internal/styles/styles.go +39 -12
- package/internal/styles/styles_test.go +133 -0
- package/internal/testutil/fixture.go +113 -0
- package/internal/testutil/fs.go +26 -0
- package/main.go +107 -1
- package/package.json +2 -2
- package/project-audit/audit_report_glm_5.1.md +411 -0
- package/project-audit/audit_report_opus_4.6 +406 -0
- package/project-audit/consolidated-audit-report.md +456 -0
- package/savepoint +0 -0
- package/templates/project/.savepoint/Design.md +2 -2
- package/templates/project/.savepoint/router.md +15 -14
- package/templates/project/AGENTS.md +56 -98
- package/templates/project/agent-skills/savepoint-audit/SKILL.md +87 -0
- package/templates/project/agent-skills/savepoint-build-task/SKILL.md +44 -0
- package/templates/project/agent-skills/savepoint-create-plan/SKILL.md +33 -0
- package/templates/project/agent-skills/savepoint-create-task/SKILL.md +44 -0
- package/templates/project/agent-skills/savepoint-draft-prd/SKILL.md +37 -0
- package/templates/project/agent-skills/savepoint-system-design/SKILL.md +38 -0
- package/templates/prompts/audit-reconciliation.prompt.md +35 -30
- package/templates/prompts/design.prompt.md +3 -1
- package/templates/prompts/epic-design.prompt.md +3 -3
- package/templates/prompts/task-breakdown.prompt.md +1 -1
- package/templates/prompts/task-building.prompt.md +1 -1
- package/templates/prompts/task-planning.prompt.md +1 -1
- package/.savepoint/audit/E01-go-setup/proposals.md +0 -166
- package/.savepoint/audit/E01-go-setup/snapshot.md +0 -71
- package/.savepoint/audit/E01-scaffolding/proposals/AGENTS.md +0 -66
- package/.savepoint/audit/E01-scaffolding/proposals/Design.md +0 -210
- package/.savepoint/audit/E01-scaffolding/proposals/epic-Design.md +0 -117
- package/.savepoint/audit/E01-scaffolding/proposals/quality-review.md +0 -101
- package/.savepoint/audit/E01-scaffolding/snapshot.md +0 -54
- package/.savepoint/audit/E02-data-model/snapshot.md +0 -128
- package/.savepoint/audit/E02-data-readers/proposals.md +0 -123
- package/.savepoint/audit/E02-data-readers/snapshot.md +0 -54
- package/.savepoint/audit/E03-board-tui-core/proposals.md +0 -146
- package/.savepoint/audit/E03-board-tui-core/snapshot.md +0 -57
- package/.savepoint/audit/E03-cli-foundation/snapshot.md +0 -106
- package/.savepoint/audit/E04-board-components/proposals.md +0 -118
- package/.savepoint/audit/E04-board-components/snapshot.md +0 -77
- package/.savepoint/audit/E04-templates-and-prompts/snapshot.md +0 -115
- package/.savepoint/audit/E05-init-command/snapshot.md +0 -125
- package/.savepoint/audit/E05-phase-transitions/proposals.md +0 -83
- package/.savepoint/audit/E05-phase-transitions/snapshot.md +0 -36
- package/.savepoint/audit/E06-atari-noir-layout/proposals.md +0 -130
- package/.savepoint/audit/E06-atari-noir-layout/snapshot.md +0 -84
- package/.savepoint/audit/E06-tui-board/snapshot.md +0 -64
- package/.savepoint/audit/E07-audit-pipeline/snapshot.md +0 -165
- package/.savepoint/audit/E08-board-workflow-cleanup/snapshot.md +0 -65
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T001-border-resize-fix.md +0 -36
- package/ink-cli-ui-design.zip +0 -0
- package/main.exe +0 -0
- package/savepoint.exe +0 -0
- /package/.savepoint/releases/v1/epics/E01-go-setup/{Design.md → E01-Detail.md} +0 -0
- /package/.savepoint/releases/v1/epics/E02-data-readers/{Design.md → E02-Detail.md} +0 -0
- /package/.savepoint/releases/v1/epics/E03-board-tui-core/{Design.md → E03-Detail.md} +0 -0
- /package/.savepoint/releases/v1/epics/E04-board-components/{Design.md → E04-Detail.md} +0 -0
- /package/.savepoint/releases/v1/epics/E05-phase-transitions/{Design.md → E05-Detail.md} +0 -0
- /package/.savepoint/releases/v1/{PRD.md → v1-PRD.md} +0 -0
|
@@ -18,7 +18,21 @@
|
|
|
18
18
|
"Bash(make build *)",
|
|
19
19
|
"Bash(make test *)",
|
|
20
20
|
"Bash(go get *)",
|
|
21
|
-
"Bash(go doc *)"
|
|
21
|
+
"Bash(go doc *)",
|
|
22
|
+
"Bash(make clean *)",
|
|
23
|
+
"Bash(make build-linux *)",
|
|
24
|
+
"Bash(./savepoint_test_bin --version)",
|
|
25
|
+
"PowerShell(go run *)",
|
|
26
|
+
"Bash(go run *)",
|
|
27
|
+
"PowerShell(Get-ChildItem -Path \"C:\\\\Users\\\\User\\\\Branding\\\\03-VIBE-LAB\\\\savepoint\" -Force | Select-Object Name, @{Name=\"Type\"; Expression={if\\($_.PSIsContainer\\){\"DIR\"}else{\"FILE\"}}} | Format-Table -AutoSize)",
|
|
28
|
+
"PowerShell(Get-ChildItem *)",
|
|
29
|
+
"Bash(Get-ChildItem -Path \"C:\\\\Users\\\\User\\\\Branding\\\\03-VIBE-LAB\\\\savepoint\\\\.savepoint\\\\releases\\\\v1.1\\\\epics\\\\E08-board-command\" -Recurse -Filter \"*.md\")",
|
|
30
|
+
"Bash(Select-Object -ExpandProperty FullName)",
|
|
31
|
+
"Bash(cmd\")",
|
|
32
|
+
"PowerShell(go build *)",
|
|
33
|
+
"PowerShell(go test *)",
|
|
34
|
+
"PowerShell(cd \"C:\\\\Users\\\\User\\\\Branding\\\\03-VIBE-LAB\\\\savepoint\"; $files = @\\(\"agent-skills\\\\savepoint-create-task\\\\SKILL.md\", \"templates\\\\project\\\\agent-skills\\\\savepoint-create-task\\\\SKILL.md\"\\); foreach \\($f in $files\\) { $bytes = [System.IO.File]::ReadAllBytes\\($f\\); Write-Host \"$f first bytes: $\\($bytes[0..9] -join ','\\) \\(CRLF: $\\($bytes[3] -eq 13\\)\\)\" })",
|
|
35
|
+
"PowerShell(cd \"C:\\\\Users\\\\User\\\\Branding\\\\03-VIBE-LAB\\\\savepoint\"; $others = Get-ChildItem agent-skills -Recurse -Filter \"SKILL.md\" | Where-Object { $_.DirectoryName -notmatch \"savepoint-create-task\" }; foreach \\($f in $others\\) { $bytes = [System.IO.File]::ReadAllBytes\\($f.FullName\\); Write-Host \"$\\($f.Name\\) dir=$\\($f.Directory.Name\\) CRLF=$\\($bytes[3] -eq 13\\)\" })"
|
|
22
36
|
]
|
|
23
37
|
}
|
|
24
38
|
}
|
package/.golangci.yml
ADDED
package/.savepoint/Design.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: project-design
|
|
3
3
|
status: active
|
|
4
|
-
last_audited:
|
|
4
|
+
last_audited: v1.1/E14-structural-improvements
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Savepoint — System Architecture
|
|
@@ -14,17 +14,20 @@ last_audited: E06-atari-noir-layout (2026-05-02)
|
|
|
14
14
|
|
|
15
15
|
- **File-only.** No MCP server in v1. Agents read and edit Markdown + YAML files directly using their native file tools.
|
|
16
16
|
- **Agent routing:** AGENTS.md → `.savepoint/router.md` → template prompts. See AGENTS.md Workflow section.
|
|
17
|
-
- **Bundled Agent Skills:** Savepoint ships with custom skills (`draft-prd`, `system-design`, `create-plan`, `create-task`, `build-task`, `audit`) to enforce each phase of the state machine.
|
|
17
|
+
- **Bundled Agent Skills:** Savepoint ships with custom skills (`savepoint-draft-prd`, `savepoint-system-design`, `savepoint-create-plan`, `savepoint-create-task`, `savepoint-build-task`, `savepoint-audit`) to enforce each phase of the state machine.
|
|
18
18
|
- **Token-efficiency principle.**
|
|
19
19
|
- Cold session bootstrap: ~5–7K tokens (one-time per conversation).
|
|
20
20
|
- Per-task incremental: <2KB.
|
|
21
21
|
- Audit: 5–15KB.
|
|
22
22
|
- Anything that breaks these bounds violates the wedge.
|
|
23
|
-
- **Go data-reader boundary:** established in epic `E02-data-readers` (2026-05-01). `internal/data` owns Savepoint file parsing and discovery for the Go implementation: task frontmatter models, markdown YAML extraction, router state parsing, config theme defaults, release/epic/task directory listing, and boundary error sentinels.
|
|
23
|
+
- **Go data-reader boundary:** established in epic `E02-data-readers` (2026-05-01). `internal/data` owns Savepoint file parsing and discovery for the Go implementation: task frontmatter models, markdown YAML extraction, router state parsing, config theme defaults, release/epic/task directory listing, task lifecycle validation/defaulting, write-time status validation, and boundary error sentinels.
|
|
24
24
|
- **Template assets** live under `templates/` with helpers in `src/templates/` (epic E04).
|
|
25
|
-
- **Init command** (`savepoint init`) validates, scaffolds
|
|
26
|
-
- **Board command** (`savepoint board`) reads project state, renders the Atari-Noir TUI board, supports release
|
|
27
|
-
- **
|
|
25
|
+
- **Init command** (`savepoint init`) validates target directories, scaffolds rendered copies of `templates/project/`, prints the rendered magic prompt, attempts best-effort clipboard copy, and optionally runs `npm install` after scaffolding (v1.1 E07).
|
|
26
|
+
- **Board command** (`savepoint board`, and bare `savepoint`) reads project state, renders the Atari-Noir TUI board when stdout is a TTY, falls back to a deterministic plain table in non-TTY mode, supports `--release`/`--epic` filtering, detail overlays, task status transitions with mtime-guarded writes, release/epic-scoped router priority markers, fsnotify-based task auto-refresh (epic E06), header Next Activity display, height-aware column/detail viewport scrolling, stable focused/unfocused column border geometry (v1.1 E01), dedicated phase-colored Next Activity line below the header, sentence-boundary checklist rendering in task details, shared status glyph mapping for task cards and the epic sidebar, a forced ANSI256 Lipgloss color profile for board startup (v1.1 E03), a focusable wide-screen epic sidebar with purple epic focus, epic detail overlays, and status glyphs loaded from epic detail frontmatter (v1.1 E04), and an epic Detail/Audit tab switch that renders user-facing audit findings from `{epic}/E##-Audit.md` (v1.1 E06).
|
|
27
|
+
- **Doctor command** (`savepoint doctor`, `savepoint doctor --epic E##`) runs read-only integrity diagnostics for config, router state, release/epic/task structure, frontmatter validity, acceptance criteria presence, dependencies, duplicate task IDs, stale audit files, orphaned task IDs, and configured quality gates. It prints a human-readable report with repair suggestions and exits 0 when clean, 1 when problems are diagnosed, and 2 for internal or invocation failures.
|
|
28
|
+
- **Audit remediation baseline** (v1.1 E13) centralizes frontmatter/body splitting and line-ending normalization in `internal/data`, uses typed sentinel errors for doctor repair suggestions, applies a configurable `quality_gates.gate_timeout`, removes tracked build artifacts from source control, adds `.golangci.yml`, and moves board filesystem reads/writes behind Bubble Tea command messages while preserving direct file I/O inside command helpers.
|
|
29
|
+
- **Structural improvement baseline** (v1.1 E14) groups board `Model` fields into focused embedded state structs, defines consumer-side board/doctor data-access interfaces, routes doctor orphan discovery through `Discover.ListRootDirs`, renders audit-tab hidden sections via exact heading matches, improves quality-gate shell tokenization for quoted and escaped arguments, removes the separate `TaskStatus` enum in favor of `ColumnType`, and adds `internal/testutil` for shared Go test fixtures.
|
|
30
|
+
- **Agent audit workflow** is skill-driven, not a CLI pipeline. At `audit-pending`, a fresh audit agent writes one epic-local `E##-Audit.md`; the user reviews its Audit tab, then asks an agent to apply the admin proposal blocks, update the visible audit findings to reflect the applied outcome, and close the epic.
|
|
28
31
|
|
|
29
32
|
## 2. Directory layout
|
|
30
33
|
|
|
@@ -37,17 +40,13 @@ last_audited: E06-atari-noir-layout (2026-05-02)
|
|
|
37
40
|
├── visual-identity.md ← design system; loaded conditionally for TUI work
|
|
38
41
|
├── router.md ← state-machine routing
|
|
39
42
|
├── config.yml ← theme, quality_gates, verify_strict
|
|
40
|
-
├── audit/
|
|
41
|
-
│ └── {E##-epic}/
|
|
42
|
-
│ ├── snapshot.md
|
|
43
|
-
│ └── proposals/
|
|
44
|
-
│ └── proposals.md
|
|
45
43
|
└── releases/
|
|
46
|
-
└── v1
|
|
47
|
-
├── PRD.md
|
|
44
|
+
└── {release}/ ← e.g. v1, v1.1
|
|
45
|
+
├── {release}-PRD.md ← release-scoped PRD
|
|
48
46
|
└── epics/
|
|
49
47
|
└── E##-{epic-name}/
|
|
50
|
-
├──
|
|
48
|
+
├── E##-Detail.md ← epic delta
|
|
49
|
+
├── E##-Audit.md ← audit findings + admin apply proposals
|
|
51
50
|
└── tasks/
|
|
52
51
|
└── T001-slug.md
|
|
53
52
|
```
|
|
@@ -59,22 +58,24 @@ AGENTS.md at root (uppercase, cross-vendor spec). Design.md in `.savepoint/` (wo
|
|
|
59
58
|
| Level | Definition |
|
|
60
59
|
| ------------ | -------------------------------------------------------------------------------------- |
|
|
61
60
|
| **Release** | The thing being built. One PRD per release. v1 = MVP. |
|
|
62
|
-
| **Epic** | A major feature within a release. Has its own
|
|
61
|
+
| **Epic** | A major feature within a release. Has its own E##-Detail.md (delta from project Design). |
|
|
63
62
|
| **Task** | Independently buildable. Objective-led. **Requires implementation plan before build.** |
|
|
64
63
|
| **Sub-task** | Inline checklist item — _evidence of the implementation plan_, not standalone work. |
|
|
65
64
|
|
|
66
65
|
## 4. Status model & gates
|
|
67
66
|
|
|
68
|
-
Three statuses, with explicit gates:
|
|
67
|
+
Three statuses, with explicit gates and ownership boundaries:
|
|
69
68
|
|
|
70
|
-
| Status | Meaning | Entry gate |
|
|
71
|
-
| ------------- | -------------------------- | --------------------------------------------------------------- |
|
|
72
|
-
| `planned` | Ready to build | plan section non-empty |
|
|
73
|
-
| `in_progress` | AI building | all `depends_on` are `done` |
|
|
74
|
-
| `done` | Complete for current scope | all implementation items checked; verification per project mode |
|
|
69
|
+
| Status | Meaning | Entry gate | Who may set it |
|
|
70
|
+
| ------------- | -------------------------- | --------------------------------------------------------------- | -------------------------------------- |
|
|
71
|
+
| `planned` | Ready to build | plan section non-empty | User or planning workflow |
|
|
72
|
+
| `in_progress` | AI building | all `depends_on` are `done` | Agent when starting implementation |
|
|
73
|
+
| `done` | Complete for current scope | all implementation items checked; verification per project mode | User only |
|
|
75
74
|
|
|
76
75
|
- `blocked` is a **flag**, not a status — `in_progress` + `blocked: "reason"` is valid.
|
|
77
|
-
-
|
|
76
|
+
- Agents may only advance a task into `in_progress`; they must not set `done` or retreat a task to an earlier status.
|
|
77
|
+
- Only the user may set a task to `done` or retreat it from `done` to `in_progress` when follow-up work is required.
|
|
78
|
+
- 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.
|
|
78
79
|
- Verification mode: see `config.yml`.
|
|
79
80
|
|
|
80
81
|
## 5. Dependencies
|
|
@@ -83,13 +84,12 @@ Three statuses, with explicit gates:
|
|
|
83
84
|
- `src/validation/dependencies.ts` detects duplicate task IDs, missing dependencies, and dependency cycles.
|
|
84
85
|
- Cross-epic deps allowed but warned (signal that epic boundaries may be wrong).
|
|
85
86
|
|
|
86
|
-
## 6. CLI surface (
|
|
87
|
+
## 6. CLI surface (3 commands, no extras)
|
|
87
88
|
|
|
88
89
|
| Command | Purpose |
|
|
89
90
|
| ---------------------- | --------------------------------------------------------------------------------- |
|
|
90
91
|
| `savepoint init` | Scaffold `.savepoint/`, print magic prompt to stdout + clipboard |
|
|
91
92
|
| `savepoint board` | Launch TUI; auto-falls-back to plain table on non-TTY |
|
|
92
|
-
| `savepoint audit` | Run audit pipeline (`--skip --reason`, `--epic`) |
|
|
93
93
|
| `savepoint doctor` | Integrity check + ad-hoc quality-gate run + Layer-2 prompt for AI semantic review |
|
|
94
94
|
| `--version` / `--help` | Standard global flags |
|
|
95
95
|
|
|
@@ -98,29 +98,29 @@ Three statuses, with explicit gates:
|
|
|
98
98
|
- **Explicitly rejected:** `task new`, `epic new`, `release new`, `plan`, `next`, `status`, `task done`. All are file edits or TUI actions.
|
|
99
99
|
|
|
100
100
|
**Names:** npm package `savepoint`; binary `savepoint`. No `vk` alias.
|
|
101
|
-
## 7.
|
|
101
|
+
## 7. Agent audit workflow
|
|
102
102
|
|
|
103
103
|
```
|
|
104
|
-
0. Quality Gates —
|
|
105
|
-
1.
|
|
106
|
-
2.
|
|
107
|
-
3.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
5. Commit — Approved proposals overwrite live files. Epic gets status: audited. Next epic unlocks.
|
|
104
|
+
0. Quality Gates — Build agent runs configured build/test gates before audit handoff.
|
|
105
|
+
1. Audit Pending — Router enters `audit-pending` for the completed epic.
|
|
106
|
+
2. Reconcile — Fresh audit agent reads router, epic detail, task files, Design.md, AGENTS.md, and scoped source/test files.
|
|
107
|
+
3. Findings — Agent writes exactly one `{epic}/E##-Audit.md`.
|
|
108
|
+
4. Review — User reviews the TUI Epic Detail Audit tab.
|
|
109
|
+
5. Apply + Close — After user approval, agent applies proposal blocks, updates the audit file's visible findings, marks the epic audited, updates `last_audited`, and advances router.
|
|
111
110
|
```
|
|
112
111
|
|
|
113
|
-
- `
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
112
|
+
- `audit-pending` is a **hard gate**: next epic's tasks cannot enter `in_progress` until prior epic is `audited` or the user explicitly skips the audit.
|
|
113
|
+
- `E##-Audit.md` has two user-facing sections: `## Main Findings` and `## Code Style Review`.
|
|
114
|
+
- `## Main Findings` contains narrative audit findings only: AC verification, important drift, and notable risks. It must not contain file-specific replacement blocks.
|
|
115
|
+
- `## Code Style Review` contains the 10 AGENTS.md code style checks.
|
|
116
|
+
- `## Proposed Changes` contains admin/apply metadata using `### Target File`, `### Replace`, and `### With`. The TUI Audit tab intentionally does not render this section to avoid stale file-change details in the Epic Detail panel.
|
|
117
|
+
- Apply/close must rewrite `## Main Findings` and `## Code Style Review` in the same `E##-Audit.md` so the TUI Audit tab shows resolved findings and remaining risks instead of stale pre-apply blockers. `## Proposed Changes` stays as the trace of what was applied unless the user asks otherwise.
|
|
118
|
+
- There is no `savepoint audit` CLI pipeline in the active design. Audit is performed by agents using `agent-skills/savepoint-audit/SKILL.md`.
|
|
119
119
|
|
|
120
120
|
Three layers:
|
|
121
121
|
|
|
122
122
|
- **Layer 1 (mechanical):** user's chosen linter. Recommended: eslint+dependency-cruiser (TS), radon+pylint (Python), gocyclo+staticcheck (Go). Cross-language fallback: `lizard`. Quality gate config: see `.savepoint/config.yml`.
|
|
123
|
-
- **Layer 2 (AI semantic review):** baked into the audit reconcile prompt. Outputs
|
|
123
|
+
- **Layer 2 (AI semantic review):** baked into the audit reconcile prompt. Outputs Main Findings and Code Style Review in the epic-local audit file. **Advisory, not blocking.**
|
|
124
124
|
- **Layer 3:** `savepoint doctor` runs Layer 1 + prints Layer 2 prompt for ad-hoc use.
|
|
125
125
|
|
|
126
126
|
## 8. TUI
|
|
@@ -131,15 +131,19 @@ Acknowledged terminal limits: fonts, scanlines, glows, letter-spacing, mouse-dri
|
|
|
131
131
|
|
|
132
132
|
**Render fallbacks:** 256-color → 16-color hard-coded → `NO_COLOR=1` monochrome with glyphs → non-TTY plain table.
|
|
133
133
|
|
|
134
|
-
**Layout:** single screen with a 3-column task board (`planned`, `in_progress`, `done`), optional epic sidebar on wide terminals, centered overlays for release/epic/help/task
|
|
134
|
+
**Layout:** single screen with a 3-column task board (`planned`, `in_progress`, `done`), optional epic sidebar on wide terminals, centered overlays for release/epic/help/task/epic-detail views, static Atari-Noir header/footer, full-width dividers, uniform black TUI backgrounds, and navigation hints. Active router `next_action` renders as a dedicated full-width line below the header with phase-colored `PLAN`, `BUILD`, or `AUDIT` prefix styling and truncates to terminal width. Columns and detail overlays use height-aware viewport slicing with subtle above/more scroll indicators. Focused and unfocused columns preserve the same rounded-border geometry so focus changes do not shift content. Task detail implementation-plan checkboxes render once per semantic sentence, not once per hard-wrapped markdown line. On terminals at least 120 columns wide, the epic sidebar is focusable from the Planned column; it uses the purple epic accent for focused panel borders, focused epic labels, and epic detail overlays while task-column focus remains orange. Task card and epic sidebar status glyphs share `internal/board/status.go`; task cards use explicit `Task.Status` when available and retain the legacy column/stage glyph fallback when it is not. Non-TTY output remains a plain table fallback.
|
|
135
135
|
|
|
136
136
|
**Visual guardrail:** the terminal board intentionally uses one black background for Background, Surface, and Surface 2. Do not restore subtly different dark panel fills; depth should come from spacing, dividers, glyphs, and focused Atari Orange borders.
|
|
137
137
|
|
|
138
|
-
**
|
|
138
|
+
**Terminal color policy:** the board must use a deterministic Lipgloss color profile and one canonical terminal black across truecolor, ANSI256, and ANSI fallbacks. In 256-color mode, Background, Surface, and Surface 2 must map to the same actual black value, not adjacent dark-gray values. Full-screen/root surfaces may paint that one black background for consistency; nested task cards, task text, glyphs, tags, metadata, and router-priority labels should remain foreground-only unless a component explicitly owns a filled visual region. This prevents padded text from creating gray bars in terminals such as PowerShell, Windows Terminal, VS Code terminal, and Warp.
|
|
139
|
+
|
|
140
|
+
**Border policy:** focus must not change geometry or introduce terminal-specific broken border rendering. Use one consistent box-border family across columns, cards, and overlays. If rounded borders render as dash bars or broken segments in Warp, prefer the single-line border style already allowed by `.savepoint/visual-identity.md`; do not mix rounded and single-line borders as an ad-hoc per-component workaround.
|
|
141
|
+
|
|
142
|
+
**Board persistence and refresh:** task status transitions write canonical task frontmatter through `internal/data.WriteTaskStatus` with mtime conflict checks. Board update handlers dispatch filesystem reads and writes through Bubble Tea command helpers (`routerWriteMsg`, `taskWriteMsg`, `epicDetailMsg`, `auditContentMsg`, and `errorMsg`) so `Update()` remains an event/message reducer. The board treats `Model.Root` as the `.savepoint` directory, watches `.savepoint/releases/` recursively with fsnotify, adds watches for newly-created release/epic/task directories, and reloads task plus release/epic index data plus epic status metadata after debounced file changes. Router priority markers match release + epic + task, not only the short `T###` value; completed cards render with the orange build glyph even if they previously matched router priority. The `p` key explicitly writes the focused non-done task to router state as `task-building`; it does not infer `audit-pending` from task position. Epic status glyphs are cached from each epic's `E##-Detail.md` frontmatter and shown in the wide epic sidebar only.
|
|
139
143
|
|
|
140
144
|
**Implementation modules:** see AGENTS.md Codebase Map.
|
|
141
145
|
|
|
142
|
-
**Keybindings:** arrow/vim navigation, enter advances, backspace retreats, r
|
|
146
|
+
**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.
|
|
143
147
|
|
|
144
148
|
## 9. Concurrency
|
|
145
149
|
|
|
@@ -169,12 +173,14 @@ All failure modes are diagnosed by `savepoint doctor`. Doctor diagnoses and prop
|
|
|
169
173
|
|
|
170
174
|
## 12. Distribution & build
|
|
171
175
|
|
|
172
|
-
> Audit note: the live repository is
|
|
176
|
+
> Audit note: the live repository is now a Go module (`github.com/opencode/savepoint`). Remaining TypeScript-era distribution details should be removed as Go epics are audited.
|
|
173
177
|
|
|
174
178
|
- **License:** MIT.
|
|
175
|
-
- **
|
|
176
|
-
- **
|
|
177
|
-
- **
|
|
179
|
+
- **Runtime:** Go CLI binary. Source builds with `go build`; tests run with `go test ./...`.
|
|
180
|
+
- **Local build:** `make build` delegates to `internal/buildtool`, builds `savepoint` or `savepoint.exe`, and injects `main.version` from `VERSION` or the latest git tag.
|
|
181
|
+
- **Cross-platform builds:** `make build-all` cross-compiles linux-amd64, linux-arm64, darwin-amd64, and darwin-arm64 raw binaries into `dist/{platform}-{arch}/savepoint`.
|
|
182
|
+
- **Artifacts:** `make dist` creates versioned `.tar.gz` archives in `dist/` for the Linux and Darwin targets using Go archive APIs, not shell `tar`.
|
|
183
|
+
- **Smoke validation:** `make smoke-test` builds the local binary and runs `--version` as a headless exit-0 check.
|
|
178
184
|
- **No telemetry.** Ever.
|
|
179
185
|
|
|
180
186
|
## 13. Testing
|
|
@@ -27,7 +27,7 @@ depends_on: []
|
|
|
27
27
|
Files read:
|
|
28
28
|
|
|
29
29
|
- `.savepoint/router.md`
|
|
30
|
-
- `.savepoint/releases/v1/epics/E01-go-setup/
|
|
30
|
+
- `.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md`
|
|
31
31
|
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md`
|
|
32
32
|
- `go.mod`
|
|
33
33
|
- `go.sum`
|
|
@@ -25,7 +25,7 @@ depends_on: [E03-board-tui-core/T004-styles]
|
|
|
25
25
|
|
|
26
26
|
## Context Log
|
|
27
27
|
|
|
28
|
-
Files read: internal/board/model.go, view.go, update.go, board.go, view_test.go, update_test.go, model_test.go, internal/styles/styles.go, go.mod, .savepoint/releases/v1/epics/E03-board-tui-core/
|
|
28
|
+
Files read: internal/board/model.go, view.go, update.go, board.go, view_test.go, update_test.go, model_test.go, internal/styles/styles.go, go.mod, .savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md
|
|
29
29
|
|
|
30
30
|
Estimated input tokens: ~6 000
|
|
31
31
|
|
|
@@ -26,7 +26,7 @@ depends_on: [E04-board-components/T001-column]
|
|
|
26
26
|
|
|
27
27
|
## Context Log
|
|
28
28
|
|
|
29
|
-
Files read: `internal/board/column.go`, `internal/board/column_test.go`, `internal/styles/styles.go`, `internal/styles/palette.go`, `internal/data/task.go`, `.savepoint/releases/v1/epics/E04-board-components/
|
|
29
|
+
Files read: `internal/board/column.go`, `internal/board/column_test.go`, `internal/styles/styles.go`, `internal/styles/palette.go`, `internal/data/task.go`, `.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md`, `AGENTS.md`, `.savepoint/router.md`
|
|
30
30
|
|
|
31
31
|
Estimated input tokens: ~4 000
|
|
32
32
|
|
|
@@ -24,7 +24,7 @@ depends_on: [E04-board-components/T005-release-dropdown]
|
|
|
24
24
|
|
|
25
25
|
## Context Log
|
|
26
26
|
|
|
27
|
-
Files read: `.savepoint/router.md`, `.savepoint/releases/v1/epics/E04-board-components/
|
|
27
|
+
Files read: `.savepoint/router.md`, `.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md`, this task file, `agent-skills/ink-tui-design/SKILL.md`, `.savepoint/visual-identity.md`, `internal/board/model.go`, `internal/board/update.go`, `internal/board/view.go`, `internal/board/detail.go`, `internal/board/epic_panel.go`, `internal/board/release.go`, `internal/board/update_test.go`, `internal/board/view_test.go`, `internal/board/detail_test.go`, `internal/board/release_test.go`, `internal/styles/styles.go`, `go.mod`, `Makefile`
|
|
28
28
|
Estimated input tokens: ~8500
|
|
29
29
|
Notes: Added help overlay renderer, `?` key handling, centered overlay rendering over dimmed board, and focused render/update/view tests. Focused test `go test ./internal/board/...` initially failed in the sandbox because Go could not access the external build cache; rerun with approved cache access passed. Quality gates: `go build ./...` pass, `go vet ./...` pass, `go test ./...` pass.
|
|
30
30
|
|
|
@@ -46,11 +46,11 @@ Update the existing TUI to align with the **Atari-Noir SavePoint design system**
|
|
|
46
46
|
- `internal/styles/palette.go` defines the Atari-Noir hex palette plus ANSI256/ANSI16 fallbacks.
|
|
47
47
|
- `internal/styles/styles.go` centralizes header, divider, footer, column, card, detail, glyph, and semantic tag styles.
|
|
48
48
|
- `internal/board/view.go` renders the static SavePoint header, explicit full-width top/bottom dividers, the static `PLAN │ BUILD │ AUDIT` footer, subdued navigation hints, and overlay composition.
|
|
49
|
-
- `internal/board/card.go` wraps long task titles instead of truncating them
|
|
50
|
-
- `internal/board/detail.go` adds spacing below Acceptance Criteria and Implementation Plan headings, renders checklist state with `☑`/`□`, and labels the router-priority task.
|
|
49
|
+
- `internal/board/card.go` wraps long task titles instead of truncating them, uses a green `▣` marker only for the release/epic/task-scoped router-priority task, and keeps all done cards on the orange build glyph.
|
|
50
|
+
- `internal/board/detail.go` adds spacing below Acceptance Criteria and Implementation Plan headings, renders checklist state with `☑`/`□`, and labels only the release/epic/task-scoped router-priority task.
|
|
51
51
|
- `internal/data/task.go` and `internal/data/parser.go` represent Implementation Plan items as `CheckItem{Text, Done}` and parse `- [x]`, `- [ ]`, and legacy `- ` items.
|
|
52
52
|
- `internal/data/write.go` persists task status and phase changes with mtime conflict protection.
|
|
53
|
-
- `internal/board/watch.go` adds fsnotify-based recursive release directory watching, 100ms debounce, and reload messages used by `internal/board/update.go`.
|
|
53
|
+
- `internal/board/watch.go` adds fsnotify-based recursive release directory watching from the `.savepoint/releases/` root, dynamically adds watches for newly-created subdirectories, applies a 100ms debounce, and sends reload messages used by `internal/board/update.go`.
|
|
54
54
|
|
|
55
55
|
## Implementation Deltas
|
|
56
56
|
|
|
@@ -58,3 +58,5 @@ Update the existing TUI to align with the **Atari-Noir SavePoint design system**
|
|
|
58
58
|
- Audit closeout removed unnecessary borders from unfocused header, board, column, card, and epic-panel surfaces while preserving Atari Orange borders for focused cards/columns and detail overlays.
|
|
59
59
|
- User-approved visual guardrail: Background, Surface, and Surface 2 are intentionally the same black value in the terminal TUI. Do not reintroduce subtly different background fills for panels/cards.
|
|
60
60
|
- The main view now renders explicit full-width divider lines with `styles.Divider` rather than relying on component frames as separators.
|
|
61
|
+
- Auto-refresh reload now refreshes both task data and release/epic indexes so newly-added task files and newly-added epic directories can appear without restarting the board.
|
|
62
|
+
- Router-priority matching is intentionally scoped by release and epic before task number; a router task of `T001` must not mark every epic's `T001` as priority.
|
package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md
CHANGED
|
@@ -27,7 +27,7 @@ depends_on: ["E06-atari-noir-layout/T001-color-system"]
|
|
|
27
27
|
|
|
28
28
|
Files read:
|
|
29
29
|
- `.savepoint/router.md`
|
|
30
|
-
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/
|
|
30
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/E06-Detail.md`
|
|
31
31
|
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md`
|
|
32
32
|
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T001-color-system.md`
|
|
33
33
|
- `.savepoint/visual-identity.md`
|
|
@@ -30,7 +30,7 @@ depends_on: ["E06-atari-noir-layout/T002-header-and-dividers"]
|
|
|
30
30
|
|
|
31
31
|
Files read:
|
|
32
32
|
- `.savepoint/router.md`
|
|
33
|
-
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/
|
|
33
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/E06-Detail.md`
|
|
34
34
|
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T003-footer-status-bar.md`
|
|
35
35
|
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md`
|
|
36
36
|
- `.savepoint/visual-identity.md`
|
package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md
CHANGED
|
@@ -26,7 +26,7 @@ depends_on: ["E06-atari-noir-layout/T001-color-system"]
|
|
|
26
26
|
|
|
27
27
|
Files read:
|
|
28
28
|
- `.savepoint/router.md`
|
|
29
|
-
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/
|
|
29
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/E06-Detail.md`
|
|
30
30
|
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md`
|
|
31
31
|
- `internal/styles/palette.go`
|
|
32
32
|
- `internal/styles/styles.go`
|
package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T010-auto-refresh-watcher.md
CHANGED
|
@@ -62,3 +62,5 @@ Notes:
|
|
|
62
62
|
- `data.Task` gained `Path` and `Mtime` (yaml:"-") fields populated in `loadEpicTasks`.
|
|
63
63
|
- Advance/Retreat disk writes live in `update.go`, not `transitions.go` (keeps transitions pure).
|
|
64
64
|
- Watcher created in `newProjectModel`; Init() subscribes if non-nil; nil watcher = test-safe.
|
|
65
|
+
- Follow-up fix (2026-05-02): `newWatcher` receives `root` as the `.savepoint` directory, so it watches `root/releases` directly rather than `.savepoint/.savepoint/releases`. Watch startup errors now fail model creation instead of being silently ignored.
|
|
66
|
+
- Follow-up fix (2026-05-02): file-change reloads refresh task data plus release/epic indexes, and create events add watches for newly-created directories before the debounced reload.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: epic-design
|
|
3
|
-
status:
|
|
3
|
+
status: audited
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Epic E01: TUI Optimisation
|
|
@@ -18,6 +18,14 @@ Performance, layout robustness, and structural improvements for the board TUI. F
|
|
|
18
18
|
- Detail overlay is height-capped (~70%) with scroll indicators for overflow content
|
|
19
19
|
- All scroll indicators use dim/subtle styling consistent with Atari Noir aesthetic
|
|
20
20
|
|
|
21
|
+
## Implemented As
|
|
22
|
+
|
|
23
|
+
- Header Next Activity rendering is implemented in `internal/board/view.go` using `FormatNextActivity` and `styles.HeaderRight`.
|
|
24
|
+
- Column and detail scrolling are implemented through `ColumnOffsets`, `DetailOffset`, height-aware layout, viewport slicing, and subtle scroll indicators in `internal/board/model.go`, `internal/board/layout.go`, `internal/board/update.go`, `internal/board/column.go`, and `internal/board/detail.go`.
|
|
25
|
+
- Focus border stability is implemented by rendering unfocused columns with `styles.ColumnUnfocused`, matching focused column border dimensions while using the subtle border color.
|
|
26
|
+
- Naming conventions were reconciled across workflow docs: per-epic `Design.md` files became `E##-Detail.md`, and release `PRD.md` became `{release}-PRD.md`.
|
|
27
|
+
- The originally listed fsnotify watcher scope was already present from the prior TUI epic and was reviewed as existing behavior rather than newly introduced in this epic.
|
|
28
|
+
|
|
21
29
|
## Components and files
|
|
22
30
|
|
|
23
31
|
| Path | Purpose |
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
id: E01-tui-optimisation/
|
|
3
|
-
status:
|
|
2
|
+
id: E01-tui-optimisation/T001-next-activity-header
|
|
3
|
+
status: done
|
|
4
4
|
objective: "Show Next Activity indicator in the TUI header bar, right-aligned, displaying the current router state"
|
|
5
5
|
depends_on: []
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# T001: Next Activity Header Display
|
|
9
9
|
|
|
10
10
|
## Acceptance Criteria
|
|
11
11
|
|
|
@@ -21,18 +21,18 @@ depends_on: []
|
|
|
21
21
|
|
|
22
22
|
## Implementation Plan
|
|
23
23
|
|
|
24
|
-
- [
|
|
25
|
-
- [
|
|
24
|
+
- [x] Add `HeaderRight` style to `internal/styles/styles.go` (dim foreground, right-aligned)
|
|
25
|
+
- [x] Create `FormatNextActivity(state *data.RouterState) string` helper in `internal/board/view.go` that:
|
|
26
26
|
- Parses router state and formats compact string based on state type
|
|
27
27
|
- Truncates to max 20 chars using `xansi.Truncate` with ellipsis
|
|
28
|
-
- [
|
|
28
|
+
- [x] Update `view.go` `View()` method — modify header rendering:
|
|
29
29
|
- Split header into left (icon + "SAVEPOINT") and right sections
|
|
30
30
|
- Use `lipgloss.PlaceHorizontal` or manual string construction to position Next Activity on right
|
|
31
31
|
- Maintain existing `HeaderFrame` width and padding
|
|
32
|
-
- [
|
|
33
|
-
- [
|
|
34
|
-
- [
|
|
35
|
-
- [
|
|
32
|
+
- [x] Update `main.go` or board initialization to read router state and populate `Model` with parsed state
|
|
33
|
+
- [x] Add test in `internal/board/view_test.go` for Next Activity rendering at various widths
|
|
34
|
+
- [x] Add test for `FormatNextActivity` covering all router states and truncation behavior
|
|
35
|
+
- [x] Run quality gates — `make build && make test` unavailable in this shell; equivalent `go build ./...` and `go test ./...` pass
|
|
36
36
|
|
|
37
37
|
## Context Log
|
|
38
38
|
|
|
@@ -43,8 +43,7 @@ Files read:
|
|
|
43
43
|
- `internal/data/router.go`
|
|
44
44
|
- `internal/board/view_test.go`
|
|
45
45
|
- `.savepoint/router.md`
|
|
46
|
-
- `.savepoint/releases/v1.1/epics/
|
|
47
|
-
- `.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T006-column-and-detail-scrolling.md`
|
|
46
|
+
- `.savepoint/releases/v1.1/epics/E03-header-activity/E03-Detail.md`
|
|
48
47
|
|
|
49
48
|
Estimated input tokens: 2800
|
|
50
49
|
|
|
@@ -53,3 +52,5 @@ Notes:
|
|
|
53
52
|
- Router state already available via `m.RouterTask` in Model — may need to add `*data.RouterState` field or parse separately
|
|
54
53
|
- Truncation uses same `xansi` package already imported in view.go
|
|
55
54
|
- Max 20 char constraint keeps header clean at all terminal widths
|
|
55
|
+
- Audit must-fix applied: stale implementation checklist items were ticked after verifying the implemented source and tests.
|
|
56
|
+
- Quality gates verified during audit: `go build ./...` passed; `go test ./...` passed.
|
package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T002-rename-epic-design-files.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: E01-tui-optimisation/T002-rename-epic-design-files
|
|
3
|
-
status:
|
|
3
|
+
status: done
|
|
4
4
|
objective: "Rename all epic Design.md files to E##-Detail.md convention"
|
|
5
5
|
depends_on: []
|
|
6
6
|
---
|
|
@@ -17,14 +17,14 @@ depends_on: []
|
|
|
17
17
|
|
|
18
18
|
## Implementation Plan
|
|
19
19
|
|
|
20
|
-
- [
|
|
21
|
-
- [
|
|
22
|
-
- [
|
|
23
|
-
- [
|
|
24
|
-
- [
|
|
25
|
-
- [
|
|
26
|
-
- [
|
|
27
|
-
- [
|
|
20
|
+
- [x] Rename `.savepoint/releases/v1/epics/E01-go-setup/Design.md` → `E01-Detail.md`
|
|
21
|
+
- [x] Rename `.savepoint/releases/v1/epics/E02-data-readers/Design.md` → `E02-Detail.md`
|
|
22
|
+
- [x] Rename `.savepoint/releases/v1/epics/E03-board-tui-core/Design.md` → `E03-Detail.md`
|
|
23
|
+
- [x] Rename `.savepoint/releases/v1/epics/E04-board-components/Design.md` → `E04-Detail.md`
|
|
24
|
+
- [x] Rename `.savepoint/releases/v1/epics/E05-phase-transitions/Design.md` → `E05-Detail.md`
|
|
25
|
+
- [x] Rename `.savepoint/releases/v1/epics/E06-atari-noir-layout/Design.md` → `E06-Detail.md`
|
|
26
|
+
- [x] Rename `.savepoint/releases/v1.1/epics/E01-tui-optimisation/Design.md` → `E01-Detail.md`
|
|
27
|
+
- [x] Rename `.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/Design.md` → `E02-Detail.md`
|
|
28
28
|
|
|
29
29
|
## Context Log
|
|
30
30
|
|
package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T003-rename-release-prd.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: E01-tui-optimisation/T003-rename-release-prd
|
|
3
|
-
status:
|
|
3
|
+
status: done
|
|
4
4
|
objective: "Rename release PRD.md to version-anchored convention"
|
|
5
5
|
depends_on: []
|
|
6
6
|
---
|
|
@@ -15,7 +15,7 @@ depends_on: []
|
|
|
15
15
|
|
|
16
16
|
## Implementation Plan
|
|
17
17
|
|
|
18
|
-
- [
|
|
18
|
+
- [x] Rename `.savepoint/releases/v1/PRD.md` → `v1-PRD.md`
|
|
19
19
|
|
|
20
20
|
## Context Log
|
|
21
21
|
|
package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T004-update-instruction-files.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: E01-tui-optimisation/T004-update-instruction-files
|
|
3
|
-
status:
|
|
3
|
+
status: done
|
|
4
4
|
objective: "Update all instruction files to reference new naming convention"
|
|
5
5
|
depends_on:
|
|
6
6
|
- E01-tui-optimisation/T002-rename-epic-design-files
|
|
@@ -26,17 +26,17 @@ depends_on:
|
|
|
26
26
|
|
|
27
27
|
## Implementation Plan
|
|
28
28
|
|
|
29
|
-
- [
|
|
30
|
-
- [
|
|
31
|
-
- [
|
|
32
|
-
- [
|
|
33
|
-
- [
|
|
34
|
-
- [
|
|
35
|
-
- [
|
|
36
|
-
- [
|
|
37
|
-
- [
|
|
38
|
-
- [
|
|
39
|
-
- [
|
|
29
|
+
- [x] Update `.savepoint/router.md` — all epic `Design.md` → `E##-Detail.md`, `PRD.md` → `v1-PRD.md`
|
|
30
|
+
- [x] Update `AGENTS.md` — epic design file path pattern
|
|
31
|
+
- [x] Update `agent-skills/savepoint-create-plan/SKILL.md`
|
|
32
|
+
- [x] Update `agent-skills/savepoint-system-design/SKILL.md`
|
|
33
|
+
- [x] Update `agent-skills/savepoint-build-task/SKILL.md`
|
|
34
|
+
- [x] Update `agent-skills/savepoint-audit/SKILL.md`
|
|
35
|
+
- [x] Update `agent-skills/savepoint-create-task/SKILL.md`
|
|
36
|
+
- [x] Update `templates/project/AGENTS.md`
|
|
37
|
+
- [x] Update `templates/prompts/task-building.prompt.md`
|
|
38
|
+
- [x] Update `templates/prompts/task-planning.prompt.md`
|
|
39
|
+
- [x] Update `templates/prompts/task-breakdown.prompt.md`
|
|
40
40
|
|
|
41
41
|
## Context Log
|
|
42
42
|
|
|
@@ -48,3 +48,4 @@ Estimated input tokens: 800
|
|
|
48
48
|
Notes:
|
|
49
49
|
- Only change path references, do not alter surrounding content
|
|
50
50
|
- Root Design.md references stay as-is
|
|
51
|
+
- Audit must-fix applied: stale implementation checklist items were ticked after verifying the referenced instruction-file updates were present in the completed task scope.
|
package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T005-update-cross-references.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: E01-tui-optimisation/T005-update-cross-references
|
|
3
|
-
status:
|
|
3
|
+
status: done
|
|
4
4
|
objective: "Update all cross-references in task files and audit snapshots"
|
|
5
5
|
depends_on:
|
|
6
6
|
- E01-tui-optimisation/T002-rename-epic-design-files
|
|
@@ -19,18 +19,18 @@ depends_on:
|
|
|
19
19
|
|
|
20
20
|
## Implementation Plan
|
|
21
21
|
|
|
22
|
-
- [
|
|
23
|
-
- [
|
|
24
|
-
- [
|
|
25
|
-
- [
|
|
26
|
-
- [
|
|
27
|
-
- [
|
|
28
|
-
- [
|
|
29
|
-
- [
|
|
30
|
-
- [
|
|
31
|
-
- [
|
|
32
|
-
- [
|
|
33
|
-
- [
|
|
22
|
+
- [x] Find all task files with "Design.md" in content and update epic-level references to `E##-Detail.md`
|
|
23
|
+
- [x] Update `.savepoint/audit/E02-data-readers/proposals.md`
|
|
24
|
+
- [x] Update `.savepoint/audit/E03-board-tui-core/proposals.md`
|
|
25
|
+
- [x] Update `.savepoint/audit/E03-board-tui-core/snapshot.md`
|
|
26
|
+
- [x] Update `.savepoint/audit/E04-board-components/proposals.md`
|
|
27
|
+
- [x] Update `.savepoint/audit/E04-board-components/snapshot.md`
|
|
28
|
+
- [x] Update `.savepoint/audit/E05-phase-transitions/proposals.md`
|
|
29
|
+
- [x] Update `.savepoint/audit/E05-phase-transitions/snapshot.md`
|
|
30
|
+
- [x] Update `.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T*.md` files
|
|
31
|
+
- [x] Update `.savepoint/releases/v1/epics/E04-board-components/tasks/T*.md` files
|
|
32
|
+
- [x] Update `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T*.md` files
|
|
33
|
+
- [x] Run grep verification: no `epics/.*Design\.md` references remain
|
|
34
34
|
|
|
35
35
|
## Context Log
|
|
36
36
|
|
|
@@ -42,3 +42,4 @@ Estimated input tokens: 1200
|
|
|
42
42
|
Notes:
|
|
43
43
|
- Only update epic-level Design.md paths (e.g., `E03-board-tui-core/Design.md` → `E03-Detail.md`)
|
|
44
44
|
- Root `.savepoint/Design.md` references must NOT be changed
|
|
45
|
+
- Audit must-fix applied: stale implementation checklist items were ticked after verifying the completed cross-reference cleanup task scope.
|