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,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E06-atari-noir-layout/T003-footer-status-bar
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Implement the static Footer Status Bar and bottom divider"
|
|
5
|
+
depends_on: ["E06-atari-noir-layout/T002-header-and-dividers"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T003: Implement Footer Status Bar
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Footer replaces the dynamic status string with exactly: `PLAN │ BUILD │ AUDIT`.
|
|
13
|
+
- PLAN is colored Vibe Purple.
|
|
14
|
+
- BUILD is colored Atari Orange.
|
|
15
|
+
- AUDIT is colored NPP Green.
|
|
16
|
+
- The divider `│` is colored Border Subtle.
|
|
17
|
+
- The text is bold or slightly emphasized, with even spacing between sections.
|
|
18
|
+
- A full-width horizontal divider is rendered above the footer.
|
|
19
|
+
- The footer contains no icons, no repetition of the logo, and no extra labels/metrics.
|
|
20
|
+
- The main application content sits cleanly between the top and bottom dividers without overlapping.
|
|
21
|
+
|
|
22
|
+
## Implementation Plan
|
|
23
|
+
|
|
24
|
+
- [x] Update `renderStatus` in `internal/board/view.go` to render the new static phase footer.
|
|
25
|
+
- [x] Style the footer segments according to the color rules.
|
|
26
|
+
- [x] Add the bottom horizontal divider above the footer.
|
|
27
|
+
- [x] Adjust height calculations so the board area fits exactly between the top and bottom dividers. (No height calculation changes needed — `lipgloss.JoinVertical` naturally accommodates the extra divider line.)
|
|
28
|
+
|
|
29
|
+
## Context Log
|
|
30
|
+
|
|
31
|
+
Files read:
|
|
32
|
+
- `.savepoint/router.md`
|
|
33
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/Design.md`
|
|
34
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T003-footer-status-bar.md`
|
|
35
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md`
|
|
36
|
+
- `.savepoint/visual-identity.md`
|
|
37
|
+
- `internal/board/view.go`
|
|
38
|
+
- `internal/board/view_test.go`
|
|
39
|
+
- `internal/board/layout.go`
|
|
40
|
+
- `internal/board/model.go`
|
|
41
|
+
- `internal/styles/palette.go`
|
|
42
|
+
- `internal/styles/styles.go`
|
|
43
|
+
|
|
44
|
+
Estimated input tokens: ~5500
|
|
45
|
+
|
|
46
|
+
Notes:
|
|
47
|
+
- Replaced `renderStatus` (dynamic status bar with release/epic/column info) with `renderFooter` (static phase footer: PLAN │ BUILD │ AUDIT).
|
|
48
|
+
- Added `FooterPhasePlan` (purple, bold), `FooterPhaseBuild` (orange, bold), `FooterPhaseAudit` (green, bold), and `FooterDivider` (border subtle) styles.
|
|
49
|
+
- Added full-width bottom divider above the footer matching the top divider style.
|
|
50
|
+
- Removed unused `fmt` import from `view.go` after `renderStatus` deletion.
|
|
51
|
+
- `StatusBar` style and `StatusMessage` model field remain unused but harmless; left for future cleanup.
|
|
52
|
+
- Quality gates: `go build ./...` pass, `go test ./...` pass, `go vet ./...` pass.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E06-atari-noir-layout/T004-component-refinement
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Refine columns, cards, and epic panels to match rhythm and interaction requirements"
|
|
5
|
+
depends_on: ["E06-atari-noir-layout/T001-color-system"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T004: Component Refinement & Spacing Rhythm
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Columns, cards, and epic panels use Surface (`#0D0D0D`) or Surface 2 (`#0F0F0F`) colors rather than text blocks.
|
|
13
|
+
- Unnecessary borders are removed. Focus states use structure, position, and minimal accents (e.g., Atari Orange for focused borders).
|
|
14
|
+
- Spacing is consistent and components "breathe". No dense, edge-to-edge clutter exists.
|
|
15
|
+
- Line wrapping in standard data views is prevented where possible (treated as a bug).
|
|
16
|
+
- The existing functional data structures and keyboard interactions remain completely intact.
|
|
17
|
+
|
|
18
|
+
## Implementation Plan
|
|
19
|
+
|
|
20
|
+
- [x] Refine `internal/board/column.go` to remove unnecessary borders and improve padding.
|
|
21
|
+
- [x] Update `internal/board/card.go` to behave as a distinct surface with clear focus states.
|
|
22
|
+
- [x] Update `internal/board/epic_panel.go` spacing and styles.
|
|
23
|
+
- [x] Verify there is no unintentional wrapping on resizing, fixing any remaining flex/width issues in Lip Gloss setup.
|
|
24
|
+
|
|
25
|
+
## Context Log
|
|
26
|
+
|
|
27
|
+
Files read:
|
|
28
|
+
- `.savepoint/router.md`
|
|
29
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/Design.md`
|
|
30
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T004-component-refinement.md`
|
|
31
|
+
- `internal/styles/palette.go`
|
|
32
|
+
- `internal/styles/styles.go`
|
|
33
|
+
- `internal/board/column.go`
|
|
34
|
+
- `internal/board/card.go`
|
|
35
|
+
- `internal/board/epic_panel.go`
|
|
36
|
+
- `internal/board/layout.go`
|
|
37
|
+
- `internal/board/view.go`
|
|
38
|
+
- `internal/board/column_test.go`
|
|
39
|
+
- `internal/board/card_test.go`
|
|
40
|
+
- `internal/board/epic_panel_test.go`
|
|
41
|
+
- `internal/board/layout_test.go`
|
|
42
|
+
- `internal/board/board_test.go`
|
|
43
|
+
|
|
44
|
+
Estimated input tokens: ~15k
|
|
45
|
+
|
|
46
|
+
Notes:
|
|
47
|
+
- Only `internal/styles/styles.go` was modified; no source code logic changes were needed since column.go, card.go, and epic_panel.go all reference the centralized styles.
|
|
48
|
+
- Column (unfocused): removed `RoundedBorder()`, added `Background(clrSurfaceDark #0D0D0D)`.
|
|
49
|
+
- ColumnFocused: added `Background(clrSurfaceDark)`, kept orange rounded border for focus.
|
|
50
|
+
- Card (unfocused): added `Background(clrSurface #0F0F0F)` for surface feel.
|
|
51
|
+
- EpicPanel: removed `RoundedBorder()`, added `Background(clrSurface #0F0F0F)`.
|
|
52
|
+
- New color var `clrSurfaceDark` added for Surface (#0D0D0D) palette usage.
|
|
53
|
+
- Quality gates: `go build ./...` (pass), `go vet ./...` (pass), `go test ./...` (all 113 tests pass).
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E06-atari-noir-layout/T005-restore-nav-hints
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Restore persistent navigation keybinding hints to the main board footer"
|
|
5
|
+
depends_on: []
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T005: Restore Navigation Hints in Footer
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- The footer shows a second line below the phase labels with keybinding hints: `←/→:nav E:epic R:release ?:help q:quit`
|
|
13
|
+
- Hints are styled in a subdued color to not overwhelm the phase labels
|
|
14
|
+
- The footer still fits within a single terminal width without wrapping
|
|
15
|
+
- All existing footer behavior (centered phase labels, alignment) remains intact
|
|
16
|
+
- Hints refresh correctly on terminal resize
|
|
17
|
+
|
|
18
|
+
## Implementation Plan
|
|
19
|
+
|
|
20
|
+
- [x] Edit `internal/board/view.go` — update `renderFooter()` to append a second line of keybinding hints below the phase labels.
|
|
21
|
+
- [x] Add a new `FooterHints` style in `internal/styles/styles.go` using `clrDim` (dim/subdued appearance).
|
|
22
|
+
- [x] Run `make build && make test` to verify no regressions.
|
|
23
|
+
|
|
24
|
+
## Context Log
|
|
25
|
+
|
|
26
|
+
Files read:
|
|
27
|
+
- `internal/board/view.go`
|
|
28
|
+
- `internal/board/update.go`
|
|
29
|
+
- `internal/styles/styles.go`
|
|
30
|
+
- `internal/board/view_test.go`
|
|
31
|
+
- `internal/board/layout.go`
|
|
32
|
+
- `internal/board/model.go`
|
|
33
|
+
|
|
34
|
+
Estimated input tokens: 1400
|
|
35
|
+
|
|
36
|
+
Notes:
|
|
37
|
+
- `make build` could not run because `make` is not installed on PATH in this environment.
|
|
38
|
+
- Verified the task with `go build ./...`, `go test ./...`, and focused `go test ./internal/board`.
|
|
39
|
+
- Footer render now uses a width-guarded centered phase line, a blank spacer line, and a second subdued hint line.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E06-atari-noir-layout/T007-detail-card-fixes
|
|
3
|
+
status: planned
|
|
4
|
+
objective: "Add line breaks under Acceptance Criteria and Implementation Plan headings in task detail, and word-wrap card titles instead of truncating"
|
|
5
|
+
depends_on: []
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T007: Detail Overlay Spacing and Card Word-Wrap
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Task detail overlay shows a blank line between `"Acceptance Criteria:"` heading and the first bullet item
|
|
13
|
+
- Task detail overlay shows a blank line between `"Implementation Plan:"` heading and the first checklist item
|
|
14
|
+
- Card titles word-wrap to multiple lines when too long for the available card width, instead of being truncated with `…`
|
|
15
|
+
- Cards grow vertically to accommodate wrapped titles
|
|
16
|
+
- Short titles remain single-line (no visual change for titles that fit)
|
|
17
|
+
- All existing card visual structure (phase glyph, ID line, focus border) is preserved
|
|
18
|
+
|
|
19
|
+
## Implementation Plan
|
|
20
|
+
|
|
21
|
+
- [ ] Edit `internal/board/detail.go` — add `""` entry after the `Acceptance Criteria:` heading line and after the `Implementation Plan:` heading line.
|
|
22
|
+
- [ ] Edit `internal/board/detail.go` — make `wrapText` and `splitLongWord` exported (capitalize) so they can be reused from `card.go`.
|
|
23
|
+
- [ ] Edit `internal/board/card.go` — replace `truncate(t.Title, inner)` with a multi-line approach that word-wraps the title across available width.
|
|
24
|
+
- [ ] Edit `internal/board/card.go` — combine wrapped title lines with newlines in the card content (joining with `\n`).
|
|
25
|
+
- [ ] Run `make build && make test` to verify no regressions.
|
|
26
|
+
|
|
27
|
+
## Context Log
|
|
28
|
+
|
|
29
|
+
Files read:
|
|
30
|
+
- `internal/board/detail.go`
|
|
31
|
+
- `internal/board/card.go`
|
|
32
|
+
- `internal/board/column.go`
|
|
33
|
+
|
|
34
|
+
Estimated input tokens: 600
|
|
35
|
+
|
|
36
|
+
Notes:
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E06-atari-noir-layout/T008-checkbox-states
|
|
3
|
+
status: planned
|
|
4
|
+
objective: "Parse and render checked/unchecked state for Implementation Plan checklist items"
|
|
5
|
+
depends_on: []
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T008: Parse and Render Checkbox States in Task Detail
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `Task.Checklist` stores the checked state of each item (not just the text)
|
|
13
|
+
- `- [x]` markers in the markdown source are parsed as "done" items
|
|
14
|
+
- `- [ ]` markers in the markdown source are parsed as "undone" items
|
|
15
|
+
- Legacy `- ` (no checkbox prefix) items are treated as undone
|
|
16
|
+
- The task detail overlay renders done items with a `☑` (checked box) glyph and undone items with `□` (empty box)
|
|
17
|
+
- Done items render in the `TagDone` (green) style; undone items render in `CardMeta` (dim) style
|
|
18
|
+
- All existing `make test` tests pass, with updates to any tests that construct `Checklist` values
|
|
19
|
+
|
|
20
|
+
## Implementation Plan
|
|
21
|
+
|
|
22
|
+
- [ ] Edit `internal/data/task.go` — add `CheckItem` struct with `Text string` and `Done bool` fields; change `Checklist []string` to `Checklist []CheckItem`.
|
|
23
|
+
- [ ] Edit `internal/data/parser.go` — update `extractChecklistSection()` to detect `- [x] ` vs `- [ ] ` vs `- ` prefixes and set `Done` accordingly; strip prefix from `Text`.
|
|
24
|
+
- [ ] Update all usages of `Checklist` across the codebase (likely only `board/detail.go` and tests).
|
|
25
|
+
- [ ] Edit `internal/board/detail.go` — in the Implementation Plan section, render done items with `☑ ` + green `TagDone` styling and undone items with `□ ` + dim `CardMeta` styling.
|
|
26
|
+
- [ ] Run `make build && make test` to verify no regressions.
|
|
27
|
+
|
|
28
|
+
## Context Log
|
|
29
|
+
|
|
30
|
+
Files read:
|
|
31
|
+
- `internal/data/task.go`
|
|
32
|
+
- `internal/data/parser.go`
|
|
33
|
+
- `internal/board/detail.go`
|
|
34
|
+
- `internal/styles/styles.go`
|
|
35
|
+
|
|
36
|
+
Estimated input tokens: 800
|
|
37
|
+
|
|
38
|
+
Notes:
|
package/.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T009-router-priority-marker.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E06-atari-noir-layout/T009-router-priority-marker
|
|
3
|
+
status: planned
|
|
4
|
+
objective: "Highlight the router priority task with a green marker on the card and optional text highlight"
|
|
5
|
+
depends_on: []
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T009: Highlight Router Priority Task on Board
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- The model reads `RouterState.Task` (the `task:` field from `router.md`) and stores it as `Model.RouterTask`
|
|
13
|
+
- In the board view, the task card whose ID matches `RouterTask` shows a green `▣` glyph (using `TagDone`/green style) instead of the normal phase-colored glyph
|
|
14
|
+
- Non-priority tasks keep their existing phase-colored glyphs unchanged
|
|
15
|
+
- The task detail overlay shows a `"(router priority)"` label or marker when the displayed task matches `RouterTask`
|
|
16
|
+
- All existing keyboard interactions, column rendering, and card behavior remain intact
|
|
17
|
+
|
|
18
|
+
## Implementation Plan
|
|
19
|
+
|
|
20
|
+
- [ ] Edit `internal/board/model.go` — add `RouterTask string` field to `Model`.
|
|
21
|
+
- [ ] Edit `internal/board/board.go` — in `newProjectModel()`, read `routerState.Task` into `model.RouterTask`.
|
|
22
|
+
- [ ] Edit `internal/board/card.go` — update `RenderCard` to accept a `routerTaskID string` parameter; when `t.ID == routerTaskID`, replace the phase glyph with a green `▣` using `TagDone` style.
|
|
23
|
+
- [ ] Edit `internal/board/card.go` — update `RenderCard` signature and callsites (`column.go`, `view.go`).
|
|
24
|
+
- [ ] Edit `internal/board/detail.go` — update `RenderDetail` to accept a `routerTaskID string`; when matching, append a `"(router priority)"` green label line.
|
|
25
|
+
- [ ] Update all callsites of `RenderCard` and `RenderDetail` to pass `m.RouterTask`.
|
|
26
|
+
- [ ] Run `make build && make test` to verify no regressions.
|
|
27
|
+
|
|
28
|
+
## Context Log
|
|
29
|
+
|
|
30
|
+
Files read:
|
|
31
|
+
- `internal/board/model.go`
|
|
32
|
+
- `internal/board/board.go`
|
|
33
|
+
- `internal/board/card.go`
|
|
34
|
+
- `internal/board/column.go`
|
|
35
|
+
- `internal/board/detail.go`
|
|
36
|
+
- `internal/data/router.go`
|
|
37
|
+
- `internal/board/view.go`
|
|
38
|
+
|
|
39
|
+
Estimated input tokens: 1000
|
|
40
|
+
|
|
41
|
+
Notes:
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E06-atari-noir-layout/T010-auto-refresh-watcher
|
|
3
|
+
status: planned
|
|
4
|
+
objective: "Auto-refresh the board when task files change on disk via fsnotify file watcher"
|
|
5
|
+
depends_on: []
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T010: Auto-Refresh Board on File Changes
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- The board detects task `.md` file changes (write, create, delete) under `.savepoint/releases/` without requiring a restart
|
|
13
|
+
- When a file change is detected, the board reloads all tasks from disk and re-renders the columns
|
|
14
|
+
- Rapid successive file saves (e.g. editor auto-save + format) are debounced — only one reload fires within a 100ms window
|
|
15
|
+
- The watcher does not prevent graceful shutdown (closes on `q`/`ctrl+c`)
|
|
16
|
+
- An in-memory status change via `space`/`backspace` persists to disk via `data.WriteTaskStatus` and triggers the file watcher naturally
|
|
17
|
+
- All existing keyboard navigation, overlay, and column behavior remain intact
|
|
18
|
+
- `go build ./...` and `go test ./...` pass cleanly
|
|
19
|
+
|
|
20
|
+
## Implementation Plan
|
|
21
|
+
|
|
22
|
+
- [ ] Add `github.com/fsnotify/fsnotify` to `go.mod`
|
|
23
|
+
- [ ] Create `internal/board/watch.go`:
|
|
24
|
+
- Define `fileChangeMsg struct{}` and `reloadMsg struct{ tasks []data.Task }`
|
|
25
|
+
- `watchFiles(w *fsnotify.Watcher) tea.Cmd` — blocks on watcher.Events, drains channel for 100ms, emits single `fileChangeMsg`
|
|
26
|
+
- `reloadTasks(root string) tea.Cmd` — calls `loadAllTasks(root)` and emits `reloadMsg{tasks}`
|
|
27
|
+
- `loadAllTasks(root string) ([]data.Task, error)` — extracted from `board.go`, reuses `Discover` + `Parser`
|
|
28
|
+
- [ ] Edit `internal/board/model.go`:
|
|
29
|
+
- Add `watcher *fsnotify.Watcher` field to `Model`
|
|
30
|
+
- `Init()` — create watcher, `watcher.AddRecursive(root)` on `.savepoint/releases/`, return `watchFiles(watcher)`
|
|
31
|
+
- Close watcher in `Init()` if root is empty (test mode)
|
|
32
|
+
- [ ] Edit `internal/board/board.go`:
|
|
33
|
+
- Extract task-discovery loop from `newProjectModel` into `loadAllTasks(root string) ([]data.Task, error)`
|
|
34
|
+
- `newProjectModel` calls `loadAllTasks` instead of inline logic
|
|
35
|
+
- [ ] Edit `internal/board/update.go`:
|
|
36
|
+
- Handle `fileChangeMsg` → return `reloadTasks(m.Root)` cmd
|
|
37
|
+
- Handle `reloadMsg` → swap `m.AllTasks = msg.tasks`, call `m.refreshTasks()`, return `watchFiles(m.watcher)` to re-subscribe
|
|
38
|
+
- On quit (`q`/`ctrl+c`), close `m.watcher` before `tea.Quit`
|
|
39
|
+
- [ ] Edit `internal/board/transitions.go`:
|
|
40
|
+
- In `Advance` / `Retreat`, call `data.WriteTaskStatus(taskPath, task, expectedMtime)` to persist to disk so the watcher picks it up
|
|
41
|
+
- [ ] Run `go build ./...` and `go test ./...` to verify no regressions
|
|
42
|
+
|
|
43
|
+
## Context Log
|
|
44
|
+
|
|
45
|
+
Files read:
|
|
46
|
+
- `internal/board/model.go`
|
|
47
|
+
- `internal/board/board.go`
|
|
48
|
+
- `internal/board/update.go`
|
|
49
|
+
- `internal/board/transitions.go`
|
|
50
|
+
- `internal/board/watch.go` (does not exist yet)
|
|
51
|
+
- `internal/data/write.go`
|
|
52
|
+
- `.savepoint/AGENTS.md`
|
|
53
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/Design.md`
|
|
54
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T009-router-priority-marker.md`
|
|
55
|
+
|
|
56
|
+
Estimated input tokens: 1800
|
|
57
|
+
|
|
58
|
+
Notes:
|
|
59
|
+
- The watcher watches `.savepoint/releases/` recursively. `fsnotify` v1.7+ supports `AddWith(path, fsnotify.Recursive)` on macOS/Windows; on Linux, fall back to walking and adding each subdirectory.
|
|
60
|
+
- The 100ms debounce in `watchFiles` collapses rapid write sequences (e.g. editor save + lsp format) into a single reload.
|
|
61
|
+
- `WriteTaskStatus` needs the task file path. Task struct may need a `Path` field populated at load time to make persistence possible.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: epic-design
|
|
3
|
+
status: planned
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Epic E01: Archive and Reset
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Archive all v1 epics, reset the project to a clean slate, and establish the v1 release structure for the simplified savepoint. This epic is pure filesystem and metadata housekeeping — no code changes.
|
|
11
|
+
|
|
12
|
+
## What this epic adds
|
|
13
|
+
|
|
14
|
+
- `_archived/` directory containing all 11 original v1 epics (E01–E11).
|
|
15
|
+
- A rewritten `PRD.md` scoped to the simplified savepoint: board-only CLI, phase model, no audit pipeline.
|
|
16
|
+
- Five new epic directories under `releases/v1/epics/` with Design.md stubs.
|
|
17
|
+
- A rewritten `router.md` pointing at the first new epic.
|
|
18
|
+
|
|
19
|
+
## Definition of Done
|
|
20
|
+
|
|
21
|
+
- All 11 original epic directories live under `releases/v1/epics/_archived/`.
|
|
22
|
+
- `releases/v1/PRD.md` describes the simplified scope.
|
|
23
|
+
- Five new epic directories exist: E01-archive-and-reset, E02-domain-phase-model, E03-cli-simplify, E04-board-phase-integration, E05-project-cleanup.
|
|
24
|
+
- `router.md` uses the 3-state model (`planning`, `building`, `reviewing`) and points at E01.
|
|
25
|
+
- No references to old epics remain in active files.
|
|
26
|
+
|
|
27
|
+
## Components and files
|
|
28
|
+
|
|
29
|
+
| Path | Purpose |
|
|
30
|
+
|------|---------|
|
|
31
|
+
| `releases/v1/epics/_archived/` | Archive of all original v1 epics |
|
|
32
|
+
| `releases/v1/PRD.md` | Rewritten release scope for simplified savepoint |
|
|
33
|
+
| `releases/v1/epics/E01-archive-and-reset/Design.md` | This file |
|
|
34
|
+
| `releases/v1/epics/E01-archive-and-reset/tasks/` | Archive + reset tasks |
|
|
35
|
+
| `releases/v1/epics/E02-domain-phase-model/Design.md` | Phase model epic stub |
|
|
36
|
+
| `releases/v1/epics/E03-cli-simplify/Design.md` | CLI simplification epic stub |
|
|
37
|
+
| `releases/v1/epics/E04-board-phase-integration/Design.md` | Board phase epic stub |
|
|
38
|
+
| `releases/v1/epics/E05-project-cleanup/Design.md` | Cleanup epic stub |
|
|
39
|
+
| `router.md` | 3-state router, points at E01 |
|
package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T001-archive-epics.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E01-archive-and-reset/T001-archive-epics
|
|
3
|
+
status: planned
|
|
4
|
+
objective: "Move all 11 original v1 epic directories into _archived/"
|
|
5
|
+
depends_on: []
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T001: Archive Epics
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- All 11 original epic directories (E01-scaffolding through E11-release-validation) exist under `releases/v1/epics/_archived/`.
|
|
13
|
+
- No original epic directories remain under `releases/v1/epics/` except `_archived/`.
|
|
14
|
+
- All task files and Design.md files within archived epics are preserved.
|
|
15
|
+
|
|
16
|
+
## Implementation Plan
|
|
17
|
+
|
|
18
|
+
- [ ] Create `releases/v1/epics/_archived/` directory.
|
|
19
|
+
- [ ] Move each of the 11 original epic directories into `_archived/`.
|
|
20
|
+
- [ ] Verify no original epic dirs remain at top level.
|
package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T002-rewrite-prd.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E01-archive-and-reset/T002-rewrite-prd
|
|
3
|
+
status: planned
|
|
4
|
+
objective: "Rewrite releases/v1/PRD.md with simplification scope"
|
|
5
|
+
depends_on: [E01-archive-and-reset/T001-archive-epics]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T002: Rewrite PRD
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `releases/v1/PRD.md` defines the simplified savepoint scope.
|
|
13
|
+
- Scope includes: board-only CLI, phase model (build/test/audit), no audit pipeline, no init command, no doctor command.
|
|
14
|
+
- PRD frontmatter is valid: `version`, `name`, `status`.
|
|
15
|
+
- No references to the full 11-epic v1 scope remain in the active PRD.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [ ] Read existing PRD.md for reference.
|
|
20
|
+
- [ ] Write new PRD.md with simplified scope: board command, phase model, minimal CLI.
|
|
21
|
+
- [ ] Update frontmatter: status = in_progress, version = 1.
|
|
22
|
+
- [ ] List 5 new epics in scope table.
|
package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T003-create-epic-stubs.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E01-archive-and-reset/T003-create-epic-stubs
|
|
3
|
+
status: planned
|
|
4
|
+
objective: "Create 5 new epic directories with Design.md stubs"
|
|
5
|
+
depends_on: [E01-archive-and-reset/T002-rewrite-prd]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T003: Create Epic Stubs
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Five epic directories exist under `releases/v1/epics/`: E01-archive-and-reset, E02-domain-phase-model, E03-cli-simplify, E04-board-phase-integration, E05-project-cleanup.
|
|
13
|
+
- Each epic directory contains a `Design.md` with valid frontmatter (`type: epic-design`, `status: planned`).
|
|
14
|
+
- Each Design.md contains Purpose, What this epic adds, Definition of Done, and Components sections.
|
|
15
|
+
- Each epic has a `tasks/` subdirectory.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [ ] Create directory structure for each epic.
|
|
20
|
+
- [ ] Write Design.md for E02-domain-phase-model.
|
|
21
|
+
- [ ] Write Design.md for E03-cli-simplify.
|
|
22
|
+
- [ ] Write Design.md for E04-board-phase-integration.
|
|
23
|
+
- [ ] Write Design.md for E05-project-cleanup.
|
|
24
|
+
- [ ] Verify all 5 epic dirs exist with Design.md.
|
package/.savepoint/releases/v1/epics/_archived/E01-archive-and-reset/tasks/T004-update-router.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E01-archive-and-reset/T004-update-router
|
|
3
|
+
status: planned
|
|
4
|
+
objective: "Rewrite router.md with 3-state model and point at E01"
|
|
5
|
+
depends_on: [E01-archive-and-reset/T003-create-epic-stubs]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T004: Update Router
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `router.md` defines 3 states: `planning`, `building`, `reviewing`.
|
|
13
|
+
- `router.md` points at epic `E01-archive-and-reset` as the active epic.
|
|
14
|
+
- `router.md` contains a `## Current state` yaml block with valid frontmatter.
|
|
15
|
+
- No references to old 6-state model remain.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [ ] Read existing router.md.
|
|
20
|
+
- [ ] Rewrite state machine section with 3 states.
|
|
21
|
+
- [ ] Update Current state yaml block: state = planning, release = v1, epic = E01-archive-and-reset.
|
|
22
|
+
- [ ] Verify yaml is parseable.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: epic-design
|
|
3
|
+
status: audited
|
|
4
|
+
audited: 2026-04-27
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Epic E01: scaffolding
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Create the minimum production-ready TypeScript package foundation for `savepoint`, including build, test, lint, formatting, package metadata, and source tree conventions. This epic establishes the first auditable codebase baseline without implementing user-facing Savepoint behavior.
|
|
12
|
+
|
|
13
|
+
## What this epic adds
|
|
14
|
+
|
|
15
|
+
- A single-package Node 20.10+ TypeScript project using ESM.
|
|
16
|
+
- npm package metadata for package name `savepoint` and binary name `savepoint`.
|
|
17
|
+
- A `tsup` build that emits `dist/cli.js` with a Node shebang.
|
|
18
|
+
- Strict TypeScript configuration.
|
|
19
|
+
- Vitest test setup for future unit and integration tests.
|
|
20
|
+
- ESLint and Prettier configuration for mechanical quality gates.
|
|
21
|
+
- A minimal source layout that future epics can extend.
|
|
22
|
+
- Baseline npm scripts for build, typecheck, lint, format check, and test.
|
|
23
|
+
- Root documentation and ignore files needed for ordinary OSS development.
|
|
24
|
+
|
|
25
|
+
## Components and files
|
|
26
|
+
|
|
27
|
+
Expected files introduced by this epic:
|
|
28
|
+
|
|
29
|
+
| Path | Purpose |
|
|
30
|
+
| -------------------- | ------------------------------------------------------------------------ |
|
|
31
|
+
| `package.json` | Package metadata, bin mapping, scripts, dependencies, files allowlist. |
|
|
32
|
+
| `package-lock.json` | Locked dependency graph for repeatable installs. |
|
|
33
|
+
| `tsconfig.json` | Strict TypeScript compiler settings for ESM Node output. |
|
|
34
|
+
| `tsup.config.ts` | Build entry and output configuration. |
|
|
35
|
+
| `vitest.config.ts` | Test runner configuration. |
|
|
36
|
+
| `eslint.config.js` | Flat ESLint config for TypeScript. |
|
|
37
|
+
| `.prettierrc.json` | Formatting rules. |
|
|
38
|
+
| `.gitignore` | Ignore generated artifacts and local environment files. |
|
|
39
|
+
| `README.md` | Minimal development README until release docs expand it. |
|
|
40
|
+
| `LICENSE` | MIT license placeholder for the package. |
|
|
41
|
+
| `src/cli.ts` | Minimal executable entrypoint that prints help/version placeholder text. |
|
|
42
|
+
| `src/version.ts` | Single source for the package version used by the placeholder CLI. |
|
|
43
|
+
| `test/smoke.test.ts` | Baseline test proving the test runner and exported constants work. |
|
|
44
|
+
|
|
45
|
+
## Architectural delta
|
|
46
|
+
|
|
47
|
+
Before this epic, the repository contains only planning markdown and Savepoint workflow metadata. After this epic, it becomes an installable npm package skeleton with a compilable CLI entrypoint.
|
|
48
|
+
|
|
49
|
+
This does not add the actual Savepoint command system. The placeholder `src/cli.ts` exists only to validate packaging, shebang output, and the future binary surface. Real command dispatch belongs to `cli-foundation`.
|
|
50
|
+
|
|
51
|
+
## Boundaries
|
|
52
|
+
|
|
53
|
+
In scope:
|
|
54
|
+
|
|
55
|
+
- Configure the repo as an ESM-only TypeScript package.
|
|
56
|
+
- Make `npm run build`, `npm run typecheck`, `npm run lint`, and `npm test` meaningful.
|
|
57
|
+
- Keep runtime code minimal and dependency-light.
|
|
58
|
+
- Use package and binary name `savepoint`.
|
|
59
|
+
|
|
60
|
+
Out of scope:
|
|
61
|
+
|
|
62
|
+
- Argument parsing beyond placeholder help/version output.
|
|
63
|
+
- Reading or writing `.savepoint` project files.
|
|
64
|
+
- Implementing `init`, `board`, `audit`, or `doctor`.
|
|
65
|
+
- Ink, React, TUI rendering, theming, or visual identity work.
|
|
66
|
+
- Template content or Router Pattern prompt assets.
|
|
67
|
+
- Release publishing automation beyond package metadata basics.
|
|
68
|
+
|
|
69
|
+
## Quality gates
|
|
70
|
+
|
|
71
|
+
The scaffold should support these commands:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npm run build
|
|
75
|
+
npm run typecheck
|
|
76
|
+
npm run lint
|
|
77
|
+
npm test
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The first audit after this epic should be able to update `AGENTS.md` with a codebase map that reflects the new top-level modules.
|
|
81
|
+
|
|
82
|
+
## Design constraints
|
|
83
|
+
|
|
84
|
+
- Keep files small and obvious; no framework or architecture abstractions before there is behavior to organize.
|
|
85
|
+
- Use strict typing from the first commit.
|
|
86
|
+
- Avoid `any`.
|
|
87
|
+
- Keep config conventional enough that a vibe coder can recognize and modify it.
|
|
88
|
+
- Do not add native dependencies.
|
|
89
|
+
- Do not add telemetry, update checks, analytics, or postinstall scripts.
|
|
90
|
+
|
|
91
|
+
## Open decisions
|
|
92
|
+
|
|
93
|
+
- The exact dependency versions are implementation details, but they should be current stable versions compatible with Node 20.10+.
|
|
94
|
+
- `README.md` should stay intentionally sparse in this epic; fuller public-facing docs belong to `docs-and-packaging`.
|
|
95
|
+
|
|
96
|
+
## Implemented as
|
|
97
|
+
|
|
98
|
+
Implemented on 2026-04-27 across tasks T001–T005. All quality gates pass.
|
|
99
|
+
|
|
100
|
+
**Deviations from original design:**
|
|
101
|
+
|
|
102
|
+
| Item | Deviation | Reason |
|
|
103
|
+
| ---------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
104
|
+
| `vitest.config.js` | Extra file not in design | `npm test` requires `--configLoader runner` pointing at a `.js` config on Windows; `.ts` config cannot be loaded directly in this execution path |
|
|
105
|
+
| `scripts/vitest-preload.cjs` | Extra file not in design | Windows runner executes a `net use` child_process call during Vitest startup; this CJS preload stubs that call and also stubs esbuild transforms to avoid a secondary Windows compat issue |
|
|
106
|
+
| `.prettierignore` | Extra file not in design | Standard convention; consistent with `.gitignore` exclusions |
|
|
107
|
+
|
|
108
|
+
**Dependency versions (pinned):**
|
|
109
|
+
|
|
110
|
+
| Package | Version |
|
|
111
|
+
| ------------------- | ------- |
|
|
112
|
+
| `typescript` | ^5.8.3 |
|
|
113
|
+
| `tsup` | ^8.5.1 |
|
|
114
|
+
| `vitest` | ^3.2.4 |
|
|
115
|
+
| `eslint` | ^9.33.0 |
|
|
116
|
+
| `typescript-eslint` | ^8.39.0 |
|
|
117
|
+
| `prettier` | ^3.6.2 |
|
|
118
|
+
| `@types/node` | ^24.1.0 |
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# E01-scaffolding Handoff
|
|
2
|
+
|
|
3
|
+
Read this instead of the full audit unless debugging scaffold history.
|
|
4
|
+
|
|
5
|
+
- Package scaffold exists for `savepoint` version `0.1.0`.
|
|
6
|
+
- Commands available through npm: `build`, `typecheck`, `lint`, `format:check`, and `test`.
|
|
7
|
+
- Windows test execution uses `scripts/vitest-preload.cjs` plus `vitest.config.js`.
|
|
8
|
+
- Source baseline: `src/cli.ts`, `src/version.ts`, and `test/smoke.test.ts`.
|
|
9
|
+
- Carried forward to `E03-cli-foundation`: real CLI dispatch tests and the decision on whether `version.ts` should derive from `package.json`.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E01-scaffolding/T001-package-baseline
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Establish the `savepoint` npm package identity and baseline repository hygiene files without implementing CLI behavior."
|
|
5
|
+
depends_on: []
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Task T001: Package Baseline
|
|
9
|
+
|
|
10
|
+
## Implementation Plan
|
|
11
|
+
|
|
12
|
+
- [x] Draft `package.json` with package name, binary mapping, Node engine, and module type.
|
|
13
|
+
- [x] Add `.gitignore` for generated, dependency, coverage, and local environment artifacts.
|
|
14
|
+
- [x] Add minimal `README.md` content that describes the repo as the `savepoint` scaffold.
|
|
15
|
+
- [x] Add MIT `LICENSE` text for the package baseline.
|
|
16
|
+
- [x] Verify the files align with the package and binary name `savepoint`.
|
|
17
|
+
|
|
18
|
+
## Scope
|
|
19
|
+
|
|
20
|
+
Create the root package and repository metadata that every later scaffolding task builds on.
|
|
21
|
+
|
|
22
|
+
Expected files:
|
|
23
|
+
|
|
24
|
+
- `package.json`
|
|
25
|
+
- `.gitignore`
|
|
26
|
+
- `README.md`
|
|
27
|
+
- `LICENSE`
|
|
28
|
+
|
|
29
|
+
## Acceptance Criteria
|
|
30
|
+
|
|
31
|
+
- `package.json` uses package name `savepoint`.
|
|
32
|
+
- `package.json` declares binary name `savepoint` pointing at `dist/cli.js`.
|
|
33
|
+
- `package.json` declares Node `>=20.10`.
|
|
34
|
+
- `package.json` is ESM-only with `"type": "module"`.
|
|
35
|
+
- `README.md` is intentionally minimal and development-focused.
|
|
36
|
+
- `LICENSE` contains MIT license text.
|
|
37
|
+
- `.gitignore` excludes generated build, dependency, coverage, and local environment artifacts.
|
|
38
|
+
|
|
39
|
+
## Out Of Scope
|
|
40
|
+
|
|
41
|
+
- TypeScript configuration.
|
|
42
|
+
- Build tooling.
|
|
43
|
+
- Test tooling.
|
|
44
|
+
- Lint or format tooling.
|
|
45
|
+
- Real command behavior.
|