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,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E03-board-tui-core/T004-styles
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Define Atari-Noir palette and Lip Gloss styles"
|
|
5
|
+
depends_on: [E03-board-tui-core/T003-view]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T004: Styles
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `internal/styles/palette.go` defines all Atari-Noir hex colors.
|
|
13
|
+
- `internal/styles/styles.go` defines Lip Gloss styles for columns, cards, borders, text.
|
|
14
|
+
- Styles adapt to terminal color capability (truecolor/256/16/none).
|
|
15
|
+
|
|
16
|
+
## Implementation Plan
|
|
17
|
+
|
|
18
|
+
- [x] Create `internal/styles/palette.go` with hex constants.
|
|
19
|
+
- [x] Create `internal/styles/styles.go` with `lipgloss.NewStyle()` definitions.
|
|
20
|
+
- [x] Add adaptive color logic for 256/16/none modes.
|
|
21
|
+
- [x] Verify styles render correctly.
|
|
22
|
+
|
|
23
|
+
## Context Log
|
|
24
|
+
|
|
25
|
+
Files read: `internal/styles/palette.go`, `internal/styles/styles.go`, `.savepoint/visual-identity.md`, `E03-board-tui-core/Design.md`, `T003-view.md`
|
|
26
|
+
Estimated input tokens: ~1800
|
|
27
|
+
Notes: Files were seeded by T003. T004 added 256-color and 16-color fallback constants to palette.go and updated styles.go to use `lipgloss.CompleteColor{TrueColor, ANSI256, ANSI}` for all color references. Added `TagDone` (green) and `TagAI` (purple) styles for semantic encoding per visual-identity. `go build ./...` clean. 17 board tests pass.
|
|
28
|
+
|
|
29
|
+
Quality gates: `go build ./...` ✓ | `go test ./internal/board/ ./internal/styles/ -v` 17/17 ✓
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E03-board-tui-core/T005-layout
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Implement responsive layout with 3 breakpoints"
|
|
5
|
+
depends_on: [E03-board-tui-core/T004-styles]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T005: Layout
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- >=120 cols: epic panel (28w) + 3 columns. ✓ (CalculateLayout, renderEpicPanel)
|
|
13
|
+
- 80-119 cols: 3 columns only. ✓
|
|
14
|
+
- <80 cols: 1 column, left/right switches columns. ✓ (renderColumns + update.go left/right/h/l keys)
|
|
15
|
+
- Column widths calculated from available width. ✓
|
|
16
|
+
- No hardcoded widths that break at small sizes. ✓ (minColWidth floor in CalculateLayout)
|
|
17
|
+
|
|
18
|
+
## Implementation Plan
|
|
19
|
+
|
|
20
|
+
- [x] Create `internal/board/layout.go`.
|
|
21
|
+
- [x] Implement `CalculateLayout(width, height)`.
|
|
22
|
+
- [x] Return column count, widths, epic panel visibility.
|
|
23
|
+
- [x] Wire into `View()`.
|
|
24
|
+
- [x] Test at multiple widths.
|
|
25
|
+
|
|
26
|
+
## Context Log
|
|
27
|
+
|
|
28
|
+
Files read: internal/board/model.go, view.go, update.go, board.go, view_test.go, update_test.go, model_test.go, internal/styles/styles.go, go.mod, .savepoint/releases/v1/epics/E03-board-tui-core/Design.md
|
|
29
|
+
|
|
30
|
+
Estimated input tokens: ~6 000
|
|
31
|
+
|
|
32
|
+
Notes:
|
|
33
|
+
- Moved colOverhead/minColWidth constants from view.go to layout.go (logical home).
|
|
34
|
+
- Audit closeout removed dead columnContentWidth() from view.go; layout width coverage lives in layout_test.go.
|
|
35
|
+
- Added left/right (and h/l) column navigation to update.go to satisfy the <80-col acceptance criterion.
|
|
36
|
+
- Added EpicPanel lipgloss style to internal/styles/styles.go (purple border, rounded).
|
|
37
|
+
- Quality gates: go build ./... ✓ · go vet ./... ✓ · go test ./... ✓ (all 3 packages)
|
|
38
|
+
- Audit closeout gates: go test ./internal/board ✓ · go test ./... ✓ · go build ./... ✓
|
|
39
|
+
|
|
40
|
+
## Drift Notes
|
|
41
|
+
|
|
42
|
+
- Drift: `internal/board/layout.go` added, not yet in Codebase Map.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: epic-design
|
|
3
|
+
status: planned
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Epic E04: Board Components
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Build all visual components: columns, task cards with phase glyphs, epic panel, detail overlay, epic/release dropdowns, and help overlay.
|
|
11
|
+
|
|
12
|
+
## What this epic adds
|
|
13
|
+
|
|
14
|
+
- Column component: header with status label + count, bordered container.
|
|
15
|
+
- Task card component: fixed width, truncated title, dimmed metadata, phase glyphs (▣/◇/◆), accent border on focus.
|
|
16
|
+
- Epic panel component: left sidebar with epic list, active/selected indicators.
|
|
17
|
+
- Detail overlay: centered modal showing full task info, board visible behind.
|
|
18
|
+
- Epic selector dropdown: overlay list of epics.
|
|
19
|
+
- Release selector dropdown: overlay list of releases.
|
|
20
|
+
- Help overlay: keyboard shortcuts reference.
|
|
21
|
+
|
|
22
|
+
## Definition of Done
|
|
23
|
+
|
|
24
|
+
- Cards render with correct phase glyphs and colors.
|
|
25
|
+
- Focused card has orange accent border.
|
|
26
|
+
- Epic panel renders on wide screens; dropdown on narrow.
|
|
27
|
+
- Detail overlay opens with Enter, closes with Esc.
|
|
28
|
+
- Epic dropdown opens with `e`, release with `r`.
|
|
29
|
+
- Help overlay opens with `?`.
|
|
30
|
+
- All components render without wrapping or layout breaks.
|
|
31
|
+
- Component tests pass.
|
|
32
|
+
|
|
33
|
+
## Components and files
|
|
34
|
+
|
|
35
|
+
| Path | Purpose |
|
|
36
|
+
|------|---------|
|
|
37
|
+
| `internal/board/column.go` | Column rendering |
|
|
38
|
+
| `internal/board/card.go` | Task card rendering |
|
|
39
|
+
| `internal/board/epic_panel.go` | Epic sidebar / dropdown |
|
|
40
|
+
| `internal/board/detail.go` | Task detail overlay |
|
|
41
|
+
| `internal/board/dropdown.go` | Generic dropdown component |
|
|
42
|
+
| `internal/board/help.go` | Help overlay |
|
|
43
|
+
| `internal/board/card_test.go` | Card rendering tests |
|
|
44
|
+
| `internal/board/column_test.go` | Column rendering tests |
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E04-board-components/T001-column
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Render column with header, count, and task list"
|
|
5
|
+
depends_on: [E03-board-tui-core/T005-layout]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T001: Column Component
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Column renders header with status label (PLANNED / IN PROGRESS / DONE).
|
|
13
|
+
- Header shows task count.
|
|
14
|
+
- Column has bordered container.
|
|
15
|
+
- Focused column has accent border.
|
|
16
|
+
- Empty columns show "(empty)".
|
|
17
|
+
|
|
18
|
+
## Implementation Plan
|
|
19
|
+
|
|
20
|
+
- [x] Create `internal/board/column.go`.
|
|
21
|
+
- [x] Implement `RenderColumn(tasks, col, width, focusedTask, focused)`.
|
|
22
|
+
- [x] Style header and border.
|
|
23
|
+
- [x] Write tests.
|
|
24
|
+
- [x] Run `go test`.
|
|
25
|
+
|
|
26
|
+
## Context Log
|
|
27
|
+
|
|
28
|
+
**Files read:** `internal/board/view.go`, `internal/board/model.go`, `internal/styles/styles.go`, `internal/styles/palette.go`, `internal/data/task.go`, `internal/board/view_test.go`
|
|
29
|
+
|
|
30
|
+
**Estimated input tokens:** ~4 000
|
|
31
|
+
|
|
32
|
+
**Notes:** Extracted `columnTitle` and `taskLabel` from `view.go` into `column.go`. `renderColumn` method in `view.go` now delegates to `RenderColumn`. Added task count to header format `LABEL (N)` and `(empty)` placeholder for empty columns. All 7 column tests + prior view/board tests pass. `go build` and `go vet` clean.
|
|
33
|
+
|
|
34
|
+
**Quality gates:** `go build ./...` ✅ | `go vet ./...` ✅ | `go test ./...` ✅
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E04-board-components/T002-card
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Render task card with phase glyphs, truncation, and focus styling"
|
|
5
|
+
depends_on: [E04-board-components/T001-column]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T002: Card Component
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Card shows: task ID (truncated), title (truncated), phase glyphs (▣/◇/◆).
|
|
13
|
+
- Fixed width, never wraps.
|
|
14
|
+
- Metadata dimmed.
|
|
15
|
+
- Focused card has orange accent border and background tint.
|
|
16
|
+
- Phase glyph uses phase accent color.
|
|
17
|
+
|
|
18
|
+
## Implementation Plan
|
|
19
|
+
|
|
20
|
+
- [x] Create `internal/board/card.go`.
|
|
21
|
+
- [x] Implement `RenderCard(task, width, focused)`.
|
|
22
|
+
- [x] Add truncation helper.
|
|
23
|
+
- [x] Apply focus and phase styling.
|
|
24
|
+
- [x] Write tests.
|
|
25
|
+
- [x] Run `go test`.
|
|
26
|
+
|
|
27
|
+
## Context Log
|
|
28
|
+
|
|
29
|
+
Files read: `internal/board/column.go`, `internal/board/column_test.go`, `internal/styles/styles.go`, `internal/styles/palette.go`, `internal/data/task.go`, `.savepoint/releases/v1/epics/E04-board-components/Design.md`, `AGENTS.md`, `.savepoint/router.md`
|
|
30
|
+
|
|
31
|
+
Estimated input tokens: ~4 000
|
|
32
|
+
|
|
33
|
+
Notes: Added `Dim`/`Dim256`/`Dim16` palette constants and `Card`, `CardFocused`, `CardMeta`, `GlyphBuild`, `GlyphTest`, `GlyphAudit` styles. `truncate` helper is package-private in `board`. All 13 tests pass. `go build ./...`, `go vet ./...`, `go test ./...` green.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E04-board-components/T003-epic-panel
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Render epic sidebar on wide screens, dropdown on narrow"
|
|
5
|
+
depends_on: [E04-board-components/T002-card]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T003: Epic Panel
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- >=120 cols: left sidebar with epic list, active indicator.
|
|
13
|
+
- <120 cols: `e` key opens epic dropdown overlay.
|
|
14
|
+
- Active epic marked with indicator.
|
|
15
|
+
- Selecting an epic updates board tasks.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Create `internal/board/epic_panel.go`.
|
|
20
|
+
- [x] Implement sidebar rendering (`RenderEpicSidebar`).
|
|
21
|
+
- [x] Implement dropdown overlay (`RenderEpicDropdown`).
|
|
22
|
+
- [x] Wire into Update loop (`e` key, overlay nav, enter/esc).
|
|
23
|
+
- [x] Write tests (`epic_panel_test.go`, 25 tests).
|
|
24
|
+
- [x] Run `go test`.
|
|
25
|
+
|
|
26
|
+
## Context Log
|
|
27
|
+
|
|
28
|
+
**Files read:** model.go, view.go, update.go, layout.go, card.go, column.go, board.go, styles/styles.go, styles/palette.go, card_test.go, view_test.go, update_test.go, model_test.go
|
|
29
|
+
|
|
30
|
+
**Estimated input tokens:** ~6000
|
|
31
|
+
|
|
32
|
+
**Notes:**
|
|
33
|
+
- Added `OverlayEpic` to `OverlayType` constants in model.go.
|
|
34
|
+
- Added `Epics []string` and `EpicCursor int` to Model struct; `NewModel` signature unchanged — callers set Epics directly.
|
|
35
|
+
- `RenderEpicSidebar` falls back to showing `selected` as sole entry when `Epics` is nil; shows `(none)` if both empty.
|
|
36
|
+
- `e` key only opens dropdown when `m.Width < breakpointWide` (120); sidebar is always visible on wide screens.
|
|
37
|
+
- Overlay blocks column nav (`l`/`h`) while open; `esc`/`q` both close it.
|
|
38
|
+
- `lipgloss.Place` centers dropdown on full terminal; board not visible behind (limitation of lipgloss — noted as drift).
|
|
39
|
+
- `defaultTermH = 24` added to view.go for zero-Height fallback.
|
|
40
|
+
- `renderEpicPanel` stub in view.go replaced with `RenderEpicSidebar` call.
|
|
41
|
+
- `fmt` import in view.go retained (still used by `renderStatus`).
|
|
42
|
+
|
|
43
|
+
**Quality gates:** `go build ./...` ✓ `go vet ./...` ✓ `go test ./...` ✓ (all pass)
|
|
44
|
+
|
|
45
|
+
## Drift Notes
|
|
46
|
+
|
|
47
|
+
- Drift: `internal/board/epic_panel.go` added, not yet in Codebase Map.
|
|
48
|
+
- Drift: Model.Epics and Model.EpicCursor fields added — Design.md data model section may need update.
|
|
49
|
+
- Drift: Board-visible-behind overlay not implemented (lipgloss limitation); Design.md "board visible behind" note is aspirational.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E04-board-components/T004-detail-overlay
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Render task detail as centered overlay with board behind"
|
|
5
|
+
depends_on: [E04-board-components/T003-epic-panel]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T004: Detail Overlay
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `Enter` opens detail overlay for focused task.
|
|
13
|
+
- `Esc` closes overlay.
|
|
14
|
+
- Overlay shows: ID, title, epic, release, status, phase, description, acceptance criteria.
|
|
15
|
+
- Board visible and dimmed behind overlay.
|
|
16
|
+
- Overlay width = min(terminal width - 4, 80).
|
|
17
|
+
|
|
18
|
+
## Implementation Plan
|
|
19
|
+
|
|
20
|
+
- [x] Create `internal/board/detail.go`.
|
|
21
|
+
- [x] Implement `RenderDetail(task, overlayW)`.
|
|
22
|
+
- [x] Add board dimming (`dimLines` + `overlayOnBase` in `view.go`).
|
|
23
|
+
- [x] Wire Enter/Esc into Update loop.
|
|
24
|
+
- [x] Write tests.
|
|
25
|
+
- [x] Run `go test`.
|
|
26
|
+
|
|
27
|
+
## Context Log
|
|
28
|
+
|
|
29
|
+
**Files read:** model.go, update.go, view.go, epic_panel.go, card.go, layout.go, update_test.go, view_test.go, epic_panel_test.go, internal/data/task.go, internal/styles/styles.go, internal/styles/palette.go, go.mod
|
|
30
|
+
|
|
31
|
+
**Estimated input tokens:** ~8 000
|
|
32
|
+
|
|
33
|
+
**Notes:**
|
|
34
|
+
- `overlayOnBase` uses `charmbracelet/x/ansi.Truncate` for ANSI-aware left truncation; each base line is independently faint-wrapped so truncation doesn't inherit prior escape states.
|
|
35
|
+
- `overlayWidth` clamps to `min(termW-4, 80)` with a floor of 20.
|
|
36
|
+
- `phaseLabel` lives in `detail.go`; `focusedTask`, `overlayWidth`, `dimLines`, `overlayOnBase` live in `view.go`.
|
|
37
|
+
- `OverlayDetail` constant added to `model.go`; `styles.DetailOverlay` added to `styles.go`.
|
|
38
|
+
- No drift: all new files/exports match the Codebase Map entry for `internal/board/detail.go`.
|
|
39
|
+
|
|
40
|
+
**Quality gates:** `go build ./...` ✓ · `go vet ./...` ✓ · `go test ./...` ✓ (board: 32 tests pass)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E04-board-components/T005-release-dropdown
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Render release selector dropdown"
|
|
5
|
+
depends_on: [E04-board-components/T004-detail-overlay]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T005: Release Dropdown
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `r` opens release dropdown.
|
|
13
|
+
- Shows list of releases with current one marked.
|
|
14
|
+
- Selecting a release updates board.
|
|
15
|
+
- `Esc` closes without selecting.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Add `OverlayRelease` to `model.go` overlay type constants.
|
|
20
|
+
- [x] Add `Releases []string` and `ReleaseCursor int` fields to `Model`.
|
|
21
|
+
- [x] Create `internal/board/release.go` with `RenderReleaseDropdown` and `releaseIndex`.
|
|
22
|
+
- [x] Wire `r` key in `update.go` to open `OverlayRelease` and set cursor.
|
|
23
|
+
- [x] Handle `up`/`down`/`enter`/`esc` for release overlay in `updateOverlay`.
|
|
24
|
+
- [x] Render `OverlayRelease` in `view.go`.
|
|
25
|
+
- [x] Write `release_test.go` covering render, nav, select, and esc.
|
|
26
|
+
- [x] Run `go test ./internal/board/...` — all pass.
|
|
27
|
+
- [x] Run `go build ./... && go vet ./... && go test ./...` — all pass.
|
|
28
|
+
|
|
29
|
+
## Context Log
|
|
30
|
+
|
|
31
|
+
Files read: model.go, update.go, view.go, epic_panel.go, board.go, update_test.go, model_test.go
|
|
32
|
+
Estimated input tokens: ~2500
|
|
33
|
+
Notes: Mirrored epic dropdown pattern exactly. `r` always opens regardless of screen width (unlike `e` which is narrow-only). Quality gates: build OK, vet OK, all tests pass.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E04-board-components/T006-help-overlay
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Render help overlay with keyboard shortcuts"
|
|
5
|
+
depends_on: [E04-board-components/T005-release-dropdown]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T006: Help Overlay
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `?` opens help overlay.
|
|
13
|
+
- Shows all keyboard shortcuts.
|
|
14
|
+
- `Esc` or `q` closes help.
|
|
15
|
+
- Overlay renders centered.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Create `internal/board/help.go`.
|
|
20
|
+
- [x] Implement help content.
|
|
21
|
+
- [x] Wire `?` key into Update loop.
|
|
22
|
+
- [x] Write tests.
|
|
23
|
+
- [x] Run `go test`.
|
|
24
|
+
|
|
25
|
+
## Context Log
|
|
26
|
+
|
|
27
|
+
Files read: `.savepoint/router.md`, `.savepoint/releases/v1/epics/E04-board-components/Design.md`, this task file, `agent-skills/ink-tui-design/SKILL.md`, `.savepoint/visual-identity.md`, `internal/board/model.go`, `internal/board/update.go`, `internal/board/view.go`, `internal/board/detail.go`, `internal/board/epic_panel.go`, `internal/board/release.go`, `internal/board/update_test.go`, `internal/board/view_test.go`, `internal/board/detail_test.go`, `internal/board/release_test.go`, `internal/styles/styles.go`, `go.mod`, `Makefile`
|
|
28
|
+
Estimated input tokens: ~8500
|
|
29
|
+
Notes: Added help overlay renderer, `?` key handling, centered overlay rendering over dimmed board, and focused render/update/view tests. Focused test `go test ./internal/board/...` initially failed in the sandbox because Go could not access the external build cache; rerun with approved cache access passed. Quality gates: `go build ./...` pass, `go vet ./...` pass, `go test ./...` pass.
|
|
30
|
+
|
|
31
|
+
## Drift Notes
|
|
32
|
+
|
|
33
|
+
- Drift: `internal/board/help.go` added, not yet in Codebase Map.
|
|
34
|
+
- Drift: `internal/board/help_test.go` added, not yet in Codebase Map.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: epic-design
|
|
3
|
+
status: planned
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Epic E05: Phase Transitions
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Enable task status and phase mutations from the board. Space advances, backspace retreats. Gates enforce phase order. Writes update task frontmatter and router state.
|
|
11
|
+
|
|
12
|
+
## What this epic adds
|
|
13
|
+
|
|
14
|
+
- `Space` advances task through phases: planned → build → test → audit → done.
|
|
15
|
+
- `Backspace` retreats: done → audit → test → build → planned.
|
|
16
|
+
- Gate enforcement: cannot skip phases; cannot reach done without audit.
|
|
17
|
+
- Task frontmatter write-back: update `status` and `phase` fields in the `.md` file.
|
|
18
|
+
- Optimistic mtime conflict detection before writes.
|
|
19
|
+
- Router write-back: update `router.md` Current state when epic/release changes.
|
|
20
|
+
|
|
21
|
+
## Definition of Done
|
|
22
|
+
|
|
23
|
+
- Space/backspace correctly walk the phase chain.
|
|
24
|
+
- Gate blocks illegal transitions with a visible message.
|
|
25
|
+
- Task `.md` files are updated with new status/phase.
|
|
26
|
+
- Mtime conflicts are detected and reported (no silent overwrites).
|
|
27
|
+
- Router state updates when switching epic or release.
|
|
28
|
+
- All transition tests pass.
|
|
29
|
+
- `go test ./...` passes.
|
|
30
|
+
|
|
31
|
+
## Components and files
|
|
32
|
+
|
|
33
|
+
| Path | Purpose |
|
|
34
|
+
|------|---------|
|
|
35
|
+
| `internal/board/transitions.go` | Phase transition logic, gates |
|
|
36
|
+
| `internal/data/write.go` | Task frontmatter write-back |
|
|
37
|
+
| `internal/data/write_test.go` | Write tests |
|
|
38
|
+
| `internal/board/transitions_test.go` | Gate and transition tests |
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E05-phase-transitions/T001-phase-stepping
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Space advances, Backspace retreats through phases"
|
|
5
|
+
depends_on: [E04-board-components/T006-help-overlay]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T001: Phase Stepping
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `Space` on planned task moves to in_progress/build.
|
|
13
|
+
- `Space` on in_progress advances phase: build → test → audit → done.
|
|
14
|
+
- `Backspace` retreats: done → audit → test → build → planned.
|
|
15
|
+
- Illegal transitions are blocked (governed by gates).
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Create `internal/board/transitions.go`.
|
|
20
|
+
- [x] Implement `Advance(task)` and `Retreat(task)`.
|
|
21
|
+
- [x] Wire Space/Backspace into Update loop.
|
|
22
|
+
- [x] Write tests.
|
|
23
|
+
- [x] Run `go test`.
|
|
24
|
+
|
|
25
|
+
## Context Log
|
|
26
|
+
|
|
27
|
+
- Files read: AGENTS.md, internal/data/task.go, internal/board/update.go
|
|
28
|
+
- Quality gates: `go test ./...` passed.
|
|
29
|
+
- Notes: Implemented Advance and Retreat logic. Mapped space and backspace keys to trigger transitions. Tests written and passing.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E05-phase-transitions/T002-gates
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Enforce phase order: cannot skip, must reach audit before done"
|
|
5
|
+
depends_on: [E05-phase-transitions/T001-phase-stepping]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T002: Gates
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Cannot advance build → audit (must pass test).
|
|
13
|
+
- Cannot advance audit → done if dependencies not done.
|
|
14
|
+
- Retreat transitions are always allowed.
|
|
15
|
+
- Blocked transitions show a message in the status bar.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Add `CanAdvance(task, allTasks)` to transitions.go.
|
|
20
|
+
- [x] Add dependency check.
|
|
21
|
+
- [x] Add phase adjacency check.
|
|
22
|
+
- [x] Return reason string on block.
|
|
23
|
+
- [x] Write tests.
|
|
24
|
+
- [x] Run `go test`.
|
|
25
|
+
|
|
26
|
+
## Context Log
|
|
27
|
+
|
|
28
|
+
- **Files read:** transitions.go, transitions_test.go, update.go, model.go, view.go, task.go, model_test.go, update_test.go
|
|
29
|
+
- **Input tokens (estimate):** ~3,200
|
|
30
|
+
- **Quality gates:** `go build ./...` ok, `go vet ./...` ok, `go test ./internal/board/...` 107/107 pass
|
|
31
|
+
- **Notes:** No drift — all changes in existing files within `internal/board/`.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E05-phase-transitions/T003-write-task
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Write updated status/phase back to task markdown files"
|
|
5
|
+
depends_on: [E05-phase-transitions/T002-gates]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T003: Write Task
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Task `.md` file is updated with new `status` and `phase`.
|
|
13
|
+
- Mtime is checked before write; conflict reported if changed.
|
|
14
|
+
- Phase field removed when status is planned or done.
|
|
15
|
+
- Backup not required (git handles history).
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Create `internal/data/write.go`.
|
|
20
|
+
- [x] Implement `WriteTaskStatus(path, task, expectedMtime)`.
|
|
21
|
+
- [x] Read file, parse frontmatter, update fields.
|
|
22
|
+
- [x] Check mtime, write back.
|
|
23
|
+
- [x] Write tests.
|
|
24
|
+
- [x] Run `go test`.
|
|
25
|
+
|
|
26
|
+
## Context Log
|
|
27
|
+
|
|
28
|
+
- **Files read:** internal/data/task.go, internal/data/parser.go, internal/data/errors.go, internal/data/write.go, internal/data/write_test.go, internal/board/transitions.go, internal/board/update.go, internal/board/model.go, internal/data/router.go, internal/data/config.go
|
|
29
|
+
- **Estimated input tokens:** ~4,500
|
|
30
|
+
- **Quality gates:** `go build ./...` ok, `go vet ./...` ok, `go test ./...` — 7/7 new tests pass, all existing tests pass
|
|
31
|
+
- **Notes:** Drift: `internal/data/write.go` and `internal/data/write_test.go` added, mapped under E02-data-readers umbrella in Codebase Map but belong to E05-phase-transitions — next audit should reconcile.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E05-phase-transitions/T004-write-router
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Write router.md Current state when epic or release changes"
|
|
5
|
+
depends_on: [E05-phase-transitions/T003-write-task]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T004: Write Router
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Selecting a new epic updates `router.md` epic field.
|
|
13
|
+
- Selecting a new release updates `router.md` release field.
|
|
14
|
+
- Mtime check before write.
|
|
15
|
+
- Next action string preserved.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Add `WriteRouterState(root, state)` to `internal/data/write.go`.
|
|
20
|
+
- [x] Read router.md, replace yaml block.
|
|
21
|
+
- [x] Check mtime, write back.
|
|
22
|
+
- [x] Wire into epic/release selection in Update loop.
|
|
23
|
+
- [x] Write tests.
|
|
24
|
+
- [x] Run `go test`.
|
|
25
|
+
|
|
26
|
+
## Context Log
|
|
27
|
+
|
|
28
|
+
- **Files read:** internal/data/router.go, internal/data/write.go, internal/data/write_test.go, internal/data/parser.go, internal/data/task.go, internal/data/discover.go, internal/data/config.go, internal/data/errors.go, internal/board/model.go, internal/board/update.go, internal/board/board.go, internal/board/update_test.go, internal/board/model_test.go, internal/board/transitions.go, internal/board/transitions_test.go
|
|
29
|
+
- **Estimated input tokens:** ~7,200
|
|
30
|
+
- **Quality gates:** `go build ./...` ok, `go vet ./...` ok, `go test ./...` — 17/17 new tests pass (4 WriteRouterState tests + 13 existing), all packages pass, board tests pass, data tests pass
|
|
31
|
+
- **Notes:** Drift: `Model.Root` field added to board, not yet in Codebase Map. Next audit should reconcile.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: epic-design
|
|
3
|
+
status: planned
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Epic E07: Atari-Noir Layout Uplift
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Update the existing TUI to align with the **Atari-Noir SavePoint design system**. This is a visual and layout uplift focused on restraint, clarity, and control, preserving existing functionality while eliminating visual noise and strictly adhering to the new color and layout rules.
|
|
11
|
+
|
|
12
|
+
## What this epic adds
|
|
13
|
+
|
|
14
|
+
- Centralized Atari-Noir color system in `palette.go`.
|
|
15
|
+
- Restructured `styles.go` mapped to exact usage rules.
|
|
16
|
+
- Static header component: `▣ S A V E P O I N T`.
|
|
17
|
+
- Static footer component: `PLAN │ BUILD │ AUDIT`.
|
|
18
|
+
- Full-width subtle horizontal dividers.
|
|
19
|
+
- Refined component styling (columns, cards, epic panel) to remove unnecessary borders and improve spacing.
|
|
20
|
+
|
|
21
|
+
## Definition of Done
|
|
22
|
+
|
|
23
|
+
- All colors match the Atari-Noir strict specification.
|
|
24
|
+
- Header renders correctly with no wrapping.
|
|
25
|
+
- Footer displays PLAN / BUILD / AUDIT cleanly without dynamic status text.
|
|
26
|
+
- Full-width dividers frame the content.
|
|
27
|
+
- Cards/panels feel like surfaces, not text blocks.
|
|
28
|
+
- Spacing is consistent and components breathe.
|
|
29
|
+
- Focus/selection is obvious through position and Atari Orange borders, not relying solely on color text changes.
|
|
30
|
+
- Existing functionality remains 100% intact.
|
|
31
|
+
|
|
32
|
+
## Components and files
|
|
33
|
+
|
|
34
|
+
| Path | Purpose |
|
|
35
|
+
|------|---------|
|
|
36
|
+
| `internal/styles/palette.go` | Define strict hex values |
|
|
37
|
+
| `internal/styles/styles.go` | Map styles to new usage rules |
|
|
38
|
+
| `internal/board/view.go` | Implement header, footer, dividers |
|
|
39
|
+
| `internal/board/layout.go` | Adjust layout height calculations |
|
|
40
|
+
| `internal/board/column.go` | Refine column styling and spacing |
|
|
41
|
+
| `internal/board/card.go` | Refine card surface and focus state |
|
|
42
|
+
| `internal/board/epic_panel.go` | Refine epic panel layout |
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E06-atari-noir-layout/T001-color-system
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Implement Atari-Noir Color System in palette and styles"
|
|
5
|
+
depends_on: []
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T001: Implement Atari-Noir Color System
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- `internal/styles/palette.go` updated with exact hex values for Background, Surface, Surface 2, Border, Border Subtle, Primary Text, Atari Orange, NPP Green, Vibe Purple.
|
|
13
|
+
- Legacy colors or gradients removed from `palette.go`.
|
|
14
|
+
- `internal/styles/styles.go` maps styles according to usage rules (e.g., Background is dark `#121212`, Primary text is `#F0E6DA`, Atari Orange `#FC6323` for active/focus, Vibe Purple `#B1A1DF` for metadata, NPP Green `#A4C639` for success).
|
|
15
|
+
- No large bright background fills or mixed accent colors in a single element exist in the style definitions.
|
|
16
|
+
|
|
17
|
+
## Implementation Plan
|
|
18
|
+
|
|
19
|
+
- [x] Update `internal/styles/palette.go` with Atari-Noir hex, ANSI256, and ANSI16 values.
|
|
20
|
+
- [x] Refactor `internal/styles/styles.go` variables to use the updated palette constants strictly.
|
|
21
|
+
- [x] Remove unused or conflicting colors.
|
|
22
|
+
|
|
23
|
+
## Context Log
|
|
24
|
+
|
|
25
|
+
Files read:
|
|
26
|
+
- `internal/styles/palette.go`
|
|
27
|
+
- `internal/styles/styles.go`
|
|
28
|
+
- `.savepoint/visual-identity.md`
|
|
29
|
+
- `.savepoint/router.md`
|
|
30
|
+
- `E06-atari-noir-layout/Design.md`
|
|
31
|
+
|
|
32
|
+
Estimated input tokens: 2400
|
|
33
|
+
|
|
34
|
+
Notes:
|
|
35
|
+
- palette.go already contained correct Atari-Noir hex/256/16 values matching the visual identity spec — no changes needed.
|
|
36
|
+
- styles.go already referenced palette constants strictly — no circular refs or string literals.
|
|
37
|
+
- No legacy colors or gradients found in palette.go.
|
|
38
|
+
- No large bright background fills or mixed accent colors found in styles.go.
|
|
39
|
+
- Quality gates: `go build ./...` pass, `go test ./...` pass (all cached), `go vet` pass.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: E06-atari-noir-layout/T002-header-and-dividers
|
|
3
|
+
status: done
|
|
4
|
+
objective: "Build the SavePoint Header and horizontal dividers"
|
|
5
|
+
depends_on: ["E06-atari-noir-layout/T001-color-system"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# T002: Build SavePoint Header and Dividers
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
|
|
12
|
+
- Header renders exactly `▣ S A V E P O I N T` at the top of the TUI.
|
|
13
|
+
- Icon `▣` is styled with Atari Orange.
|
|
14
|
+
- Text `S A V E P O I N T` is Primary Text, uppercase, with spacing between letters.
|
|
15
|
+
- Horizontal dividers `────────────────────────────────────────────────────────` are added below the header.
|
|
16
|
+
- Divider color is strictly Border Subtle.
|
|
17
|
+
- The header renders cleanly without wrapping, even in narrow terminals.
|
|
18
|
+
- No additional icons or animations are present in the header.
|
|
19
|
+
|
|
20
|
+
## Implementation Plan
|
|
21
|
+
|
|
22
|
+
- [x] Update `internal/board/view.go` to render the specific header string.
|
|
23
|
+
- [x] Add logic in `internal/board/view.go` to insert the top horizontal divider.
|
|
24
|
+
- [x] Adjust `internal/board/layout.go` / `internal/board/view.go` calculations if needed so the board fits below the header+divider.
|
|
25
|
+
|
|
26
|
+
## Context Log
|
|
27
|
+
|
|
28
|
+
Files read:
|
|
29
|
+
- `.savepoint/router.md`
|
|
30
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/Design.md`
|
|
31
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T002-header-and-dividers.md`
|
|
32
|
+
- `.savepoint/releases/v1/epics/E06-atari-noir-layout/tasks/T001-color-system.md`
|
|
33
|
+
- `.savepoint/visual-identity.md`
|
|
34
|
+
- `internal/styles/palette.go`
|
|
35
|
+
- `internal/styles/styles.go`
|
|
36
|
+
- `internal/board/view.go`
|
|
37
|
+
- `internal/board/view_test.go`
|
|
38
|
+
- `internal/board/layout.go`
|
|
39
|
+
- `internal/board/epic_panel_test.go`
|
|
40
|
+
- `internal/board/release_test.go`
|
|
41
|
+
|
|
42
|
+
Estimated input tokens: ~4500
|
|
43
|
+
|
|
44
|
+
Notes:
|
|
45
|
+
- `layout.go` needed no changes — `lipgloss.JoinVertical` naturally accommodates the extra divider line without explicit height accounting.
|
|
46
|
+
- The old `Header` style (orange, bold, padding) was replaced with `HeaderIcon` (orange, bold) and `HeaderText` (primary text) to support two-tone header rendering.
|
|
47
|
+
- `Divider` style added with `BorderSubtle` foreground for quiet full-width separators.
|
|
48
|
+
- Quality gates: `go build ./...` pass, `go test ./...` pass, `go vet ./...` pass.
|
|
49
|
+
|
|
50
|
+
## Drift Notes
|
|
51
|
+
|
|
52
|
+
- Drift: `internal/styles/palette.go` and `internal/styles/styles.go` not yet in Codebase Map — pre-existing omission. These are the Atari-Noir color/style modules active across all board rendering.
|