savepoint 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +20 -0
- package/.prettierignore +4 -0
- package/.savepoint/Design.md +196 -0
- package/.savepoint/PRD.md +58 -0
- package/.savepoint/audit/E01-go-setup/proposals.md +166 -0
- package/.savepoint/audit/E01-go-setup/snapshot.md +71 -0
- package/.savepoint/audit/E01-scaffolding/proposals/AGENTS.md +66 -0
- package/.savepoint/audit/E01-scaffolding/proposals/Design.md +210 -0
- package/.savepoint/audit/E01-scaffolding/proposals/epic-Design.md +117 -0
- package/.savepoint/audit/E01-scaffolding/proposals/quality-review.md +101 -0
- package/.savepoint/audit/E01-scaffolding/snapshot.md +54 -0
- package/.savepoint/audit/E02-data-model/snapshot.md +128 -0
- package/.savepoint/audit/E02-data-readers/proposals.md +123 -0
- package/.savepoint/audit/E02-data-readers/snapshot.md +54 -0
- package/.savepoint/audit/E03-board-tui-core/proposals.md +146 -0
- package/.savepoint/audit/E03-board-tui-core/snapshot.md +57 -0
- package/.savepoint/audit/E03-cli-foundation/snapshot.md +106 -0
- package/.savepoint/audit/E04-board-components/proposals.md +118 -0
- package/.savepoint/audit/E04-board-components/snapshot.md +77 -0
- package/.savepoint/audit/E04-templates-and-prompts/snapshot.md +115 -0
- package/.savepoint/audit/E05-init-command/snapshot.md +125 -0
- package/.savepoint/audit/E05-phase-transitions/proposals.md +83 -0
- package/.savepoint/audit/E05-phase-transitions/snapshot.md +36 -0
- package/.savepoint/audit/E06-tui-board/snapshot.md +64 -0
- package/.savepoint/audit/E07-audit-pipeline/snapshot.md +165 -0
- package/.savepoint/audit/E08-board-workflow-cleanup/snapshot.md +65 -0
- package/.savepoint/config.yml +27 -0
- package/.savepoint/releases/v1/PRD.md +66 -0
- package/.savepoint/releases/v1/epics/E01-go-setup/Design.md +39 -0
- package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md +42 -0
- package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T002-entrypoint.md +23 -0
- package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T003-directory-structure.md +24 -0
- package/.savepoint/releases/v1/epics/E01-go-setup/tasks/T004-makefile.md +23 -0
- package/.savepoint/releases/v1/epics/E02-data-readers/Design.md +61 -0
- package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T001-task-struct.md +29 -0
- package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T002-frontmatter-parser.md +30 -0
- package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T003-router-reader.md +29 -0
- package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T004-config-reader.md +29 -0
- package/.savepoint/releases/v1/epics/E02-data-readers/tasks/T005-discovery.md +30 -0
- package/.savepoint/releases/v1/epics/E03-board-tui-core/Design.md +38 -0
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T001-model.md +29 -0
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T002-update-loop.md +30 -0
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T003-view.md +34 -0
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T004-styles.md +29 -0
- package/.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T005-layout.md +42 -0
- package/.savepoint/releases/v1/epics/E04-board-components/Design.md +44 -0
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T001-column.md +34 -0
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T002-card.md +33 -0
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T003-epic-panel.md +49 -0
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T004-detail-overlay.md +40 -0
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T005-release-dropdown.md +33 -0
- package/.savepoint/releases/v1/epics/E04-board-components/tasks/T006-help-overlay.md +34 -0
- package/.savepoint/releases/v1/epics/E05-phase-transitions/Design.md +38 -0
- package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T001-phase-stepping.md +29 -0
- package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T002-gates.md +31 -0
- package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T003-write-task.md +31 -0
- package/.savepoint/releases/v1/epics/E05-phase-transitions/tasks/T004-write-router.md +31 -0
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/Design.md +42 -0
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T001-color-system.md +39 -0
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md +52 -0
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T003-footer-status-bar.md +52 -0
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md +53 -0
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T005-restore-nav-hints.md +39 -0
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T007-detail-card-fixes.md +36 -0
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T008-checkbox-states.md +38 -0
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T009-router-priority-marker.md +41 -0
- package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T010-auto-refresh-watcher.md +61 -0
- package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/Design.md +39 -0
- package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T001-archive-epics.md +20 -0
- package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T002-rewrite-prd.md +22 -0
- package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T003-create-epic-stubs.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T004-update-router.md +22 -0
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/Design.md +118 -0
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/handoff.md +9 -0
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T001-package-baseline.md +45 -0
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T002-typescript-build.md +48 -0
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T003-vitest-smoke.md +43 -0
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T004-lint-format-gates.md +45 -0
- package/.savepoint/releases/v1/epics/_archived/E01-scaffolding/tasks/T005-scaffold-verification.md +40 -0
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/Design.md +142 -0
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T001-domain-ids-status.md +27 -0
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T002-markdown-frontmatter-boundary.md +28 -0
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T003-task-documents.md +29 -0
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T004-release-epic-router-config-readers.md +30 -0
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T005-dependency-validation.md +29 -0
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T006-epic-task-set-reader.md +29 -0
- package/.savepoint/releases/v1/epics/_archived/E02-data-model/tasks/T007-quality-gates.md +31 -0
- package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/Design.md +40 -0
- package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T001-phase-types.md +27 -0
- package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T002-phase-frontmatter.md +25 -0
- package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T003-simplify-config.md +26 -0
- package/.savepoint/releases/v1/epics/_archived/E02-domain-phase-model/tasks/T004-simplify-router-domain.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/Design.md +122 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T001-argument-parser-contract.md +28 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T002-help-text-generation.md +28 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T003-terminal-environment-detection.md +27 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T004-command-stub-modules.md +29 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T005-cli-runner-dispatch.md +34 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-foundation/tasks/T006-entrypoint-quality-gates.md +32 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/Design.md +43 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T001-strip-args.md +26 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T002-strip-help.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T003-strip-run.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T004-delete-commands.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E03-cli-simplify/tasks/T005-update-cli-tests.md +22 -0
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/Design.md +48 -0
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T001-board-data-phases.md +26 -0
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T002-phase-rendering.md +28 -0
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T003-detail-pane-phases.md +27 -0
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T004-phase-transitions.md +42 -0
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T005-phase-gates.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T006-phase-write-back.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T007-remove-audit-flow.md +27 -0
- package/.savepoint/releases/v1/epics/_archived/E04-board-phase-integration/tasks/T008-board-tests.md +25 -0
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/Design.md +85 -0
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T001-project-template-assets.md +17 -0
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T002-release-and-prompt-assets.md +20 -0
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T003-template-registry-renderer.md +22 -0
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T004-template-integrity-tests.md +17 -0
- package/.savepoint/releases/v1/epics/_archived/E04-templates-and-prompts/tasks/T005-template-closeout-quality-gates.md +16 -0
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/Design.md +88 -0
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T001-init-cli-contract.md +22 -0
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T002-target-validation.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T003-scaffold-writer.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T004-magic-prompt-and-clipboard.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T005-dev-deps-install-option.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E05-init-command/tasks/T006-init-command-integration.md +28 -0
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/Design.md +53 -0
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T001-delete-dead-src.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T002-delete-dead-tests.md +26 -0
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T003-delete-assets.md +25 -0
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T004-clean-savepoint.md +28 -0
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T005-rewrite-agents-md.md +28 -0
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T006-clean-package-json.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E05-project-cleanup/tasks/T007-verify.md +25 -0
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/Design.md +104 -0
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T001-board-command-data.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T002-board-view-state.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T003-transition-gates-and-writes.md +25 -0
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T004-terminal-theme.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T005-ink-board-ui.md +26 -0
- package/.savepoint/releases/v1/epics/_archived/E06-tui-board/tasks/T006-board-integration-audit-entry.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/Design.md +88 -0
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T001-audit-cli-contract.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T002-quality-gate-runner.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T003-snapshot-and-prompt.md +23 -0
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T004-audit-orchestration-router.md +27 -0
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T005-proposal-validation-apply.md +25 -0
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T006-audit-review-state.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T007-audit-review-ui.md +26 -0
- package/.savepoint/releases/v1/epics/_archived/E07-audit-pipeline/tasks/T008-audit-pipeline-integration.md +24 -0
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/Design.md +103 -0
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T001-acceptance-criteria-model.md +30 -0
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T002-release-task-set-reader.md +33 -0
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T003-board-data-and-plain-output.md +34 -0
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T004-board-selection-state.md +33 -0
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T005-ink-board-layout-cleanup.md +37 -0
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T006-task-detail-popup.md +36 -0
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T007-templates-acceptance-criteria.md +34 -0
- package/.savepoint/releases/v1/epics/_archived/E08-board-workflow-cleanup/tasks/T008-board-workflow-integration.md +41 -0
- package/.savepoint/releases/v1/epics/_archived/E09-doctor-command/Design.md +70 -0
- package/.savepoint/releases/v1/epics/_archived/E10-docs-and-packaging/Design.md +68 -0
- package/.savepoint/releases/v1/epics/_archived/E11-release-validation/Design.md +68 -0
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/Design.md +26 -0
- package/.savepoint/releases/v1.1/epics/E01-tui-optimisation/tasks/T001-border-resize-fix.md +35 -0
- package/.savepoint/router.md +136 -0
- package/.savepoint/visual-identity.md +124 -0
- package/AGENTS.md +141 -0
- package/CLAUDE.md +1 -0
- package/GEMINI.md +1 -0
- package/LICENSE +21 -0
- package/Makefile +13 -0
- package/README.md +78 -0
- package/agent-skills/ink-tui-design/SKILL.md +309 -0
- package/agent-skills/ink-tui-design/references/component-patterns.md +371 -0
- package/agent-skills/ink-tui-design/references/hooks-guide.md +436 -0
- package/agent-skills/ink-tui-design/references/ink-gotchas.md +330 -0
- package/agent-skills/ink-tui-design/references/testing-patterns.md +384 -0
- package/agent-skills/savepoint-audit/SKILL.md +35 -0
- package/agent-skills/savepoint-build-task/SKILL.md +39 -0
- package/agent-skills/savepoint-create-plan/SKILL.md +28 -0
- package/agent-skills/savepoint-create-task/SKILL.md +31 -0
- package/agent-skills/savepoint-draft-prd/SKILL.md +32 -0
- package/agent-skills/savepoint-system-design/SKILL.md +33 -0
- package/agent-skills/superpowers/brainstorming/SKILL.md +165 -0
- package/agent-skills/superpowers/brainstorming/visual-companion.md +304 -0
- package/agent-skills/superpowers/dispatching-parallel-agents/SKILL.md +193 -0
- package/agent-skills/superpowers/executing-plans/SKILL.md +77 -0
- package/agent-skills/superpowers/finishing-a-development-branch/SKILL.md +213 -0
- package/agent-skills/superpowers/receiving-code-review/SKILL.md +226 -0
- package/agent-skills/superpowers/requesting-code-review/SKILL.md +115 -0
- package/agent-skills/superpowers/requesting-code-review/code-reviewer.md +160 -0
- package/agent-skills/superpowers/subagent-driven-development/SKILL.md +292 -0
- package/agent-skills/superpowers/subagent-driven-development/code-quality-reviewer-prompt.md +27 -0
- package/agent-skills/superpowers/subagent-driven-development/implementer-prompt.md +113 -0
- package/agent-skills/superpowers/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/agent-skills/superpowers/systematic-debugging/SKILL.md +305 -0
- package/agent-skills/superpowers/systematic-debugging/condition-based-waiting.md +122 -0
- package/agent-skills/superpowers/systematic-debugging/defense-in-depth.md +130 -0
- package/agent-skills/superpowers/systematic-debugging/root-cause-tracing.md +183 -0
- package/agent-skills/superpowers/test-driven-development/SKILL.md +389 -0
- package/agent-skills/superpowers/test-driven-development/testing-anti-patterns.md +317 -0
- package/agent-skills/superpowers/verification-before-completion/SKILL.md +147 -0
- package/agent-skills/superpowers/writing-plans/SKILL.md +159 -0
- package/agent-skills/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/assets/banner.png +0 -0
- package/assets/logo.png +0 -0
- package/assets/strawman.png +0 -0
- package/go.mod +33 -0
- package/go.sum +73 -0
- package/ink-cli-ui-design.zip +0 -0
- package/internal/board/board.go +121 -0
- package/internal/board/board_test.go +99 -0
- package/internal/board/card.go +72 -0
- package/internal/board/card_test.go +111 -0
- package/internal/board/column.go +61 -0
- package/internal/board/column_test.go +81 -0
- package/internal/board/detail.go +140 -0
- package/internal/board/detail_test.go +233 -0
- package/internal/board/epic_panel.go +69 -0
- package/internal/board/epic_panel_test.go +246 -0
- package/internal/board/help.go +40 -0
- package/internal/board/help_test.go +85 -0
- package/internal/board/layout.go +58 -0
- package/internal/board/layout_test.go +89 -0
- package/internal/board/model.go +151 -0
- package/internal/board/model_test.go +67 -0
- package/internal/board/release.go +42 -0
- package/internal/board/release_test.go +177 -0
- package/internal/board/transitions.go +88 -0
- package/internal/board/transitions_test.go +141 -0
- package/internal/board/update.go +155 -0
- package/internal/board/update_test.go +128 -0
- package/internal/board/view.go +190 -0
- package/internal/board/view_test.go +147 -0
- package/internal/data/config.go +87 -0
- package/internal/data/config_test.go +73 -0
- package/internal/data/discover.go +152 -0
- package/internal/data/discover_test.go +106 -0
- package/internal/data/errors.go +9 -0
- package/internal/data/lifecycle.go +37 -0
- package/internal/data/lifecycle_test.go +38 -0
- package/internal/data/parser.go +189 -0
- package/internal/data/parser_test.go +216 -0
- package/internal/data/router.go +52 -0
- package/internal/data/router_test.go +35 -0
- package/internal/data/task.go +46 -0
- package/internal/data/task_test.go +51 -0
- package/internal/data/write.go +144 -0
- package/internal/data/write_test.go +456 -0
- package/internal/styles/palette.go +47 -0
- package/internal/styles/styles.go +122 -0
- package/main.exe +0 -0
- package/main.go +11 -0
- package/package.json +25 -0
- package/savepoint +0 -0
- package/savepoint.exe +0 -0
- package/scripts/vitest-preload.cjs +95 -0
- package/templates/project/.savepoint/Design.md +47 -0
- package/templates/project/.savepoint/PRD.md +34 -0
- package/templates/project/.savepoint/config.yml +27 -0
- package/templates/project/.savepoint/router.md +152 -0
- package/templates/project/.savepoint/visual-identity.md +122 -0
- package/templates/project/AGENTS.md +130 -0
- package/templates/prompts/audit-reconciliation.prompt.md +67 -0
- package/templates/prompts/design.prompt.md +43 -0
- package/templates/prompts/epic-design.prompt.md +43 -0
- package/templates/prompts/magic-prompt.prompt.md +7 -0
- package/templates/prompts/prd.prompt.md +42 -0
- package/templates/prompts/task-breakdown.prompt.md +54 -0
- package/templates/prompts/task-building.prompt.md +38 -0
- package/templates/prompts/task-planning.prompt.md +53 -0
- package/templates/release/v1/PRD.md +37 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: audit-snapshot
|
|
3
|
+
epic: E08-board-workflow-cleanup
|
|
4
|
+
source: manual
|
|
5
|
+
created: 2026-04-29
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# E08-board-workflow-cleanup Audit Snapshot
|
|
9
|
+
|
|
10
|
+
Manual snapshot created because the audit CLI is not the active workflow entry for this epic closeout.
|
|
11
|
+
|
|
12
|
+
## Epic Scope
|
|
13
|
+
|
|
14
|
+
Extend the board from an active-epic-only view into a release workflow surface with acceptance-criteria-aware task documents, release-level task loading, epic browsing, alternate-screen TTY rendering, a task detail modal, and updated workflow templates/prompts.
|
|
15
|
+
|
|
16
|
+
## Completed Tasks
|
|
17
|
+
|
|
18
|
+
- E08-board-workflow-cleanup/T001-acceptance-criteria-model
|
|
19
|
+
- E08-board-workflow-cleanup/T002-release-task-set-reader
|
|
20
|
+
- E08-board-workflow-cleanup/T003-board-data-and-plain-output
|
|
21
|
+
- E08-board-workflow-cleanup/T004-board-selection-state
|
|
22
|
+
- E08-board-workflow-cleanup/T005-ink-board-layout-cleanup
|
|
23
|
+
- E08-board-workflow-cleanup/T006-task-detail-popup
|
|
24
|
+
- E08-board-workflow-cleanup/T007-templates-acceptance-criteria
|
|
25
|
+
- E08-board-workflow-cleanup/T008-board-workflow-integration
|
|
26
|
+
|
|
27
|
+
## Changed Files To Audit
|
|
28
|
+
|
|
29
|
+
- `.savepoint/router.md`
|
|
30
|
+
- `AGENTS.md`
|
|
31
|
+
- `src/commands/board.ts`
|
|
32
|
+
- `src/domain/task.ts`
|
|
33
|
+
- `src/readers/tasks.ts`
|
|
34
|
+
- `src/tui/App.tsx`
|
|
35
|
+
- `src/tui/Board.tsx`
|
|
36
|
+
- `src/tui/DetailPane.tsx`
|
|
37
|
+
- `src/tui/board-data.ts`
|
|
38
|
+
- `src/tui/io/gates.ts`
|
|
39
|
+
- `src/tui/render/plain-table.ts`
|
|
40
|
+
- `src/tui/state/app-reducer.ts`
|
|
41
|
+
- `src/tui/state/reducer.ts`
|
|
42
|
+
- `src/tui/state/view-state.ts`
|
|
43
|
+
- `templates/project/.savepoint/router.md`
|
|
44
|
+
- `templates/project/AGENTS.md`
|
|
45
|
+
- `templates/prompts/task-breakdown.prompt.md`
|
|
46
|
+
- `templates/prompts/task-planning.prompt.md`
|
|
47
|
+
- `templates/prompts/task-building.prompt.md`
|
|
48
|
+
- `test/commands/board.test.ts`
|
|
49
|
+
- `test/commands/board-tty.test.ts`
|
|
50
|
+
- `test/domain/task.test.ts`
|
|
51
|
+
- `test/readers/tasks.test.ts`
|
|
52
|
+
- `test/templates/project-templates.test.ts`
|
|
53
|
+
- `test/templates/prompt-templates.test.ts`
|
|
54
|
+
- `test/templates/router-template.test.ts`
|
|
55
|
+
- `test/tui/board-data.test.ts`
|
|
56
|
+
- `test/tui/components/App.test.tsx`
|
|
57
|
+
- `test/tui/components/Board.test.tsx`
|
|
58
|
+
- `test/tui/components/DetailPane.test.tsx`
|
|
59
|
+
- `test/tui/render/plain-table.test.ts`
|
|
60
|
+
- `test/tui/state/app-reducer.test.ts`
|
|
61
|
+
- `test/tui/state/reducer.test.ts`
|
|
62
|
+
|
|
63
|
+
## Known Non-E08 Working Tree Noise
|
|
64
|
+
|
|
65
|
+
The working tree also contains prior and parallel changes in E05, E06, E07, release-planning metadata, README/docs copies, and other scaffold/test areas. Those files are not audit inputs for this Epic08 bundle except where proposal targets explicitly update shared architecture or codebase-map documentation.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Savepoint config — single source of truth for project preferences.
|
|
2
|
+
|
|
3
|
+
verify_strict: false # vibe-coder soft mode; tasks reach done on assertion. Set true for TDD-strict.
|
|
4
|
+
|
|
5
|
+
quality_gates:
|
|
6
|
+
# Filled in by epic E01-scaffolding. Until then, audits skip step 0.
|
|
7
|
+
lint: null
|
|
8
|
+
typecheck: null
|
|
9
|
+
test: null
|
|
10
|
+
block_on_failure: true
|
|
11
|
+
|
|
12
|
+
audit:
|
|
13
|
+
divergence_threshold: 0.5 # warn if a proposal changes >50% of a live file
|
|
14
|
+
|
|
15
|
+
theme:
|
|
16
|
+
bg: "#121212"
|
|
17
|
+
surface: "#0D0D0D"
|
|
18
|
+
surface_2: "#0F0F0F"
|
|
19
|
+
border: "#1A1A1A"
|
|
20
|
+
text: "#F0E6DA"
|
|
21
|
+
accents:
|
|
22
|
+
planned: "#B1A1DF"
|
|
23
|
+
in_progress: "#FC6323" # Atari Orange
|
|
24
|
+
done: "#A4C639" # NPP Green
|
|
25
|
+
blocked: "#FF4444"
|
|
26
|
+
epic: "#B1A1DF" # Vibe Purple
|
|
27
|
+
borders: "subtle" # subtle | sharp | none
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1
|
|
3
|
+
name: "Simplified Board"
|
|
4
|
+
status: in_progress
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Release v1 — Simplified Board
|
|
8
|
+
|
|
9
|
+
## Simplification Objective
|
|
10
|
+
|
|
11
|
+
The original v1 scope (11 epics, 5 CLI commands, full audit pipeline) proved over-engineered. This release strips savepoint back to its essential value: a board for tracking AI-driven development work through phases.
|
|
12
|
+
|
|
13
|
+
**Stack change:** Ink/TypeScript → Bubble Tea/Go. Full rewrite.
|
|
14
|
+
|
|
15
|
+
**What stays:**
|
|
16
|
+
- `savepoint board` — Bubble Tea TUI for viewing and moving tasks
|
|
17
|
+
- The `.savepoint/` data structure: router → release → epic → task
|
|
18
|
+
- AGENTS.md as the agent bootstrap file
|
|
19
|
+
|
|
20
|
+
**What goes:**
|
|
21
|
+
- `init`, `audit`, `doctor` commands
|
|
22
|
+
- Full 6-step audit pipeline
|
|
23
|
+
- Template scaffolding and prompt generation
|
|
24
|
+
- Quality gates, divergence thresholds, snapshot generation
|
|
25
|
+
- Complex router state machine (6 states → 3 states)
|
|
26
|
+
- TypeScript, React, Ink, npm, tsup, vitest
|
|
27
|
+
|
|
28
|
+
**What replaces the audit pipeline:**
|
|
29
|
+
- Tasks in `in_progress` now carry a `phase`: `build → test → audit → done`
|
|
30
|
+
- The board itself enforces phase progression
|
|
31
|
+
- Space advances phase, backspace retreats
|
|
32
|
+
- Must reach `audit` phase before advancing to `done`
|
|
33
|
+
|
|
34
|
+
## What ships in v0.2.0
|
|
35
|
+
|
|
36
|
+
- `savepoint board` — the only CLI command (Go binary)
|
|
37
|
+
- Phase-aware Kanban board: planned / in_progress (build/test/audit) / done
|
|
38
|
+
- Task status transitions with phase gating
|
|
39
|
+
- Non-TTY plain table fallback
|
|
40
|
+
- Atari-Noir theme, fully overridable via `config.yml`
|
|
41
|
+
- Go 1.23+, single binary, `go build`
|
|
42
|
+
|
|
43
|
+
## Epic breakdown
|
|
44
|
+
|
|
45
|
+
| # | Epic name | Purpose |
|
|
46
|
+
| --- | ---------------------------- | ------- |
|
|
47
|
+
| 01 | `E01-go-setup` | Initialize Go module, project structure, dependencies, build loop |
|
|
48
|
+
| 02 | `E02-data-readers` | Parse markdown/yaml, read .savepoint data (router, config, tasks) |
|
|
49
|
+
| 03 | `E03-board-tui-core` | Bubble Tea model, update loop, view, styles, responsive layout |
|
|
50
|
+
| 04 | `E04-board-components` | Columns, cards with phase glyphs, epic panel, detail overlay, dropdowns, help |
|
|
51
|
+
| 05 | `E05-phase-transitions` | Phase stepping, gates, task frontmatter write-back, router state write-back |
|
|
52
|
+
|
|
53
|
+
## Success criteria
|
|
54
|
+
|
|
55
|
+
- `savepoint board` launches and renders the phase-aware Kanban board.
|
|
56
|
+
- Space/backspace correctly advances/retreats task phases.
|
|
57
|
+
- Cannot advance to `done` without passing through `audit` phase.
|
|
58
|
+
- `go build` produces a working binary.
|
|
59
|
+
- `go test ./...` passes.
|
|
60
|
+
- No dead code, no unused dependencies, no references to deleted commands.
|
|
61
|
+
|
|
62
|
+
## Risks
|
|
63
|
+
|
|
64
|
+
- **Agent compliance.** Simpler structure should improve compliance. AGENTS.md must be crystal clear.
|
|
65
|
+
- **Phase model clarity.** Users must understand build/test/audit as sub-states of in_progress. Board rendering must make this obvious.
|
|
66
|
+
- **Go ecosystem.** New stack requires different testing patterns, dependency management, build tooling.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: epic-design
|
|
3
|
+
status: planned
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Epic E01: Go Project Setup
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Initialize the savepoint CLI as a Go module. Set up the project directory structure, add Bubble Tea + Lip Gloss dependencies, and establish a working build/test loop.
|
|
11
|
+
|
|
12
|
+
## What this epic adds
|
|
13
|
+
|
|
14
|
+
- `go.mod` with module path `github.com/opencode/savepoint`.
|
|
15
|
+
- `main.go` entrypoint that launches the Bubble Tea program.
|
|
16
|
+
- Directory structure: `cmd/`, `internal/board/`, `internal/data/`, `internal/styles/`.
|
|
17
|
+
- `go.sum` with resolved Bubble Tea, Lip Gloss, reflow, and YAML dependencies.
|
|
18
|
+
- `Makefile` or script for `build`, `test`, `run`.
|
|
19
|
+
|
|
20
|
+
## Definition of Done
|
|
21
|
+
|
|
22
|
+
- `go mod init` succeeds and `go mod tidy` produces clean `go.mod`/`go.sum`.
|
|
23
|
+
- `go build` produces a working binary.
|
|
24
|
+
- `go test ./...` runs (even if no tests yet, it must not error).
|
|
25
|
+
- Bubble Tea `tea.NewProgram` launches and renders a blank screen.
|
|
26
|
+
- No TypeScript files, `package.json`, or `node_modules` remain at project root.
|
|
27
|
+
|
|
28
|
+
## Components and files
|
|
29
|
+
|
|
30
|
+
| Path | Purpose |
|
|
31
|
+
|------|---------|
|
|
32
|
+
| `go.mod` | Go module definition |
|
|
33
|
+
| `go.sum` | Dependency checksums |
|
|
34
|
+
| `main.go` | Entrypoint: tea.NewProgram |
|
|
35
|
+
| `Makefile` | Build/test/run shortcuts |
|
|
36
|
+
| `cmd/` | CLI command setup |
|
|
37
|
+
| `internal/board/` | Board TUI package |
|
|
38
|
+
| `internal/data/` | Data reading/parsing package |
|
|
39
|
+
| `internal/styles/` | Lip Gloss styles package |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E01-go-setup/T001-init-module
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Initialize Go module and add Bubble Tea + Lip Gloss dependencies"
|
|
5
|
+
depends_on: []
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T001: Initialize Go Module
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `go.mod` exists with module path.
|
|
13
|
+
- `go.sum` exists with resolved dependencies.
|
|
14
|
+
- `go build` compiles without errors.
|
|
15
|
+
|
|
16
|
+
## Implementation Plan
|
|
17
|
+
|
|
18
|
+
- [x] Run `go mod init github.com/opencode/savepoint`.
|
|
19
|
+
- [x] Add Bubble Tea: `go get github.com/charmbracelet/bubbletea`.
|
|
20
|
+
- [x] Add Lip Gloss: `go get github.com/charmbracelet/lipgloss`.
|
|
21
|
+
- [x] Add YAML parser: `go get gopkg.in/yaml.v3`.
|
|
22
|
+
- [x] Run `go mod tidy`.
|
|
23
|
+
- [x] Verify `go build` succeeds.
|
|
24
|
+
|
|
25
|
+
## Context Log
|
|
26
|
+
|
|
27
|
+
Files read:
|
|
28
|
+
|
|
29
|
+
- `.savepoint/router.md`
|
|
30
|
+
- `.savepoint/releases/v1/epics/E01-go-setup/Design.md`
|
|
31
|
+
- `.savepoint/releases/v1/epics/E01-go-setup/tasks/T001-init-module.md`
|
|
32
|
+
- `go.mod`
|
|
33
|
+
- `go.sum`
|
|
34
|
+
|
|
35
|
+
Estimated input tokens: 4,000
|
|
36
|
+
|
|
37
|
+
Notes:
|
|
38
|
+
|
|
39
|
+
- `go.mod` exists with module path `github.com/opencode/savepoint`.
|
|
40
|
+
- `go.sum` exists with resolved Bubble Tea, Lip Gloss, YAML, and transitive dependency checksums.
|
|
41
|
+
- `go build ./...` passed during the E01 audit when run outside the sandbox because the Go build cache is outside the workspace.
|
|
42
|
+
- `go test ./...` was not used as T001 evidence because the current failure is in active E02 data-reader test code, outside this task's scope.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E01-go-setup/T002-entrypoint
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Create main.go that launches a blank Bubble Tea program"
|
|
5
|
+
depends_on: [E01-go-setup/T001-init-module]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T002: Create Entrypoint
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `main.go` exists and compiles.
|
|
13
|
+
- Running the binary launches a Bubble Tea program.
|
|
14
|
+
- Pressing `q` or `ctrl+c` exits cleanly.
|
|
15
|
+
- No TypeScript files remain at project root.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Write `main.go` with `tea.NewProgram` and a minimal model.
|
|
20
|
+
- [x] Implement `Init()`, `Update()`, `View()` on the model.
|
|
21
|
+
- [x] Handle `tea.KeyMsg` for `q` and `ctrl+c`.
|
|
22
|
+
- [x] Verify `go run main.go` launches and quits.
|
|
23
|
+
- [x] Delete `src/`, `test/`, `dist/`, `package.json`, `node_modules/`, `tsconfig.json`, `tsup.config.ts`, `vitest.config.js`, `eslint.config.js`, `.prettierrc.json`.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E01-go-setup/T003-directory-structure
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Set up internal package directories"
|
|
5
|
+
depends_on: [E01-go-setup/T002-entrypoint]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T003: Directory Structure
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `cmd/`, `internal/board/`, `internal/data/`, `internal/styles/` directories exist.
|
|
13
|
+
- `main.go` lives at root and imports `internal/board`.
|
|
14
|
+
- Build compiles with packages.
|
|
15
|
+
|
|
16
|
+
## Implementation Plan
|
|
17
|
+
|
|
18
|
+
- [x] Create `cmd/` directory.
|
|
19
|
+
- [x] Create `internal/board/` directory.
|
|
20
|
+
- [x] Create `internal/data/` directory.
|
|
21
|
+
- [x] Create `internal/styles/` directory.
|
|
22
|
+
- [x] Move entrypoint logic into `internal/board/` package.
|
|
23
|
+
- [x] Update `main.go` to delegate to `board.Run()`.
|
|
24
|
+
- [x] Verify `go build`.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E01-go-setup/T004-makefile
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Create Makefile for build, test, run"
|
|
5
|
+
depends_on: [E01-go-setup/T003-directory-structure]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T004: Makefile
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `Makefile` exists with `build`, `test`, `run`, `clean` targets.
|
|
13
|
+
- `make build` produces a binary.
|
|
14
|
+
- `make test` runs `go test ./...`.
|
|
15
|
+
|
|
16
|
+
## Implementation Plan
|
|
17
|
+
|
|
18
|
+
- [x] Create `Makefile`.
|
|
19
|
+
- [x] Add `build` target: `go build -o savepoint main.go`.
|
|
20
|
+
- [x] Add `test` target: `go test ./...`.
|
|
21
|
+
- [x] Add `run` target: `go run main.go`.
|
|
22
|
+
- [x] Add `clean` target: `rm -f savepoint`.
|
|
23
|
+
- [x] Verify all targets work.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: epic-design
|
|
3
|
+
status: audited
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Epic E02: Data Readers
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Read and parse the `.savepoint/` file structure in Go. Parse YAML frontmatter from task files, read router state, config theme, and discover releases/epics/tasks on disk.
|
|
11
|
+
|
|
12
|
+
## What this epic adds
|
|
13
|
+
|
|
14
|
+
- Markdown frontmatter parser (`---\n...\n---`) using `gopkg.in/yaml.v3`.
|
|
15
|
+
- Task struct with phase support.
|
|
16
|
+
- Router state reader (`router.md` yaml block extraction).
|
|
17
|
+
- Config reader (`config.yml` theme parsing).
|
|
18
|
+
- Release/epic/task file discovery (walk directories).
|
|
19
|
+
- Error types for missing files, malformed yaml, schema rejection.
|
|
20
|
+
|
|
21
|
+
## Definition of Done
|
|
22
|
+
|
|
23
|
+
- Can read any task `.md` file and parse frontmatter into a Task struct.
|
|
24
|
+
- Can read `router.md` and extract the Current state yaml block.
|
|
25
|
+
- Can read `config.yml` and parse theme colors.
|
|
26
|
+
- Can list all releases, epics within a release, and tasks within an epic.
|
|
27
|
+
- All parsing functions have unit tests.
|
|
28
|
+
- `go test ./internal/data/...` passes.
|
|
29
|
+
|
|
30
|
+
## Components and files
|
|
31
|
+
|
|
32
|
+
## Implemented As
|
|
33
|
+
|
|
34
|
+
- `internal/data/task.go` defines task metadata, column, progress stage, dependency, and progress structs.
|
|
35
|
+
- `internal/data/parser.go` extracts YAML frontmatter from markdown and maps task ID, objective/title, description, status/column, phase/stage, dependency, priority, points, tags, acceptance, notes, release, epic, and progress fields into `Task`.
|
|
36
|
+
- `internal/data/router.go` extracts and parses the `## Current state` fenced YAML block from `router.md`.
|
|
37
|
+
- `internal/data/config.go` reads `config.yml` theme values, fills missing theme fields from defaults, returns defaults when the file is missing, and surfaces malformed YAML/read errors.
|
|
38
|
+
- `internal/data/discover.go` finds the `.savepoint` root and lists release, epic, and task directories in stable order.
|
|
39
|
+
- `internal/data/errors.go` defines shared parser/discovery boundary error sentinels.
|
|
40
|
+
|
|
41
|
+
## Audit Reconciliation
|
|
42
|
+
|
|
43
|
+
- Fixed parser field coverage for `status`, `phase`, `depends_on`, and the remaining task metadata fields covered by the `Task` struct.
|
|
44
|
+
- Fixed config boundary behavior so missing files default while malformed YAML and read errors are returned.
|
|
45
|
+
- Replaced discovery tests that depended on the live repository with deterministic temporary fixtures.
|
|
46
|
+
- Added parser tests for malformed YAML and task metadata mapping.
|
|
47
|
+
- Added the planned `internal/data/errors.go` boundary error file.
|
|
48
|
+
|
|
49
|
+
| Path | Purpose |
|
|
50
|
+
|------|---------|
|
|
51
|
+
| `internal/data/task.go` | Task struct, frontmatter parsing |
|
|
52
|
+
| `internal/data/parser.go` | Markdown YAML frontmatter extraction |
|
|
53
|
+
| `internal/data/router.go` | Router state reader |
|
|
54
|
+
| `internal/data/config.go` | Config/theme reader |
|
|
55
|
+
| `internal/data/discover.go` | Directory walking, file discovery |
|
|
56
|
+
| `internal/data/errors.go` | Error types |
|
|
57
|
+
| `internal/data/parser_test.go` | Frontmatter parser tests |
|
|
58
|
+
| `internal/data/config_test.go` | Config parsing tests |
|
|
59
|
+
| `internal/data/task_test.go` | Task parsing tests |
|
|
60
|
+
| `internal/data/router_test.go` | Router parsing tests |
|
|
61
|
+
| `internal/data/discover_test.go` | Discovery tests |
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E02-data-readers/T001-task-struct
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Define Task struct with phase support"
|
|
5
|
+
depends_on: [E01-go-setup/T003-directory-structure]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T001: Task Struct
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `internal/data/task.go` defines Task, ColumnType, ProgressStage structs.
|
|
13
|
+
- Task includes: ID, Title, Description, Epic, Release, Column, Stage, Priority, Points, Tags, Acceptance, Notes.
|
|
14
|
+
- ColumnType enum: planned, in_progress, done.
|
|
15
|
+
- ProgressStage enum: build, test, audit.
|
|
16
|
+
- Tests verify struct creation.
|
|
17
|
+
|
|
18
|
+
## Implementation Plan
|
|
19
|
+
|
|
20
|
+
- [x] Create `internal/data/task.go`.
|
|
21
|
+
- [x] Define types and structs.
|
|
22
|
+
- [x] Write `internal/data/task_test.go`.
|
|
23
|
+
- [x] Run `go test ./internal/data/`.
|
|
24
|
+
|
|
25
|
+
## Context Log
|
|
26
|
+
|
|
27
|
+
Files read: `internal/data/task.go`, `internal/data/task_test.go`
|
|
28
|
+
Estimated input tokens: ~700
|
|
29
|
+
Notes: Verified during E02 audit closeout. `go test ./internal/data/...`, `go test ./...`, and `go build ./...` passed.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E02-data-readers/T002-frontmatter-parser
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Parse YAML frontmatter from markdown task files"
|
|
5
|
+
depends_on: [E02-data-readers/T001-task-struct]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T002: Frontmatter Parser
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Can parse `---\nyaml\n---\nbody` format from any `.md` file.
|
|
13
|
+
- Extracts id, status, phase, objective, depends_on from frontmatter.
|
|
14
|
+
- Returns structured Task or error for malformed files.
|
|
15
|
+
- Tests cover valid, missing frontmatter, malformed yaml cases.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Create `internal/data/parser.go`.
|
|
20
|
+
- [x] Implement frontmatter regex extraction.
|
|
21
|
+
- [x] Parse YAML with `gopkg.in/yaml.v3`.
|
|
22
|
+
- [x] Map parsed fields to Task struct.
|
|
23
|
+
- [x] Write `internal/data/parser_test.go`.
|
|
24
|
+
- [x] Run `go test`.
|
|
25
|
+
|
|
26
|
+
## Context Log
|
|
27
|
+
|
|
28
|
+
Files read: `internal/data/parser.go`, `internal/data/parser_test.go`, `internal/data/task.go`
|
|
29
|
+
Estimated input tokens: ~1,500
|
|
30
|
+
Notes: Audit closeout replaced regex extraction with delimiter-based extraction, mapped task metadata fields including `status`, `phase`, and `depends_on`, and added malformed YAML coverage. `go test ./internal/data/...`, `go test ./...`, and `go build ./...` passed.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E02-data-readers/T003-router-reader
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Read and parse router.md Current state block"
|
|
5
|
+
depends_on: [E02-data-readers/T002-frontmatter-parser]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T003: Router Reader
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Reads `router.md` and extracts the `## Current state` yaml block.
|
|
13
|
+
- Parses state, release, epic, task, next_action fields.
|
|
14
|
+
- Returns error if router.md missing or block not found.
|
|
15
|
+
- Tests cover valid and missing router cases.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Create `internal/data/router.go`.
|
|
20
|
+
- [x] Implement `## Current state` block regex extraction.
|
|
21
|
+
- [x] Parse yaml block into RouterState struct.
|
|
22
|
+
- [x] Write `internal/data/router_test.go`.
|
|
23
|
+
- [x] Run `go test`.
|
|
24
|
+
|
|
25
|
+
## Context Log
|
|
26
|
+
|
|
27
|
+
Files read: `internal/data/router.go`, `internal/data/router_test.go`
|
|
28
|
+
Estimated input tokens: ~700
|
|
29
|
+
Notes: Verified during E02 audit closeout. `go test ./internal/data/...`, `go test ./...`, and `go build ./...` passed.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E02-data-readers/T004-config-reader
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Read config.yml and parse theme colors"
|
|
5
|
+
depends_on: [E02-data-readers/T003-router-reader]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T004: Config Reader
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Reads `.savepoint/config.yml`.
|
|
13
|
+
- Parses theme colors (bg, surface, surface_2, border, text, accents).
|
|
14
|
+
- Returns default theme if config.yml missing.
|
|
15
|
+
- Tests cover valid config and missing file.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Create `internal/data/config.go`.
|
|
20
|
+
- [x] Define Config and Theme structs.
|
|
21
|
+
- [x] Parse YAML with defaults.
|
|
22
|
+
- [x] Write `internal/data/config_test.go`.
|
|
23
|
+
- [x] Run `go test`.
|
|
24
|
+
|
|
25
|
+
## Context Log
|
|
26
|
+
|
|
27
|
+
Files read: `internal/data/config.go`, `internal/data/config_test.go`
|
|
28
|
+
Estimated input tokens: ~900
|
|
29
|
+
Notes: Audit closeout limited default fallback to missing config files, returned malformed YAML/read errors, and added partial-default and malformed YAML coverage. `go test ./internal/data/...`, `go test ./...`, and `go build ./...` passed.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E02-data-readers/T005-discovery
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Walk .savepoint directory to discover releases, epics, and tasks"
|
|
5
|
+
depends_on: [E02-data-readers/T004-config-reader]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T005: Discovery
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Can list all releases under `.savepoint/releases/`.
|
|
13
|
+
- Can list all epics within a release.
|
|
14
|
+
- Can list all tasks within an epic.
|
|
15
|
+
- Can find `.savepoint` root by walking up from cwd.
|
|
16
|
+
- Tests cover discovery logic.
|
|
17
|
+
|
|
18
|
+
## Implementation Plan
|
|
19
|
+
|
|
20
|
+
- [x] Create `internal/data/discover.go`.
|
|
21
|
+
- [x] Implement `FindSavepointRoot(start string)`.
|
|
22
|
+
- [x] Implement `ListReleases(root)`, `ListEpics(root, release)`, `ListTasks(root, release, epic)`.
|
|
23
|
+
- [x] Write `internal/data/discover_test.go`.
|
|
24
|
+
- [x] Run `go test`.
|
|
25
|
+
|
|
26
|
+
## Context Log
|
|
27
|
+
|
|
28
|
+
Files read: `internal/data/discover.go`, `internal/data/discover_test.go`, `internal/data/errors.go`
|
|
29
|
+
Estimated input tokens: ~800
|
|
30
|
+
Notes: discover_test.go had unused `os`/`path/filepath` imports causing build failure — removed. Audit closeout moved discovery coverage to deterministic temp-directory fixtures and added a shared missing-root error sentinel. All 4 discovery tests pass. `go test ./internal/data/...`, `go test ./...`, and `go build ./...` passed.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: epic-design
|
|
3
|
+
status: planned
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Epic E03: Board TUI Core
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Build the core Bubble Tea model, update loop, view rendering, styles, and layout system. This is the engine — no components yet, just the skeleton that renders a responsive grid.
|
|
11
|
+
|
|
12
|
+
## What this epic adds
|
|
13
|
+
|
|
14
|
+
- `Model` struct with tasks, focus state, selected epic/release, overlay mode, dimensions.
|
|
15
|
+
- `Init()`, `Update(msg)`, `View()` methods.
|
|
16
|
+
- Atari-Noir color palette in `internal/styles/`.
|
|
17
|
+
- Manual layout calculation: column widths, epic panel width, responsive breakpoints.
|
|
18
|
+
- `tea.WindowSizeMsg` handling for terminal resize.
|
|
19
|
+
|
|
20
|
+
## Definition of Done
|
|
21
|
+
|
|
22
|
+
- `go run main.go` launches and shows a bordered 3-column grid.
|
|
23
|
+
- Columns resize correctly on terminal resize.
|
|
24
|
+
- At 3 breakpoints: >=120 cols shows epic panel + 3 columns; 80-119 shows 3 columns; <80 shows 1 column.
|
|
25
|
+
- Colors match Atari-Noir palette in truecolor; degrade gracefully in 256/16-color modes.
|
|
26
|
+
- `q` quits cleanly.
|
|
27
|
+
- No layout break at any width.
|
|
28
|
+
|
|
29
|
+
## Components and files
|
|
30
|
+
|
|
31
|
+
| Path | Purpose |
|
|
32
|
+
|------|---------|
|
|
33
|
+
| `internal/board/model.go` | Model struct and Init |
|
|
34
|
+
| `internal/board/update.go` | Update loop, message handling |
|
|
35
|
+
| `internal/board/view.go` | View composition |
|
|
36
|
+
| `internal/styles/palette.go` | Atari-Noir hex colors |
|
|
37
|
+
| `internal/styles/styles.go` | Lip Gloss style definitions |
|
|
38
|
+
| `internal/board/layout.go` | Width/height calculations |
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E03-board-tui-core/T001-model
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Define Model struct with all state fields"
|
|
5
|
+
depends_on: [E02-data-readers/T005-discovery]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T001: Model Struct
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `internal/board/model.go` defines Model with all state.
|
|
13
|
+
- Fields: Tasks, FocusedColumn, FocusedTask, SelectedEpic, SelectedRelease, Overlay, Width, Height.
|
|
14
|
+
- `Init()` returns `tea.Batch()` with initial commands.
|
|
15
|
+
- `NewModel()` accepts loaded data and returns initialized Model.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Create `internal/board/model.go`.
|
|
20
|
+
- [x] Define Model struct and constructor.
|
|
21
|
+
- [x] Implement `Init()` method.
|
|
22
|
+
- [x] Write tests.
|
|
23
|
+
- [x] Run `go test`.
|
|
24
|
+
|
|
25
|
+
## Context Log
|
|
26
|
+
|
|
27
|
+
Files read: `internal/data/task.go`, `internal/board/board.go`, `go.mod`, `E03-board-tui-core/Design.md`
|
|
28
|
+
Estimated input tokens: ~900
|
|
29
|
+
Notes: `go test ./internal/board/ -v` — 4 tests pass. `go build ./...` clean. Model groups tasks by column on construction; empty column defaults to planned.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E03-board-tui-core/T002-update-loop
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Implement Update(msg) with key and window size handling"
|
|
5
|
+
depends_on: [E03-board-tui-core/T001-model]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T002: Update Loop
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `Update(msg)` handles `tea.KeyMsg` for `q`, `ctrl+c`.
|
|
13
|
+
- `Update(msg)` handles `tea.WindowSizeMsg` for terminal resize.
|
|
14
|
+
- Returns `tea.Quit` on `q`.
|
|
15
|
+
- Tests verify update behavior.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Create `internal/board/update.go`.
|
|
20
|
+
- [x] Implement `Update(msg tea.Msg)` with type switch.
|
|
21
|
+
- [x] Add key handling.
|
|
22
|
+
- [x] Add window size handling.
|
|
23
|
+
- [x] Write tests.
|
|
24
|
+
- [x] Run `go test`.
|
|
25
|
+
|
|
26
|
+
## Context Log
|
|
27
|
+
|
|
28
|
+
Files read: `internal/board/model.go`, `T001-model.md`, `E03-board-tui-core/Design.md`
|
|
29
|
+
Estimated input tokens: ~600
|
|
30
|
+
Notes: `go test ./internal/board/ -v` — 8 pass. `go build ./...` clean. Update returns `(Model, tea.Cmd)` not `(tea.Model, tea.Cmd)` — keeps type concrete for T003 View composition.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E03-board-tui-core/T003-view
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Render a bordered 3-column grid via View()"
|
|
5
|
+
depends_on: [E03-board-tui-core/T002-update-loop]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T003: View Rendering
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `View()` renders a header, 3-column board, and status bar.
|
|
13
|
+
- Columns have borders using Lip Gloss.
|
|
14
|
+
- Board fills terminal width.
|
|
15
|
+
- No wrapping or layout breaks.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Create `internal/board/view.go`.
|
|
20
|
+
- [x] Implement `View()` composing header, board, footer.
|
|
21
|
+
- [x] Use `lipgloss.JoinHorizontal` and `JoinVertical`.
|
|
22
|
+
- [x] Verify rendering at multiple terminal sizes.
|
|
23
|
+
|
|
24
|
+
## Context Log
|
|
25
|
+
|
|
26
|
+
Files read: `internal/board/model.go`, `internal/board/update.go`, `.savepoint/visual-identity.md`, `internal/data/task.go`, `E03-board-tui-core/Design.md`, `T003-view.md`
|
|
27
|
+
Estimated input tokens: ~2000
|
|
28
|
+
Notes: `go test ./internal/board/ ./internal/styles/ -v` — 17 pass. `go build ./...` clean. Created `internal/styles/palette.go` (Atari-Noir hex constants) and `internal/styles/styles.go` (Lip Gloss style vars). `view.go` uses `lipgloss.JoinHorizontal` for 3 columns, `JoinVertical` for header+board+status. Column content width = (termW - 12) / 3; fallback default=80 when Width=0. Focused column gets orange border; focused task gets orange text.
|
|
29
|
+
|
|
30
|
+
## Drift Notes
|
|
31
|
+
|
|
32
|
+
- Drift: `internal/styles/palette.go` added, not yet in Codebase Map.
|
|
33
|
+
- Drift: `internal/styles/styles.go` added, not yet in Codebase Map.
|
|
34
|
+
- Drift: `internal/board/view.go` added, not yet in Codebase Map.
|