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
package/README.md
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
# 💾 SAVEPOINT
|
|
4
|
+
|
|
5
|
+
> **Hard Gates. Zero Drift. All Vibe.**
|
|
6
|
+
|
|
7
|
+
Built for **vibe coders** on tight token budgets who still want to ship.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx savepoint init
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
I love building side projects with AI. It feels like magic. But the reality of "vibe coding" is that it usually falls apart on day three. Not because the model is bad, but because there are no boundaries.
|
|
14
|
+
|
|
15
|
+
AI-driven development fails for three specific reasons:
|
|
16
|
+
|
|
17
|
+
1. **The Drift:** Your `Design.md` and agent instructions go stale after the first iteration; nobody updates them.
|
|
18
|
+
2. **Token Bloat:** Monolithic backlogs and MCP overhead burn your context window — and your budget.
|
|
19
|
+
3. **The Chaos:** No repeatable process from a "vibe" to a working MVP.
|
|
20
|
+
|
|
21
|
+
**Savepoint is a baby gate for AI agents.**
|
|
22
|
+
|
|
23
|
+
It’s a simple, file-based state machine and cinematic Terminal UI (TUI) designed to force you—and your agent (Claude, Cursor, Aider, Gemini)—to slow down, write down what you're actually building, and check your work before moving on.
|
|
24
|
+
|
|
25
|
+
No database. No proprietary cloud. **No telemetry, ever.** Your filesystem is the map, and Savepoint keeps the agent on it.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 🔄 The Loop (Driven by Agent Skills)
|
|
30
|
+
|
|
31
|
+
Savepoint turns your project into a series of hard gates, enforced by **six bundled custom agent skills** (`draft-prd`, `system-design`, `create-plan`, `create-task`, `build-task`, `audit`). You cannot move forward until the current gate is cleared.
|
|
32
|
+
|
|
33
|
+
`[ PRD ]` **→** `[ DESIGN ]` **→** `[ EPICS ]` **→** `[ TASKS ]` **→** `[ BUILD ]` **→** `[ AUDIT ]`
|
|
34
|
+
|
|
35
|
+
Small scopes. Small context windows. No wandering.
|
|
36
|
+
|
|
37
|
+
- **The PRD Gate (`draft-prd`):** The agent interviews you to ensure your idea is crisp enough for a V1 before writing any architecture.
|
|
38
|
+
- **The Design Gate (`system-design`):** Write down what you actually want. If you can't explain it simply in a markdown file, the AI is going to make a mess of it.
|
|
39
|
+
- **The Plan Gate (`create-plan` & `create-task`):** Break the idea down into small, manageable steps. No giant leaps. This becomes the checklist the AI _must_ follow.
|
|
40
|
+
- **The Build Gate (`build-task`):** The AI writes code for one small step at a time. The scope stays tight so it doesn't wander off into the weeds. It logs "Drift Notes" instead of cowboy-coding architectural changes.
|
|
41
|
+
- **The Audit Gate (`audit`):** Before moving on, we stop and check. Does the code match the plan? We don't advance until the map matches the territory.
|
|
42
|
+
|
|
43
|
+
> 🔒 **The Audit Loop** — When the last task in an epic moves to `done`, the next epic stays _locked_ until your docs (`Design.md`, `AGENTS.md`, and the epic's own design) are reconciled with the actual code via the audit agent. **No existing markdown-first task tool has this gate.**
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 🛠 The Stack (Atari-Noir)
|
|
48
|
+
|
|
49
|
+
Built for a cinematic, technical feel without the bloat.
|
|
50
|
+
|
|
51
|
+
- **Cinematic TUI:** Built with Ink. It feels like a proper terminal tool, not a web app ported to a CLI.
|
|
52
|
+
- **File-First:** Your project's state lives in markdown and JSON files right next to your code.
|
|
53
|
+
- **Agent-Agnostic:** Claude, Cursor, Aider, Gemini — if it reads markdown and edits files, it works. No MCP server. No per-agent adapters.
|
|
54
|
+
- **Token-Efficient by Design:** Tasks read <2KB of context. Audits stay under ~15KB. No more burning your AI budget on bloated backlogs.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 💻 Commands (0.1.0-MVP)
|
|
59
|
+
|
|
60
|
+
| Command | Action |
|
|
61
|
+
| :----------------- | :--------------------------------------------------------------------------------------------------- |
|
|
62
|
+
| `savepoint init` | Scaffold the loop, write your `AGENTS.md` guide, drop the baby gates, and generate the magic prompt. |
|
|
63
|
+
| `savepoint board` | Launch the Atari-Noir Kanban TUI to track the vibe. |
|
|
64
|
+
| `savepoint audit` | Stop the AI. Sync the map with the territory. |
|
|
65
|
+
| `savepoint doctor` | Check the integrity of the state machine. |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 🪞 Recursive Construction
|
|
70
|
+
|
|
71
|
+
I am building Savepoint to dogfood the very workflow it enables. **This entire repository is being built by agents, guided by Savepoint’s own state machine.**
|
|
72
|
+
|
|
73
|
+
I’m sharing it to prove a point: The real power of AI isn't just the size of the LLM—it’s the structure you give it. Token-efficient, documentation-first development is the only way to build at scale with AI without losing your mind.
|
|
74
|
+
|
|
75
|
+
**The goal:** Go from `npx savepoint init` to a merged epic in one weekend.
|
|
76
|
+
|
|
77
|
+
**License:** MIT
|
|
78
|
+
**Status:** Recursive Construction (v1 MVP in progress)
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ink-tui-design
|
|
3
|
+
description: |
|
|
4
|
+
Ink.js TUI design and implementation guide with visual design vocabulary.
|
|
5
|
+
Use when:
|
|
6
|
+
(1) Creating or modifying Ink.js components for the savepoint TUI
|
|
7
|
+
(2) Implementing useInput/useApp hooks
|
|
8
|
+
(3) Solving emoji/icon width issues (string-width)
|
|
9
|
+
(4) Terminal responsive layout and dynamic height calculations
|
|
10
|
+
(5) Keyboard input handling (Enter, Ctrl+C, conflicts)
|
|
11
|
+
(6) Multi-width character (CJK) cursor issues
|
|
12
|
+
(7) CLI UI test design (ink-testing-library)
|
|
13
|
+
(8) Performance optimization (React.memo, custom comparators)
|
|
14
|
+
(9) Visual design decisions for terminal rendering
|
|
15
|
+
(10) Non-TTY fallback rendering
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Ink TUI Design
|
|
19
|
+
|
|
20
|
+
A unified guide for building terminal UIs with Ink.js, combining implementation
|
|
21
|
+
mechanics and visual design vocabulary. This skill owns the **how** of TUI
|
|
22
|
+
implementation. The **what** of visual direction (palette, spacing, signature
|
|
23
|
+
patterns) lives in `.savepoint/visual-identity.md` and always wins when the two
|
|
24
|
+
diverge.
|
|
25
|
+
|
|
26
|
+
## Quick Start
|
|
27
|
+
|
|
28
|
+
### New Component
|
|
29
|
+
|
|
30
|
+
1. Determine component type: Screen / Part / Common
|
|
31
|
+
2. Read [component-patterns.md](references/component-patterns.md) for the pattern
|
|
32
|
+
3. Read [ink-gotchas.md](references/ink-gotchas.md) if this component uses
|
|
33
|
+
emoji, `useInput`, or `Ctrl+C` handling
|
|
34
|
+
4. Add types where needed
|
|
35
|
+
5. Implement the component
|
|
36
|
+
6. Write tests (see [testing-patterns.md](references/testing-patterns.md))
|
|
37
|
+
|
|
38
|
+
### Common Problem Solving
|
|
39
|
+
|
|
40
|
+
| Problem | Reference |
|
|
41
|
+
| ------------------------ | ------------------------------------------------------------------- |
|
|
42
|
+
| Emoji width misalignment | [ink-gotchas.md#icon-emoji-width](references/ink-gotchas.md) |
|
|
43
|
+
| Ctrl+C fired twice | [ink-gotchas.md#ctrlc-handling](references/ink-gotchas.md) |
|
|
44
|
+
| useInput conflicts | [ink-gotchas.md#useinput-conflicts](references/ink-gotchas.md) |
|
|
45
|
+
| Enter key propagates | [ink-gotchas.md#enter-double-fire](references/ink-gotchas.md) |
|
|
46
|
+
| CJK cursor drift | [ink-gotchas.md#cjk-cursor](references/ink-gotchas.md) |
|
|
47
|
+
| Layout breaks on resize | [ink-gotchas.md#layout-breaks](references/ink-gotchas.md) |
|
|
48
|
+
| console.log interferes | [ink-gotchas.md#consolelog-interference](references/ink-gotchas.md) |
|
|
49
|
+
| Ink color type errors | [ink-gotchas.md#ink-color-types](references/ink-gotchas.md) |
|
|
50
|
+
|
|
51
|
+
## Directory Conventions
|
|
52
|
+
|
|
53
|
+
Match the project structure under `src/tui/`:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
src/tui/
|
|
57
|
+
├── App.tsx # Root Ink component — board, detail pane, input routing
|
|
58
|
+
├── Board.tsx # Main kanban-style board view
|
|
59
|
+
├── DetailPane.tsx # Expanded task detail overlay
|
|
60
|
+
├── state/ # Pure reducer and view-state logic
|
|
61
|
+
│ ├── reducer.ts # Board navigation, selection, refresh state
|
|
62
|
+
│ ├── app-reducer.ts # App-level state (screen stack, mode)
|
|
63
|
+
│ └── view-state.ts # Derived view models
|
|
64
|
+
├── io/ # Transition gates and write helpers
|
|
65
|
+
│ ├── gates.ts # Can-transition? rules before writing status
|
|
66
|
+
│ └── write-status.ts # File-backed status updates with mtime checks
|
|
67
|
+
├── theme/ # Color capability detection and palette
|
|
68
|
+
│ ├── index.ts # Theme exports
|
|
69
|
+
│ ├── palette.ts # Color constants (ANSI 256, true color fallbacks)
|
|
70
|
+
│ └── capability.ts # Terminal color support detection
|
|
71
|
+
├── render/ # Non-TTY and plain-text rendering
|
|
72
|
+
│ ├── plain-table.ts # Deterministic table layout for CI/pipes
|
|
73
|
+
│ └── errors.ts # Warning and error message formatting
|
|
74
|
+
└── audit-review/ # Audit mode screens (optional, per epic)
|
|
75
|
+
├── AuditReviewApp.tsx
|
|
76
|
+
├── ProposalList.tsx
|
|
77
|
+
├── OperationDetail.tsx
|
|
78
|
+
├── state.ts
|
|
79
|
+
└── summary.ts
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Rules:
|
|
83
|
+
|
|
84
|
+
- **One job per file.** A component that both renders and manages data state
|
|
85
|
+
should be split into a Screen wrapper (state) and a Part (rendering).
|
|
86
|
+
- **State is explicit and local.** Keep UI state in the smallest surface that
|
|
87
|
+
needs it. Derive view data from project files, never invent hidden state.
|
|
88
|
+
- **Test branching, navigation, render output, and non-TTY fallbacks.** Every
|
|
89
|
+
component with `if/else/switch` gets a test. Pure rendering without branches
|
|
90
|
+
may skip.
|
|
91
|
+
|
|
92
|
+
## Component Classification
|
|
93
|
+
|
|
94
|
+
### Screen
|
|
95
|
+
|
|
96
|
+
- Represents a complete interactive view
|
|
97
|
+
- Handles keyboard input via `useInput`
|
|
98
|
+
- Uses a 3-layer layout: Header / Content / Footer
|
|
99
|
+
- Owns screen-specific business logic and state
|
|
100
|
+
|
|
101
|
+
### Part
|
|
102
|
+
|
|
103
|
+
- Reusable, stateless rendering unit
|
|
104
|
+
- Optimized with `React.memo`
|
|
105
|
+
- Receives all data through props
|
|
106
|
+
|
|
107
|
+
### Common
|
|
108
|
+
|
|
109
|
+
- Basic input primitives (Select, Confirm, Input)
|
|
110
|
+
- Supports both controlled and uncontrolled modes
|
|
111
|
+
|
|
112
|
+
See [component-patterns.md](references/component-patterns.md) for complete
|
|
113
|
+
examples of each classification.
|
|
114
|
+
|
|
115
|
+
## Visual Design for Terminals
|
|
116
|
+
|
|
117
|
+
> **Override authority:** `.savepoint/visual-identity.md` owns the project's
|
|
118
|
+
> Atari-Noir design system (palette, spacing rhythm, signature patterns). The
|
|
119
|
+
> following is a general vocabulary. When they conflict, always defer to
|
|
120
|
+
> `visual-identity.md`.
|
|
121
|
+
|
|
122
|
+
### Box Drawing & Borders
|
|
123
|
+
|
|
124
|
+
Choose border styles that express intent:
|
|
125
|
+
|
|
126
|
+
| Style | Characters | Mood |
|
|
127
|
+
| ----------- | ---------- | ------------------------------ |
|
|
128
|
+
| Single line | `┌─┐│└┘` | Clean, modern, minimal |
|
|
129
|
+
| Double line | `╔═╗║╚╝` | Bold, formal, retro-mainframe |
|
|
130
|
+
| Rounded | `╭─╮│╰╯` | Soft, friendly |
|
|
131
|
+
| Heavy | `┏━┓┃┗┛` | Strong, industrial |
|
|
132
|
+
| ASCII | `+-+\|` | Retro, universal compatibility |
|
|
133
|
+
|
|
134
|
+
This project's default is **single line** in quiet `#1A1A1A` per
|
|
135
|
+
`visual-identity.md`. Use double line only for modal title bars or audit
|
|
136
|
+
headers. Avoid defaulting to plain ASCII unless targeting very old terminals.
|
|
137
|
+
|
|
138
|
+
### Color Strategies
|
|
139
|
+
|
|
140
|
+
| Strategy | When to use |
|
|
141
|
+
| ------------------- | ----------------------------------------------------------------------- |
|
|
142
|
+
| ANSI 16 | Maximum compatibility; craft combinations beyond default red/green/blue |
|
|
143
|
+
| 256-color | Richer palettes; gradients and subtle background variations |
|
|
144
|
+
| True color (24-bit) | Full spectrum; smooth transitions, background tints |
|
|
145
|
+
| Monochrome | Single color with intensity variations (dim, normal, bold, reverse) |
|
|
146
|
+
|
|
147
|
+
This project prefers **true color with 256/16 fallbacks**. See `theme/capability.ts`
|
|
148
|
+
for detection and `theme/palette.ts` for the Atari-Noir color constants.
|
|
149
|
+
|
|
150
|
+
Create atmosphere with:
|
|
151
|
+
|
|
152
|
+
- Background color blocks for panels (not giant fills — intentional accents)
|
|
153
|
+
- Color-coded semantic meaning (reinforce with text; never rely on color alone)
|
|
154
|
+
- Inverted/reverse video for the active/focused row
|
|
155
|
+
- Dim text for secondary info, bold for primary
|
|
156
|
+
|
|
157
|
+
### Typography & Text Hierarchy
|
|
158
|
+
|
|
159
|
+
The terminal is all typography. Make it count:
|
|
160
|
+
|
|
161
|
+
- **Weight:** Bold for primary actions and headers; dim for metadata
|
|
162
|
+
- **Case:** UPPERCASE for section headers; sentence case for body
|
|
163
|
+
- **Symbols:** Enrich with `→ • ◆ ★ ⚡ λ ∴ ≡` and status glyphs
|
|
164
|
+
- **Custom bullets:** Replace `-` with `▸ ◉ ✓ ⬢ ›` where it adds clarity
|
|
165
|
+
- **Letter spacing:** Simulate with spaces for impact headers where the medium
|
|
166
|
+
allows (fixed-width cells limit this)
|
|
167
|
+
|
|
168
|
+
### Layout Principles
|
|
169
|
+
|
|
170
|
+
- **Panels & Windows:** Distinct regions with quiet borders. Depth from
|
|
171
|
+
contrast/glow, not heavy shadows.
|
|
172
|
+
- **Columns:** Side-by-side using careful spacing. Keep layout compact and
|
|
173
|
+
readable on narrow terminals first.
|
|
174
|
+
- **Whitespace:** Generous padding inside panels; breathing room between
|
|
175
|
+
sections.
|
|
176
|
+
- **Density:** Match to purpose. The board view is information-dense; audit
|
|
177
|
+
review breathes more.
|
|
178
|
+
- **Hierarchy:** Clear visual distinction between primary content, secondary
|
|
179
|
+
info, and chrome.
|
|
180
|
+
|
|
181
|
+
### Data Display
|
|
182
|
+
|
|
183
|
+
| Element | Technique |
|
|
184
|
+
| ----------------- | ---------------------------------------------------------------- |
|
|
185
|
+
| Status indicators | `●` green/live, `○` empty, `◐` partial, `✓` complete, `✗` failed |
|
|
186
|
+
| Sparklines | `▁▂▃▄▅▆▇█` for inline mini-charts |
|
|
187
|
+
| Horizontal bars | Block characters for proportional comparison |
|
|
188
|
+
| Trees | `├── └── │` for hierarchies |
|
|
189
|
+
| Gauges | `[████████░░]` with percentage |
|
|
190
|
+
|
|
191
|
+
### Decorative Elements
|
|
192
|
+
|
|
193
|
+
- **Dividers:** `─────` `═══` `••••••` `░░░░░░` — match tone to section
|
|
194
|
+
- **Section markers:** `▶ SECTION`, `[ SECTION ]`, `─── SECTION ───`, `◆ SECTION`
|
|
195
|
+
- **Icons:** Prefer semantic Unicode or Nerd Font icons. Always apply width
|
|
196
|
+
overrides for emoji (see Pattern 1 below).
|
|
197
|
+
|
|
198
|
+
### Anti-Patterns to Avoid
|
|
199
|
+
|
|
200
|
+
Never ship generic terminal aesthetics:
|
|
201
|
+
|
|
202
|
+
- Plain unformatted text output
|
|
203
|
+
- Default colors without intentional palette
|
|
204
|
+
- `[INFO]`, `[ERROR]` prefixes without styling
|
|
205
|
+
- Simple `----` dividers everywhere
|
|
206
|
+
- Walls of unstructured text
|
|
207
|
+
- Generic progress bars without personality
|
|
208
|
+
- Boring help text formatting
|
|
209
|
+
- Inconsistent spacing and alignment
|
|
210
|
+
- Accidental line wrapping (treat as a bug)
|
|
211
|
+
- Relying on color alone for state changes
|
|
212
|
+
|
|
213
|
+
## Key Patterns
|
|
214
|
+
|
|
215
|
+
### 1. Icon Width Overrides
|
|
216
|
+
|
|
217
|
+
`string-width` v8+ miscalculates some emoji widths. Override explicitly:
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
const iconWidthOverrides: Record<string, number> = {
|
|
221
|
+
"⚡": 1,
|
|
222
|
+
"✨": 1,
|
|
223
|
+
"✅": 1,
|
|
224
|
+
"⚠️": 1,
|
|
225
|
+
"🟢": 1,
|
|
226
|
+
"🟠": 1,
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
const getIconWidth = (icon: string): number => {
|
|
230
|
+
const baseWidth = stringWidth(icon);
|
|
231
|
+
const override = iconWidthOverrides[icon];
|
|
232
|
+
return override !== undefined ? Math.max(baseWidth, override) : baseWidth;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
const padIcon = (icon: string, columnWidth = 2): string => {
|
|
236
|
+
const width = getIconWidth(icon);
|
|
237
|
+
const padding = Math.max(0, columnWidth - width);
|
|
238
|
+
return icon + " ".repeat(padding);
|
|
239
|
+
};
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### 2. useInput Conflict Avoidance
|
|
243
|
+
|
|
244
|
+
Multiple `useInput` hooks all receive input. Guard each handler:
|
|
245
|
+
|
|
246
|
+
```typescript
|
|
247
|
+
useInput((input, key) => {
|
|
248
|
+
if (disabled) return; // Do nothing when this component is inactive
|
|
249
|
+
if (key.return) {
|
|
250
|
+
onSelect(selectedItem);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### 3. Ctrl+C Handling
|
|
256
|
+
|
|
257
|
+
```typescript
|
|
258
|
+
render(<App />, { exitOnCtrlC: false });
|
|
259
|
+
|
|
260
|
+
// Inside the component
|
|
261
|
+
useInput((input, key) => {
|
|
262
|
+
if (key.ctrl && input === "c") {
|
|
263
|
+
cleanup();
|
|
264
|
+
exit();
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### 4. Dynamic Height Calculation
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
const { rows } = useTerminalSize();
|
|
273
|
+
const headerLines = 2;
|
|
274
|
+
const footerLines = 1;
|
|
275
|
+
const contentHeight = rows - headerLines - footerLines;
|
|
276
|
+
const listLimit = Math.max(5, contentHeight);
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### 5. React.memo + Custom Comparison
|
|
280
|
+
|
|
281
|
+
```typescript
|
|
282
|
+
function arePropsEqual<T>(prev: Props<T>, next: Props<T>): boolean {
|
|
283
|
+
if (prev.items.length !== next.items.length) return false;
|
|
284
|
+
for (let i = 0; i < prev.items.length; i++) {
|
|
285
|
+
if (prev.items[i].value !== next.items[i].value) return false;
|
|
286
|
+
}
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export const Select = React.memo(SelectComponent, arePropsEqual);
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## Detailed References
|
|
294
|
+
|
|
295
|
+
- **Ink.js Gotchas & Common Problems**: [references/ink-gotchas.md](references/ink-gotchas.md)
|
|
296
|
+
- **Component Design Patterns**: [references/component-patterns.md](references/component-patterns.md)
|
|
297
|
+
- **Custom Hooks Guide**: [references/hooks-guide.md](references/hooks-guide.md)
|
|
298
|
+
- **Testing Patterns**: [references/testing-patterns.md](references/testing-patterns.md)
|
|
299
|
+
|
|
300
|
+
## Visual Identity Authority
|
|
301
|
+
|
|
302
|
+
All aesthetic decisions — palette, spacing, signature patterns, motion, tone —
|
|
303
|
+
are owned by `.savepoint/visual-identity.md`. When implementing a TUI feature:
|
|
304
|
+
|
|
305
|
+
1. Read `visual-identity.md` first if the task touches rendering, theme, or
|
|
306
|
+
visual design.
|
|
307
|
+
2. Return to this skill for Ink mechanics, component patterns, and testing.
|
|
308
|
+
3. If `visual-identity.md` says "quiet borders" and this skill says "double-line
|
|
309
|
+
headers," `visual-identity.md` wins.
|