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,122 @@
|
|
|
1
|
+
package styles
|
|
2
|
+
|
|
3
|
+
import "github.com/charmbracelet/lipgloss"
|
|
4
|
+
|
|
5
|
+
func color(hex, ansi256, ansi string) lipgloss.CompleteColor {
|
|
6
|
+
return lipgloss.CompleteColor{TrueColor: hex, ANSI256: ansi256, ANSI: ansi}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
var (
|
|
10
|
+
clrOrange = color(AtariOrange, AtariOrange256, AtariOrange16)
|
|
11
|
+
clrText = color(PrimaryText, PrimaryText256, PrimaryText16)
|
|
12
|
+
clrBorder = color(BorderSubtle, BorderSubtle256, BorderSubtle16)
|
|
13
|
+
clrSurface = color(Surface2, Surface2256, Surface216) // #0F0F0F
|
|
14
|
+
clrSurfaceDark = color(Surface, Surface256, Surface16) // #0D0D0D
|
|
15
|
+
clrGreen = color(NPPGreen, NPPGreen256, NPPGreen16)
|
|
16
|
+
clrPurple = color(VibePurple, VibePurple256, VibePurple16)
|
|
17
|
+
clrDim = color(Dim, Dim256, Dim16)
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
var (
|
|
21
|
+
HeaderIcon = lipgloss.NewStyle().
|
|
22
|
+
Foreground(clrOrange).
|
|
23
|
+
Bold(true)
|
|
24
|
+
|
|
25
|
+
HeaderText = lipgloss.NewStyle().
|
|
26
|
+
Foreground(clrText)
|
|
27
|
+
|
|
28
|
+
Divider = lipgloss.NewStyle().
|
|
29
|
+
Foreground(clrBorder)
|
|
30
|
+
|
|
31
|
+
HeaderFrame = lipgloss.NewStyle().
|
|
32
|
+
BorderStyle(lipgloss.RoundedBorder()).
|
|
33
|
+
BorderForeground(clrBorder).
|
|
34
|
+
Padding(1, 1)
|
|
35
|
+
|
|
36
|
+
BoardFrame = lipgloss.NewStyle().
|
|
37
|
+
BorderStyle(lipgloss.RoundedBorder()).
|
|
38
|
+
BorderForeground(clrBorder).
|
|
39
|
+
Padding(0, 1)
|
|
40
|
+
|
|
41
|
+
Column = lipgloss.NewStyle().
|
|
42
|
+
BorderStyle(lipgloss.RoundedBorder()).
|
|
43
|
+
BorderForeground(clrBorder).
|
|
44
|
+
Background(clrSurfaceDark).
|
|
45
|
+
Padding(0, 1)
|
|
46
|
+
|
|
47
|
+
ColumnFocused = lipgloss.NewStyle().
|
|
48
|
+
BorderStyle(lipgloss.RoundedBorder()).
|
|
49
|
+
BorderForeground(clrOrange).
|
|
50
|
+
Background(clrSurfaceDark).
|
|
51
|
+
Padding(0, 1)
|
|
52
|
+
|
|
53
|
+
ColumnTitle = lipgloss.NewStyle().
|
|
54
|
+
Foreground(clrText).
|
|
55
|
+
Bold(true)
|
|
56
|
+
|
|
57
|
+
ColumnTitleFocused = lipgloss.NewStyle().
|
|
58
|
+
Foreground(clrOrange).
|
|
59
|
+
Bold(true)
|
|
60
|
+
|
|
61
|
+
TaskItem = lipgloss.NewStyle().
|
|
62
|
+
Foreground(clrText)
|
|
63
|
+
|
|
64
|
+
TaskItemFocused = lipgloss.NewStyle().
|
|
65
|
+
Foreground(clrOrange)
|
|
66
|
+
|
|
67
|
+
StatusBar = lipgloss.NewStyle().
|
|
68
|
+
Foreground(clrText).
|
|
69
|
+
Background(clrSurface)
|
|
70
|
+
|
|
71
|
+
EpicPanel = lipgloss.NewStyle().
|
|
72
|
+
BorderStyle(lipgloss.RoundedBorder()).
|
|
73
|
+
BorderForeground(clrPurple).
|
|
74
|
+
Background(clrSurface).
|
|
75
|
+
Padding(0, 1)
|
|
76
|
+
|
|
77
|
+
Card = lipgloss.NewStyle().
|
|
78
|
+
BorderStyle(lipgloss.RoundedBorder()).
|
|
79
|
+
BorderForeground(clrBorder).
|
|
80
|
+
Background(clrSurface).
|
|
81
|
+
Padding(0, 1)
|
|
82
|
+
|
|
83
|
+
CardFocused = lipgloss.NewStyle().
|
|
84
|
+
BorderStyle(lipgloss.RoundedBorder()).
|
|
85
|
+
BorderForeground(clrOrange).
|
|
86
|
+
Background(clrSurface).
|
|
87
|
+
Padding(0, 1)
|
|
88
|
+
|
|
89
|
+
CardMeta = lipgloss.NewStyle().Foreground(clrDim)
|
|
90
|
+
|
|
91
|
+
GlyphBuild = lipgloss.NewStyle().Foreground(clrOrange)
|
|
92
|
+
GlyphTest = lipgloss.NewStyle().Foreground(clrGreen)
|
|
93
|
+
GlyphAudit = lipgloss.NewStyle().Foreground(clrPurple)
|
|
94
|
+
|
|
95
|
+
DetailOverlay = lipgloss.NewStyle().
|
|
96
|
+
BorderStyle(lipgloss.RoundedBorder()).
|
|
97
|
+
BorderForeground(clrOrange).
|
|
98
|
+
Padding(0, 1)
|
|
99
|
+
|
|
100
|
+
// Footer phase styles
|
|
101
|
+
FooterPhasePlan = lipgloss.NewStyle().
|
|
102
|
+
Foreground(clrPurple).
|
|
103
|
+
Bold(true)
|
|
104
|
+
|
|
105
|
+
FooterPhaseBuild = lipgloss.NewStyle().
|
|
106
|
+
Foreground(clrOrange).
|
|
107
|
+
Bold(true)
|
|
108
|
+
|
|
109
|
+
FooterPhaseAudit = lipgloss.NewStyle().
|
|
110
|
+
Foreground(clrGreen).
|
|
111
|
+
Bold(true)
|
|
112
|
+
|
|
113
|
+
FooterDivider = lipgloss.NewStyle().
|
|
114
|
+
Foreground(clrBorder)
|
|
115
|
+
|
|
116
|
+
FooterHints = lipgloss.NewStyle().
|
|
117
|
+
Foreground(clrDim)
|
|
118
|
+
|
|
119
|
+
// Tag styles for semantic encoding
|
|
120
|
+
TagDone = lipgloss.NewStyle().Foreground(clrGreen)
|
|
121
|
+
TagAI = lipgloss.NewStyle().Foreground(clrPurple)
|
|
122
|
+
)
|
package/main.exe
ADDED
|
Binary file
|
package/main.go
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "savepoint",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "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.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"board",
|
|
7
|
+
"kanban",
|
|
8
|
+
"planning"
|
|
9
|
+
],
|
|
10
|
+
"homepage": "https://github.com/anipatke/savepoint#readme",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/anipatke/savepoint/issues"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/anipatke/savepoint.git"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"author": "anipatke",
|
|
20
|
+
"type": "Go",
|
|
21
|
+
"main": "main.go",
|
|
22
|
+
"scripts": {
|
|
23
|
+
"test": "savepoint init"
|
|
24
|
+
}
|
|
25
|
+
}
|
package/savepoint
ADDED
|
Binary file
|
package/savepoint.exe
ADDED
|
Binary file
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
const childProcess = require("node:child_process");
|
|
2
|
+
const esbuild = require("esbuild");
|
|
3
|
+
|
|
4
|
+
const originalExec = childProcess.exec;
|
|
5
|
+
const originalExecFile = childProcess.execFile;
|
|
6
|
+
|
|
7
|
+
function shouldStub(command) {
|
|
8
|
+
return (
|
|
9
|
+
typeof command === "string" && command.trim().toLowerCase() === "net use"
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function fakeChildProcess() {
|
|
14
|
+
return {
|
|
15
|
+
pid: 0,
|
|
16
|
+
kill() {
|
|
17
|
+
return true;
|
|
18
|
+
},
|
|
19
|
+
stdin: null,
|
|
20
|
+
stdout: null,
|
|
21
|
+
stderr: null,
|
|
22
|
+
on() {
|
|
23
|
+
return this;
|
|
24
|
+
},
|
|
25
|
+
once() {
|
|
26
|
+
return this;
|
|
27
|
+
},
|
|
28
|
+
addListener() {
|
|
29
|
+
return this;
|
|
30
|
+
},
|
|
31
|
+
removeListener() {
|
|
32
|
+
return this;
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Vitest probes `net use` on Windows to detect network drive mappings, which fails in this scaffold.
|
|
38
|
+
childProcess.exec = function exec(command, options, callback) {
|
|
39
|
+
if (shouldStub(command)) {
|
|
40
|
+
const done = typeof options === "function" ? options : callback;
|
|
41
|
+
if (typeof done === "function") {
|
|
42
|
+
setImmediate(() => done(null, "", ""));
|
|
43
|
+
}
|
|
44
|
+
return fakeChildProcess();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return originalExec.call(this, command, options, callback);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
childProcess.execFile = function execFile(file, args, options, callback) {
|
|
51
|
+
if (shouldStub(file)) {
|
|
52
|
+
const done =
|
|
53
|
+
typeof args === "function"
|
|
54
|
+
? args
|
|
55
|
+
: typeof options === "function"
|
|
56
|
+
? options
|
|
57
|
+
: callback;
|
|
58
|
+
if (typeof done === "function") {
|
|
59
|
+
setImmediate(() => done(null, "", ""));
|
|
60
|
+
}
|
|
61
|
+
return fakeChildProcess();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return originalExecFile.call(this, file, args, options, callback);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
function identityTransform(input) {
|
|
68
|
+
const code =
|
|
69
|
+
typeof input === "string" ? input : (input?.toString("utf8") ?? "");
|
|
70
|
+
return Promise.resolve({
|
|
71
|
+
code,
|
|
72
|
+
map: "",
|
|
73
|
+
warnings: [],
|
|
74
|
+
errors: [],
|
|
75
|
+
mangleCache: {},
|
|
76
|
+
legalComments: "none",
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function identityTransformSync(input) {
|
|
81
|
+
const code =
|
|
82
|
+
typeof input === "string" ? input : (input?.toString("utf8") ?? "");
|
|
83
|
+
return {
|
|
84
|
+
code,
|
|
85
|
+
map: "",
|
|
86
|
+
warnings: [],
|
|
87
|
+
errors: [],
|
|
88
|
+
mangleCache: {},
|
|
89
|
+
legalComments: "none",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Vitest reaches into esbuild on Windows before the real transform path is ready.
|
|
94
|
+
esbuild.transform = identityTransform;
|
|
95
|
+
esbuild.transformSync = identityTransformSync;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: project-design
|
|
3
|
+
status: active
|
|
4
|
+
last_audited: never
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# {{PROJECT_NAME}} — System Architecture
|
|
8
|
+
|
|
9
|
+
> Project-level architecture. Audit-kept fresh: every epic's audit step merges its delta into this document.
|
|
10
|
+
>
|
|
11
|
+
> **Visual identity** lives separately in `.savepoint/visual-identity.md` and is loaded only for TUI/theme/visual tasks.
|
|
12
|
+
|
|
13
|
+
## 1. Architecture model
|
|
14
|
+
|
|
15
|
+
<!-- High-level architecture pattern. -->
|
|
16
|
+
|
|
17
|
+
## 2. Directory layout
|
|
18
|
+
|
|
19
|
+
<!-- Expected file structure. -->
|
|
20
|
+
|
|
21
|
+
## 3. Hierarchy semantics
|
|
22
|
+
|
|
23
|
+
<!-- Definitions of release, epic, task, sub-task. -->
|
|
24
|
+
|
|
25
|
+
## 4. Status model & gates
|
|
26
|
+
|
|
27
|
+
<!-- How work moves through states. -->
|
|
28
|
+
|
|
29
|
+
## 5. Dependencies
|
|
30
|
+
|
|
31
|
+
<!-- How tasks depend on each other. -->
|
|
32
|
+
|
|
33
|
+
## 6. CLI surface
|
|
34
|
+
|
|
35
|
+
<!-- Commands and flags if applicable. -->
|
|
36
|
+
|
|
37
|
+
## 7. Audit pipeline
|
|
38
|
+
|
|
39
|
+
<!-- Steps the audit follows. -->
|
|
40
|
+
|
|
41
|
+
## 8. Testing strategy
|
|
42
|
+
|
|
43
|
+
<!-- How the project is tested. -->
|
|
44
|
+
|
|
45
|
+
## 9. Release versioning
|
|
46
|
+
|
|
47
|
+
<!-- Version scheme. -->
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: project-prd
|
|
3
|
+
status: active
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# {{PROJECT_NAME}} — Product Vision
|
|
7
|
+
|
|
8
|
+
## What it is
|
|
9
|
+
|
|
10
|
+
<!-- Describe what you are building in one paragraph. Be specific about the core mechanic (e.g., "A CLI tool that uses AI to write unit tests" instead of "An AI coding assistant"). -->
|
|
11
|
+
|
|
12
|
+
## Why
|
|
13
|
+
|
|
14
|
+
<!-- What specific problem does this solve? Why does it need to exist now? (e.g., "Developers skip writing tests because it's tedious; this automates the drudgery so coverage stays high without the manual effort.") -->
|
|
15
|
+
|
|
16
|
+
## Target user
|
|
17
|
+
|
|
18
|
+
<!-- Who is this for? Be specific. (e.g., "Vibe coders," "Junior frontend developers," "Indie hackers building SaaS MVPs"). If it's for everyone, it's for no one. -->
|
|
19
|
+
|
|
20
|
+
## Headline differentiator
|
|
21
|
+
|
|
22
|
+
<!-- What makes this project unique? Why would someone use this over an existing alternative? (e.g., "It integrates directly into the savepoint audit loop, whereas others require a separate PR step.") -->
|
|
23
|
+
|
|
24
|
+
## Success metrics
|
|
25
|
+
|
|
26
|
+
<!-- How do you know it's working for V1? (e.g., "Can generate a passing test suite for a 10-file React app in under 60 seconds with zero manual edits.") -->
|
|
27
|
+
|
|
28
|
+
## Constraints
|
|
29
|
+
|
|
30
|
+
<!-- Hard limits. What tech stack MUST be used? Are there API cost limits, token limits, or specific libraries you refuse to use? -->
|
|
31
|
+
|
|
32
|
+
## Out of scope (forever or for now)
|
|
33
|
+
|
|
34
|
+
<!-- What are you explicitly NOT building for V1? (e.g., "No database. No multi-user login. No web UI.") This is crucial for keeping the AI focused. -->
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Savepoint config — single source of truth for project preferences.
|
|
2
|
+
|
|
3
|
+
verify_strict: false # vibe-coder soft mode; tasks reach done on assertion. Set true for TDD-strict.
|
|
4
|
+
|
|
5
|
+
quality_gates:
|
|
6
|
+
lint: null
|
|
7
|
+
typecheck: null
|
|
8
|
+
test: null
|
|
9
|
+
block_on_failure: true
|
|
10
|
+
|
|
11
|
+
audit:
|
|
12
|
+
divergence_threshold: 0.5 # warn if a proposal changes >50% of a live file
|
|
13
|
+
|
|
14
|
+
theme:
|
|
15
|
+
bg: "#121212"
|
|
16
|
+
surface: "#0D0D0D"
|
|
17
|
+
surface_2: "#0F0F0F"
|
|
18
|
+
border: "#1A1A1A"
|
|
19
|
+
text: "#F0E6DA"
|
|
20
|
+
accents:
|
|
21
|
+
backlog: "#B1A1DF"
|
|
22
|
+
planned: "#B1A1DF"
|
|
23
|
+
in_progress: "#FC6323"
|
|
24
|
+
review: "#FC6323"
|
|
25
|
+
done: "#A4C639"
|
|
26
|
+
blocked: "#FF4444"
|
|
27
|
+
borders: "subtle"
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Agent State Machine
|
|
2
|
+
|
|
3
|
+
This file routes the agent based on the project's current state. Read this whenever you start a session.
|
|
4
|
+
|
|
5
|
+
## Read order on every session
|
|
6
|
+
|
|
7
|
+
1. This file (you are here)
|
|
8
|
+
2. The current state below to know what to do next
|
|
9
|
+
3. The active epic Design
|
|
10
|
+
4. The active task file, when a task is selected
|
|
11
|
+
|
|
12
|
+
Read `.savepoint/PRD.md` only for project vision changes. Read `.savepoint/Design.md` only for architecture changes or audit closeout. Read `.savepoint/releases/v{{RELEASE_NUMBER}}/PRD.md` only for release planning or epic-order questions.
|
|
13
|
+
|
|
14
|
+
**Conditional read (token discipline):** if your active task touches **Ink/TUI implementation**, also read `agent-skills/ink-tui-design/SKILL.md` after Design.md as the execution guide. If it touches **TUI rendering, theme, or visual design**, also read `.savepoint/visual-identity.md` as the visual guardrails. Otherwise skip the extra files — they are tokens you do not need.
|
|
15
|
+
|
|
16
|
+
## Current state
|
|
17
|
+
|
|
18
|
+
```yaml
|
|
19
|
+
state: pre-implementation
|
|
20
|
+
release: v{{RELEASE_NUMBER}}
|
|
21
|
+
epic: none
|
|
22
|
+
task: none
|
|
23
|
+
next_action: "The project has its PRD and Design locked but no epics defined yet. Help the user define the epics list and confirm priority."
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Manual audit override
|
|
27
|
+
|
|
28
|
+
If the user explicitly asks you to audit an epic, perform the audit for that epic even if the router has not reached `state: audit-pending` yet.
|
|
29
|
+
|
|
30
|
+
Persist the audit artifacts before replying:
|
|
31
|
+
|
|
32
|
+
- Ensure `.savepoint/audit/{E##-epic}/snapshot.md` exists. Create a manual snapshot once if needed.
|
|
33
|
+
- Write the proposal bundle to `.savepoint/audit/{E##-epic}/proposals.md`.
|
|
34
|
+
- Do not stop at chat-only findings. The filesystem artifact is part of the task output.
|
|
35
|
+
|
|
36
|
+
## State → next action
|
|
37
|
+
|
|
38
|
+
<!-- AGENT: Read the state above. Find the matching block below. Follow it. -->
|
|
39
|
+
|
|
40
|
+
### `state: pre-implementation`
|
|
41
|
+
|
|
42
|
+
The project has its PRD and Design locked but no epics defined yet.
|
|
43
|
+
|
|
44
|
+
**Next action:**
|
|
45
|
+
|
|
46
|
+
1. Read `.savepoint/releases/v{{RELEASE_NUMBER}}/PRD.md` — the v{{RELEASE_NUMBER}} release scope (epic list lives there).
|
|
47
|
+
2. Help the user define the epics list and confirm priority.
|
|
48
|
+
3. For each epic in order, create the directory `.savepoint/releases/v{{RELEASE_NUMBER}}/epics/E##-{epic-name}/` with a `Design.md` stub.
|
|
49
|
+
4. When epic E01 (scaffolding) is created, transition to `state: epic-design` for that epic.
|
|
50
|
+
|
|
51
|
+
**Do not** start writing code. We are still in planning.
|
|
52
|
+
|
|
53
|
+
### `state: epic-design`
|
|
54
|
+
|
|
55
|
+
An epic exists but its `Design.md` is empty or a stub.
|
|
56
|
+
|
|
57
|
+
**Next action:** Walk the user through filling out the epic's `Design.md`:
|
|
58
|
+
|
|
59
|
+
- What is this epic adding to the system?
|
|
60
|
+
- What components / files does it touch?
|
|
61
|
+
- What's the architectural delta vs the current state?
|
|
62
|
+
|
|
63
|
+
When complete, transition to `state: epic-task-breakdown` for this epic.
|
|
64
|
+
|
|
65
|
+
### `state: epic-task-breakdown`
|
|
66
|
+
|
|
67
|
+
Epic Design exists but tasks are missing or not fully planned.
|
|
68
|
+
|
|
69
|
+
**Next action:**
|
|
70
|
+
|
|
71
|
+
1. Re-read the epic Design.
|
|
72
|
+
2. Create or update the full epic task list — each task **independently buildable**, **objective-led**, with declared `depends_on`.
|
|
73
|
+
3. Each task file lives at `.savepoint/releases/v{{RELEASE_NUMBER}}/epics/{E##-epic}/tasks/TNNN-slug.md` with frontmatter:
|
|
74
|
+
```yaml
|
|
75
|
+
---
|
|
76
|
+
id: {E##-epic}/TNNN-slug
|
|
77
|
+
status: planned
|
|
78
|
+
objective: "<one sentence>"
|
|
79
|
+
depends_on: []
|
|
80
|
+
---
|
|
81
|
+
```
|
|
82
|
+
4. In the same pass, write each task's `## Acceptance Criteria` (observable outcomes that define "done") and `## Implementation Plan` (the build checklist that satisfies them) as inline `- [ ]` checkboxes, plus a `## Context Log` section with `Files read`, `Estimated input tokens`, and `Notes` fields.
|
|
83
|
+
5. When every task is planned, transition to `state: task-building` for the first unblocked task.
|
|
84
|
+
|
|
85
|
+
### `state: task-planning`
|
|
86
|
+
|
|
87
|
+
Reserved for repair or late-added tasks. Normal epic planning happens during `state: epic-task-breakdown`.
|
|
88
|
+
|
|
89
|
+
**Next action:** Read the task's `objective`. Write `## Acceptance Criteria` (observable outcomes) before `## Implementation Plan` (build checklist). Use inline `- [ ]` checkboxes under the plan, add a `## Context Log` section, set `status: planned`, and stop.
|
|
90
|
+
|
|
91
|
+
### `state: task-building`
|
|
92
|
+
|
|
93
|
+
Task is `in_progress`. All `depends_on` are `done`.
|
|
94
|
+
|
|
95
|
+
**Next action:** Execute the plan. Tick checkboxes as you complete them. The implementation checklist exists to satisfy the task's acceptance criteria; every checked box should map to an observable outcome in `## Acceptance Criteria`. Edit code per the **Code Style** rules in `AGENTS.md`. Before setting `status: done`, update the task's `## Context Log`. When all checkboxes tick, run the full quality-gate suite, set `status: done`, update the router, and **stop for user review**.
|
|
96
|
+
|
|
97
|
+
**Do not start the next task without user acknowledgment.**
|
|
98
|
+
|
|
99
|
+
### `state: audit-pending`
|
|
100
|
+
|
|
101
|
+
The last task in an epic is `done`. Audit must run before the next epic starts.
|
|
102
|
+
|
|
103
|
+
**Context gate:** If you just built this epic in the current session, you **must not** audit it. Close this session. The user should start a new session for the audit.
|
|
104
|
+
|
|
105
|
+
**Next action (fresh session only):** Confirm `.savepoint/audit/{E##-epic}/snapshot.md` exists. If it is missing while the audit CLI is still unavailable, create one manual snapshot from the known epic scope once; do not search broadly for replacement inputs. Then read the snapshot, read the epic's `Design.md`, and read only the files listed as changed. Write one patch-shaped proposal bundle to `.savepoint/audit/{E##-epic}/proposals.md`:
|
|
106
|
+
|
|
107
|
+
- `Design.md` section — merge only the epic delta into project architecture.
|
|
108
|
+
- `AGENTS.md` section — refresh Codebase Map entries from changed-module metadata; preserve existing rows.
|
|
109
|
+
- `epic-Design.md` section — add "Implemented as:" notes and deltas from the original plan.
|
|
110
|
+
- `Quality Review` section — semantic-review findings against the 10 Code Style rules.
|
|
111
|
+
|
|
112
|
+
Prefer delta-only edits (`Insert After`, `Replace`, `Delete`) anchored to exact text. Do not quote and replace entire large sections unless the whole section genuinely changed.
|
|
113
|
+
|
|
114
|
+
Proposal format:
|
|
115
|
+
|
|
116
|
+
```md
|
|
117
|
+
## Target File
|
|
118
|
+
|
|
119
|
+
`path/to/file.md`
|
|
120
|
+
|
|
121
|
+
## Replace
|
|
122
|
+
|
|
123
|
+
<exact old heading, marker, or section>
|
|
124
|
+
|
|
125
|
+
## With
|
|
126
|
+
|
|
127
|
+
<new content>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Quality review section format:
|
|
131
|
+
|
|
132
|
+
```md
|
|
133
|
+
## Must Fix Before Close
|
|
134
|
+
|
|
135
|
+
## Must Fix Before Next Epic
|
|
136
|
+
|
|
137
|
+
## Carry Forward
|
|
138
|
+
|
|
139
|
+
## Already Fixed
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
After proposals are approved, apply approved proposals to live files, mark the epic `Design.md` as `status: audited`, update project `Design.md` `last_audited`, refresh `AGENTS.md` Codebase Map, and advance this router to the next epic state.
|
|
143
|
+
|
|
144
|
+
Stop. The user reviews proposals in the TUI before commit actions.
|
|
145
|
+
|
|
146
|
+
## Capability check
|
|
147
|
+
|
|
148
|
+
If you are not Claude Opus / Gemini 2.5 Pro / GPT-5.5 / equivalent, surface a warning to the user:
|
|
149
|
+
|
|
150
|
+
> _"Heads up — I'm running on a lighter model. Savepoint's planning steps work best with top-tier models because the embedded prompts are detailed. I'll do my best, but consider switching the model for PRD/Design/Task-breakdown steps."_
|
|
151
|
+
|
|
152
|
+
Then proceed.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: visual-identity
|
|
3
|
+
status: active
|
|
4
|
+
last_audited: never
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Visual Identity — Atari-Noir
|
|
8
|
+
|
|
9
|
+
> The brand identity and visual guardrails for {{PROJECT_NAME}}. **Loaded conditionally** — only when working on TUI rendering, theme, or design-system tasks. Non-visual tasks must skip this file to honor the token budget.
|
|
10
|
+
|
|
11
|
+
## Vibe
|
|
12
|
+
|
|
13
|
+
A serious digital system that loves old arcade hardware. Dark, cinematic, playful. Crisp, not noisy. Technical, not cold.
|
|
14
|
+
|
|
15
|
+
**Avoid:** neon cyberpunk chaos, SaaS minimalism, fake terminal gimmicks.
|
|
16
|
+
|
|
17
|
+
## Palette
|
|
18
|
+
|
|
19
|
+
| Element | Hex | Role |
|
|
20
|
+
| ------------- | --------- | ----------------------------- |
|
|
21
|
+
| Background | `#121212` | Main screen background |
|
|
22
|
+
| Surface | `#0D0D0D` | Cards and panels |
|
|
23
|
+
| Surface 2 | `#0F0F0F` | Secondary panels / title bars |
|
|
24
|
+
| Border | `#1A1A1A` | Quiet structural edges |
|
|
25
|
+
| Border Subtle | `#222222` | Slightly stronger separators |
|
|
26
|
+
| Primary Text | `#F0E6DA` | Warm off-white terminal text |
|
|
27
|
+
| Atari Orange | `#FC6323` | Primary CTA, active highlight |
|
|
28
|
+
| NPP Green | `#A4C639` | Success, live systems |
|
|
29
|
+
| Vibe Purple | `#B1A1DF` | AI, reflection |
|
|
30
|
+
|
|
31
|
+
**Color rules:**
|
|
32
|
+
|
|
33
|
+
- **Intentional accents.** One accent color per major section/type. Use for labels, hover, glows, active text — never giant background fills.
|
|
34
|
+
- **Dark backgrounds.** Keep them dark so accents pop.
|
|
35
|
+
- **Visual encoding.** Color semantically encodes categories or states; reinforce with minimal text.
|
|
36
|
+
|
|
37
|
+
## Typography
|
|
38
|
+
|
|
39
|
+
- **System heading font:** `Chakra Petch` (web only — terminal cannot control fonts)
|
|
40
|
+
- **System body/UI font:** `Space Mono` (web only — terminal cannot control fonts)
|
|
41
|
+
- **Accent retro fonts:** `Silkscreen` or `Press Start 2P`, used rarely for score counters or deliberately extreme moments
|
|
42
|
+
|
|
43
|
+
**Rules:**
|
|
44
|
+
|
|
45
|
+
- Headings uppercase, with deliberate letter-spacing where the medium allows.
|
|
46
|
+
- Body readable and restrained; abandon monospace for long text if readability suffers.
|
|
47
|
+
- Render magnitude/comparison numbers as proportional visuals (bars, circles), not raw values.
|
|
48
|
+
|
|
49
|
+
## Spacing rhythm
|
|
50
|
+
|
|
51
|
+
- Sections breathe. Default spacing feels generous.
|
|
52
|
+
- Cards have enough internal padding to feel like panels, not chips.
|
|
53
|
+
- Whitespace creates hierarchy before borders or color do.
|
|
54
|
+
|
|
55
|
+
## Signature UI patterns
|
|
56
|
+
|
|
57
|
+
- **Scanlines** — low-opacity CRT atmosphere; never obscure readability.
|
|
58
|
+
- **Glows** — radiate from perimeter ("lit from within"). Transparent section accent colors; no neon spam.
|
|
59
|
+
- **Panels** — flat, dark, structured with quiet borders. Depth from contrast/glow, not heavy shadows.
|
|
60
|
+
- **Search** — simple, single-line; integrated with section accent color.
|
|
61
|
+
- **MDX prose** — integrated using standard typography, palette, border logic.
|
|
62
|
+
|
|
63
|
+
## Interaction principles ("The Playable Dashboard")
|
|
64
|
+
|
|
65
|
+
**Content is the interface.** Avoid traditional UI patterns (dropdowns, accordions) if content can express the information directly.
|
|
66
|
+
|
|
67
|
+
- **Show, don't explain.** Visuals (scaled circles, markers) before text.
|
|
68
|
+
- **Motion** — authored, not generic. Ease like a system booting up. No bouncy toy motion.
|
|
69
|
+
- **Hover & focus** — internal light (underglow/surface tint), not thick outlines or loud transforms.
|
|
70
|
+
- **Expansion** — breathe open, don't snap. Inline reveals, shared-element transitions.
|
|
71
|
+
|
|
72
|
+
## Replication brief
|
|
73
|
+
|
|
74
|
+
If recreating this look-and-feel, preserve:
|
|
75
|
+
|
|
76
|
+
- dark charcoal background with warm off-white text
|
|
77
|
+
- three-color accent system (one per major section)
|
|
78
|
+
- `Chakra Petch` for headings, `Space Mono` for body/UI (where typography can be controlled)
|
|
79
|
+
- uppercase, tracked headings
|
|
80
|
+
- quiet borders, dark surfaces, selective glow
|
|
81
|
+
- one strong interactive hero element
|
|
82
|
+
- copy that sounds human, competent, intentionally non-corporate
|
|
83
|
+
- **Young Explorer Baseline:** all content and visuals understandable by a 7-year-old. Intuitive visual metaphors, no unexplained jargon, discoverable through play.
|
|
84
|
+
|
|
85
|
+
**Family resemblance, not exact duplication.** Preserve the underlying feel, hierarchy, restraint.
|
|
86
|
+
|
|
87
|
+
## Flex & constraints
|
|
88
|
+
|
|
89
|
+
- **Layout & components:** can adapt to content needs, provided palette discipline and tonal restraint remain.
|
|
90
|
+
- **Fonts:** supporting fonts can vary if heading/body contrast remains.
|
|
91
|
+
- **Hero:** interaction can vary, but requires one strong, ownable interactive element.
|
|
92
|
+
- **Visual-first:** show relationships visually before explaining them in text (gradient bar > numbers). Text reinforces; visuals carry comprehension.
|
|
93
|
+
- **Cognitive accessibility:** anchor complex concepts to physical/visual analogies a 7-year-old can grasp.
|
|
94
|
+
|
|
95
|
+
## What survives in the terminal
|
|
96
|
+
|
|
97
|
+
| Web rule | Terminal feasibility | Adaptation |
|
|
98
|
+
| ----------------------------------- | -------------------- | ---------------------------------------------------------------- |
|
|
99
|
+
| Dark bg + warm off-white text | ✓ | 24-bit color with 256/16-color fallbacks |
|
|
100
|
+
| 3-color accent system | ✓ | per status, per epic, per section |
|
|
101
|
+
| `Chakra Petch` / `Space Mono` fonts | ✗ | terminal owns the font; README discloses |
|
|
102
|
+
| Uppercase tracked headings | ⚠ | uppercase yes; letter-spacing no (fixed-width cells) |
|
|
103
|
+
| Scanlines | ✗ | flicker/ugly in text — skip |
|
|
104
|
+
| Glows / underglow | ⚠ | substitute with subtle bg tint on focused row + accent border |
|
|
105
|
+
| Quiet borders, dark surfaces | ✓ | box-drawing chars (`─ │ ┌ ┐`) in border-subtle gray |
|
|
106
|
+
| Inline reveal cards | ✓ | Ink state-driven expand/collapse |
|
|
107
|
+
| Visual encoding before text | ✓ | colored glyphs (`▣ ◇ ◆ ✓`) with text reinforcement |
|
|
108
|
+
| "System booting up" motion | ⚠ | 200ms init sequence on launch acceptable; running animation skip |
|
|
109
|
+
|
|
110
|
+
## Terminal UI guardrails
|
|
111
|
+
|
|
112
|
+
- Keep UI state explicit and local to the smallest useful surface.
|
|
113
|
+
- Use project data files as the source of truth; do not invent hidden UI state.
|
|
114
|
+
- Keep layout compact and readable on narrow terminals first.
|
|
115
|
+
- Treat accidental line wrapping as a bug.
|
|
116
|
+
- Make selection, focus, and status changes obvious without relying on color alone.
|
|
117
|
+
- Make every keyboard action predictable and idempotent.
|
|
118
|
+
- Test branching input handling, navigation, state transitions, render output, and non-TTY fallbacks.
|
|
119
|
+
|
|
120
|
+
## When `savepoint init` ships
|
|
121
|
+
|
|
122
|
+
This file is the canonical default that `savepoint init` writes into a user's `.savepoint/visual-identity.md`. Users replace it with their own design system. The file's existence (not its contents) is what `savepoint` cares about.
|