savepoint 1.0.4 → 1.0.7
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/package.json +11 -4
- package/savepoint.exe +0 -0
- package/.claude/settings.local.json +0 -38
- package/.github/workflows/ci.yml +0 -20
- package/.golangci.yml +0 -11
- package/.prettierignore +0 -4
- package/.savepoint/Design.md +0 -207
- package/.savepoint/PRD.md +0 -58
- package/.savepoint/config.yml +0 -27
- package/.savepoint/releases/v1/epics/E01-go-setup/E01-Detail.md +0 -39
- package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md +0 -42
- package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T002-entrypoint.md +0 -23
- package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T003-directory-structure.md +0 -24
- package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T004-makefile.md +0 -23
- package/.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md +0 -61
- package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T001-task-struct.md +0 -29
- package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T002-frontmatter-parser.md +0 -30
- package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T003-router-reader.md +0 -29
- package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T004-config-reader.md +0 -29
- package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T005-discovery.md +0 -30
- package/.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md +0 -38
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T001-model.md +0 -29
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T002-update-loop.md +0 -30
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T003-view.md +0 -34
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T004-styles.md +0 -29
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T005-layout.md +0 -42
- package/.savepoint/releases/v1/epics/E04-board-components/E04-Detail.md +0 -44
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T001-column.md +0 -34
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T002-card.md +0 -33
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T003-epic-panel.md +0 -49
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T004-detail-overlay.md +0 -40
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T005-release-dropdown.md +0 -33
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T006-help-overlay.md +0 -34
- package/.savepoint/releases/v1/epics/E05-phase-transitions/E05-Detail.md +0 -38
- package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T001-phase-stepping.md +0 -29
- package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T002-gates.md +0 -31
- package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T003-write-task.md +0 -31
- package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T004-write-router.md +0 -31
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/E06-Detail.md +0 -62
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T001-color-system.md +0 -39
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md +0 -52
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T003-footer-status-bar.md +0 -52
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md +0 -53
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T005-restore-nav-hints.md +0 -39
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T007-detail-card-fixes.md +0 -36
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T008-checkbox-states.md +0 -40
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T009-router-priority-marker.md +0 -48
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T010-auto-refresh-watcher.md +0 -66
- package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/Design.md +0 -39
- package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T001-archive-epics.md +0 -20
- package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T002-rewrite-prd.md +0 -22
- package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T003-create-epic-stubs.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T004-update-router.md +0 -22
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/Design.md +0 -118
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/handoff.md +0 -9
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T001-package-baseline.md +0 -45
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T002-typescript-build.md +0 -48
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T003-vitest-smoke.md +0 -43
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T004-lint-format-gates.md +0 -45
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T005-scaffold-verification.md +0 -40
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/Design.md +0 -142
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T001-domain-ids-status.md +0 -27
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T002-markdown-frontmatter-boundary.md +0 -28
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T003-task-documents.md +0 -29
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T004-release-epic-router-config-readers.md +0 -30
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T005-dependency-validation.md +0 -29
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T006-epic-task-set-reader.md +0 -29
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T007-quality-gates.md +0 -31
- package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/Design.md +0 -40
- package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T001-phase-types.md +0 -27
- package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T002-phase-frontmatter.md +0 -25
- package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T003-simplify-config.md +0 -26
- package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T004-simplify-router-domain.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/Design.md +0 -122
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T001-argument-parser-contract.md +0 -28
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T002-help-text-generation.md +0 -28
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T003-terminal-environment-detection.md +0 -27
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T004-command-stub-modules.md +0 -29
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T005-cli-runner-dispatch.md +0 -34
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T006-entrypoint-quality-gates.md +0 -32
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/Design.md +0 -43
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T001-strip-args.md +0 -26
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T002-strip-help.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T003-strip-run.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T004-delete-commands.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T005-update-cli-tests.md +0 -22
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/Design.md +0 -48
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T001-board-data-phases.md +0 -26
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T002-phase-rendering.md +0 -28
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T003-detail-pane-phases.md +0 -27
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T004-phase-transitions.md +0 -42
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T005-phase-gates.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T006-phase-write-back.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T007-remove-audit-flow.md +0 -27
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T008-board-tests.md +0 -25
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/Design.md +0 -85
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T001-project-template-assets.md +0 -17
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T002-release-and-prompt-assets.md +0 -20
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T003-template-registry-renderer.md +0 -22
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T004-template-integrity-tests.md +0 -17
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T005-template-closeout-quality-gates.md +0 -16
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/Design.md +0 -88
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T001-init-cli-contract.md +0 -22
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T002-target-validation.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T003-scaffold-writer.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T004-magic-prompt-and-clipboard.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T005-dev-deps-install-option.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T006-init-command-integration.md +0 -28
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/Design.md +0 -53
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T001-delete-dead-src.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T002-delete-dead-tests.md +0 -26
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T003-delete-assets.md +0 -25
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T004-clean-savepoint.md +0 -28
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T005-rewrite-agents-md.md +0 -28
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T006-clean-package-json.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T007-verify.md +0 -25
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/Design.md +0 -104
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T001-board-command-data.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T002-board-view-state.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T003-transition-gates-and-writes.md +0 -25
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T004-terminal-theme.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T005-ink-board-ui.md +0 -26
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T006-board-integration-audit-entry.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/Design.md +0 -88
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T001-audit-cli-contract.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T002-quality-gate-runner.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T003-snapshot-and-prompt.md +0 -23
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T004-audit-orchestration-router.md +0 -27
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T005-proposal-validation-apply.md +0 -25
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T006-audit-review-state.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T007-audit-review-ui.md +0 -26
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T008-audit-pipeline-integration.md +0 -24
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/Design.md +0 -103
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T001-acceptance-criteria-model.md +0 -30
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T002-release-task-set-reader.md +0 -33
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T003-board-data-and-plain-output.md +0 -34
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T004-board-selection-state.md +0 -33
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T005-ink-board-layout-cleanup.md +0 -37
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T006-task-detail-popup.md +0 -36
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T007-templates-acceptance-criteria.md +0 -34
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T008-board-workflow-integration.md +0 -41
- package/.savepoint/releases/v1/epics/_archived/E09-doctor-command/Design.md +0 -70
- package/.savepoint/releases/v1/epics/_archived/E10-docs-and-packaging/Design.md +0 -68
- package/.savepoint/releases/v1/epics/_archived/E11-release-validation/Design.md +0 -68
- package/.savepoint/releases/v1/v1-PRD.md +0 -66
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/E01-Detail.md +0 -40
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T001-next-activity-header.md +0 -56
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T002-rename-epic-design-files.md +0 -38
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T003-rename-release-prd.md +0 -28
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T004-update-instruction-files.md +0 -51
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T005-update-cross-references.md +0 -45
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T006-column-and-detail-scrolling.md +0 -68
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T007-column-focus-border-stability.md +0 -57
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/E02-Audit.md +0 -124
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/E02-Detail.md +0 -49
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T001-fix-makefile.md +0 -37
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T002-linux-build-target.md +0 -38
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T003-macos-build-target.md +0 -36
- package/.savepoint/releases/v1.1/epics/E02-cross-platform-compatibility/tasks/T004-smoke-tests-and-artifacts.md +0 -59
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Audit.md +0 -195
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Detail.md +0 -45
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T001-border-resize-fix.md +0 -40
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T002-next-activity-below-header.md +0 -64
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T003-checkbox-rendering-fix.md +0 -56
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T005-unify-status-glyphs.md +0 -65
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T006-forced-256-color-profile.md +0 -36
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Audit.md +0 -167
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/E04-Detail.md +0 -51
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T001-sidebar-focusable-navigation.md +0 -65
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T002-epic-detail-overlay.md +0 -73
- package/.savepoint/releases/v1.1/epics/E04-epic-navigation/tasks/T003-epic-status-glyphs.md +0 -73
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Audit.md +0 -237
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md +0 -54
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md +0 -45
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md +0 -40
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T003-update-design-md.md +0 -47
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T004-implement-m-hotkey.md +0 -98
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T005-update-help-overlay.md +0 -33
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T006-tests-and-quality-gates.md +0 -62
- package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Audit.md +0 -56
- package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Detail.md +0 -63
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T005-proposals.md +0 -44
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T007-apply-close.md +0 -35
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T009-integration.md +0 -40
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T010-audit-file-migration.md +0 -45
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T011-model-tab-state.md +0 -26
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T012-epic-audit-render.md +0 -33
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T013-handle-tab-keys.md +0 -34
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T014-tab-indicator.md +0 -33
- package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Audit.md +0 -336
- package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Detail.md +0 -61
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T001-cli-entrypoint.md +0 -37
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T002-target-validation.md +0 -28
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T003-scaffold-writer.md +0 -46
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T004-atomic-writes.md +0 -27
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T005-magic-prompt.md +0 -25
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T006-clipboard.md +0 -26
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T007-integration-test.md +0 -26
- package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Audit.md +0 -333
- package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Detail.md +0 -68
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T001-cli-entrypoint.md +0 -26
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T002-non-tty-fallback.md +0 -27
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T003-tui-app-shell.md +0 -28
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T004-board-model.md +0 -29
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T005-detail-pane.md +0 -27
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T006-status-transitions.md +0 -29
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T007-theme-fallbacks.md +0 -29
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T008-integration-test.md +0 -27
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Audit.md +0 -207
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Detail.md +0 -65
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T001-cli-entrypoint.md +0 -24
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T002-config-router-validation.md +0 -28
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T003-structure-checks.md +0 -29
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T004-dependency-checks.md +0 -27
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T005-audit-orphan-checks.md +0 -28
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T006-quality-gates-report.md +0 -31
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/E11-Detail.md +0 -36
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T001-debug-logging.md +0 -25
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T002-increase-debounce.md +0 -21
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T003-error-handling.md +0 -22
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T004-test-verify.md +0 -29
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Audit.md +0 -444
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Detail.md +0 -45
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T001-default-phase.md +0 -35
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T002-default-status.md +0 -19
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T003-better-errors.md +0 -29
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T004-validate-on-write.md +0 -25
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T005-tests.md +0 -37
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Audit.md +0 -118
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Detail.md +0 -73
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T001-safe-cleanup.md +0 -66
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T002-bug-fixes.md +0 -35
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T003-centralize-duplication.md +0 -60
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T004-infrastructure.md +0 -33
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T005-decompose-update.md +0 -37
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T006-async-io.md +0 -40
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T007-test-coverage.md +0 -37
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Audit.md +0 -267
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Detail.md +0 -54
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T001-group-model.md +0 -39
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T002-data-interfaces.md +0 -42
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T003-discover-orphans.md +0 -33
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T004-epic-panel-headings.md +0 -35
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T005-shell-tokenization.md +0 -27
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T006-unify-enums.md +0 -29
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T007-testutil-package.md +0 -28
- package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Audit.md +0 -272
- package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Detail.md +0 -60
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T001-benchmarks.md +0 -31
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T002-fuzz-targets.md +0 -34
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T003-debug-flag.md +0 -30
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T004-dist-checksums.md +0 -27
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T005-windows-targets.md +0 -28
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T006-abbreviation-splitting.md +0 -26
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T007-root-test-allowlist.md +0 -33
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T008-ci-and-release-automation.md +0 -46
- package/.savepoint/releases/v1.1/epics/_archived/T001-cli-entrypoint.md +0 -25
- package/.savepoint/releases/v1.1/epics/_archived/T002-quality-gates.md +0 -27
- package/.savepoint/releases/v1.1/epics/_archived/T003-snapshot.md +0 -27
- package/.savepoint/releases/v1.1/epics/_archived/T004-ai-reconcile.md +0 -29
- package/.savepoint/releases/v1.1/epics/_archived/T006-tui-review.md +0 -31
- package/.savepoint/releases/v1.1/epics/_archived/T008-skip-handling.md +0 -34
- package/.savepoint/releases/v1.1/v1.1-PRD.md +0 -139
- package/.savepoint/router.md +0 -57
- package/.savepoint/visual-identity.md +0 -125
- package/AGENTS.md +0 -99
- package/CLAUDE.md +0 -1
- package/GEMINI.md +0 -1
- package/Makefile +0 -31
- package/agent-skills/ink-tui-design/SKILL.md +0 -309
- package/agent-skills/ink-tui-design/references/component-patterns.md +0 -371
- package/agent-skills/ink-tui-design/references/hooks-guide.md +0 -436
- package/agent-skills/ink-tui-design/references/ink-gotchas.md +0 -330
- package/agent-skills/ink-tui-design/references/testing-patterns.md +0 -384
- package/agent-skills/savepoint-audit/SKILL.md +0 -87
- package/agent-skills/savepoint-build-task/SKILL.md +0 -44
- package/agent-skills/savepoint-create-plan/SKILL.md +0 -33
- package/agent-skills/savepoint-create-task/SKILL.md +0 -44
- package/agent-skills/savepoint-draft-prd/SKILL.md +0 -37
- package/agent-skills/savepoint-system-design/SKILL.md +0 -38
- package/agent-skills/superpowers/brainstorming/SKILL.md +0 -165
- package/agent-skills/superpowers/brainstorming/visual-companion.md +0 -304
- package/agent-skills/superpowers/dispatching-parallel-agents/SKILL.md +0 -193
- package/agent-skills/superpowers/executing-plans/SKILL.md +0 -77
- package/agent-skills/superpowers/finishing-a-development-branch/SKILL.md +0 -213
- package/agent-skills/superpowers/receiving-code-review/SKILL.md +0 -226
- package/agent-skills/superpowers/requesting-code-review/SKILL.md +0 -115
- package/agent-skills/superpowers/requesting-code-review/code-reviewer.md +0 -160
- package/agent-skills/superpowers/subagent-driven-development/SKILL.md +0 -292
- package/agent-skills/superpowers/subagent-driven-development/code-quality-reviewer-prompt.md +0 -27
- package/agent-skills/superpowers/subagent-driven-development/implementer-prompt.md +0 -113
- package/agent-skills/superpowers/subagent-driven-development/spec-reviewer-prompt.md +0 -61
- package/agent-skills/superpowers/systematic-debugging/SKILL.md +0 -305
- package/agent-skills/superpowers/systematic-debugging/condition-based-waiting.md +0 -122
- package/agent-skills/superpowers/systematic-debugging/defense-in-depth.md +0 -130
- package/agent-skills/superpowers/systematic-debugging/root-cause-tracing.md +0 -183
- package/agent-skills/superpowers/test-driven-development/SKILL.md +0 -389
- package/agent-skills/superpowers/test-driven-development/testing-anti-patterns.md +0 -317
- package/agent-skills/superpowers/verification-before-completion/SKILL.md +0 -147
- package/agent-skills/superpowers/writing-plans/SKILL.md +0 -159
- package/agent-skills/superpowers/writing-plans/plan-document-reviewer-prompt.md +0 -49
- package/agent_skills_test.go +0 -91
- package/assets/banner.png +0 -0
- package/assets/logo.png +0 -0
- package/assets/strawman.png +0 -0
- package/cmd/board.go +0 -59
- package/cmd/board_test.go +0 -137
- package/cmd/doctor.go +0 -53
- package/cmd/doctor_test.go +0 -146
- package/cmd/init.go +0 -63
- package/cmd/init_test.go +0 -104
- package/go.mod +0 -36
- package/go.sum +0 -75
- package/internal/board/board.go +0 -181
- package/internal/board/board_test.go +0 -168
- package/internal/board/card.go +0 -129
- package/internal/board/card_test.go +0 -287
- package/internal/board/column.go +0 -156
- package/internal/board/column_test.go +0 -210
- package/internal/board/debug.go +0 -26
- package/internal/board/debug_test.go +0 -108
- package/internal/board/detail.go +0 -218
- package/internal/board/detail_test.go +0 -388
- package/internal/board/epic_panel.go +0 -264
- package/internal/board/epic_panel_test.go +0 -869
- package/internal/board/help.go +0 -41
- package/internal/board/help_test.go +0 -86
- package/internal/board/integration_test.go +0 -266
- package/internal/board/interfaces.go +0 -65
- package/internal/board/interfaces_test.go +0 -114
- package/internal/board/io.go +0 -93
- package/internal/board/layout.go +0 -68
- package/internal/board/layout_test.go +0 -106
- package/internal/board/model.go +0 -235
- package/internal/board/model_test.go +0 -67
- package/internal/board/plain.go +0 -88
- package/internal/board/plain_test.go +0 -117
- package/internal/board/release.go +0 -34
- package/internal/board/release_test.go +0 -177
- package/internal/board/render_policy_test.go +0 -77
- package/internal/board/status.go +0 -23
- package/internal/board/theme.go +0 -24
- package/internal/board/theme_test.go +0 -31
- package/internal/board/transitions.go +0 -113
- package/internal/board/transitions_test.go +0 -164
- package/internal/board/tui.go +0 -32
- package/internal/board/update.go +0 -575
- package/internal/board/update_test.go +0 -602
- package/internal/board/util.go +0 -76
- package/internal/board/view.go +0 -317
- package/internal/board/view_test.go +0 -377
- package/internal/board/watch.go +0 -136
- package/internal/buildtool/main.go +0 -249
- package/internal/buildtool/main_test.go +0 -224
- package/internal/data/config.go +0 -101
- package/internal/data/config_test.go +0 -122
- package/internal/data/discover.go +0 -178
- package/internal/data/discover_test.go +0 -130
- package/internal/data/errors.go +0 -13
- package/internal/data/fuzz_test.go +0 -75
- package/internal/data/lifecycle.go +0 -44
- package/internal/data/lifecycle_test.go +0 -41
- package/internal/data/parser.go +0 -243
- package/internal/data/parser_test.go +0 -281
- package/internal/data/router.go +0 -52
- package/internal/data/router_test.go +0 -35
- package/internal/data/task.go +0 -57
- package/internal/data/task_test.go +0 -51
- package/internal/data/testdata/fuzz/FuzzSplitFrontmatterBody/68eb66b0fe91e7e3 +0 -2
- package/internal/data/write.go +0 -221
- package/internal/data/write_test.go +0 -623
- package/internal/doctor/checks.go +0 -567
- package/internal/doctor/checks_test.go +0 -716
- package/internal/doctor/gates.go +0 -193
- package/internal/doctor/gates_test.go +0 -166
- package/internal/doctor/interfaces.go +0 -64
- package/internal/doctor/interfaces_test.go +0 -104
- package/internal/doctor/repairs.go +0 -80
- package/internal/doctor/repairs_test.go +0 -81
- package/internal/doctor/report.go +0 -157
- package/internal/doctor/report_test.go +0 -89
- package/internal/init/clipboard.go +0 -146
- package/internal/init/clipboard_test.go +0 -74
- package/internal/init/install.go +0 -16
- package/internal/init/integration_test.go +0 -197
- package/internal/init/prompt.go +0 -14
- package/internal/init/prompt_test.go +0 -77
- package/internal/init/scaffold.go +0 -59
- package/internal/init/scaffold_test.go +0 -179
- package/internal/init/template_freshness_test.go +0 -56
- package/internal/init/validate.go +0 -85
- package/internal/init/validate_test.go +0 -141
- package/internal/init/write.go +0 -73
- package/internal/init/write_test.go +0 -91
- package/internal/styles/palette.go +0 -49
- package/internal/styles/styles.go +0 -139
- package/internal/styles/styles_test.go +0 -133
- package/internal/testutil/fixture.go +0 -113
- package/internal/testutil/fs.go +0 -26
- package/main.go +0 -136
- package/project-audit/audit_report_glm_5.1.md +0 -411
- package/project-audit/audit_report_opus_4.6.md +0 -406
- package/project-audit/consolidated-audit-report.md +0 -456
- package/scripts/vitest-preload.cjs +0 -95
- package/templates/project/.savepoint/Design.md +0 -47
- package/templates/project/.savepoint/PRD.md +0 -34
- package/templates/project/.savepoint/config.yml +0 -27
- package/templates/project/.savepoint/router.md +0 -153
- package/templates/project/.savepoint/visual-identity.md +0 -122
- package/templates/project/AGENTS.md +0 -88
- package/templates/project/agent-skills/savepoint-audit/SKILL.md +0 -87
- package/templates/project/agent-skills/savepoint-build-task/SKILL.md +0 -44
- package/templates/project/agent-skills/savepoint-create-plan/SKILL.md +0 -33
- package/templates/project/agent-skills/savepoint-create-task/SKILL.md +0 -44
- package/templates/project/agent-skills/savepoint-draft-prd/SKILL.md +0 -37
- package/templates/project/agent-skills/savepoint-system-design/SKILL.md +0 -38
- package/templates/prompts/audit-reconciliation.prompt.md +0 -72
- package/templates/prompts/design.prompt.md +0 -45
- package/templates/prompts/epic-design.prompt.md +0 -43
- package/templates/prompts/magic-prompt.prompt.md +0 -7
- package/templates/prompts/prd.prompt.md +0 -42
- package/templates/prompts/task-breakdown.prompt.md +0 -54
- package/templates/prompts/task-building.prompt.md +0 -38
- package/templates/prompts/task-planning.prompt.md +0 -53
- package/templates/release/v1/PRD.md +0 -37
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E07-init-command/T004-atomic-writes
|
|
3
|
-
status: done
|
|
4
|
-
objective: "Implement atomic file writes with temp-file-plus-rename"
|
|
5
|
-
depends_on: ["E07-init-command/T003-scaffold-writer"]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T004: Atomic Writes
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- Writes use temp file + rename pattern
|
|
13
|
-
- Existing files not corrupted on write failure
|
|
14
|
-
- Atomic operation prevents partial writes
|
|
15
|
-
- Handles conflicts gracefully
|
|
16
|
-
- Works on Windows, Linux, macOS
|
|
17
|
-
|
|
18
|
-
## Implementation Plan
|
|
19
|
-
|
|
20
|
-
- [x] Add `internal/init/write.go`
|
|
21
|
-
- [x] Implement `AtomicWrite(target, content) error`
|
|
22
|
-
- [x] Create temp file in same directory (atomic on POSIX)
|
|
23
|
-
- [x] Write content to temp file
|
|
24
|
-
- [x] Rename temp to target (atomic on success)
|
|
25
|
-
- [x] Clean up temp file on failure
|
|
26
|
-
- [x] Test atomic write behavior
|
|
27
|
-
- [x] Run `make build && make test`
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E07-init-command/T005-magic-prompt
|
|
3
|
-
status: done
|
|
4
|
-
objective: "Render and output magic prompt to stdout"
|
|
5
|
-
depends_on: ["E07-init-command/T004-atomic-writes"]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T005: Magic Prompt
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- Reads `templates/prompts/magic-prompt.prompt.md` template
|
|
13
|
-
- Renders template with project context
|
|
14
|
-
- Outputs rendered prompt to stdout
|
|
15
|
-
- Prompt is copy-paste ready for AI agent
|
|
16
|
-
|
|
17
|
-
## Implementation Plan
|
|
18
|
-
|
|
19
|
-
- [x] Add `internal/init/prompt.go`
|
|
20
|
-
- [x] Implement `RenderMagicPrompt(projectName) (string, error)`
|
|
21
|
-
- [x] Load magic-prompt.prompt.md template
|
|
22
|
-
- [x] Interpolate project name into prompt
|
|
23
|
-
- [x] Output to stdout after scaffold completes
|
|
24
|
-
- [x] Test prompt rendering
|
|
25
|
-
- [x] Run `make build && make test`
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E07-init-command/T006-clipboard
|
|
3
|
-
status: done
|
|
4
|
-
objective: "Implement best-effort clipboard copy"
|
|
5
|
-
depends_on: ["E07-init-command/T005-magic-prompt"]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T006: Clipboard
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- Detects platform (Windows/macOS/Linux)
|
|
13
|
-
- Copies magic prompt to clipboard
|
|
14
|
-
- Does NOT fail if clipboard unavailable (best-effort)
|
|
15
|
-
- Returns success/skipped/failed status without throwing on error
|
|
16
|
-
- Works on PowerShell, iTerm2, terminal emulators
|
|
17
|
-
|
|
18
|
-
## Implementation Plan
|
|
19
|
-
|
|
20
|
-
- [x] Add `internal/init/clipboard.go`
|
|
21
|
-
- [x] Implement `CopyToClipboard(text) ClipboardResult`
|
|
22
|
-
- [x] Detect platform: Windows (clip.exe), macOS (pbcopy), Linux (xclip/xsel)
|
|
23
|
-
- [x] Fall back gracefully if clipboard tools unavailable
|
|
24
|
-
- [x] Log skip or failure without failing init
|
|
25
|
-
- [x] Test clipboard status handling on the current platform
|
|
26
|
-
- [x] Run quality gates (`go test ./internal/init ./cmd`, `go build ./...`, `go test ./...`)
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E07-init-command/T007-integration-test
|
|
3
|
-
status: done
|
|
4
|
-
objective: "End-to-end integration test of init flow"
|
|
5
|
-
depends_on: ["E07-init-command/T006-clipboard"]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T007: Integration Test
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- Full init pipeline runs end-to-end in temp directory
|
|
13
|
-
- Validates: empty dir, existing project, already-initialized, --force, --install
|
|
14
|
-
- Tests pass on Windows, Linux, macOS
|
|
15
|
-
- Output includes magic prompt to stdout
|
|
16
|
-
|
|
17
|
-
## Implementation Plan
|
|
18
|
-
|
|
19
|
-
- [x] Add `internal/init/integration_test.go`
|
|
20
|
-
- [x] Test: init in empty directory
|
|
21
|
-
- [x] Test: init in compatible project
|
|
22
|
-
- [x] Test: init fails without --force on existing .savepoint
|
|
23
|
-
- [x] Test: init with --force overwrites
|
|
24
|
-
- [x] Test: init with --install triggers npm install
|
|
25
|
-
- [x] Verify magic prompt in stdout
|
|
26
|
-
- [x] Run full test suite: `make build && make test`
|
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: audit-findings
|
|
3
|
-
audited: 2026-05-03
|
|
4
|
-
---
|
|
5
|
-
# Audit Findings: E08 Board Command
|
|
6
|
-
|
|
7
|
-
## Main Findings
|
|
8
|
-
|
|
9
|
-
E08 is closed as audited. The board command surface, non-TTY fallback, Bubble Tea shell, model grouping, detail overlay, keyboard navigation, status writes, filters, theme profile detection, and integration coverage are in place.
|
|
10
|
-
|
|
11
|
-
The two audit blockers were applied: board task writes now surface mtime conflicts instead of overwriting externally modified task files, and dependency gating now blocks planned tasks from entering `in_progress` until dependencies are done.
|
|
12
|
-
|
|
13
|
-
Documentation reconciliation was applied to Design.md, AGENTS.md, and the E08 epic detail. Remaining process note: all eight E08 task files were missing the required `## Context Files` section; that was not backfilled because it is a task-authoring process gap rather than an implementation blocker.
|
|
14
|
-
|
|
15
|
-
## Code Style Review
|
|
16
|
-
|
|
17
|
-
- [x] One job per file
|
|
18
|
-
- [x] One-sentence functions
|
|
19
|
-
- [x] Test branches
|
|
20
|
-
- [x] Types are documentation
|
|
21
|
-
- [x] Build, don't speculate
|
|
22
|
-
- [x] Errors at boundaries
|
|
23
|
-
- [x] One source of truth
|
|
24
|
-
- [x] Comments explain WHY
|
|
25
|
-
- [x] Content in data files
|
|
26
|
-
- [x] Small diffs
|
|
27
|
-
|
|
28
|
-
Notes: The applied changes remove the speculative mtime overwrite and add branch coverage for planned-task dependency gating. The broader reducer size remains a known shape of `internal/board/update.go`, but the E08 audit blockers are resolved.
|
|
29
|
-
|
|
30
|
-
## Proposed Changes
|
|
31
|
-
|
|
32
|
-
### Target File
|
|
33
|
-
internal/board/update.go
|
|
34
|
-
|
|
35
|
-
### Replace
|
|
36
|
-
```go
|
|
37
|
-
func writeTaskStatus(task *data.Task, expectedMtime time.Time) error {
|
|
38
|
-
if err := data.WriteTaskStatus(task.Path, task, expectedMtime); err != nil {
|
|
39
|
-
if err != data.ErrMtimeConflict {
|
|
40
|
-
return err
|
|
41
|
-
}
|
|
42
|
-
fi, statErr := os.Stat(task.Path)
|
|
43
|
-
if statErr != nil {
|
|
44
|
-
return statErr
|
|
45
|
-
}
|
|
46
|
-
if retryErr := data.WriteTaskStatus(task.Path, task, fi.ModTime()); retryErr != nil {
|
|
47
|
-
return retryErr
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
fi, err := os.Stat(task.Path)
|
|
51
|
-
if err != nil {
|
|
52
|
-
return err
|
|
53
|
-
}
|
|
54
|
-
task.Mtime = fi.ModTime()
|
|
55
|
-
return nil
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### With
|
|
60
|
-
```go
|
|
61
|
-
func writeTaskStatus(task *data.Task, expectedMtime time.Time) error {
|
|
62
|
-
if err := data.WriteTaskStatus(task.Path, task, expectedMtime); err != nil {
|
|
63
|
-
return err
|
|
64
|
-
}
|
|
65
|
-
fi, err := os.Stat(task.Path)
|
|
66
|
-
if err != nil {
|
|
67
|
-
return err
|
|
68
|
-
}
|
|
69
|
-
task.Mtime = fi.ModTime()
|
|
70
|
-
return nil
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### Target File
|
|
75
|
-
internal/board/integration_test.go
|
|
76
|
-
|
|
77
|
-
### Replace
|
|
78
|
-
```go
|
|
79
|
-
// TestMtimeConflict_boardRetries verifies the board retries after an mtime conflict and persists the transition.
|
|
80
|
-
func TestMtimeConflict_boardRetries(t *testing.T) {
|
|
81
|
-
path := filepath.Join(t.TempDir(), "T001.md")
|
|
82
|
-
content := "---\nid: E01/T001\nstatus: in_progress\nphase: build\n---\n\n# Task\n"
|
|
83
|
-
if err := os.WriteFile(path, []byte(content), 0644); err != nil {
|
|
84
|
-
t.Fatal(err)
|
|
85
|
-
}
|
|
86
|
-
fi, err := os.Stat(path)
|
|
87
|
-
if err != nil {
|
|
88
|
-
t.Fatal(err)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
task := data.Task{
|
|
92
|
-
ID: "E01/T001",
|
|
93
|
-
Column: data.ColumnInProgress,
|
|
94
|
-
Stage: data.StageBuild,
|
|
95
|
-
Path: path,
|
|
96
|
-
Mtime: fi.ModTime().Add(-time.Minute), // intentionally stale
|
|
97
|
-
}
|
|
98
|
-
m := NewModel([]data.Task{task}, "v1", "E01")
|
|
99
|
-
m.FocusedColumn = data.ColumnInProgress
|
|
100
|
-
|
|
101
|
-
got, _ := m.Update(tea.KeyMsg{Type: tea.KeySpace})
|
|
102
|
-
updated := requireModel(t, got)
|
|
103
|
-
|
|
104
|
-
if updated.AllTasks[0].Stage != data.StageTest {
|
|
105
|
-
t.Errorf("Stage = %q after retry, want test", updated.AllTasks[0].Stage)
|
|
106
|
-
}
|
|
107
|
-
if strings.Contains(updated.StatusMessage, "conflict") {
|
|
108
|
-
t.Errorf("conflict error surfaced to user unexpectedly: %q", updated.StatusMessage)
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### With
|
|
114
|
-
```go
|
|
115
|
-
// TestMtimeConflict_boardWarns verifies the board surfaces an mtime conflict instead of overwriting external edits.
|
|
116
|
-
func TestMtimeConflict_boardWarns(t *testing.T) {
|
|
117
|
-
path := filepath.Join(t.TempDir(), "T001.md")
|
|
118
|
-
content := "---\nid: E01/T001\nstatus: in_progress\nphase: build\n---\n\n# Task\n"
|
|
119
|
-
if err := os.WriteFile(path, []byte(content), 0644); err != nil {
|
|
120
|
-
t.Fatal(err)
|
|
121
|
-
}
|
|
122
|
-
fi, err := os.Stat(path)
|
|
123
|
-
if err != nil {
|
|
124
|
-
t.Fatal(err)
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
task := data.Task{
|
|
128
|
-
ID: "E01/T001",
|
|
129
|
-
Column: data.ColumnInProgress,
|
|
130
|
-
Stage: data.StageBuild,
|
|
131
|
-
Path: path,
|
|
132
|
-
Mtime: fi.ModTime().Add(-time.Minute), // intentionally stale
|
|
133
|
-
}
|
|
134
|
-
m := NewModel([]data.Task{task}, "v1", "E01")
|
|
135
|
-
m.FocusedColumn = data.ColumnInProgress
|
|
136
|
-
|
|
137
|
-
got, _ := m.Update(tea.KeyMsg{Type: tea.KeySpace})
|
|
138
|
-
updated := requireModel(t, got)
|
|
139
|
-
|
|
140
|
-
if !strings.Contains(updated.StatusMessage, "mtime conflict") {
|
|
141
|
-
t.Errorf("StatusMessage = %q, want mtime conflict warning", updated.StatusMessage)
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
raw, err := os.ReadFile(path)
|
|
145
|
-
if err != nil {
|
|
146
|
-
t.Fatal(err)
|
|
147
|
-
}
|
|
148
|
-
if !strings.Contains(string(raw), "phase: build") {
|
|
149
|
-
t.Errorf("task file was overwritten despite mtime conflict:\n%s", raw)
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### Target File
|
|
155
|
-
internal/board/transitions.go
|
|
156
|
-
|
|
157
|
-
### Replace
|
|
158
|
-
```go
|
|
159
|
-
case data.ColumnPlanned:
|
|
160
|
-
return true, ""
|
|
161
|
-
case data.ColumnInProgress:
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
### With
|
|
165
|
-
```go
|
|
166
|
-
case data.ColumnPlanned:
|
|
167
|
-
return dependenciesDone(t, allTasks)
|
|
168
|
-
case data.ColumnInProgress:
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### Target File
|
|
172
|
-
internal/board/transitions.go
|
|
173
|
-
|
|
174
|
-
### Replace
|
|
175
|
-
```go
|
|
176
|
-
switch stage {
|
|
177
|
-
case data.StageBuild:
|
|
178
|
-
return true, ""
|
|
179
|
-
case data.StageTest:
|
|
180
|
-
return true, ""
|
|
181
|
-
case data.StageAudit:
|
|
182
|
-
for _, depID := range t.DependsOn {
|
|
183
|
-
dep := findTask(depID, allTasks)
|
|
184
|
-
if dep == nil {
|
|
185
|
-
return false, fmt.Sprintf("dependency %q not found", depID)
|
|
186
|
-
}
|
|
187
|
-
if dep.Column != data.ColumnDone {
|
|
188
|
-
return false, fmt.Sprintf("dependency %q is not done", depID)
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
return true, ""
|
|
192
|
-
default:
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
### With
|
|
196
|
-
```go
|
|
197
|
-
switch stage {
|
|
198
|
-
case data.StageBuild:
|
|
199
|
-
return true, ""
|
|
200
|
-
case data.StageTest:
|
|
201
|
-
return true, ""
|
|
202
|
-
case data.StageAudit:
|
|
203
|
-
return dependenciesDone(t, allTasks)
|
|
204
|
-
default:
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
### Target File
|
|
208
|
-
internal/board/transitions.go
|
|
209
|
-
|
|
210
|
-
### Replace
|
|
211
|
-
```go
|
|
212
|
-
func findTask(id string, tasks []data.Task) *data.Task {
|
|
213
|
-
for i := range tasks {
|
|
214
|
-
if tasks[i].ID == id {
|
|
215
|
-
return &tasks[i]
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return nil
|
|
219
|
-
}
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
### With
|
|
223
|
-
```go
|
|
224
|
-
func dependenciesDone(t *data.Task, allTasks []data.Task) (bool, string) {
|
|
225
|
-
for _, depID := range t.DependsOn {
|
|
226
|
-
dep := findTask(depID, allTasks)
|
|
227
|
-
if dep == nil {
|
|
228
|
-
return false, fmt.Sprintf("dependency %q not found", depID)
|
|
229
|
-
}
|
|
230
|
-
if dep.Column != data.ColumnDone {
|
|
231
|
-
return false, fmt.Sprintf("dependency %q is not done", depID)
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
return true, ""
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
func findTask(id string, tasks []data.Task) *data.Task {
|
|
238
|
-
for i := range tasks {
|
|
239
|
-
if tasks[i].ID == id {
|
|
240
|
-
return &tasks[i]
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
return nil
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### Target File
|
|
248
|
-
internal/board/transitions_test.go
|
|
249
|
-
|
|
250
|
-
### Replace
|
|
251
|
-
```go
|
|
252
|
-
func TestCanAdvance_plannedAlwaysAllowed(t *testing.T) {
|
|
253
|
-
task := data.Task{Column: data.ColumnPlanned}
|
|
254
|
-
ok, reason := CanAdvance(&task, nil)
|
|
255
|
-
if !ok {
|
|
256
|
-
t.Errorf("CanAdvance(planned) = false %q, want true", reason)
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
### With
|
|
262
|
-
```go
|
|
263
|
-
func TestCanAdvance_plannedAllowedWhenDependenciesDone(t *testing.T) {
|
|
264
|
-
allTasks := []data.Task{
|
|
265
|
-
{ID: "T1", Column: data.ColumnPlanned, DependsOn: []string{"T2"}},
|
|
266
|
-
{ID: "T2", Column: data.ColumnDone},
|
|
267
|
-
}
|
|
268
|
-
ok, reason := CanAdvance(&allTasks[0], allTasks)
|
|
269
|
-
if !ok {
|
|
270
|
-
t.Errorf("CanAdvance(planned with done dep) = false %q, want true", reason)
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
func TestCanAdvance_plannedBlockedByDependency(t *testing.T) {
|
|
275
|
-
allTasks := []data.Task{
|
|
276
|
-
{ID: "T1", Column: data.ColumnPlanned, DependsOn: []string{"T2"}},
|
|
277
|
-
{ID: "T2", Column: data.ColumnInProgress},
|
|
278
|
-
}
|
|
279
|
-
ok, reason := CanAdvance(&allTasks[0], allTasks)
|
|
280
|
-
if ok {
|
|
281
|
-
t.Fatal("CanAdvance(planned with unfinished dep) = true, want false")
|
|
282
|
-
}
|
|
283
|
-
if reason != "dependency \"T2\" is not done" {
|
|
284
|
-
t.Errorf("reason = %q, want dependency warning", reason)
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
### Target File
|
|
290
|
-
AGENTS.md
|
|
291
|
-
|
|
292
|
-
### Replace
|
|
293
|
-
```md
|
|
294
|
-
| `cmd/` | Init command arg parsing, dispatch |
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
### With
|
|
298
|
-
```md
|
|
299
|
-
| `cmd/` | CLI command arg parsing and dispatch for init and board |
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
### Target File
|
|
303
|
-
.savepoint/releases/v1.1/epics/E08-board-command/E08-Detail.md
|
|
304
|
-
|
|
305
|
-
### Replace
|
|
306
|
-
```md
|
|
307
|
-
## Boundaries
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
### With
|
|
311
|
-
```md
|
|
312
|
-
## Implemented As
|
|
313
|
-
|
|
314
|
-
- `main.go` dispatches `board` and uses the no-arg command path as the board default.
|
|
315
|
-
- `cmd/board.go` owns board-specific flag parsing for `--release`, `--epic`, and `--help`.
|
|
316
|
-
- `internal/board/board.go`, `tui.go`, `model.go`, `plain.go`, `transitions.go`, and related render/update files own project discovery, non-TTY fallback, TUI startup, filtering, detail overlays, keyboard flow, and task status writes.
|
|
317
|
-
- Audit entry-point work is represented as the non-TTY audit proposal signal and the epic Detail/Audit tab flow added around E06.
|
|
318
|
-
|
|
319
|
-
## Boundaries
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
### Target File
|
|
323
|
-
.savepoint/Design.md
|
|
324
|
-
|
|
325
|
-
### Replace
|
|
326
|
-
```md
|
|
327
|
-
- **Board command** (`savepoint board`) reads project state, renders the Atari-Noir TUI board, 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).
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
### With
|
|
331
|
-
```md
|
|
332
|
-
- **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).
|
|
333
|
-
```
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: epic-design
|
|
3
|
-
status: audited
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# E08: Board Command
|
|
7
|
-
|
|
8
|
-
## Purpose
|
|
9
|
-
|
|
10
|
-
Implement `savepoint board`, a Bubble Tea terminal UI for viewing and moving tasks through the Savepoint workflow, including audit-review mode entry points.
|
|
11
|
-
|
|
12
|
-
## Interface
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
savepoint board # launch TUI
|
|
16
|
-
savepoint # alias for board
|
|
17
|
-
savepoint board --release v1 # filter by release
|
|
18
|
-
savepoint board --epic E03 # filter by epic
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## What this epic adds
|
|
22
|
-
|
|
23
|
-
- Ink/Bubble Tea app shell launched by `savepoint board`
|
|
24
|
-
- Three-column Kanban view for planned, in_progress, done
|
|
25
|
-
- Detail pane for selected task
|
|
26
|
-
- Keyboard navigation (arrows, vim-style j/k/h/l)
|
|
27
|
-
- Status transition actions with gate enforcement
|
|
28
|
-
- Manual refresh with `r` key
|
|
29
|
-
- Theme tokens loaded from config.yml
|
|
30
|
-
- Render fallbacks: 24-bit → 256-color → 16-color → NO_COLOR → non-TTY plain table
|
|
31
|
-
- Optimistic mtime conflict detection before writes
|
|
32
|
-
- Audit entry point: signal if proposals exist, exit toward audit
|
|
33
|
-
|
|
34
|
-
## Components
|
|
35
|
-
|
|
36
|
-
| Module | Purpose |
|
|
37
|
-
|--------|---------|
|
|
38
|
-
| `cmd/board.go` | CLI registration, arg parsing |
|
|
39
|
-
| `internal/board/cmd.go` | Non-TTY fallback, dispatch |
|
|
40
|
-
| `internal/board/tui.go` | Bubble Tea program setup |
|
|
41
|
-
| `internal/board/model.go` | Board state, columns, cards |
|
|
42
|
-
| `internal/board/detail.go` | Task detail pane |
|
|
43
|
-
| `internal/board/transitions.go` | Status transition gate enforcement |
|
|
44
|
-
| `internal/board/theme.go` | Theme loading, color fallbacks |
|
|
45
|
-
| `internal/board/plain.go` | Non-TTY plain text table |
|
|
46
|
-
|
|
47
|
-
## Implemented As
|
|
48
|
-
|
|
49
|
-
- `main.go` dispatches `board` and uses the no-arg command path as the board default.
|
|
50
|
-
- `cmd/board.go` owns board-specific flag parsing for `--release`, `--epic`, and `--help`.
|
|
51
|
-
- `internal/board/board.go`, `tui.go`, `model.go`, `plain.go`, `transitions.go`, and related render/update files own project discovery, non-TTY fallback, TUI startup, filtering, detail overlays, keyboard flow, and task status writes.
|
|
52
|
-
- Audit entry-point work is represented as the non-TTY audit proposal signal and the epic Detail/Audit tab flow added around E06.
|
|
53
|
-
|
|
54
|
-
## Boundaries
|
|
55
|
-
|
|
56
|
-
**In scope:**
|
|
57
|
-
- Board navigation and status transitions
|
|
58
|
-
- Gate enforcement for dependencies and status rules
|
|
59
|
-
- Plain table fallback when not in a TTY
|
|
60
|
-
- Manual `r` refresh
|
|
61
|
-
- Initial audit-review mode entry point if proposals exist
|
|
62
|
-
|
|
63
|
-
**Out of scope:**
|
|
64
|
-
- File watching
|
|
65
|
-
- Search
|
|
66
|
-
- Mouse interaction
|
|
67
|
-
- Drag-and-drop
|
|
68
|
-
- Full audit proposal diff implementation
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E08-board-command/T001-cli-entrypoint
|
|
3
|
-
status: done
|
|
4
|
-
objective: "Create CLI entrypoint for savepoint board command"
|
|
5
|
-
depends_on: []
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T001: CLI Entrypoint
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- `savepoint board --help` shows usage: `board [--release <release>] [--epic <epic>]`
|
|
13
|
-
- `savepoint` (no args) defaults to board
|
|
14
|
-
- `savepoint board` launches TUI
|
|
15
|
-
- `savepoint board --release v1` filters by release
|
|
16
|
-
- `savepoint board --epic E03` filters by epic
|
|
17
|
-
|
|
18
|
-
## Implementation Plan
|
|
19
|
-
|
|
20
|
-
- [x] Update main.go dispatch to recognize subcommands
|
|
21
|
-
- [x] Add `cmd/board.go` with CLI arg parsing
|
|
22
|
-
- [x] Wire board command into main.go
|
|
23
|
-
- [x] Implement arg validation (--release, --epic)
|
|
24
|
-
- [x] Default to board when no subcommand given
|
|
25
|
-
- [x] Test `savepoint board --help` output
|
|
26
|
-
- [x] Run `make build && make test`
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E08-board-command/T002-non-tty-fallback
|
|
3
|
-
status: done
|
|
4
|
-
objective: "Implement non-TTY plain text table output"
|
|
5
|
-
depends_on: ["E08-board-command/T001-cli-entrypoint"]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T002: Non-TTY Fallback
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- When not in a TTY, outputs deterministic plain text
|
|
13
|
-
- Shows three columns: planned, in_progress, done
|
|
14
|
-
- Lists task IDs and objectives in each column
|
|
15
|
-
- Includes warning about non-interactive mode
|
|
16
|
-
- Shows audit-entry signal if audit proposals exist
|
|
17
|
-
|
|
18
|
-
## Implementation Plan
|
|
19
|
-
|
|
20
|
-
- [x] Add `internal/board/plain.go`
|
|
21
|
-
- [x] Implement `RenderPlainTable(model) string`
|
|
22
|
-
- [x] Check `termenv.IsTerminal()` for TTY detection
|
|
23
|
-
- [x] Format tasks in three columns with headers
|
|
24
|
-
- [x] Add non-interactive warning banner
|
|
25
|
-
- [x] Check for audit proposals, show entry signal
|
|
26
|
-
- [x] Test non-TTY output
|
|
27
|
-
- [x] Run `make build && make test`
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E08-board-command/T003-tui-app-shell
|
|
3
|
-
status: done
|
|
4
|
-
objective: "Implement Bubble Tea TUI program shell"
|
|
5
|
-
depends_on: ["E08-board-command/T001-cli-entrypoint"]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T003: TUI App Shell
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- Launches Bubble Tea program with alt screen
|
|
13
|
-
- Loads theme from config.yml
|
|
14
|
-
- Initializes model with release/epic filters
|
|
15
|
-
- Handles quit (q, ctrl+c) gracefully
|
|
16
|
-
- Handles window resize
|
|
17
|
-
|
|
18
|
-
## Implementation Plan
|
|
19
|
-
|
|
20
|
-
- [x] Add `internal/board/tui.go`
|
|
21
|
-
- [x] Implement `RunTUI(release, epic) error`
|
|
22
|
-
- [x] Create tea.Program with board model
|
|
23
|
-
- [x] Enable alt screen mode
|
|
24
|
-
- [x] Load and apply theme from config
|
|
25
|
-
- [x] Handle quit key (q, ctrl+c)
|
|
26
|
-
- [x] Handle window resize events
|
|
27
|
-
- [x] Test TUI launch in terminal
|
|
28
|
-
- [x] Run `make build && make test`
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E08-board-command/T004-board-model
|
|
3
|
-
status: done
|
|
4
|
-
objective: "Implement TUI board model with 3-column Kanban"
|
|
5
|
-
depends_on: ["E08-board-command/T003-tui-app-shell"]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T004: Board Model
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- Three columns: planned, in_progress, done
|
|
13
|
-
- Column headers with task count
|
|
14
|
-
- Task cards showing ID and objective
|
|
15
|
-
- Keyboard navigation: arrows, vim-style j/k/h/l
|
|
16
|
-
- Selection highlighting with accent color
|
|
17
|
-
- Filter by release and epic
|
|
18
|
-
|
|
19
|
-
## Implementation Plan
|
|
20
|
-
|
|
21
|
-
- [x] Add `internal/board/model.go` (extend existing or create new)
|
|
22
|
-
- [x] Implement column structure (planned, in_progress, done)
|
|
23
|
-
- [x] Implement card rendering (ID + objective truncated)
|
|
24
|
-
- [x] Implement selection state (current column, current card)
|
|
25
|
-
- [x] Handle key events: Up/Down/Left/Right, j/k/h/l
|
|
26
|
-
- [x] Apply theme colors for focus/accent
|
|
27
|
-
- [x] Implement release/epic filtering from args
|
|
28
|
-
- [x] Test board rendering in TUI
|
|
29
|
-
- [x] Run `make build && make test`
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E08-board-command/T005-detail-pane
|
|
3
|
-
status: done
|
|
4
|
-
objective: "Implement task detail pane overlay"
|
|
5
|
-
depends_on: ["E08-board-command/T004-board-model"]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T005: Detail Pane
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- Enter key shows selected task detail overlay
|
|
13
|
-
- Displays full task content: ID, objective, status, depends_on, AC
|
|
14
|
-
- Keyboard navigation works (escape/enter to close)
|
|
15
|
-
- Overlay renders with theme styling
|
|
16
|
-
- Closes on q or escape
|
|
17
|
-
|
|
18
|
-
## Implementation Plan
|
|
19
|
-
|
|
20
|
-
- [x] Add `internal/board/detail.go` (extend existing or create new)
|
|
21
|
-
- [x] Implement detail overlay state
|
|
22
|
-
- [x] Render selected task full content
|
|
23
|
-
- [x] Add enter key handler to show detail
|
|
24
|
-
- [x] Add escape/q handlers to close detail
|
|
25
|
-
- [x] Apply theme styling to overlay
|
|
26
|
-
- [x] Test detail pane interaction
|
|
27
|
-
- [x] Run `make build && make test`
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E08-board-command/T006-status-transitions
|
|
3
|
-
status: done
|
|
4
|
-
objective: "Implement status transitions with gate enforcement"
|
|
5
|
-
depends_on: ["E08-board-command/T005-detail-pane"]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T006: Status Transitions
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- Space advances: planned → in_progress → done
|
|
13
|
-
- Backspace retreats: done → in_progress → planned
|
|
14
|
-
- Phase gating: can only reach done after audit phase
|
|
15
|
-
- Dependency gating: cannot advance if depends_on not done
|
|
16
|
-
- mtime conflict detection: warn if task modified since load
|
|
17
|
-
- Write status back to task frontmatter
|
|
18
|
-
|
|
19
|
-
## Implementation Plan
|
|
20
|
-
|
|
21
|
-
- [x] Add `internal/board/transitions.go` (extend existing or create new)
|
|
22
|
-
- [x] Implement phase advancement (space key)
|
|
23
|
-
- [x] Implement phase retreat (backspace key)
|
|
24
|
-
- [x] Check phase gating (must reach audit phase before done)
|
|
25
|
-
- [x] Check dependency gating (all depends_on status: done)
|
|
26
|
-
- [x] Implement mtime conflict detection before write
|
|
27
|
-
- [x] Write new status to task frontmatter via data.WriteTaskStatus
|
|
28
|
-
- [x] Test transition behavior in TUI
|
|
29
|
-
- [x] Run `make build && make test`
|