savepoint 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +10 -3
- 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,272 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: audit-findings
|
|
3
|
-
audited: 2026-05-06
|
|
4
|
-
---
|
|
5
|
-
# Audit Findings: E15 Phase 3 - Hardening
|
|
6
|
-
|
|
7
|
-
## Main Findings
|
|
8
|
-
|
|
9
|
-
Applied the E15 audit proposals and closed the epic as audited.
|
|
10
|
-
|
|
11
|
-
- Fixed the Windows archive packaging issue: Windows tarballs now preserve `savepoint.exe` as the archive member name instead of extracting as `savepoint`.
|
|
12
|
-
- Added a regression test covering the Windows archive member name.
|
|
13
|
-
- Reconciled E15 documentation drift in `Design.md`, `AGENTS.md`, and `E15-Detail.md`.
|
|
14
|
-
- Marked `E15-Detail.md` as `status: audited`.
|
|
15
|
-
- Updated `Design.md` `last_audited` to `v1.1/E15-hardening`.
|
|
16
|
-
- Advanced router state to `epic-design` with no active epic because there are no later unarchived epics in v1.1.
|
|
17
|
-
|
|
18
|
-
Verification after applying proposals:
|
|
19
|
-
|
|
20
|
-
- `go test ./internal/buildtool`
|
|
21
|
-
- `make build`
|
|
22
|
-
- `make test`
|
|
23
|
-
- `make ci`
|
|
24
|
-
|
|
25
|
-
No remaining audit blockers are known. The `## Proposed Changes` section remains below as the apply trace.
|
|
26
|
-
|
|
27
|
-
## Code Style Review
|
|
28
|
-
|
|
29
|
-
- [x] One job per file - E15 changes stayed within board rendering/debug, data parsing/fuzzing, buildtool packaging, CI, and task metadata.
|
|
30
|
-
- [x] One job per function - new helpers such as `executableName`, `writeChecksums`, `stripDebugFlag`, `debugf`, and abbreviation checks are narrowly scoped.
|
|
31
|
-
- [x] Test branches - Windows build output and Windows archive member naming are now covered.
|
|
32
|
-
- [x] Types document intent - existing Go types and small helper APIs remain explicit enough for this scope.
|
|
33
|
-
- [x] Build only what is needed - no speculative runtime features were added beyond E15 scope.
|
|
34
|
-
- [x] Handle errors at boundaries - buildtool, filesystem, checksum, fuzz, and parser errors are propagated with context.
|
|
35
|
-
- [x] One source of truth - target lists and executable naming are centralized in buildtool; the proposed archive fix reuses that source.
|
|
36
|
-
- [x] Comments explain why - new comments document abbreviation suppression and audit-tab hidden sections rather than restating obvious code.
|
|
37
|
-
- [x] Content lives in data - workflow and architecture copy remain in markdown; no new product copy was embedded in logic.
|
|
38
|
-
- [x] Small diffs - most changes are localized, test-backed additions.
|
|
39
|
-
|
|
40
|
-
## Proposed Changes
|
|
41
|
-
|
|
42
|
-
### Target File
|
|
43
|
-
internal/buildtool/main.go
|
|
44
|
-
|
|
45
|
-
### Replace
|
|
46
|
-
```go
|
|
47
|
-
if err := writeTarGz(archive, source, "savepoint"); err != nil {
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### With
|
|
51
|
-
```go
|
|
52
|
-
if err := writeTarGz(archive, source, executableName(target.os)); err != nil {
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Target File
|
|
56
|
-
internal/buildtool/main_test.go
|
|
57
|
-
|
|
58
|
-
### Replace
|
|
59
|
-
```go
|
|
60
|
-
import (
|
|
61
|
-
"crypto/sha256"
|
|
62
|
-
"encoding/hex"
|
|
63
|
-
"os"
|
|
64
|
-
"path/filepath"
|
|
65
|
-
"runtime"
|
|
66
|
-
"strings"
|
|
67
|
-
"testing"
|
|
68
|
-
)
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### With
|
|
72
|
-
```go
|
|
73
|
-
import (
|
|
74
|
-
"archive/tar"
|
|
75
|
-
"compress/gzip"
|
|
76
|
-
"crypto/sha256"
|
|
77
|
-
"encoding/hex"
|
|
78
|
-
"io"
|
|
79
|
-
"os"
|
|
80
|
-
"path/filepath"
|
|
81
|
-
"runtime"
|
|
82
|
-
"strings"
|
|
83
|
-
"testing"
|
|
84
|
-
)
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Target File
|
|
88
|
-
internal/buildtool/main_test.go
|
|
89
|
-
|
|
90
|
-
### Replace
|
|
91
|
-
```go
|
|
92
|
-
func TestExecutableName(t *testing.T) {
|
|
93
|
-
if got := executableName("windows"); got != "savepoint.exe" {
|
|
94
|
-
t.Errorf("executableName(windows) = %q, want savepoint.exe", got)
|
|
95
|
-
}
|
|
96
|
-
if got := executableName("linux"); got != "savepoint" {
|
|
97
|
-
t.Errorf("executableName(linux) = %q, want savepoint", got)
|
|
98
|
-
}
|
|
99
|
-
if got := executableName("darwin"); got != "savepoint" {
|
|
100
|
-
t.Errorf("executableName(darwin) = %q, want savepoint", got)
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### With
|
|
106
|
-
```go
|
|
107
|
-
func TestExecutableName(t *testing.T) {
|
|
108
|
-
if got := executableName("windows"); got != "savepoint.exe" {
|
|
109
|
-
t.Errorf("executableName(windows) = %q, want savepoint.exe", got)
|
|
110
|
-
}
|
|
111
|
-
if got := executableName("linux"); got != "savepoint" {
|
|
112
|
-
t.Errorf("executableName(linux) = %q, want savepoint", got)
|
|
113
|
-
}
|
|
114
|
-
if got := executableName("darwin"); got != "savepoint" {
|
|
115
|
-
t.Errorf("executableName(darwin) = %q, want savepoint", got)
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
func TestWriteTarGzPreservesWindowsExecutableName(t *testing.T) {
|
|
120
|
-
dir := t.TempDir()
|
|
121
|
-
source := filepath.Join(dir, "savepoint.exe")
|
|
122
|
-
if err := os.WriteFile(source, []byte("binary"), 0o755); err != nil {
|
|
123
|
-
t.Fatal(err)
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
archive := filepath.Join(dir, "savepoint-windows-amd64.tar.gz")
|
|
127
|
-
if err := writeTarGz(archive, source, executableName("windows")); err != nil {
|
|
128
|
-
t.Fatalf("writeTarGz: %v", err)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
f, err := os.Open(archive)
|
|
132
|
-
if err != nil {
|
|
133
|
-
t.Fatal(err)
|
|
134
|
-
}
|
|
135
|
-
defer f.Close()
|
|
136
|
-
|
|
137
|
-
gz, err := gzip.NewReader(f)
|
|
138
|
-
if err != nil {
|
|
139
|
-
t.Fatal(err)
|
|
140
|
-
}
|
|
141
|
-
defer gz.Close()
|
|
142
|
-
|
|
143
|
-
tr := tar.NewReader(gz)
|
|
144
|
-
header, err := tr.Next()
|
|
145
|
-
if err != nil {
|
|
146
|
-
t.Fatal(err)
|
|
147
|
-
}
|
|
148
|
-
if header.Name != "savepoint.exe" {
|
|
149
|
-
t.Fatalf("archive member = %q, want savepoint.exe", header.Name)
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
content, err := io.ReadAll(tr)
|
|
153
|
-
if err != nil {
|
|
154
|
-
t.Fatal(err)
|
|
155
|
-
}
|
|
156
|
-
if string(content) != "binary" {
|
|
157
|
-
t.Fatalf("archive content = %q, want binary", content)
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Target File
|
|
163
|
-
.savepoint/Design.md
|
|
164
|
-
|
|
165
|
-
### Replace
|
|
166
|
-
```md
|
|
167
|
-
- **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.
|
|
168
|
-
- **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.
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### With
|
|
172
|
-
```md
|
|
173
|
-
- **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.
|
|
174
|
-
- **Hardening baseline** (v1.1 E15) adds board render/layout benchmarks, data frontmatter fuzz targets, debug logging via CLI `--debug` or `SAVEPOINT_DEBUG`, abbreviation-aware task checklist sentence splitting, root test package isolation, documented audit-tab hidden-section allowlisting, repo-local CI, `make ci`, distribution SHA256 checksums, and Windows amd64/arm64 build outputs.
|
|
175
|
-
- **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.
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
### Target File
|
|
179
|
-
.savepoint/Design.md
|
|
180
|
-
|
|
181
|
-
### Replace
|
|
182
|
-
```md
|
|
183
|
-
- **Cross-platform builds:** `make build-all` cross-compiles linux-amd64, linux-arm64, darwin-amd64, and darwin-arm64 raw binaries into `dist/{platform}-{arch}/savepoint`.
|
|
184
|
-
- **Artifacts:** `make dist` creates versioned `.tar.gz` archives in `dist/` for the Linux and Darwin targets using Go archive APIs, not shell `tar`.
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### With
|
|
188
|
-
```md
|
|
189
|
-
- **Cross-platform builds:** `make build-all` cross-compiles linux-amd64, linux-arm64, darwin-amd64, darwin-arm64, windows-amd64, and windows-arm64 raw binaries into `dist/{platform}-{arch}/savepoint` or `savepoint.exe` for Windows. `make ci` runs the repo-local verification sequence used by CI.
|
|
190
|
-
- **Artifacts:** `make dist` creates versioned `.tar.gz` archives in `dist/` for Linux, Darwin, and Windows targets using Go archive APIs, not shell `tar`, and writes SHA256 hashes to `dist/checksums.txt`.
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### Target File
|
|
194
|
-
AGENTS.md
|
|
195
|
-
|
|
196
|
-
### Replace
|
|
197
|
-
```md
|
|
198
|
-
| `internal/board/` | TUI board, overlays, epic sidebar, Next Activity line, router priority key, detail checklist rendering, status glyphs, forced color profile, async update I/O commands, shared board utilities |
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### With
|
|
202
|
-
```md
|
|
203
|
-
| `internal/board/` | TUI board, overlays, epic sidebar, Next Activity line, router priority key, detail checklist rendering, status glyphs, forced color profile, debug logging hooks, async update I/O commands, shared board utilities |
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
### Target File
|
|
207
|
-
AGENTS.md
|
|
208
|
-
|
|
209
|
-
### Replace
|
|
210
|
-
```md
|
|
211
|
-
| `internal/buildtool/` | Makefile helper, cross-compile, archives |
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### With
|
|
215
|
-
```md
|
|
216
|
-
| `internal/buildtool/` | Makefile helper, cross-compile including Windows targets, archives, distribution checksums |
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
### Target File
|
|
220
|
-
.savepoint/releases/v1.1/epics/E15-hardening/E15-Detail.md
|
|
221
|
-
|
|
222
|
-
### Replace
|
|
223
|
-
```md
|
|
224
|
-
## Components
|
|
225
|
-
|
|
226
|
-
| Module | Purpose |
|
|
227
|
-
|--------|---------|
|
|
228
|
-
| `internal/board/view_test.go` | Add render benchmarks |
|
|
229
|
-
| `internal/data/parser_test.go` | Add fuzz targets |
|
|
230
|
-
| `cmd/main.go` | Add --debug / SAVEPOINT_DEBUG |
|
|
231
|
-
| `internal/buildtool/main.go` | Add checksums, Windows targets |
|
|
232
|
-
| `internal/board/detail.go` | Fix abbreviation handling |
|
|
233
|
-
| `internal/board/epic_panel.go` | Extract allowlist constant |
|
|
234
|
-
| `agent_skills_test.go` | Move to cmd_test package |
|
|
235
|
-
| `Makefile` | Add `ci` target for local verification |
|
|
236
|
-
| `.github/workflows/ci.yml` | Add repo CI workflow |
|
|
237
|
-
|
|
238
|
-
## Boundaries
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### With
|
|
242
|
-
```md
|
|
243
|
-
## Components
|
|
244
|
-
|
|
245
|
-
| Module | Purpose |
|
|
246
|
-
|--------|---------|
|
|
247
|
-
| `internal/board/view_test.go` | Add render and layout benchmarks |
|
|
248
|
-
| `internal/board/card_test.go` | Add card render benchmarks |
|
|
249
|
-
| `internal/board/column_test.go` | Add column render benchmarks |
|
|
250
|
-
| `internal/data/fuzz_test.go` | Add frontmatter and split-body fuzz targets |
|
|
251
|
-
| `main.go` | Add global --debug parsing and SAVEPOINT_DEBUG activation |
|
|
252
|
-
| `internal/board/debug.go` | Add board debug logging helper |
|
|
253
|
-
| `internal/board/board.go` | Log board initialization under debug mode |
|
|
254
|
-
| `internal/board/watch.go` | Log watcher and reload activity under debug mode |
|
|
255
|
-
| `internal/board/update.go` | Log update dispatch and preserve focused-card visibility |
|
|
256
|
-
| `internal/buildtool/main.go` | Add checksums and Windows targets |
|
|
257
|
-
| `internal/board/detail.go` | Fix abbreviation handling |
|
|
258
|
-
| `internal/board/epic_panel.go` | Document audit hidden-section allowlist |
|
|
259
|
-
| `agent_skills_test.go` | Move to external root test package |
|
|
260
|
-
| `Makefile` | Add `ci` target for local verification |
|
|
261
|
-
| `.github/workflows/ci.yml` | Add repo CI workflow |
|
|
262
|
-
|
|
263
|
-
## Implemented As
|
|
264
|
-
|
|
265
|
-
- Debug activation is in root `main.go` because global flags are parsed before dispatching into `cmd/`.
|
|
266
|
-
- Fuzz targets live in `internal/data/fuzz_test.go` rather than `internal/data/parser_test.go`.
|
|
267
|
-
- Fuzzing found and fixed `SplitFrontmatterBody` delimiter-offset handling and CR line-ending normalization.
|
|
268
|
-
- Root `agent_skills_test.go` remains at the repository root but now uses external package `main_test`, which removes the root package coupling without moving fixture-relative paths.
|
|
269
|
-
- CI was included as repo-local guardrail scope for E15 via `T008-ci-and-release-automation`.
|
|
270
|
-
|
|
271
|
-
## Boundaries
|
|
272
|
-
```
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: epic-design
|
|
3
|
-
status: audited
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# E15: Phase 3 — Hardening
|
|
7
|
-
|
|
8
|
-
## Purpose
|
|
9
|
-
|
|
10
|
-
Address the remaining Phase 3 findings from the consolidated codebase audit (Opus 4.6 + GLM 5.1) that were not covered by E13: benchmarks, fuzzing, debug instrumentation, and hardening Medium/Low items.
|
|
11
|
-
|
|
12
|
-
## What this epic adds
|
|
13
|
-
|
|
14
|
-
- Benchmark tests for render functions
|
|
15
|
-
- Fuzz targets for YAML frontmatter parsing
|
|
16
|
-
- --debug flag and SAVEPOINT_DEBUG environment variable
|
|
17
|
-
- Distribution checksums in buildtool
|
|
18
|
-
- Windows build targets in buildtool
|
|
19
|
-
- Abbreviation-aware checklist sentence splitting
|
|
20
|
-
- Root-level test relocation and audit allowlist consolidation
|
|
21
|
-
- Repo-local CI workflow and `ci` Makefile target for build/test verification
|
|
22
|
-
|
|
23
|
-
## Components
|
|
24
|
-
|
|
25
|
-
| Module | Purpose |
|
|
26
|
-
|--------|---------|
|
|
27
|
-
| `internal/board/view_test.go` | Add render and layout benchmarks |
|
|
28
|
-
| `internal/board/card_test.go` | Add card render benchmarks |
|
|
29
|
-
| `internal/board/column_test.go` | Add column render benchmarks |
|
|
30
|
-
| `internal/data/fuzz_test.go` | Add frontmatter and split-body fuzz targets |
|
|
31
|
-
| `main.go` | Add global --debug parsing and SAVEPOINT_DEBUG activation |
|
|
32
|
-
| `internal/board/debug.go` | Add board debug logging helper |
|
|
33
|
-
| `internal/board/board.go` | Log board initialization under debug mode |
|
|
34
|
-
| `internal/board/watch.go` | Log watcher and reload activity under debug mode |
|
|
35
|
-
| `internal/board/update.go` | Log update dispatch and preserve focused-card visibility |
|
|
36
|
-
| `internal/buildtool/main.go` | Add checksums and Windows targets |
|
|
37
|
-
| `internal/board/detail.go` | Fix abbreviation handling |
|
|
38
|
-
| `internal/board/epic_panel.go` | Document audit hidden-section allowlist |
|
|
39
|
-
| `agent_skills_test.go` | Move to external root test package |
|
|
40
|
-
| `Makefile` | Add `ci` target for local verification |
|
|
41
|
-
| `.github/workflows/ci.yml` | Add repo CI workflow |
|
|
42
|
-
|
|
43
|
-
## Implemented As
|
|
44
|
-
|
|
45
|
-
- Debug activation is in root `main.go` because global flags are parsed before dispatching into `cmd/`.
|
|
46
|
-
- Fuzz targets live in `internal/data/fuzz_test.go` rather than `internal/data/parser_test.go`.
|
|
47
|
-
- Fuzzing found and fixed `SplitFrontmatterBody` delimiter-offset handling and CR line-ending normalization.
|
|
48
|
-
- Root `agent_skills_test.go` remains at the repository root but now uses external package `main_test`, which removes the root package coupling without moving fixture-relative paths.
|
|
49
|
-
- CI was included as repo-local guardrail scope for E15 via `T008-ci-and-release-automation`.
|
|
50
|
-
|
|
51
|
-
## Boundaries
|
|
52
|
-
|
|
53
|
-
**In scope:**
|
|
54
|
-
- All Phase 3 audit findings not covered by E13 (benchmarks, fuzz, debug flag)
|
|
55
|
-
- Medium/Low hardening items (M10, L7, L10, L11, L12)
|
|
56
|
-
|
|
57
|
-
**Out of scope:**
|
|
58
|
-
- External deployment hosting beyond repo-local CI/release automation
|
|
59
|
-
- New UI features or commands
|
|
60
|
-
- Structural improvements (separate epic E14)
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E15-hardening/T001-benchmarks
|
|
3
|
-
status: done
|
|
4
|
-
objective: Add benchmark tests for board render functions
|
|
5
|
-
depends_on: []
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T001: Add Benchmark Tests for Render Functions
|
|
9
|
-
|
|
10
|
-
## Context Files
|
|
11
|
-
|
|
12
|
-
- `internal/board/view.go` — renderColumn, renderColumnHeaders
|
|
13
|
-
- `internal/board/card.go` — RenderCard
|
|
14
|
-
- `internal/board/column.go` — RenderColumn
|
|
15
|
-
- `internal/board/layout.go` — layout calculations
|
|
16
|
-
|
|
17
|
-
## Acceptance Criteria
|
|
18
|
-
|
|
19
|
-
- [x] Benchmark added for RenderCard with varied content widths
|
|
20
|
-
- [x] Benchmark added for renderColumn with multiple tasks
|
|
21
|
-
- [x] Benchmark added for layout calculations at different widths
|
|
22
|
-
- [x] Benchmarks are repeatable with consistent results
|
|
23
|
-
- [x] Benchmarks don't modify package state
|
|
24
|
-
- [x] `go test -bench=. ./internal/board/` runs without errors
|
|
25
|
-
|
|
26
|
-
## Implementation Plan
|
|
27
|
-
|
|
28
|
-
- [x] Add benchmark functions in view_test.go, card_test.go, column_test.go
|
|
29
|
-
- [x] Create test data with representative task mixtures
|
|
30
|
-
- [x] Run benchmarks and document baseline
|
|
31
|
-
- [x] Run `make build && make test`
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E15-hardening/T002-fuzz-targets
|
|
3
|
-
status: done
|
|
4
|
-
objective: Add fuzz targets for YAML frontmatter parsing round-trip
|
|
5
|
-
depends_on: []
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T002: Add Fuzz Targets for YAML Frontmatter Parsing
|
|
9
|
-
|
|
10
|
-
## Context Files
|
|
11
|
-
|
|
12
|
-
- `internal/data/parser.go` — extractFrontmatter
|
|
13
|
-
- `internal/data/write.go` — WriteTaskStatus, SplitFrontmatterBody
|
|
14
|
-
- `internal/data/parser_test.go` — existing tests
|
|
15
|
-
|
|
16
|
-
## Acceptance Criteria
|
|
17
|
-
|
|
18
|
-
- [x] Fuzz target added for extractFrontmatter round-trip
|
|
19
|
-
- [x] Fuzz target added for WriteTaskStatus round-trip (write then re-parse)
|
|
20
|
-
- [x] Fuzz targets exercise edge cases (empty content, malformed YAML, unicode)
|
|
21
|
-
- [x] `go test -fuzz=. ./internal/data/` runs without errors
|
|
22
|
-
|
|
23
|
-
## Implementation Plan
|
|
24
|
-
|
|
25
|
-
- [x] Create fuzz_test.go in internal/data with fuzz targets
|
|
26
|
-
- [x] Define corpus seed inputs from known edge cases
|
|
27
|
-
- [x] Run fuzz targets for short duration to verify stability
|
|
28
|
-
- [x] Run `make build && make test`
|
|
29
|
-
|
|
30
|
-
## Drift Notes
|
|
31
|
-
|
|
32
|
-
- Fuzzer found bug in `SplitFrontmatterBody`: used `len(TrimSpace(raw))` for bodyStart, causing off-by-N when frontmatter has leading/trailing whitespace. Fixed to compute bodyStart from actual `\n---` offset.
|
|
33
|
-
- Fuzzer found `normalizeLineEndings` not idempotent with `\r\r\n` sequences. Fixed to also replace lone `\r` with `\n` (handles legacy Mac CR line endings).
|
|
34
|
-
- No new files/modules beyond `internal/data/fuzz_test.go` (in-scope per E15-Detail.md).
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E15-hardening/T003-debug-flag
|
|
3
|
-
status: done
|
|
4
|
-
objective: Add --debug flag and SAVEPOINT_DEBUG env var for structured debug logging
|
|
5
|
-
depends_on: []
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T003: Add --debug Flag and SAVEPOINT_DEBUG Env Var
|
|
9
|
-
|
|
10
|
-
## Context Files
|
|
11
|
-
|
|
12
|
-
- `main.go` — CLI entrypoint, --version flag
|
|
13
|
-
- `cmd/` — command dispatch
|
|
14
|
-
- `internal/board/` — board init, file watchers, command dispatch
|
|
15
|
-
|
|
16
|
-
## Acceptance Criteria
|
|
17
|
-
|
|
18
|
-
- [x] --debug flag accepted at CLI level
|
|
19
|
-
- [x] SAVEPOINT_DEBUG env var recognized
|
|
20
|
-
- [x] Debug output includes board init, file watcher events, and command dispatch
|
|
21
|
-
- [x] Debug output is off by default (no performance impact)
|
|
22
|
-
- [x] `go test ./...` passes with no regressions
|
|
23
|
-
|
|
24
|
-
## Implementation Plan
|
|
25
|
-
|
|
26
|
-
- [x] Define debug logging helper in a shared location
|
|
27
|
-
- [x] Add --debug flag parsing in main.go
|
|
28
|
-
- [x] Instrument key points in board init, file watcher, and update dispatch
|
|
29
|
-
- [x] Add tests for debug flag behavior
|
|
30
|
-
- [x] Run `make build && make test`
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E15-hardening/T004-dist-checksums
|
|
3
|
-
status: done
|
|
4
|
-
objective: Generate checksums.txt during make dist using Go crypto APIs
|
|
5
|
-
depends_on: []
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T004: Add Distribution Checksums
|
|
9
|
-
|
|
10
|
-
## Context Files
|
|
11
|
-
|
|
12
|
-
- `internal/buildtool/main.go` — dist() function that creates tar.gz archives
|
|
13
|
-
- `Makefile` — dist target
|
|
14
|
-
|
|
15
|
-
## Acceptance Criteria
|
|
16
|
-
|
|
17
|
-
- [x] dist() generates checksums.txt file with SHA256 hashes
|
|
18
|
-
- [x] checksums.txt is included in the dist directory
|
|
19
|
-
- [x] Existing archive creation behavior preserved
|
|
20
|
-
- [x] `go test ./...` passes
|
|
21
|
-
|
|
22
|
-
## Implementation Plan
|
|
23
|
-
|
|
24
|
-
- [x] Add SHA256 checksum computation in dist() using crypto/sha256
|
|
25
|
-
- [x] Write checksums.txt to dist directory
|
|
26
|
-
- [x] Add tests for checksum generation
|
|
27
|
-
- [x] Run `make build && make test`
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E15-hardening/T005-windows-targets
|
|
3
|
-
status: done
|
|
4
|
-
objective: Add Windows amd64 and arm64 build targets to buildtool
|
|
5
|
-
depends_on: []
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T005: Add Windows Build Targets
|
|
9
|
-
|
|
10
|
-
## Context Files
|
|
11
|
-
|
|
12
|
-
- `internal/buildtool/main.go` — targets list, build logic, localExecutable
|
|
13
|
-
|
|
14
|
-
## Acceptance Criteria
|
|
15
|
-
|
|
16
|
-
- [x] Windows amd64 target added
|
|
17
|
-
- [x] Windows arm64 target added
|
|
18
|
-
- [x] .exe suffix handled for Windows binaries
|
|
19
|
-
- [x] Existing Linux and Darwin targets preserved
|
|
20
|
-
- [x] `go test ./...` passes
|
|
21
|
-
|
|
22
|
-
## Implementation Plan
|
|
23
|
-
|
|
24
|
-
- [x] Add windows-amd64 and windows-arm64 to targets list
|
|
25
|
-
- [x] Handle .exe suffix in build output path via `executableName(goos)`
|
|
26
|
-
- [x] Update localExecutable to detect Windows (already done in prior task)
|
|
27
|
-
- [x] Update tests for new targets
|
|
28
|
-
- [x] Run `make build && make test`
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E15-hardening/T006-abbreviation-splitting
|
|
3
|
-
status: done
|
|
4
|
-
objective: Fix splitChecklistSentences to skip periods preceded by known abbreviations
|
|
5
|
-
depends_on: []
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T006: Fix Abbreviation Handling in Checklist Sentence Splitting
|
|
9
|
-
|
|
10
|
-
## Context Files
|
|
11
|
-
|
|
12
|
-
- `internal/board/detail.go:88` — splitChecklistSentences function
|
|
13
|
-
|
|
14
|
-
## Acceptance Criteria
|
|
15
|
-
|
|
16
|
-
- [x] Known abbreviations (e.g., "e.g.", "i.e.") do not trigger sentence breaks
|
|
17
|
-
- [x] Existing sentence splitting behavior preserved for non-abbreviation periods
|
|
18
|
-
- [x] Abbreviation list is configurable/extensible
|
|
19
|
-
- [x] `go test ./...` passes with no regressions
|
|
20
|
-
|
|
21
|
-
## Implementation Plan
|
|
22
|
-
|
|
23
|
-
- [x] Define known abbreviation set
|
|
24
|
-
- [x] Add abbreviation check before period-based sentence split
|
|
25
|
-
- [x] Add test cases for abbreviations in sentences
|
|
26
|
-
- [x] Run `make build && make test`
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E15-hardening/T007-root-test-allowlist
|
|
3
|
-
status: done
|
|
4
|
-
objective: Move agent_skills_test.go to a test package and extract audit allowlist to a named constant
|
|
5
|
-
depends_on: []
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T007: Move Root-Level Test and Extract Audit Allowlist
|
|
9
|
-
|
|
10
|
-
## Context Files
|
|
11
|
-
|
|
12
|
-
- `agent_skills_test.go` — root-level package main test
|
|
13
|
-
- `internal/board/epic_panel.go:116-119` — allowedSections map
|
|
14
|
-
|
|
15
|
-
## Acceptance Criteria
|
|
16
|
-
|
|
17
|
-
- [x] agent_skills_test.go moved to cmd_test package (or appropriate location)
|
|
18
|
-
- [x] allowedSections extracted to a named constant with documentation
|
|
19
|
-
- [x] All existing tests still pass after refactoring
|
|
20
|
-
- [x] `go test ./...` passes with no regressions
|
|
21
|
-
|
|
22
|
-
## Implementation Plan
|
|
23
|
-
|
|
24
|
-
- [x] Move agent_skills_test.go to an appropriate internal test package
|
|
25
|
-
- [x] Update imports and paths in moved test
|
|
26
|
-
- [x] Extract allowedSections map to a named constant
|
|
27
|
-
- [x] Update any references in epic_panel.go
|
|
28
|
-
- [x] Run `make build && make test`
|
|
29
|
-
|
|
30
|
-
## Notes
|
|
31
|
-
|
|
32
|
-
- `agent_skills_test.go` changed from `package main` → `package main_test` (external test package at root). Paths remain valid since Go test working dir is the package dir.
|
|
33
|
-
- `epicAuditHiddenSectionHeadings` already extracted as package-level var; added doc comment explaining suppression rationale.
|
package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T008-ci-and-release-automation.md
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E15-hardening/T008-ci-and-release-automation
|
|
3
|
-
status: done
|
|
4
|
-
objective: Add repo-local CI coverage for build/test checks and keep the buildtool-driven release flow reproducible
|
|
5
|
-
depends_on: []
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T008: Add CI and Release Automation Guardrails
|
|
9
|
-
|
|
10
|
-
## Context Files
|
|
11
|
-
|
|
12
|
-
- `Makefile` - local entrypoint for build, test, and dist commands
|
|
13
|
-
- `internal/buildtool/main.go` - build orchestration and packaging logic
|
|
14
|
-
- `.savepoint/releases/v1.1/epics/E15-hardening/E15-Detail.md` - epic scope and component map
|
|
15
|
-
|
|
16
|
-
## Acceptance Criteria
|
|
17
|
-
|
|
18
|
-
- [x] `.github/workflows/ci.yml` exists and runs on push and pull_request events
|
|
19
|
-
- [x] The CI workflow runs `go test ./...` and `make build` at minimum
|
|
20
|
-
- [x] The CI workflow uses the repo-local Makefile targets rather than duplicating buildtool logic inline
|
|
21
|
-
- [x] `Makefile` exposes a `ci` target that runs the local verification steps used by CI
|
|
22
|
-
- [x] Generated binaries and archives remain excluded from version control via `.gitignore`
|
|
23
|
-
|
|
24
|
-
## Implementation Plan
|
|
25
|
-
|
|
26
|
-
- [x] Add a GitHub Actions workflow for CI in `.github/workflows/ci.yml`
|
|
27
|
-
- [x] Add a `ci` Makefile target that wraps the local verification commands
|
|
28
|
-
- [x] Reuse existing `build`, `test`, and `smoke-test` targets instead of duplicating orchestration
|
|
29
|
-
- [x] Confirm artifact ignore rules still cover local binaries and archives
|
|
30
|
-
- [x] Run `make build && make test`
|
|
31
|
-
|
|
32
|
-
## Context Log
|
|
33
|
-
|
|
34
|
-
Files read:
|
|
35
|
-
- Makefile
|
|
36
|
-
- internal/buildtool/main.go
|
|
37
|
-
- .gitignore
|
|
38
|
-
- .savepoint/releases/v1.1/epics/E15-hardening/E15-Detail.md
|
|
39
|
-
- main.go
|
|
40
|
-
- go.mod
|
|
41
|
-
|
|
42
|
-
Estimated input tokens:
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
Notes:
|
|
46
|
-
-
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E06-audit-command/T001-cli-entrypoint
|
|
3
|
-
status: in_progress
|
|
4
|
-
objective: "Create CLI entrypoint for savepoint audit command"
|
|
5
|
-
depends_on: []
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T001: CLI Entrypoint
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- `savepoint audit --help` shows usage: `audit <epic-id|release> [--skip --reason]`
|
|
13
|
-
- `savepoint audit <epic-id>` runs audit for that epic
|
|
14
|
-
- `savepoint audit <release>` runs audit for all unaudited epics in that release
|
|
15
|
-
- `savepoint audit --skip --reason "..."` skips the audit and logs reason
|
|
16
|
-
- Unknown arguments show error and exit non-zero
|
|
17
|
-
|
|
18
|
-
## Implementation Plan
|
|
19
|
-
|
|
20
|
-
- [x] Add `cmd/audit.go` with CLI argument parsing
|
|
21
|
-
- [x] Wire audit command into main.go
|
|
22
|
-
- [x] Implement arg validation for epic-id (E##) and release (v#.#) formats
|
|
23
|
-
- [x] Add subcommand dispatch to audit workflow
|
|
24
|
-
- [x] Test `savepoint audit --help` output
|
|
25
|
-
- [x] Run `make build && make test`
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E06-audit-command/T002-quality-gates
|
|
3
|
-
status: done
|
|
4
|
-
objective: "Implement quality gate runner that blocks on failure"
|
|
5
|
-
depends_on: ["E06-audit-command/T001-cli-entrypoint"]
|
|
6
|
-
phase: build
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# T002: Quality Gates
|
|
10
|
-
|
|
11
|
-
## Acceptance Criteria
|
|
12
|
-
|
|
13
|
-
- Reads `quality_gates` from `.savepoint/config.yml`
|
|
14
|
-
- Runs each configured command (lint, typecheck, test)
|
|
15
|
-
- Blocks audit if any gate fails and `block_on_failure: true`
|
|
16
|
-
- Continues if `block_on_failure: false` but logs failure
|
|
17
|
-
- Shows clear output: which gates passed/failed
|
|
18
|
-
|
|
19
|
-
## Implementation Plan
|
|
20
|
-
|
|
21
|
-
- [x] Add `internal/audit/gates.go`
|
|
22
|
-
- [x] Read config `quality_gates` struct
|
|
23
|
-
- [x] Implement `RunGates(ctx) error` that executes each command
|
|
24
|
-
- [x] Handle null gates (skip if not configured)
|
|
25
|
-
- [x] Add exit code propagation for blocking behavior
|
|
26
|
-
- [x] Test with configured gates in .savepoint/config.yml
|
|
27
|
-
- [x] Run `make build && make test`
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: E06-audit-command/T003-snapshot
|
|
3
|
-
status: planned
|
|
4
|
-
objective: "Generate file tree and changed-files snapshot"
|
|
5
|
-
depends_on: ["E06-audit-command/T002-quality-gates"]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# T003: Snapshot Generation
|
|
9
|
-
|
|
10
|
-
## Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
- Generates `.savepoint/audit/{release}/{epic}/snapshot.md`
|
|
13
|
-
- Includes file tree (gitignore-respecting)
|
|
14
|
-
- Includes list of changed files (from git)
|
|
15
|
-
- Does NOT include file contents (no code in snapshot)
|
|
16
|
-
- Snapshot path matches expected format
|
|
17
|
-
|
|
18
|
-
## Implementation Plan
|
|
19
|
-
|
|
20
|
-
- [ ] Add `internal/audit/snapshot.go`
|
|
21
|
-
- [ ] Implement `GenerateSnapshot(epic, release) error`
|
|
22
|
-
- [ ] Walk directory tree respecting .gitignore
|
|
23
|
-
- [ ] Run `git diff --name-only` for changed files
|
|
24
|
-
- [ ] Write snapshot.md with tree + changed-files sections
|
|
25
|
-
- [ ] Create audit directory if not exists
|
|
26
|
-
- [ ] Test snapshot output format
|
|
27
|
-
- [ ] Run `make build && make test`
|