savepoint 1.0.2 → 1.0.4
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 +12 -1
- package/.github/workflows/ci.yml +20 -0
- package/.golangci.yml +11 -0
- package/.savepoint/Design.md +40 -38
- package/.savepoint/{audit/v1.1/E02-cross-platform-compatibility/proposals.md → releases/v1.1/epics/E02-cross-platform-compatibility/E02-Audit.md} +48 -38
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Audit.md +195 -0
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/E03-Detail.md +14 -1
- package/.savepoint/releases/v1.1/epics/E03-ui-visual-refinement/tasks/T006-forced-256-color-profile.md +3 -3
- package/.savepoint/{audit/v1.1/E04-epic-navigation/proposals.md → releases/v1.1/epics/E04-epic-navigation/E04-Audit.md} +65 -54
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Audit.md +237 -0
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/E05-Detail.md +25 -16
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T001-update-agents-md.md +17 -6
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T002-update-router-md.md +15 -5
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T003-update-design-md.md +19 -5
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T004-implement-m-hotkey.md +11 -1
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T005-update-help-overlay.md +9 -6
- package/.savepoint/releases/v1.1/epics/E05-tasking-permissions/tasks/T006-tests-and-quality-gates.md +29 -13
- package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Audit.md +56 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/E06-Detail.md +63 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T005-proposals.md +44 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T007-apply-close.md +35 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T009-integration.md +40 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T010-audit-file-migration.md +45 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T011-model-tab-state.md +26 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T012-epic-audit-render.md +33 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T013-handle-tab-keys.md +34 -0
- package/.savepoint/releases/v1.1/epics/E06-audit-command/tasks/T014-tab-indicator.md +33 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Audit.md +336 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/E07-Detail.md +61 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T001-cli-entrypoint.md +37 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T002-target-validation.md +28 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T003-scaffold-writer.md +46 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T004-atomic-writes.md +27 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T005-magic-prompt.md +25 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T006-clipboard.md +26 -0
- package/.savepoint/releases/v1.1/epics/E07-init-command/tasks/T007-integration-test.md +26 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Audit.md +333 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/E08-Detail.md +68 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T001-cli-entrypoint.md +26 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T002-non-tty-fallback.md +27 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T003-tui-app-shell.md +28 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T004-board-model.md +29 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T005-detail-pane.md +27 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T006-status-transitions.md +29 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T007-theme-fallbacks.md +29 -0
- package/.savepoint/releases/v1.1/epics/E08-board-command/tasks/T008-integration-test.md +27 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Audit.md +207 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/E09-Detail.md +65 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T001-cli-entrypoint.md +24 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T002-config-router-validation.md +28 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T003-structure-checks.md +29 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T004-dependency-checks.md +27 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T005-audit-orphan-checks.md +28 -0
- package/.savepoint/releases/v1.1/epics/E09-doctor-command/tasks/T006-quality-gates-report.md +31 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/E11-Detail.md +36 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T001-debug-logging.md +25 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T002-increase-debounce.md +21 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T003-error-handling.md +22 -0
- package/.savepoint/releases/v1.1/epics/E11-board-refresh-fix/tasks/T004-test-verify.md +29 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Audit.md +444 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/E12-Detail.md +45 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T001-default-phase.md +35 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T002-default-status.md +19 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T003-better-errors.md +29 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T004-validate-on-write.md +25 -0
- package/.savepoint/releases/v1.1/epics/E12-validation-fix/tasks/T005-tests.md +37 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Audit.md +118 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/E13-Detail.md +73 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T001-safe-cleanup.md +66 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T002-bug-fixes.md +35 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T003-centralize-duplication.md +60 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T004-infrastructure.md +33 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T005-decompose-update.md +37 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T006-async-io.md +40 -0
- package/.savepoint/releases/v1.1/epics/E13-audit-remediation/tasks/T007-test-coverage.md +37 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Audit.md +267 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/E14-Detail.md +54 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T001-group-model.md +39 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T002-data-interfaces.md +42 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T003-discover-orphans.md +33 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T004-epic-panel-headings.md +35 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T005-shell-tokenization.md +27 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T006-unify-enums.md +29 -0
- package/.savepoint/releases/v1.1/epics/E14-structural-improvements/tasks/T007-testutil-package.md +28 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Audit.md +272 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/E15-Detail.md +60 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T001-benchmarks.md +31 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T002-fuzz-targets.md +34 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T003-debug-flag.md +30 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T004-dist-checksums.md +27 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T005-windows-targets.md +28 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T006-abbreviation-splitting.md +26 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T007-root-test-allowlist.md +33 -0
- package/.savepoint/releases/v1.1/epics/E15-hardening/tasks/T008-ci-and-release-automation.md +46 -0
- package/.savepoint/releases/v1.1/epics/_archived/T001-cli-entrypoint.md +25 -0
- package/.savepoint/releases/v1.1/epics/_archived/T002-quality-gates.md +27 -0
- package/.savepoint/releases/v1.1/epics/_archived/T003-snapshot.md +27 -0
- package/.savepoint/releases/v1.1/epics/_archived/T004-ai-reconcile.md +29 -0
- package/.savepoint/releases/v1.1/epics/_archived/T006-tui-review.md +31 -0
- package/.savepoint/releases/v1.1/epics/_archived/T008-skip-handling.md +34 -0
- package/.savepoint/releases/v1.1/v1.1-PRD.md +67 -7
- package/.savepoint/router.md +10 -17
- package/AGENTS.md +39 -24
- package/Makefile +3 -1
- package/README.md +0 -1
- package/agent-skills/savepoint-audit/SKILL.md +86 -34
- package/agent-skills/savepoint-build-task/SKILL.md +7 -2
- package/agent-skills/savepoint-create-plan/SKILL.md +7 -2
- package/agent-skills/savepoint-create-task/SKILL.md +44 -31
- package/agent-skills/savepoint-draft-prd/SKILL.md +7 -2
- package/agent-skills/savepoint-system-design/SKILL.md +7 -2
- package/agent_skills_test.go +91 -0
- package/cmd/board.go +59 -0
- package/cmd/board_test.go +137 -0
- package/cmd/doctor.go +53 -0
- package/cmd/doctor_test.go +146 -0
- package/cmd/init.go +63 -0
- package/cmd/init_test.go +104 -0
- package/internal/board/board.go +44 -36
- package/internal/board/board_test.go +27 -82
- package/internal/board/card.go +43 -23
- package/internal/board/card_test.go +74 -5
- package/internal/board/column.go +75 -15
- package/internal/board/column_test.go +76 -2
- package/internal/board/debug.go +26 -0
- package/internal/board/debug_test.go +108 -0
- package/internal/board/detail.go +33 -47
- package/internal/board/detail_test.go +48 -0
- package/internal/board/epic_panel.go +120 -22
- package/internal/board/epic_panel_test.go +302 -17
- package/internal/board/help.go +1 -0
- package/internal/board/help_test.go +1 -0
- package/internal/board/integration_test.go +266 -0
- package/internal/board/interfaces.go +65 -0
- package/internal/board/interfaces_test.go +114 -0
- package/internal/board/io.go +93 -0
- package/internal/board/model.go +79 -118
- package/internal/board/plain.go +88 -0
- package/internal/board/plain_test.go +117 -0
- package/internal/board/release.go +1 -9
- package/internal/board/release_test.go +6 -6
- package/internal/board/status.go +4 -4
- package/internal/board/theme.go +24 -0
- package/internal/board/theme_test.go +31 -0
- package/internal/board/transitions.go +113 -88
- package/internal/board/transitions_test.go +164 -141
- package/internal/board/tui.go +32 -0
- package/internal/board/update.go +344 -215
- package/internal/board/update_test.go +326 -18
- package/internal/board/util.go +76 -0
- package/internal/board/view.go +31 -28
- package/internal/board/view_test.go +74 -2
- package/internal/board/watch.go +41 -5
- package/internal/buildtool/main.go +45 -15
- package/internal/buildtool/main_test.go +224 -0
- package/internal/data/config.go +17 -3
- package/internal/data/config_test.go +49 -0
- package/internal/data/discover.go +26 -0
- package/internal/data/discover_test.go +34 -10
- package/internal/data/errors.go +4 -0
- package/internal/data/fuzz_test.go +75 -0
- package/internal/data/lifecycle.go +13 -6
- package/internal/data/lifecycle_test.go +14 -11
- package/internal/data/parser.go +22 -6
- package/internal/data/parser_test.go +31 -7
- package/internal/data/task.go +0 -9
- package/internal/data/testdata/fuzz/FuzzSplitFrontmatterBody/68eb66b0fe91e7e3 +2 -0
- package/internal/data/write.go +88 -11
- package/internal/data/write_test.go +167 -0
- package/internal/doctor/checks.go +567 -0
- package/internal/doctor/checks_test.go +716 -0
- package/internal/doctor/gates.go +193 -0
- package/internal/doctor/gates_test.go +166 -0
- package/internal/doctor/interfaces.go +64 -0
- package/internal/doctor/interfaces_test.go +104 -0
- package/internal/doctor/repairs.go +80 -0
- package/internal/doctor/repairs_test.go +81 -0
- package/internal/doctor/report.go +157 -0
- package/internal/doctor/report_test.go +89 -0
- package/internal/init/clipboard.go +146 -0
- package/internal/init/clipboard_test.go +74 -0
- package/internal/init/install.go +16 -0
- package/internal/init/integration_test.go +197 -0
- package/internal/init/prompt.go +14 -0
- package/internal/init/prompt_test.go +77 -0
- package/internal/init/scaffold.go +59 -0
- package/internal/init/scaffold_test.go +179 -0
- package/internal/init/template_freshness_test.go +56 -0
- package/internal/init/validate.go +85 -0
- package/internal/init/validate_test.go +141 -0
- package/internal/init/write.go +73 -0
- package/internal/init/write_test.go +91 -0
- package/internal/styles/styles_test.go +133 -0
- package/internal/testutil/fixture.go +113 -0
- package/internal/testutil/fs.go +26 -0
- package/main.go +120 -4
- package/package.json +2 -2
- package/project-audit/audit_report_glm_5.1.md +411 -0
- package/project-audit/audit_report_opus_4.6.md +406 -0
- package/project-audit/consolidated-audit-report.md +456 -0
- package/templates/project/.savepoint/Design.md +2 -2
- package/templates/project/.savepoint/router.md +10 -10
- package/templates/project/AGENTS.md +33 -21
- package/templates/project/agent-skills/savepoint-audit/SKILL.md +87 -0
- package/templates/project/agent-skills/savepoint-build-task/SKILL.md +44 -0
- package/templates/project/agent-skills/savepoint-create-plan/SKILL.md +33 -0
- package/templates/project/agent-skills/savepoint-create-task/SKILL.md +44 -0
- package/templates/project/agent-skills/savepoint-draft-prd/SKILL.md +37 -0
- package/templates/project/agent-skills/savepoint-system-design/SKILL.md +38 -0
- package/templates/prompts/audit-reconciliation.prompt.md +33 -28
- package/templates/prompts/design.prompt.md +3 -1
- package/.savepoint/audit/v1/E01/proposals.md +0 -168
- package/.savepoint/audit/v1/E01/snapshot.md +0 -78
- package/.savepoint/audit/v1/E01-go-setup/proposals.md +0 -166
- package/.savepoint/audit/v1/E01-go-setup/snapshot.md +0 -71
- package/.savepoint/audit/v1/E01-scaffolding/proposals/AGENTS.md +0 -66
- package/.savepoint/audit/v1/E01-scaffolding/proposals/Design.md +0 -210
- package/.savepoint/audit/v1/E01-scaffolding/proposals/epic-Design.md +0 -117
- package/.savepoint/audit/v1/E01-scaffolding/proposals/quality-review.md +0 -101
- package/.savepoint/audit/v1/E01-scaffolding/snapshot.md +0 -54
- package/.savepoint/audit/v1/E02-data-model/snapshot.md +0 -128
- package/.savepoint/audit/v1/E02-data-readers/proposals.md +0 -123
- package/.savepoint/audit/v1/E02-data-readers/snapshot.md +0 -54
- package/.savepoint/audit/v1/E03-board-tui-core/proposals.md +0 -146
- package/.savepoint/audit/v1/E03-board-tui-core/snapshot.md +0 -57
- package/.savepoint/audit/v1/E03-cli-foundation/snapshot.md +0 -106
- package/.savepoint/audit/v1/E04-board-components/proposals.md +0 -118
- package/.savepoint/audit/v1/E04-board-components/snapshot.md +0 -77
- package/.savepoint/audit/v1/E04-templates-and-prompts/snapshot.md +0 -115
- package/.savepoint/audit/v1/E05-init-command/snapshot.md +0 -125
- package/.savepoint/audit/v1/E05-phase-transitions/proposals.md +0 -83
- package/.savepoint/audit/v1/E05-phase-transitions/snapshot.md +0 -36
- package/.savepoint/audit/v1/E06-atari-noir-layout/proposals.md +0 -130
- package/.savepoint/audit/v1/E06-atari-noir-layout/snapshot.md +0 -84
- package/.savepoint/audit/v1/E06-tui-board/snapshot.md +0 -64
- package/.savepoint/audit/v1/E07-audit-pipeline/snapshot.md +0 -165
- package/.savepoint/audit/v1/E08-board-workflow-cleanup/snapshot.md +0 -65
- package/.savepoint/audit/v1.1/E02-cross-platform-compatibility/snapshot.md +0 -41
- package/.savepoint/audit/v1.1/E04-epic-navigation/snapshot.md +0 -48
- package/ink-cli-ui-design.zip +0 -0
- package/savepoint +0 -0
- package/savepoint.exe +0 -0
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: quality-review
|
|
3
|
-
epic: E01-scaffolding
|
|
4
|
-
reviewed: 2026-04-27
|
|
5
|
-
advisory: true
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Quality Review: E01-scaffolding
|
|
9
|
-
|
|
10
|
-
Semantic review of the scaffolded source against the 10 Code Style rules from `AGENTS.md`. Advisory only — no blocking issues.
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Rule-by-rule findings
|
|
15
|
-
|
|
16
|
-
### 1. One job per file ✓
|
|
17
|
-
|
|
18
|
-
`src/cli.ts` handles argument dispatch and output. `src/version.ts` is a single export. No file does two things.
|
|
19
|
-
|
|
20
|
-
### 2. One-sentence rule ✓
|
|
21
|
-
|
|
22
|
-
`printHelp()` — prints the placeholder help banner. `main()` — dispatches on argv and calls the appropriate output function. Both are one-sentence describable.
|
|
23
|
-
|
|
24
|
-
### 3. Test what branches ⚠ advisory
|
|
25
|
-
|
|
26
|
-
`src/cli.ts` has a branch on `command === "--version"`. The smoke test in `test/smoke.test.ts` only covers `src/version.ts`. The CLI dispatch logic is untested.
|
|
27
|
-
|
|
28
|
-
This is acceptable at scaffold stage — the branches contain only placeholder output and will be replaced in `cli-foundation`. Flag for that epic: when real dispatch lands, cover every branch.
|
|
29
|
-
|
|
30
|
-
### 4. Types are documentation ✓
|
|
31
|
-
|
|
32
|
-
No `any` anywhere in source or test. Return types are declared (`void`). ESLint is configured to error on `@typescript-eslint/no-explicit-any`.
|
|
33
|
-
|
|
34
|
-
### 5. Build, don't speculate ✓
|
|
35
|
-
|
|
36
|
-
No abstraction layers, registries, or plugin systems. Placeholder CLI is minimal: two functions and a `main()` call. Nothing exists for hypothetical future behavior.
|
|
37
|
-
|
|
38
|
-
### 6. Errors at boundaries ✓ (n/a at scaffold)
|
|
39
|
-
|
|
40
|
-
No real system boundaries in placeholder code. The CLI entrypoint reads only `process.argv`, which cannot throw. Acceptable for a placeholder.
|
|
41
|
-
|
|
42
|
-
### 7. One source of truth ✓
|
|
43
|
-
|
|
44
|
-
Version string is declared once in `src/version.ts` and imported by `src/cli.ts`. `package.json` also contains `"version": "0.1.0"` — this is expected (npm requires it there), not a violation. When the CLI reads its own version at runtime, it imports from `src/version.ts`, not from `package.json` directly.
|
|
45
|
-
|
|
46
|
-
> **Recommendation for `cli-foundation`:** consider whether `version.ts` should derive from `package.json` at build time (via `tsup` banner injection or a build-time const) to eliminate the manual sync requirement. Not urgent at `0.1.0`.
|
|
47
|
-
|
|
48
|
-
### 8. Comments explain WHY ✓
|
|
49
|
-
|
|
50
|
-
No comments in any source file. Config files have no inline comments. Good.
|
|
51
|
-
|
|
52
|
-
### 9. Content in data files ✓ (n/a at scaffold)
|
|
53
|
-
|
|
54
|
-
No user-facing content exists yet. Config is in conventional JSON/TS config files.
|
|
55
|
-
|
|
56
|
-
### 10. Small diffs ✓
|
|
57
|
-
|
|
58
|
-
Epic split into 5 tasks with clear separation: package metadata → TypeScript build → test runner → lint/format → verification. Each task touched a minimal set of files with declared dependencies.
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## Structural observations
|
|
63
|
-
|
|
64
|
-
### Dual vitest config files
|
|
65
|
-
|
|
66
|
-
`vitest.config.ts` and `vitest.config.js` are identical. The `.js` variant is the one actually used by `npm test` (required for `--configLoader runner`). The `.ts` variant is unused but exists as the "source of truth" for IDE tooling and type checking.
|
|
67
|
-
|
|
68
|
-
**Recommendation:** document this in a comment in `vitest.config.ts`, or remove it and keep only `.js`. The dual-file situation will confuse future contributors who edit `.ts` expecting it to take effect.
|
|
69
|
-
|
|
70
|
-
### scripts/vitest-preload.cjs complexity
|
|
71
|
-
|
|
72
|
-
The preload script stubs two unrelated things: a `net use` child_process call (Windows network drive detection in Vitest's environment) and `esbuild.transform`/`transformSync` (a secondary Windows compat issue). The stubs are correct and well-structured.
|
|
73
|
-
|
|
74
|
-
**Recommendation:** add a single-line comment per stub explaining the specific Windows issue being worked around (bug reference or symptom description). The WHY is not obvious — a future contributor would not know whether these stubs are still needed after a Vitest upgrade.
|
|
75
|
-
|
|
76
|
-
### test/smoke.test.ts include pattern
|
|
77
|
-
|
|
78
|
-
`vitest.config.js` uses `include: ["test/**/*.test.js"]` but the actual test file is `smoke.test.ts`. This works because Vitest transforms TypeScript to JS before matching, but the pattern is misleading.
|
|
79
|
-
|
|
80
|
-
**Recommendation:** change include to `["test/**/*.test.ts"]` to match what actually exists in the repo.
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## Must Fix Before Close
|
|
85
|
-
|
|
86
|
-
None.
|
|
87
|
-
|
|
88
|
-
## Carry Forward
|
|
89
|
-
|
|
90
|
-
- Add CLI branch tests when real dispatch is implemented in `E03-cli-foundation`.
|
|
91
|
-
- Decide in `E03-cli-foundation` whether `src/version.ts` should derive from `package.json`.
|
|
92
|
-
|
|
93
|
-
## Already Fixed
|
|
94
|
-
|
|
95
|
-
- `vitest.config.ts` now documents the dual-config setup.
|
|
96
|
-
- `scripts/vitest-preload.cjs` now explains the Windows `net use` and esbuild workarounds.
|
|
97
|
-
- Vitest include patterns now match `test/**/*.test.ts`.
|
|
98
|
-
|
|
99
|
-
## Summary
|
|
100
|
-
|
|
101
|
-
No blocking issues remain for `E01-scaffolding`.
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: audit-snapshot
|
|
3
|
-
epic: E01-scaffolding
|
|
4
|
-
created: 2026-04-27
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Audit Snapshot: E01-scaffolding
|
|
8
|
-
|
|
9
|
-
All files are new — this is the first auditable baseline.
|
|
10
|
-
|
|
11
|
-
## Source file tree
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
src/
|
|
15
|
-
cli.ts — CLI entrypoint; placeholder help/version output
|
|
16
|
-
version.ts — single export for package version string
|
|
17
|
-
test/
|
|
18
|
-
smoke.test.ts — Vitest smoke test asserting exported version
|
|
19
|
-
scripts/
|
|
20
|
-
vitest-preload.cjs — Windows runner workaround (stubs net use + esbuild)
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Config / metadata files
|
|
24
|
-
|
|
25
|
-
| Path | Purpose |
|
|
26
|
-
| ------------------- | ------------------------------------------------------------------ |
|
|
27
|
-
| `package.json` | Package name, bin mapping, scripts, devDependencies |
|
|
28
|
-
| `package-lock.json` | Locked dependency graph |
|
|
29
|
-
| `tsconfig.json` | Strict NodeNext TypeScript compiler settings |
|
|
30
|
-
| `tsup.config.ts` | Build entry and output config (ESM, node20) |
|
|
31
|
-
| `vitest.config.ts` | Vitest config (TypeScript source) |
|
|
32
|
-
| `vitest.config.js` | Vitest config (JS copy used by npm test via --configLoader runner) |
|
|
33
|
-
| `eslint.config.js` | Flat ESLint config — rejects `any` in TypeScript |
|
|
34
|
-
| `.prettierrc.json` | Prettier rules (double quotes, trailing commas) |
|
|
35
|
-
| `.prettierignore` | Excludes dist/, coverage/, node_modules/ from formatting |
|
|
36
|
-
| `.gitignore` | Excludes generated artifacts and local env files |
|
|
37
|
-
| `README.md` | Minimal development README |
|
|
38
|
-
| `LICENSE` | MIT license |
|
|
39
|
-
|
|
40
|
-
## Quality gates (all passed)
|
|
41
|
-
|
|
42
|
-
- `npm run build` ✓
|
|
43
|
-
- `npm run typecheck` ✓
|
|
44
|
-
- `npm run lint` ✓
|
|
45
|
-
- `npm run format:check` ✓
|
|
46
|
-
- `npm test` ✓
|
|
47
|
-
|
|
48
|
-
## Deviations from epic Design
|
|
49
|
-
|
|
50
|
-
| Item | Status | Note |
|
|
51
|
-
| ---------------------------- | ------ | --------------------------------------------------------------------------- |
|
|
52
|
-
| `vitest.config.js` | extra | Duplicate of `.ts` variant; required for `--configLoader runner` on Windows |
|
|
53
|
-
| `scripts/vitest-preload.cjs` | extra | Windows-specific: stubs `net use` child_process call and esbuild transforms |
|
|
54
|
-
| `.prettierignore` | extra | Not listed in Design but conventional; consistent with `.gitignore` |
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: audit-snapshot
|
|
3
|
-
epic: E02-data-model
|
|
4
|
-
created: 2026-04-27
|
|
5
|
-
manual: true
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Audit Snapshot: E02-data-model
|
|
9
|
-
|
|
10
|
-
Manual snapshot generated because `savepoint audit` is not implemented yet.
|
|
11
|
-
|
|
12
|
-
## Source file tree
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
src/
|
|
16
|
-
domain/
|
|
17
|
-
config.ts - config defaults and typed project config model
|
|
18
|
-
epic.ts - epic Design frontmatter model
|
|
19
|
-
ids.ts - release, epic, and task ID parsing/formatting
|
|
20
|
-
release.ts - release PRD frontmatter model
|
|
21
|
-
router.ts - router state model and validation
|
|
22
|
-
status.ts - task status values and transition validation
|
|
23
|
-
task.ts - task frontmatter and document validation
|
|
24
|
-
fs/
|
|
25
|
-
markdown.ts - markdown/frontmatter read boundary with path-aware errors
|
|
26
|
-
project.ts - .savepoint root and scoped path helpers
|
|
27
|
-
readers/
|
|
28
|
-
config.ts - read-only config.yml reader
|
|
29
|
-
epic.ts - read-only epic Design reader
|
|
30
|
-
release.ts - read-only release PRD reader
|
|
31
|
-
router.ts - read-only router Current state reader
|
|
32
|
-
tasks.ts - epic task-set reader with graph validation
|
|
33
|
-
validation/
|
|
34
|
-
dependencies.ts - duplicate ID, missing dependency, and cycle detection
|
|
35
|
-
test/
|
|
36
|
-
domain/ - unit tests for config, epic, IDs, release, router, status, task
|
|
37
|
-
fs/ - unit tests for markdown and project helpers
|
|
38
|
-
readers/ - unit tests for config, epic, release, router, task-set readers
|
|
39
|
-
validation/ - unit tests for dependency graph validation
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Config / metadata changes
|
|
43
|
-
|
|
44
|
-
| Path | Purpose |
|
|
45
|
-
| ------------------------ | -------------------------------------------------------------- |
|
|
46
|
-
| `package.json` | Adds `js-yaml` runtime dependency and `@types/js-yaml`. |
|
|
47
|
-
| `package-lock.json` | Locks the new YAML parser dependency graph. |
|
|
48
|
-
| `.prettierignore` | Excludes `.claude/` from Prettier traversal. |
|
|
49
|
-
| `.savepoint/router.md` | Manually advances E02 to `audit-pending`. |
|
|
50
|
-
| `AGENTS.md` | Workflow text was tightened during E02 planning/building. |
|
|
51
|
-
| `README.md` | Marketing/readme copy changed outside the E02 runtime layer. |
|
|
52
|
-
| `.savepoint/metrics/*` | Context-benchmark notes changed outside the E02 runtime layer. |
|
|
53
|
-
| `E02-data-model/tasks/*` | Seven planned and completed E02 task files. |
|
|
54
|
-
|
|
55
|
-
## Changed files
|
|
56
|
-
|
|
57
|
-
Tracked modified files:
|
|
58
|
-
|
|
59
|
-
- `.prettierignore`
|
|
60
|
-
- `.savepoint/metrics/context-bench.md`
|
|
61
|
-
- `.savepoint/router.md`
|
|
62
|
-
- `AGENTS.md`
|
|
63
|
-
- `README.md`
|
|
64
|
-
- `package-lock.json`
|
|
65
|
-
- `package.json`
|
|
66
|
-
|
|
67
|
-
New E02 files:
|
|
68
|
-
|
|
69
|
-
- `.savepoint/releases/v1/epics/E02-data-model/tasks/T001-domain-ids-status.md`
|
|
70
|
-
- `.savepoint/releases/v1/epics/E02-data-model/tasks/T002-markdown-frontmatter-boundary.md`
|
|
71
|
-
- `.savepoint/releases/v1/epics/E02-data-model/tasks/T003-task-documents.md`
|
|
72
|
-
- `.savepoint/releases/v1/epics/E02-data-model/tasks/T004-release-epic-router-config-readers.md`
|
|
73
|
-
- `.savepoint/releases/v1/epics/E02-data-model/tasks/T005-dependency-validation.md`
|
|
74
|
-
- `.savepoint/releases/v1/epics/E02-data-model/tasks/T006-epic-task-set-reader.md`
|
|
75
|
-
- `.savepoint/releases/v1/epics/E02-data-model/tasks/T007-quality-gates.md`
|
|
76
|
-
- `src/domain/config.ts`
|
|
77
|
-
- `src/domain/epic.ts`
|
|
78
|
-
- `src/domain/ids.ts`
|
|
79
|
-
- `src/domain/release.ts`
|
|
80
|
-
- `src/domain/router.ts`
|
|
81
|
-
- `src/domain/status.ts`
|
|
82
|
-
- `src/domain/task.ts`
|
|
83
|
-
- `src/fs/markdown.ts`
|
|
84
|
-
- `src/fs/project.ts`
|
|
85
|
-
- `src/readers/config.ts`
|
|
86
|
-
- `src/readers/epic.ts`
|
|
87
|
-
- `src/readers/release.ts`
|
|
88
|
-
- `src/readers/router.ts`
|
|
89
|
-
- `src/readers/tasks.ts`
|
|
90
|
-
- `src/validation/dependencies.ts`
|
|
91
|
-
- `test/domain/config.test.ts`
|
|
92
|
-
- `test/domain/epic.test.ts`
|
|
93
|
-
- `test/domain/ids.test.ts`
|
|
94
|
-
- `test/domain/release.test.ts`
|
|
95
|
-
- `test/domain/router.test.ts`
|
|
96
|
-
- `test/domain/status.test.ts`
|
|
97
|
-
- `test/domain/task.test.ts`
|
|
98
|
-
- `test/fs/markdown.test.ts`
|
|
99
|
-
- `test/fs/project.test.ts`
|
|
100
|
-
- `test/readers/config.test.ts`
|
|
101
|
-
- `test/readers/epic.test.ts`
|
|
102
|
-
- `test/readers/release.test.ts`
|
|
103
|
-
- `test/readers/router.test.ts`
|
|
104
|
-
- `test/readers/tasks.test.ts`
|
|
105
|
-
- `test/validation/dependencies.test.ts`
|
|
106
|
-
|
|
107
|
-
Local untracked file outside E02 scope:
|
|
108
|
-
|
|
109
|
-
- `.claude/settings.local.json`
|
|
110
|
-
|
|
111
|
-
## Quality gates
|
|
112
|
-
|
|
113
|
-
- `npm run build` passed.
|
|
114
|
-
- `npm run typecheck` passed.
|
|
115
|
-
- `npm run lint` passed.
|
|
116
|
-
- `npm run format:check` initially failed on E02 task markdown; after Prettier formatting, it passed.
|
|
117
|
-
- `npm test` passed outside the sandbox: 16 files, 176 tests. Inside the sandbox it failed with `spawn EPERM` while Vitest/esbuild tried to start a child process.
|
|
118
|
-
|
|
119
|
-
## Deviations from epic Design
|
|
120
|
-
|
|
121
|
-
| Item | Status | Note |
|
|
122
|
-
| --------------------- | ------ | ------------------------------------------------------------------------------------------- |
|
|
123
|
-
| Audit snapshot | manual | Generated by the agent because the E07 audit CLI does not exist yet. |
|
|
124
|
-
| Router state | manual | Advanced directly to `audit-pending` for E02 because the CLI transition does not exist yet. |
|
|
125
|
-
| `done` transitions | fixed | `done -> review` is allowed so completed work can be reopened for audit-stale rechecks. |
|
|
126
|
-
| Config accent values | fixed | Config defaults ignore non-string custom accent values before merging. |
|
|
127
|
-
| README/metrics edits | extra | Present in working tree but not part of the E02 data-model runtime layer. |
|
|
128
|
-
| `.claude/` local file | extra | Local untracked settings are ignored by Prettier but not by Git. |
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# Audit Proposals: E02-data-readers
|
|
2
|
-
|
|
3
|
-
## Target File
|
|
4
|
-
|
|
5
|
-
`.savepoint/Design.md`
|
|
6
|
-
|
|
7
|
-
## Replace
|
|
8
|
-
|
|
9
|
-
```md
|
|
10
|
-
- **Template asset boundary:** established in epic `E04-templates-and-prompts` (2026-04-27). Project scaffolding and workflow prompts now live as versioned markdown/YAML assets under `templates/`, with small TypeScript helpers in `src/templates/` for manifest lookup, path resolution, loading, and interpolation.
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## With
|
|
14
|
-
|
|
15
|
-
```md
|
|
16
|
-
- **Go data-reader boundary:** established in epic `E02-data-readers` (2026-05-01). `internal/data` owns Savepoint file parsing and discovery for the Go implementation: task frontmatter models, markdown YAML extraction, router state parsing, config theme defaults, and release/epic/task directory listing.
|
|
17
|
-
- **Template asset boundary:** established in epic `E04-templates-and-prompts` (2026-04-27). Project scaffolding and workflow prompts now live as versioned markdown/YAML assets under `templates/`, with small TypeScript helpers in `src/templates/` for manifest lookup, path resolution, loading, and interpolation.
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Target File
|
|
21
|
-
|
|
22
|
-
`.savepoint/Design.md`
|
|
23
|
-
|
|
24
|
-
## Replace
|
|
25
|
-
|
|
26
|
-
```md
|
|
27
|
-
## 12. Distribution & build
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## With
|
|
31
|
-
|
|
32
|
-
```md
|
|
33
|
-
## 12. Distribution & build
|
|
34
|
-
|
|
35
|
-
> Audit note: the live repository is transitioning from the documented TypeScript/Node implementation to a Go module (`github.com/opencode/savepoint`). The architecture document still contains substantial TypeScript-era implementation detail and should be reconciled as Go epics are audited.
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Target File
|
|
39
|
-
|
|
40
|
-
`AGENTS.md`
|
|
41
|
-
|
|
42
|
-
## Replace
|
|
43
|
-
|
|
44
|
-
```md
|
|
45
|
-
| `src/domain/config.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Config defaults and typed project config model |
|
|
46
|
-
| `src/domain/epic.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Epic Design frontmatter model and validation |
|
|
47
|
-
| `src/domain/ids.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Release, epic, and task ID parsing and formatting |
|
|
48
|
-
| `src/domain/release.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Release PRD frontmatter model and validation |
|
|
49
|
-
| `src/domain/router.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Router state values and validation |
|
|
50
|
-
| `src/domain/status.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Task status values and transition validation |
|
|
51
|
-
| `src/domain/task.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Task frontmatter/document model and validation |
|
|
52
|
-
| `src/fs/markdown.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Markdown/frontmatter reader with path-aware boundary errors |
|
|
53
|
-
| `src/fs/project.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Project root discovery and scoped `.savepoint` path helpers |
|
|
54
|
-
| `src/readers/config.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Read-only `config.yml` reader with defaults |
|
|
55
|
-
| `src/readers/epic.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Read-only epic Design reader |
|
|
56
|
-
| `src/readers/release.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Read-only release PRD reader |
|
|
57
|
-
| `src/readers/router.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Read-only router Current state reader |
|
|
58
|
-
| `src/readers/tasks.ts` | [E02-data-model](.savepoint/releases/v1/epics/E02-data-model/E02-Detail.md) | Epic task-set reader with graph validation |
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## With
|
|
62
|
-
|
|
63
|
-
```md
|
|
64
|
-
| `internal/data/task.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Task, column, progress stage, dependency, and metadata structs for Go data readers |
|
|
65
|
-
| `internal/data/parser.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Markdown YAML frontmatter extraction and task frontmatter parsing |
|
|
66
|
-
| `internal/data/router.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Router current-state YAML block extraction and parsing |
|
|
67
|
-
| `internal/data/config.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Savepoint config/theme parsing with default theme fallback |
|
|
68
|
-
| `internal/data/discover.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | `.savepoint` root discovery and release, epic, and task directory listing |
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## Target File
|
|
72
|
-
|
|
73
|
-
`.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md`
|
|
74
|
-
|
|
75
|
-
## Insert After
|
|
76
|
-
|
|
77
|
-
```md
|
|
78
|
-
## Components and files
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## With
|
|
82
|
-
|
|
83
|
-
```md
|
|
84
|
-
## Implemented As
|
|
85
|
-
|
|
86
|
-
- `internal/data/task.go` defines task metadata, column, progress stage, dependency, and progress structs.
|
|
87
|
-
- `internal/data/parser.go` extracts YAML frontmatter from markdown and currently maps the task ID and objective into `Task`.
|
|
88
|
-
- `internal/data/router.go` extracts and parses the `## Current state` fenced YAML block from `router.md`.
|
|
89
|
-
- `internal/data/config.go` reads `config.yml` theme values and falls back to a default theme when the config is missing.
|
|
90
|
-
- `internal/data/discover.go` finds the `.savepoint` root and lists release, epic, and task directories in stable order.
|
|
91
|
-
|
|
92
|
-
## Deltas From Plan
|
|
93
|
-
|
|
94
|
-
- The planned `internal/data/errors.go` was not created; errors currently use formatted `error` values.
|
|
95
|
-
- `ParseTaskFile` does not yet populate `Column`, `Stage`, `DependsOn`, `Priority`, `Points`, `Tags`, `Acceptance`, or `Notes` from YAML frontmatter.
|
|
96
|
-
- The parser uses a regular expression rather than a line-based frontmatter scanner.
|
|
97
|
-
- Config malformed YAML currently falls back to defaults instead of surfacing a parse error.
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## Quality Review
|
|
101
|
-
|
|
102
|
-
## Must Fix Before Close
|
|
103
|
-
|
|
104
|
-
All close blockers resolved in audit closeout.
|
|
105
|
-
|
|
106
|
-
## Must Fix Before Next Epic
|
|
107
|
-
|
|
108
|
-
All next-epic blockers resolved in audit closeout.
|
|
109
|
-
|
|
110
|
-
## Carry Forward
|
|
111
|
-
|
|
112
|
-
- `.savepoint/Design.md` and `AGENTS.md` still mostly describe the previous TypeScript implementation. The Go architecture should be reconciled incrementally as each Go epic is audited.
|
|
113
|
-
|
|
114
|
-
## Already Fixed
|
|
115
|
-
|
|
116
|
-
- `go test ./internal/data/...` passed during audit.
|
|
117
|
-
- `go test ./...` passed during audit.
|
|
118
|
-
- `ParseTaskFile` now maps task frontmatter fields including `status`, `phase`, `depends_on`, priority, points, tags, acceptance, notes, release, epic, and progress.
|
|
119
|
-
- `ConfigReader.Read` now returns defaults only for missing config files and returns malformed YAML/read errors.
|
|
120
|
-
- Discovery tests now use temporary fixtures instead of the live repository tree.
|
|
121
|
-
- Parser tests now assert task metadata mapping and malformed YAML behavior.
|
|
122
|
-
- `internal/data/errors.go` now provides data-reader boundary error sentinels.
|
|
123
|
-
- E02 task files now include context logs.
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: audit-snapshot
|
|
3
|
-
epic: E02-data-readers
|
|
4
|
-
created: 2026-05-01
|
|
5
|
-
mode: manual
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Audit Snapshot: E02-data-readers
|
|
9
|
-
|
|
10
|
-
Manual snapshot created because `.savepoint/audit/E02-data-readers/snapshot.md` was missing while the router was already in `audit-pending`.
|
|
11
|
-
|
|
12
|
-
## Router State
|
|
13
|
-
|
|
14
|
-
```yaml
|
|
15
|
-
state: audit-pending
|
|
16
|
-
release: v1
|
|
17
|
-
epic: E02-data-readers
|
|
18
|
-
task: ~
|
|
19
|
-
next_action: "Audit E02-data-readers: all 5 tasks done. Start fresh session for audit."
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Epic Scope
|
|
23
|
-
|
|
24
|
-
- `.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md`
|
|
25
|
-
- `.savepoint/releases/v1/epics/E02-data-readers/tasks/T001-task-struct.md`
|
|
26
|
-
- `.savepoint/releases/v1/epics/E02-data-readers/tasks/T002-frontmatter-parser.md`
|
|
27
|
-
- `.savepoint/releases/v1/epics/E02-data-readers/tasks/T003-router-reader.md`
|
|
28
|
-
- `.savepoint/releases/v1/epics/E02-data-readers/tasks/T004-config-reader.md`
|
|
29
|
-
- `.savepoint/releases/v1/epics/E02-data-readers/tasks/T005-discovery.md`
|
|
30
|
-
|
|
31
|
-
## Changed Files In Scope
|
|
32
|
-
|
|
33
|
-
- `internal/data/task.go`
|
|
34
|
-
- `internal/data/parser.go`
|
|
35
|
-
- `internal/data/router.go`
|
|
36
|
-
- `internal/data/config.go`
|
|
37
|
-
- `internal/data/discover.go`
|
|
38
|
-
- `internal/data/task_test.go`
|
|
39
|
-
- `internal/data/parser_test.go`
|
|
40
|
-
- `internal/data/router_test.go`
|
|
41
|
-
- `internal/data/config_test.go`
|
|
42
|
-
- `internal/data/discover_test.go`
|
|
43
|
-
- `go.mod`
|
|
44
|
-
- `go.sum`
|
|
45
|
-
|
|
46
|
-
## Verification Observed During Audit
|
|
47
|
-
|
|
48
|
-
- `go test ./internal/data/...` passed.
|
|
49
|
-
- `go test ./...` passed.
|
|
50
|
-
|
|
51
|
-
## Notes
|
|
52
|
-
|
|
53
|
-
- The repository is in a broad TypeScript-to-Go transition. Many tracked TypeScript files are deleted or replaced, but this snapshot is intentionally scoped to the E02 data-reader epic.
|
|
54
|
-
- Task context logs are mostly absent except `T005-discovery.md`; this is audit process drift, not a source-code blocker.
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
# Audit Proposals — E03-board-tui-core
|
|
2
|
-
|
|
3
|
-
## Target File
|
|
4
|
-
|
|
5
|
-
`.savepoint/Design.md`
|
|
6
|
-
|
|
7
|
-
## Replace
|
|
8
|
-
|
|
9
|
-
```md
|
|
10
|
-
## 8. TUI
|
|
11
|
-
|
|
12
|
-
**Theming:** Atari-Noir is the default theme. **For full design tokens, palette, and rendering rules, see `.savepoint/visual-identity.md`** (loaded conditionally for TUI tasks). Live values in `config.yml` `theme:` section.
|
|
13
|
-
|
|
14
|
-
Acknowledged terminal limits: fonts, scanlines, glows, letter-spacing, mouse-driven motion don't translate. Lean on color discipline + box-drawing geometry + uppercase headings.
|
|
15
|
-
|
|
16
|
-
**Render fallbacks:** 256-color → 16-color hard-coded → `NO_COLOR=1` monochrome with glyphs → non-TTY plain table.
|
|
17
|
-
|
|
18
|
-
**Layout:** single screen with a 5-column Kanban board and detail pane. Non-TTY output uses `src/tui/render/plain-table.ts`.
|
|
19
|
-
|
|
20
|
-
**Implementation modules:** see AGENTS.md Codebase Map (E06 and E07 epic rows).
|
|
21
|
-
|
|
22
|
-
**Keybindings:** arrow/vim navigation, enter advances, backspace retreats, r/R refreshes, a/A exits toward audit review when proposals exist, q quits.
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## With
|
|
26
|
-
|
|
27
|
-
```md
|
|
28
|
-
## 8. TUI
|
|
29
|
-
|
|
30
|
-
**Theming:** Atari-Noir is the default theme. **For full design tokens, palette, and rendering rules, see `.savepoint/visual-identity.md`** (loaded conditionally for TUI tasks). Live values in `config.yml` `theme:` section.
|
|
31
|
-
|
|
32
|
-
Acknowledged terminal limits: fonts, scanlines, glows, letter-spacing, mouse-driven motion don't translate. Lean on color discipline + box-drawing geometry + uppercase headings.
|
|
33
|
-
|
|
34
|
-
**Go board core:** established in epic `E03-board-tui-core` (2026-05-01). `internal/board` owns the Bubble Tea model, update loop, responsive layout calculation, and Lip Gloss view composition. `internal/styles` owns the Atari-Noir terminal palette and reusable Lip Gloss styles with truecolor, 256-color, and 16-color fallbacks.
|
|
35
|
-
|
|
36
|
-
**Layout:** the Go board core currently renders a responsive 3-column grid. At `>=120` columns it includes a 28-cell epic panel plus 3 task columns; at `80-119` columns it renders 3 task columns; below `80` columns it renders only the focused column and supports left/right or h/l column switching.
|
|
37
|
-
|
|
38
|
-
**Render fallbacks:** truecolor → 256-color → 16-color are encoded in Go styles. A future non-TTY/plain renderer remains outside this epic.
|
|
39
|
-
|
|
40
|
-
**Implementation modules:** see AGENTS.md Codebase Map.
|
|
41
|
-
|
|
42
|
-
**Keybindings:** `q` and `ctrl+c` quit. Left/right arrows and h/l move the focused column in narrow layouts.
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Target File
|
|
46
|
-
|
|
47
|
-
`AGENTS.md`
|
|
48
|
-
|
|
49
|
-
## Insert After
|
|
50
|
-
|
|
51
|
-
```md
|
|
52
|
-
| `internal/data/errors.go` | [E02-data-readers](.savepoint/releases/v1/epics/E02-data-readers/E02-Detail.md) | Shared data-reader boundary error sentinels |
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## With
|
|
56
|
-
|
|
57
|
-
```md
|
|
58
|
-
| `internal/board/board.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Bubble Tea board entrypoint and program launch |
|
|
59
|
-
| `internal/board/model.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Board model state, constructor, task grouping, and initialization |
|
|
60
|
-
| `internal/board/update.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Board key handling, quit behavior, column focus navigation, and terminal resize updates |
|
|
61
|
-
| `internal/board/view.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Lip Gloss view composition for header, responsive board columns, epic panel, tasks, and status bar |
|
|
62
|
-
| `internal/board/layout.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Responsive board breakpoint and column width calculations |
|
|
63
|
-
| `internal/styles/palette.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Atari-Noir terminal color constants and 256-color/16-color fallbacks |
|
|
64
|
-
| `internal/styles/styles.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Reusable Lip Gloss styles for board chrome, focused state, task rows, status, tags, and epic panel |
|
|
65
|
-
| `internal/board/*_test.go` | [E03-board-tui-core](.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md) | Unit tests for board model, update loop, layout breakpoints, and rendered output |
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Target File
|
|
69
|
-
|
|
70
|
-
`.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md`
|
|
71
|
-
|
|
72
|
-
## Replace
|
|
73
|
-
|
|
74
|
-
```md
|
|
75
|
-
type: epic-design
|
|
76
|
-
status: planned
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## With
|
|
80
|
-
|
|
81
|
-
```md
|
|
82
|
-
type: epic-design
|
|
83
|
-
status: implemented
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Target File
|
|
87
|
-
|
|
88
|
-
`.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md`
|
|
89
|
-
|
|
90
|
-
## Insert After
|
|
91
|
-
|
|
92
|
-
```md
|
|
93
|
-
## Components and files
|
|
94
|
-
|
|
95
|
-
| Path | Purpose |
|
|
96
|
-
|------|---------|
|
|
97
|
-
| `internal/board/model.go` | Model struct and Init |
|
|
98
|
-
| `internal/board/update.go` | Update loop, message handling |
|
|
99
|
-
| `internal/board/view.go` | View composition |
|
|
100
|
-
| `internal/styles/palette.go` | Atari-Noir hex colors |
|
|
101
|
-
| `internal/styles/styles.go` | Lip Gloss style definitions |
|
|
102
|
-
| `internal/board/layout.go` | Width/height calculations |
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## With
|
|
106
|
-
|
|
107
|
-
```md
|
|
108
|
-
|
|
109
|
-
## Implemented as
|
|
110
|
-
|
|
111
|
-
- `internal/board/model.go` defines exported board state, groups tasks by `data.ColumnType`, defaults empty task columns to `planned`, and initializes with no startup command.
|
|
112
|
-
- `internal/board/update.go` handles `q`, `ctrl+c`, terminal resize messages, and left/right or h/l focused-column navigation.
|
|
113
|
-
- `internal/board/layout.go` implements the requested 120/80 column breakpoints and returns explicit layout metadata for view rendering.
|
|
114
|
-
- `internal/board/view.go` composes the header, responsive task columns, optional epic panel, and status bar using Lip Gloss.
|
|
115
|
-
- `internal/styles/palette.go` and `internal/styles/styles.go` define Atari-Noir truecolor values plus 256-color and 16-color fallbacks.
|
|
116
|
-
|
|
117
|
-
## Audit deltas
|
|
118
|
-
|
|
119
|
-
- The implemented board core is wired into `internal/board/board.go`; `Run()` now launches the exported board model rather than the pre-epic placeholder screen.
|
|
120
|
-
- The layout currently uses rounded borders, while the visual identity prefers single-line quiet borders by default. This is acceptable if intentional, but should be normalized before the visual system hardens.
|
|
121
|
-
- Layout width coverage now lives on `CalculateLayout`; the dead `columnContentWidth()` helper was removed.
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
## Quality Review
|
|
125
|
-
|
|
126
|
-
## Must Fix Before Close
|
|
127
|
-
|
|
128
|
-
None.
|
|
129
|
-
|
|
130
|
-
## Must Fix Before Next Epic
|
|
131
|
-
|
|
132
|
-
- `internal/board/layout.go:28` accepts height but ignores it. The epic originally calls for width/height calculations and no layout break at any width. Either incorporate height into visible task capacity or narrow the documented contract before components depend on it.
|
|
133
|
-
- `internal/board/view.go:65` renders task labels without truncation or width-aware clipping. Long IDs/titles can wrap and break the grid, conflicting with the visual guardrail that accidental wrapping is a bug.
|
|
134
|
-
|
|
135
|
-
## Carry Forward
|
|
136
|
-
|
|
137
|
-
- `internal/styles/styles.go` uses rounded borders for columns and the epic panel. The visual identity says single-line borders are the default and rounded borders are not called out as a signature style; decide whether rounded borders are an intentional product choice in E04.
|
|
138
|
-
- The Go implementation has replaced the older TypeScript architecture in active epics. Continue reconciling `.savepoint/Design.md` and AGENTS.md away from stale `src/` rows as each Go epic audits.
|
|
139
|
-
|
|
140
|
-
## Already Fixed
|
|
141
|
-
|
|
142
|
-
- Board state, resize handling, responsive breakpoints, Atari-Noir palette constants, color fallbacks, focused-column rendering, and focused-column navigation have focused tests.
|
|
143
|
-
- `internal/board/board.go` now launches `newProgramModel()`, which returns the exported `Model` created by `NewModel(...)`; the private placeholder model was removed.
|
|
144
|
-
- `internal/board/board_test.go` verifies the program model renders board columns and does not render the old welcome screen.
|
|
145
|
-
- The dead `columnContentWidth()` helper and its stale tests were removed; layout width coverage remains in `internal/board/layout_test.go`.
|
|
146
|
-
- `go test ./...` and `go build ./...` passed during audit.
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: audit-snapshot
|
|
3
|
-
epic: E03-board-tui-core
|
|
4
|
-
release: v1
|
|
5
|
-
created: 2026-05-01
|
|
6
|
-
mode: manual
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Audit Snapshot — E03-board-tui-core
|
|
10
|
-
|
|
11
|
-
Manual snapshot created because `.savepoint/audit/E03-board-tui-core/snapshot.md` was missing while the audit CLI is unavailable.
|
|
12
|
-
|
|
13
|
-
## Router State
|
|
14
|
-
|
|
15
|
-
```yaml
|
|
16
|
-
state: audit-pending
|
|
17
|
-
release: v1
|
|
18
|
-
epic: E03-board-tui-core
|
|
19
|
-
task: E03-board-tui-core/T005-layout
|
|
20
|
-
next_action: "E03-board-tui-core complete. Start a new agent session for the audit."
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Epic Scope
|
|
24
|
-
|
|
25
|
-
- `.savepoint/releases/v1/epics/E03-board-tui-core/E03-Detail.md`
|
|
26
|
-
- `.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T001-model.md`
|
|
27
|
-
- `.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T002-update-loop.md`
|
|
28
|
-
- `.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T003-view.md`
|
|
29
|
-
- `.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T004-styles.md`
|
|
30
|
-
- `.savepoint/releases/v1/epics/E03-board-tui-core/tasks/T005-layout.md`
|
|
31
|
-
|
|
32
|
-
## Changed Files In Scope
|
|
33
|
-
|
|
34
|
-
- `main.go`
|
|
35
|
-
- `go.mod`
|
|
36
|
-
- `internal/board/board.go`
|
|
37
|
-
- `internal/board/model.go`
|
|
38
|
-
- `internal/board/update.go`
|
|
39
|
-
- `internal/board/view.go`
|
|
40
|
-
- `internal/board/layout.go`
|
|
41
|
-
- `internal/board/model_test.go`
|
|
42
|
-
- `internal/board/update_test.go`
|
|
43
|
-
- `internal/board/view_test.go`
|
|
44
|
-
- `internal/board/layout_test.go`
|
|
45
|
-
- `internal/styles/palette.go`
|
|
46
|
-
- `internal/styles/styles.go`
|
|
47
|
-
|
|
48
|
-
## Verification Observed During Audit
|
|
49
|
-
|
|
50
|
-
- `go test ./...` passed.
|
|
51
|
-
- `go build ./...` passed.
|
|
52
|
-
- Closeout fix verification: `go test ./internal/board`, `go test ./...`, and `go build ./...` passed after wiring the runtime model and removing dead layout code.
|
|
53
|
-
|
|
54
|
-
## Notes
|
|
55
|
-
|
|
56
|
-
- Repository contains a broad TypeScript-to-Go transition and many unrelated working-tree changes. This snapshot is intentionally limited to the E03 Board TUI Core scope declared by the epic design and task files.
|
|
57
|
-
- Closeout fix: `internal/board/board.go` now launches the exported `Model` implemented by this epic.
|