create-quiver 0.15.1 → 0.15.3
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/.github/workflows/ci.yml +3 -0
- package/README.md +3 -0
- package/README_FOR_AI.md +11 -7
- package/docs/CLI_UX_GUIDE.md +16 -2
- package/docs/COMMANDS.md.template +16 -4
- package/docs/INDEX.md +87 -0
- package/docs/WORKFLOW.md.template +4 -4
- package/docs/reference/commands.md +23 -5
- package/package.json +3 -1
- package/specs/quiver-v33-approval-ux-and-planner-progress/EVIDENCE_REPORT.md +93 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/EXECUTION_PLAN.md +83 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/SPEC.md +158 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/STATUS.md +31 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/pr.md +109 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-00-approval-ux-foundation/CLOSURE_BRIEF.md +30 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-00-approval-ux-foundation/EXECUTION_BRIEF.md +56 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-00-approval-ux-foundation/slice.json +65 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-01-approval-candidates-model/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-01-approval-candidates-model/EXECUTION_BRIEF.md +51 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-01-approval-candidates-model/slice.json +74 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-02-approve-interactive-selection/CLOSURE_BRIEF.md +20 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-02-approve-interactive-selection/EXECUTION_BRIEF.md +53 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-02-approve-interactive-selection/slice.json +79 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-03-technical-plan-review-decision-data/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-03-technical-plan-review-decision-data/EXECUTION_BRIEF.md +50 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-03-technical-plan-review-decision-data/slice.json +75 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-04-revise-input-guardrails/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-04-revise-input-guardrails/EXECUTION_BRIEF.md +51 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-04-revise-input-guardrails/slice.json +73 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-05-provider-progress-alignment/CLOSURE_BRIEF.md +20 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-05-provider-progress-alignment/EXECUTION_BRIEF.md +51 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-05-provider-progress-alignment/slice.json +91 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-06-workflow-surface-integration/CLOSURE_BRIEF.md +20 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-06-workflow-surface-integration/EXECUTION_BRIEF.md +53 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-06-workflow-surface-integration/slice.json +87 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-07-docs-tests-release-readiness/CLOSURE_BRIEF.md +21 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-07-docs-tests-release-readiness/EXECUTION_BRIEF.md +55 -0
- package/specs/quiver-v33-approval-ux-and-planner-progress/slices/slice-07-docs-tests-release-readiness/slice.json +97 -0
- package/specs/quiver-v34-cli-dashboard-status/EVIDENCE_REPORT.md +119 -0
- package/specs/quiver-v34-cli-dashboard-status/EXECUTION_PLAN.md +77 -0
- package/specs/quiver-v34-cli-dashboard-status/SPEC.md +152 -0
- package/specs/quiver-v34-cli-dashboard-status/STATUS.md +29 -0
- package/specs/quiver-v34-cli-dashboard-status/pr.md +99 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/slice.json +68 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/EXECUTION_BRIEF.md +53 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/slice.json +78 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/EXECUTION_BRIEF.md +53 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/slice.json +82 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/EXECUTION_BRIEF.md +54 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/slice.json +77 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/EXECUTION_BRIEF.md +54 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/slice.json +88 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/CLOSURE_BRIEF.md +26 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/EXECUTION_BRIEF.md +57 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/slice.json +85 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/EVIDENCE_REPORT.md +43 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/EXECUTION_PLAN.md +85 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/SPEC.md +147 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/STATUS.md +33 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/pr.md +106 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/EXECUTION_BRIEF.md +38 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/slice.json +64 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/slice.json +80 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/EXECUTION_BRIEF.md +48 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/slice.json +73 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/EXECUTION_BRIEF.md +48 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/slice.json +72 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/slice.json +82 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/EXECUTION_BRIEF.md +50 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/slice.json +90 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/CLOSURE_BRIEF.md +21 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/EXECUTION_BRIEF.md +51 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/slice.json +85 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/CLOSURE_BRIEF.md +20 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/slice.json +79 -0
- package/specs/quiver-v36-ai-run-watch-portable/EVIDENCE_REPORT.md +33 -0
- package/specs/quiver-v36-ai-run-watch-portable/EXECUTION_PLAN.md +39 -0
- package/specs/quiver-v36-ai-run-watch-portable/SPEC.md +166 -0
- package/specs/quiver-v36-ai-run-watch-portable/STATUS.md +31 -0
- package/specs/quiver-v36-ai-run-watch-portable/pr.md +78 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/EXECUTION_BRIEF.md +43 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/slice.json +61 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/EXECUTION_BRIEF.md +43 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/slice.json +65 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/EXECUTION_BRIEF.md +43 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/slice.json +66 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/EXECUTION_BRIEF.md +41 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/slice.json +71 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/EXECUTION_BRIEF.md +44 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/slice.json +73 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/EXECUTION_BRIEF.md +44 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/slice.json +71 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/EXECUTION_BRIEF.md +45 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/slice.json +77 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/CLOSURE_BRIEF.md +22 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/EXECUTION_BRIEF.md +46 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/slice.json +87 -0
- package/src/create-quiver/commands/ai.js +112 -12
- package/src/create-quiver/commands/dashboard.js +31 -0
- package/src/create-quiver/commands/flow.js +74 -12
- package/src/create-quiver/commands/spec.js +8 -1
- package/src/create-quiver/index.js +107 -4
- package/src/create-quiver/lib/ai/approval-candidates.js +86 -0
- package/src/create-quiver/lib/ai/plan-review.js +77 -1
- package/src/create-quiver/lib/ai/run-state.js +21 -4
- package/src/create-quiver/lib/approvals.js +103 -0
- package/src/create-quiver/lib/cli/ux-flags.js +6 -0
- package/src/create-quiver/lib/dashboard.js +896 -0
- package/src/create-quiver/lib/git.js +13 -4
- package/src/create-quiver/lib/init-docs.js +6 -0
- package/src/create-quiver/lib/init-layout.js +2 -0
- package/src/create-quiver/lib/paths.js +45 -3
- package/src/create-quiver/lib/project-state-resolver.js +22 -2
- package/src/create-quiver/lib/version.js +157 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Quiver v33 - Approval UX and Planner Progress
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-05-28
|
|
4
|
+
**Status:** Completed
|
|
5
|
+
**Source:** User-approved acceptance criteria and production review for approval selectors, planner progress, and consistent decision guidance.
|
|
6
|
+
|
|
7
|
+
Slice numbering resets here. This spec intentionally starts at `slice-00`.
|
|
8
|
+
|
|
9
|
+
## Problem
|
|
10
|
+
|
|
11
|
+
Quiver already has visible progress and guided selectors in several AI workflow commands, but the experience is incomplete around planner approvals and technical-plan iteration.
|
|
12
|
+
|
|
13
|
+
Three gaps create partial-fix risk:
|
|
14
|
+
|
|
15
|
+
- planner/reviewer commands can still feel inconsistent with `ai prepare-context --with-planner`;
|
|
16
|
+
- `ai approve --phase acceptance|technical-plan` requires users to know the exact draft version instead of guiding them with the same kind of selector used by `ai agent set`;
|
|
17
|
+
- approval recommendations are spread across `ai approve`, `ai approvals`, `flow`, `ai status`, `ai resume`, `spec create --interactive`, and `plan-review` logic, which can produce conflicting or incomplete next-step guidance.
|
|
18
|
+
|
|
19
|
+
## Objective
|
|
20
|
+
|
|
21
|
+
Make planner approval and revision flows production-safe and consistent:
|
|
22
|
+
|
|
23
|
+
- show real human progress for provider-backed planner/reviewer commands;
|
|
24
|
+
- offer TTY selectors for approval versions when `--version` is omitted;
|
|
25
|
+
- keep CI/no-TTY/JSON/scripted usage clean and explicit;
|
|
26
|
+
- centralize approval candidates and recommendations so every workflow surface presents the same decision state;
|
|
27
|
+
- harden incomplete `ai revise --input` usage for both acceptance and technical-plan phases;
|
|
28
|
+
- keep `plan-review` blocking semantics strict and visible.
|
|
29
|
+
|
|
30
|
+
## Scope
|
|
31
|
+
|
|
32
|
+
### Included
|
|
33
|
+
|
|
34
|
+
- Shared approval-candidate model for acceptance, technical-plan, and plan-review decision context.
|
|
35
|
+
- `ai approve --phase acceptance` selector when `--version` is omitted in TTY.
|
|
36
|
+
- `ai approve --phase technical-plan` selector that includes plan-review recommendation, blocking status, required fixes, optional hardening, risks, and next command.
|
|
37
|
+
- No-TTY/CI guardrails for `ai approve` without `--version`.
|
|
38
|
+
- Missing/incomplete `--input` handling for `ai revise --phase acceptance` and `ai revise --phase technical-plan`.
|
|
39
|
+
- Progress/loaders alignment for provider-backed planner commands: `ai plan`, `ai revise`, `ai review-plan`, and `ai repair-plan`.
|
|
40
|
+
- Audit and regression coverage for existing long-running flows: `ai onboard`, `ai prepare-context --with-planner`, `ai execute-slice`, `ai execute-plan --execute`, and `ai pr --create`.
|
|
41
|
+
- Integration of the shared approval-candidate model into `ai approvals`, `flow`, `ai status`, `ai resume`, and `spec create --interactive`.
|
|
42
|
+
- Documentation and tests for human, TTY, no-TTY, CI, JSON, dry-run, print-prompt, no-color, and review-state cases.
|
|
43
|
+
|
|
44
|
+
### Excluded
|
|
45
|
+
|
|
46
|
+
- Product feature implementation beyond CLI workflow UX and approval state.
|
|
47
|
+
- Replacing the CLI parser.
|
|
48
|
+
- Adding a TUI framework.
|
|
49
|
+
- Making prompts mandatory.
|
|
50
|
+
- Relaxing `plan-review` approval gates.
|
|
51
|
+
- Storing provider credentials or secrets.
|
|
52
|
+
- Changing WDD + SDD semantics.
|
|
53
|
+
|
|
54
|
+
## Approved Acceptance Criteria
|
|
55
|
+
|
|
56
|
+
### Provider Progress
|
|
57
|
+
|
|
58
|
+
1. `ai plan --phase acceptance --input <file>` shows human progress and a spinner when executing the planner in a human TTY, following the pattern of `ai prepare-context --with-planner`.
|
|
59
|
+
2. `ai plan --phase technical-plan` shows the same progress pattern when executing the planner.
|
|
60
|
+
3. `ai revise --phase acceptance --input <file>` and `ai revise --phase technical-plan --input <file>` inherit the same progress behavior through the shared planner path.
|
|
61
|
+
4. `ai review-plan` shows progress for reading the technical plan, preparing context, preparing the prompt, executing the reviewer, and writing review metadata.
|
|
62
|
+
5. `ai repair-plan` is in scope and shows the same provider-progress standard.
|
|
63
|
+
6. Existing long-running flows are audited for consistency: `ai onboard`, `ai prepare-context --with-planner`, `ai execute-slice`, `ai execute-plan --execute`, and `ai pr --create`.
|
|
64
|
+
7. `--dry-run` and `--print-prompt` never execute providers or show fake loaders.
|
|
65
|
+
8. `--json`, CI/no-TTY, `NO_COLOR`, `TERM=dumb`, and `--no-color` remain clean and script-safe.
|
|
66
|
+
|
|
67
|
+
### Approval Selection
|
|
68
|
+
|
|
69
|
+
9. `ai approve --phase acceptance` without `--version` opens a TTY selector when prompts are available.
|
|
70
|
+
10. `ai approve --phase technical-plan` without `--version` opens a TTY selector when prompts are available and includes plan-review decision data.
|
|
71
|
+
11. In no-TTY/CI, `ai approve --phase <phase>` without `--version` fails early with an actionable command using `--version <n>`.
|
|
72
|
+
12. Explicit `--version <n>` preserves existing script-safe behavior.
|
|
73
|
+
13. Only the latest draft version is approvable. Older versions may be displayed as history but must not be silently approved.
|
|
74
|
+
14. The selector recommends the current/latest eligible draft and explains why.
|
|
75
|
+
15. Technical-plan approval distinguishes `plan-review` states: `missing`, `stale`, `unapproved`, `reviewed + approve`, `reviewed + approve-with-risk`, and `reviewed + revise`.
|
|
76
|
+
16. `reviewed + revise` blocks approval and points to `ai revise --phase technical-plan --input <feedback.md> --dry-run`.
|
|
77
|
+
17. `reviewed + approve-with-risk` allows explicit approval while showing risks and optional hardening.
|
|
78
|
+
18. Candidate summaries must be concise, truncated, and redacted through existing utilities before printing draft or review snippets.
|
|
79
|
+
|
|
80
|
+
### Revise Input Guardrails
|
|
81
|
+
|
|
82
|
+
19. `ai revise --phase acceptance --input` and `ai revise --phase technical-plan --input` handle a missing input value explicitly.
|
|
83
|
+
20. Missing input in no-TTY/CI fails with an actionable example.
|
|
84
|
+
21. Missing input in TTY may show a selector or focused guidance if useful artifacts are available.
|
|
85
|
+
22. Nonexistent input files fail before provider execution.
|
|
86
|
+
23. Accidental extra arguments, such as a trailing `s`, are detected or reported clearly instead of being ignored.
|
|
87
|
+
|
|
88
|
+
### Shared Decision Surfaces
|
|
89
|
+
|
|
90
|
+
24. A shared approval-candidate model feeds `ai approve`, `ai approvals`, `flow`, `ai status`, `ai resume`, and `spec create --interactive`.
|
|
91
|
+
25. These surfaces do not duplicate or contradict next-step recommendations.
|
|
92
|
+
26. `spec create --interactive` shows the reviewed and approved technical-plan source using the same decision data.
|
|
93
|
+
27. Approval candidates include phase, version, path, created_at, source_file, current/latest flag, review recommendation, blocking state, recommended action, and next command.
|
|
94
|
+
|
|
95
|
+
### Documentation and Tests
|
|
96
|
+
|
|
97
|
+
28. `docs/CLI_UX_GUIDE.md`, `docs/reference/commands.md`, and `README_FOR_AI.md` are updated when the visible contract changes.
|
|
98
|
+
29. Tests cover TTY selector paths, no-TTY/CI failures, explicit `--version`, latest-draft recommendation, stale/blocked plan-review states, `approve-with-risk`, missing `--input`, accidental extra args, dry-run, print-prompt, no-color, and JSON cleanliness.
|
|
99
|
+
30. Implementation does not log secrets or credentials.
|
|
100
|
+
31. Every slice in this spec has `slice.json`, `EXECUTION_BRIEF.md`, and `CLOSURE_BRIEF.md`.
|
|
101
|
+
|
|
102
|
+
## Approved Technical Plan
|
|
103
|
+
|
|
104
|
+
1. Inventory the real command surface and existing tests before implementation.
|
|
105
|
+
2. Create a shared approval-candidates module that reads existing approval and plan-review metadata without changing persisted formats unless required.
|
|
106
|
+
3. Integrate approval candidates into `ai approvals`, `flow`, `ai status`, `ai resume`, and `spec create --interactive`.
|
|
107
|
+
4. Add TTY approval selection in `ai approve` for acceptance and technical-plan when `--version` is omitted.
|
|
108
|
+
5. Preserve no-TTY/CI/script behavior by requiring explicit `--version <n>` outside prompts.
|
|
109
|
+
6. Harden missing/incomplete `--input` handling in `ai revise` for both planner phases.
|
|
110
|
+
7. Align provider progress in `ai plan`, `ai revise`, `ai review-plan`, and `ai repair-plan`.
|
|
111
|
+
8. Audit existing progress flows and add regression tests instead of rewriting working behavior unnecessarily.
|
|
112
|
+
9. Update public docs and AI guidance only after the command contract is implemented.
|
|
113
|
+
10. Add focused tests and final full-suite/smoke validation.
|
|
114
|
+
|
|
115
|
+
## Slice Roadmap
|
|
116
|
+
|
|
117
|
+
| Slice | Title | Status | Dependencies |
|
|
118
|
+
|---|---|---|---|
|
|
119
|
+
| slice-00 | Approval UX foundation | completed | none |
|
|
120
|
+
| slice-01 | Approval candidates model | completed | slice-00 |
|
|
121
|
+
| slice-02 | Interactive approval selection | completed | slice-01 |
|
|
122
|
+
| slice-03 | Technical-plan review decision data | completed | slice-01, slice-02 |
|
|
123
|
+
| slice-04 | Revise input guardrails | completed | slice-01 |
|
|
124
|
+
| slice-05 | Provider progress alignment | completed | slice-01 |
|
|
125
|
+
| slice-06 | Workflow surface integration | completed | slice-01, slice-02, slice-03 |
|
|
126
|
+
| slice-07 | Docs, tests, and release readiness | completed | slice-02, slice-03, slice-04, slice-05, slice-06 |
|
|
127
|
+
|
|
128
|
+
## Validation Strategy
|
|
129
|
+
|
|
130
|
+
- `node --test tests/lib/approvals.test.js tests/commands/ai-run-state.test.js tests/commands/ai-review-plan.test.js`
|
|
131
|
+
- `node --test tests/commands/ai-plan.test.js tests/commands/ai-prepare-context-planner.test.js`
|
|
132
|
+
- `node --test tests/commands/ai-agent.test.js tests/lib/cli-selectors.test.js tests/lib/cli-ux.test.js`
|
|
133
|
+
- `node --test tests/commands/flow.test.js tests/commands/spec-create.test.js`
|
|
134
|
+
- `node --test tests/**/*.test.js`
|
|
135
|
+
- `npm run smoke:create-quiver`
|
|
136
|
+
- `npm run smoke:doctor-fixtures`
|
|
137
|
+
- `npm run smoke:guided-workflow`
|
|
138
|
+
- `npm run package:quiver`
|
|
139
|
+
- `git diff --check`
|
|
140
|
+
- `node bin/create-quiver.js spec validate specs/quiver-v33-approval-ux-and-planner-progress`
|
|
141
|
+
|
|
142
|
+
## Risks
|
|
143
|
+
|
|
144
|
+
- Approval UX touches critical workflow gates; selector convenience must not weaken plan-review blocking behavior.
|
|
145
|
+
- Prompt behavior can break automation if it is not strictly TTY-gated.
|
|
146
|
+
- Multiple surfaces can drift if candidate data is not shared.
|
|
147
|
+
- Progress output can contaminate JSON or no-TTY output if not centralized.
|
|
148
|
+
- Draft snippets can leak sensitive content unless they are truncated and redacted.
|
|
149
|
+
|
|
150
|
+
## Resolved Decisions
|
|
151
|
+
|
|
152
|
+
- `ai repair-plan` is in scope.
|
|
153
|
+
- `ai revise --phase acceptance --input` is in scope, not only technical-plan.
|
|
154
|
+
- TTY selection for `ai approve` may happen when `--version` is omitted, but CI/no-TTY must require explicit flags.
|
|
155
|
+
- Only the latest draft is approvable.
|
|
156
|
+
- `plan-review` recommendation `revise` remains blocking.
|
|
157
|
+
- `approve-with-risk` remains approvable with visible risk context.
|
|
158
|
+
- Do not add `--review` to commands that do not need editor review.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Status - Quiver v33 Approval UX and Planner Progress
|
|
2
|
+
|
|
3
|
+
**Overall status:** Completed
|
|
4
|
+
**Created:** 2026-05-28
|
|
5
|
+
**Completed:** 2026-05-28
|
|
6
|
+
**Current slice:** none
|
|
7
|
+
|
|
8
|
+
## Summary
|
|
9
|
+
|
|
10
|
+
This spec improves planner approval UX, approval decision guidance, incomplete revise input handling, and provider progress consistency across the AI workflow. All planned slices are complete and validated.
|
|
11
|
+
|
|
12
|
+
## Slice Status
|
|
13
|
+
|
|
14
|
+
| Slice | Status | Notes |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| slice-00-approval-ux-foundation | Completed | Spec package, execution plan, PR body, evidence skeleton, and slice briefs created. |
|
|
17
|
+
| slice-01-approval-candidates-model | Completed | Added shared approval-candidate data for acceptance and technical-plan review context. |
|
|
18
|
+
| slice-02-approve-interactive-selection | Completed | Added TTY draft selection for `ai approve` when `--version` is omitted and no-TTY guardrails. |
|
|
19
|
+
| slice-03-technical-plan-review-decision-data | Completed | Technical-plan candidates expose review recommendation, blocking, fixes, hardening, risks, and next command. |
|
|
20
|
+
| slice-04-revise-input-guardrails | Completed | Missing `--input`, nonexistent files, and accidental extra args fail before provider execution. |
|
|
21
|
+
| slice-05-provider-progress-alignment | Completed | `ai plan`, `ai revise`, `ai review-plan`, and `ai repair-plan` use real TTY progress and spinner behavior. |
|
|
22
|
+
| slice-06-workflow-surface-integration | Completed | Shared candidates feed `ai approvals`, `flow`, `ai status`, `ai resume`, and `spec create --interactive`. |
|
|
23
|
+
| slice-07-docs-tests-release-readiness | Completed | Docs, templates, tests, smokes, package readiness, evidence, and PR body are updated. |
|
|
24
|
+
|
|
25
|
+
## Current Blockers
|
|
26
|
+
|
|
27
|
+
- None.
|
|
28
|
+
|
|
29
|
+
## Next Step
|
|
30
|
+
|
|
31
|
+
Open review/PR with the recorded validation evidence. Do not claim npm publication from this spec.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
## Title
|
|
2
|
+
|
|
3
|
+
Quiver v33: Approval UX and planner progress
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
- Adds shared approval-candidate guidance for planner phases.
|
|
8
|
+
- Adds guided approval selection for `ai approve` in TTY when `--version` is omitted.
|
|
9
|
+
- Preserves explicit `--version` behavior for CI/no-TTY/scripted use.
|
|
10
|
+
- Hardens incomplete `ai revise --input` usage.
|
|
11
|
+
- Aligns progress/loaders for provider-backed planner/reviewer commands.
|
|
12
|
+
- Synchronizes approval guidance across `ai approvals`, `flow`, `ai status`, `ai resume`, and `spec create --interactive`.
|
|
13
|
+
|
|
14
|
+
## Scope
|
|
15
|
+
|
|
16
|
+
- Approval candidate model and formatting.
|
|
17
|
+
- Interactive approval selector.
|
|
18
|
+
- Technical-plan plan-review state visibility and blocking.
|
|
19
|
+
- Revise input validation.
|
|
20
|
+
- Planner/reviewer/repair-plan progress UX.
|
|
21
|
+
- Workflow-surface integration.
|
|
22
|
+
- Docs, tests, smokes, and release readiness.
|
|
23
|
+
|
|
24
|
+
## Files
|
|
25
|
+
|
|
26
|
+
- `.github/workflows/ci.yml`
|
|
27
|
+
- `README.md`
|
|
28
|
+
- `README_FOR_AI.md`
|
|
29
|
+
- `docs/CLI_UX_GUIDE.md`
|
|
30
|
+
- `docs/reference/commands.md`
|
|
31
|
+
- `docs/COMMANDS.md.template`
|
|
32
|
+
- `docs/WORKFLOW.md.template`
|
|
33
|
+
- `src/create-quiver/commands/ai.js`
|
|
34
|
+
- `src/create-quiver/commands/flow.js`
|
|
35
|
+
- `src/create-quiver/commands/spec.js`
|
|
36
|
+
- `src/create-quiver/index.js`
|
|
37
|
+
- `src/create-quiver/lib/git.js`
|
|
38
|
+
- `src/create-quiver/lib/approvals.js`
|
|
39
|
+
- `src/create-quiver/lib/ai/approval-candidates.js`
|
|
40
|
+
- `src/create-quiver/lib/ai/plan-review.js`
|
|
41
|
+
- `src/create-quiver/lib/paths.js`
|
|
42
|
+
- `src/create-quiver/lib/ai/run-state.js`
|
|
43
|
+
- `tests/lib/git.test.js`
|
|
44
|
+
- `tests/lib/paths.test.js`
|
|
45
|
+
- `tests/**`
|
|
46
|
+
- `specs/quiver-v33-approval-ux-and-planner-progress/**`
|
|
47
|
+
|
|
48
|
+
## How to Test (DETAILED - REQUIRED)
|
|
49
|
+
|
|
50
|
+
### Required Environment
|
|
51
|
+
|
|
52
|
+
- Node.js and npm.
|
|
53
|
+
- No provider credentials are required for dry-run/print-prompt tests.
|
|
54
|
+
- TTY-like behavior should be tested through injected prompt helpers.
|
|
55
|
+
|
|
56
|
+
### Worktree Access
|
|
57
|
+
|
|
58
|
+
- One dedicated branch/worktree for `quiver-v33-approval-ux-and-planner-progress`.
|
|
59
|
+
- One commit per slice.
|
|
60
|
+
|
|
61
|
+
### Use Cases
|
|
62
|
+
|
|
63
|
+
- Run `ai approve --phase acceptance` in a prompt-capable test harness without `--version`.
|
|
64
|
+
- Run `ai approve --phase technical-plan` for plan-review states: missing, stale, unapproved, approve, approve-with-risk, revise.
|
|
65
|
+
- Run `ai approve --phase acceptance` in no-TTY/CI without `--version` and verify it fails actionably.
|
|
66
|
+
- Run `ai approve --phase acceptance --version 1` and verify existing scripted behavior remains.
|
|
67
|
+
- Run `ai revise --phase acceptance --input` and `ai revise --phase technical-plan --input` with missing, invalid, and accidental extra input.
|
|
68
|
+
- Run provider-backed planner commands in human mode and verify progress does not leak into JSON/dry-run/print-prompt.
|
|
69
|
+
|
|
70
|
+
### Technical Verification
|
|
71
|
+
|
|
72
|
+
- `node --test tests/lib/approvals.test.js tests/commands/ai-run-state.test.js tests/commands/ai-review-plan.test.js`
|
|
73
|
+
- `node --test tests/commands/ai-plan.test.js tests/commands/ai-prepare-context-planner.test.js`
|
|
74
|
+
- `node --test tests/commands/flow.test.js tests/commands/spec-create.test.js`
|
|
75
|
+
- `node --test tests/commands/ai-agent.test.js tests/lib/cli-selectors.test.js tests/lib/cli-ux.test.js`
|
|
76
|
+
- `node --test tests/lib/git.test.js tests/lib/paths.test.js`
|
|
77
|
+
- `node --test tests/**/*.test.js`
|
|
78
|
+
- `npm run smoke:create-quiver`
|
|
79
|
+
- `npm run smoke:doctor-fixtures`
|
|
80
|
+
- `npm run smoke:guided-workflow`
|
|
81
|
+
- `npm run package:quiver`
|
|
82
|
+
- `node scripts/ci/smoke-cross-platform.js`
|
|
83
|
+
- `git diff --check`
|
|
84
|
+
- `node bin/create-quiver.js spec validate specs/quiver-v33-approval-ux-and-planner-progress`
|
|
85
|
+
|
|
86
|
+
## Evidence
|
|
87
|
+
|
|
88
|
+
- `git diff --check` passed.
|
|
89
|
+
- `node bin/create-quiver.js spec validate specs/quiver-v33-approval-ux-and-planner-progress` passed.
|
|
90
|
+
- `node --test tests/lib/git.test.js tests/lib/paths.test.js` passed.
|
|
91
|
+
- `node --test tests/**/*.test.js` passed: 496/496.
|
|
92
|
+
- `npm run smoke:create-quiver` passed.
|
|
93
|
+
- `npm run smoke:doctor-fixtures` passed.
|
|
94
|
+
- `npm run smoke:guided-workflow` passed.
|
|
95
|
+
- `npm run package:quiver` passed.
|
|
96
|
+
- `node scripts/ci/smoke-cross-platform.js` passed after adding `npm ci` to the GitHub Actions smoke matrix.
|
|
97
|
+
- Detailed slice evidence is in `specs/quiver-v33-approval-ux-and-planner-progress/EVIDENCE_REPORT.md`.
|
|
98
|
+
|
|
99
|
+
## Rollback
|
|
100
|
+
|
|
101
|
+
Revert slice commits in reverse order. Preserve explicit `--version` approval behavior and existing non-interactive planner workflows during rollback.
|
|
102
|
+
|
|
103
|
+
## Risks / Notes
|
|
104
|
+
|
|
105
|
+
- Approval gates are critical workflow safety controls; selector UX must not approve stale or blocked drafts.
|
|
106
|
+
- Candidate summaries must remain redacted and truncated.
|
|
107
|
+
- Provider progress must not contaminate machine-readable output.
|
|
108
|
+
- GitHub Actions cross-platform smoke requires dependencies installed before invoking the source CLI.
|
|
109
|
+
- This PR does not publish npm.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-00 Approval UX foundation
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Created the v33 planning package for approval UX, planner progress, shared approval decision guidance, and revise input guardrails.
|
|
6
|
+
|
|
7
|
+
## Validation Against Acceptance Criteria
|
|
8
|
+
|
|
9
|
+
- [x] Spec folder created.
|
|
10
|
+
- [x] Every slice has `slice.json`, `EXECUTION_BRIEF.md`, and `CLOSURE_BRIEF.md`.
|
|
11
|
+
- [x] Product code was not modified.
|
|
12
|
+
- [x] JSON validation captured.
|
|
13
|
+
- [x] Spec validation captured.
|
|
14
|
+
- [x] `git diff --check` captured.
|
|
15
|
+
|
|
16
|
+
## Relevant Changes
|
|
17
|
+
|
|
18
|
+
- New folder: `specs/quiver-v33-approval-ux-and-planner-progress/`.
|
|
19
|
+
|
|
20
|
+
## Pending
|
|
21
|
+
|
|
22
|
+
- None.
|
|
23
|
+
|
|
24
|
+
## Remaining Risks
|
|
25
|
+
|
|
26
|
+
- The repository still lacks `docs/INDEX.md`; this spec used the documented Quiver sources available in the repo.
|
|
27
|
+
|
|
28
|
+
## Future Recommendations
|
|
29
|
+
|
|
30
|
+
Keep future approval-gate changes covered by focused selector, no-TTY, review-state, and workflow-surface tests.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-00 Approval UX foundation
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
The user approved a revised production-reviewed plan for approval UX, planner progress, revise input guardrails, and shared approval decision guidance.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Create the v33 planning package under `specs/quiver-v33-approval-ux-and-planner-progress/` without implementing product code.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- `specs/quiver-v33-approval-ux-and-planner-progress/SPEC.md`
|
|
14
|
+
- `specs/quiver-v33-approval-ux-and-planner-progress/STATUS.md`
|
|
15
|
+
- `specs/quiver-v33-approval-ux-and-planner-progress/EVIDENCE_REPORT.md`
|
|
16
|
+
- `specs/quiver-v33-approval-ux-and-planner-progress/EXECUTION_PLAN.md`
|
|
17
|
+
- `specs/quiver-v33-approval-ux-and-planner-progress/pr.md`
|
|
18
|
+
- all slice folders and handoff briefs
|
|
19
|
+
|
|
20
|
+
## Acceptance Criteria
|
|
21
|
+
|
|
22
|
+
- Spec package exists.
|
|
23
|
+
- Every slice has `slice.json`, `EXECUTION_BRIEF.md`, and `CLOSURE_BRIEF.md`.
|
|
24
|
+
- `slice-00` records the approved acceptance criteria and revised technical plan.
|
|
25
|
+
- JSON files parse.
|
|
26
|
+
- Spec validation passes.
|
|
27
|
+
- No product code is modified.
|
|
28
|
+
|
|
29
|
+
## Technical Plan Summary
|
|
30
|
+
|
|
31
|
+
Use recent Quiver specs as the local contract and keep slice-00 documentation-only.
|
|
32
|
+
|
|
33
|
+
## Suggested Steps
|
|
34
|
+
|
|
35
|
+
1. Create the spec folder.
|
|
36
|
+
2. Create top-level spec artifacts.
|
|
37
|
+
3. Create slice folders and JSON contracts.
|
|
38
|
+
4. Create execution and closure briefs for every slice.
|
|
39
|
+
5. Validate JSON and spec structure.
|
|
40
|
+
|
|
41
|
+
## Restrictions
|
|
42
|
+
|
|
43
|
+
- Do not edit `src/`.
|
|
44
|
+
- Do not edit tests.
|
|
45
|
+
- Do not claim implementation is complete.
|
|
46
|
+
|
|
47
|
+
## Risks
|
|
48
|
+
|
|
49
|
+
- Missing `docs/INDEX.md` remains a documentation debt outside this slice.
|
|
50
|
+
|
|
51
|
+
## Completion Checklist
|
|
52
|
+
|
|
53
|
+
- [x] Spec artifacts created.
|
|
54
|
+
- [x] Slice contracts created.
|
|
55
|
+
- [x] Handoff briefs created.
|
|
56
|
+
- [x] Validation commands run.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-00-approval-ux-foundation",
|
|
3
|
+
"ticket": "QUIVER-33-00",
|
|
4
|
+
"type": "docs",
|
|
5
|
+
"title": "Approval UX foundation",
|
|
6
|
+
"objective": "Create the v33 spec package for approval UX, planner progress, and shared decision guidance.",
|
|
7
|
+
"description": "Publishes the approved spec, execution plan, PR body, status, evidence report, slice definitions, and handoffs without changing product code.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v33-approval-ux-foundation",
|
|
12
|
+
"branch_name": "feature/QUIVER-33-00-v33-approval-ux-foundation"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"specs/quiver-v33-approval-ux-and-planner-progress/**"
|
|
16
|
+
],
|
|
17
|
+
"expected_read_paths": [
|
|
18
|
+
"README_FOR_AI.md",
|
|
19
|
+
"docs/CLI_UX_GUIDE.md",
|
|
20
|
+
"docs/reference/commands.md",
|
|
21
|
+
"docs/workflows/full-ai-spec-to-pr.md",
|
|
22
|
+
"specs/quiver-v29-planner-prepare-context-cli-ux/**",
|
|
23
|
+
"specs/quiver-v30-interactive-cli-ux-agent-selection/**",
|
|
24
|
+
"specs/quiver-v31-ai-model-catalog-agent-selection/**"
|
|
25
|
+
],
|
|
26
|
+
"allowed_write_paths": [
|
|
27
|
+
"specs/quiver-v33-approval-ux-and-planner-progress/**"
|
|
28
|
+
],
|
|
29
|
+
"depends_on": [],
|
|
30
|
+
"parallel_safe": "no",
|
|
31
|
+
"parallel_safe_reason": "slice-00 is the foundation barrier for the spec.",
|
|
32
|
+
"must": [
|
|
33
|
+
"Create SPEC.md, STATUS.md, EVIDENCE_REPORT.md, EXECUTION_PLAN.md, and pr.md.",
|
|
34
|
+
"Create slice.json, EXECUTION_BRIEF.md, and CLOSURE_BRIEF.md for every slice.",
|
|
35
|
+
"Capture approved acceptance criteria and production review fixes.",
|
|
36
|
+
"Avoid product code changes."
|
|
37
|
+
],
|
|
38
|
+
"not_included": [
|
|
39
|
+
"Implementing approval selectors.",
|
|
40
|
+
"Changing command behavior.",
|
|
41
|
+
"Updating public docs outside this spec package.",
|
|
42
|
+
"Publishing a package."
|
|
43
|
+
],
|
|
44
|
+
"acceptance": [
|
|
45
|
+
"Spec folder exists under specs/quiver-v33-approval-ux-and-planner-progress.",
|
|
46
|
+
"Every slice has slice.json, EXECUTION_BRIEF.md, and CLOSURE_BRIEF.md.",
|
|
47
|
+
"Every slice.json parses successfully.",
|
|
48
|
+
"Spec validation passes.",
|
|
49
|
+
"No product code is modified."
|
|
50
|
+
],
|
|
51
|
+
"tests": [
|
|
52
|
+
"git diff --check",
|
|
53
|
+
"find specs/quiver-v33-approval-ux-and-planner-progress -name \"slice.json\" -print -exec node -e \"JSON.parse(require('fs').readFileSync(process.argv[1], 'utf8'))\" {} \\;",
|
|
54
|
+
"node bin/create-quiver.js spec validate specs/quiver-v33-approval-ux-and-planner-progress"
|
|
55
|
+
],
|
|
56
|
+
"validation_hints": [
|
|
57
|
+
"Keep this slice documentation-only.",
|
|
58
|
+
"Do not claim implementation or package publication."
|
|
59
|
+
],
|
|
60
|
+
"estimated_hours": 2,
|
|
61
|
+
"status": "completed",
|
|
62
|
+
"blocked_reason": null,
|
|
63
|
+
"actual_hours": 2,
|
|
64
|
+
"completed_at": "2026-05-28"
|
|
65
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-01 Shared approval candidates model
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Completed shared approval-candidate construction for acceptance and technical-plan phases. Candidates include current/latest flags, approvability, next command, redacted/truncated previews, and technical-plan review decision data.
|
|
6
|
+
|
|
7
|
+
## Validation
|
|
8
|
+
|
|
9
|
+
- [x] Candidate model tests pass.
|
|
10
|
+
- [x] Existing approval and plan-review tests pass.
|
|
11
|
+
- [x] No provider execution added.
|
|
12
|
+
|
|
13
|
+
## Pending
|
|
14
|
+
|
|
15
|
+
- None.
|
|
16
|
+
|
|
17
|
+
## Remaining Risks
|
|
18
|
+
|
|
19
|
+
- None critical; downstream surfaces consume the model in slice-06.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-01 Shared approval candidates model
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Approval guidance is currently split across approval persistence, plan-review metadata, `ai approve`, `ai approvals`, `flow`, and run-state formatting.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Create a shared read-only candidate model that every later approval UX surface can consume.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- `src/create-quiver/lib/approvals.js`
|
|
14
|
+
- `src/create-quiver/lib/ai/plan-review.js`
|
|
15
|
+
- focused tests
|
|
16
|
+
|
|
17
|
+
## Acceptance Criteria
|
|
18
|
+
|
|
19
|
+
- Candidate data includes phase, version, path, source, current/latest state, review recommendation, blocking state, risks, and next command.
|
|
20
|
+
- Only the latest draft is marked recommended/approvable.
|
|
21
|
+
- Technical-plan candidates include plan-review state.
|
|
22
|
+
- Candidate summaries are bounded and safe.
|
|
23
|
+
- Existing approval metadata remains backward compatible.
|
|
24
|
+
|
|
25
|
+
## Technical Plan Summary
|
|
26
|
+
|
|
27
|
+
Add pure helper functions around existing metadata readers. Keep formatting and interactivity out of this slice except for minimal candidate summary helpers if needed.
|
|
28
|
+
|
|
29
|
+
## Suggested Steps
|
|
30
|
+
|
|
31
|
+
1. Model candidate shape.
|
|
32
|
+
2. Build acceptance candidates from approval metadata.
|
|
33
|
+
3. Build technical-plan candidates with plan-review context.
|
|
34
|
+
4. Add unit tests for missing, draft, stale, approved, approve-with-risk, and revise states.
|
|
35
|
+
5. Export only stable helpers needed by later slices.
|
|
36
|
+
|
|
37
|
+
## Restrictions
|
|
38
|
+
|
|
39
|
+
- Do not add prompts.
|
|
40
|
+
- Do not change approval persistence format unless tests prove compatibility.
|
|
41
|
+
- Do not relax review blocking.
|
|
42
|
+
|
|
43
|
+
## Risks
|
|
44
|
+
|
|
45
|
+
- A poorly scoped helper can become another duplicated formatter instead of a source of truth.
|
|
46
|
+
|
|
47
|
+
## Completion Checklist
|
|
48
|
+
|
|
49
|
+
- [ ] Shared candidate helpers implemented.
|
|
50
|
+
- [ ] Candidate tests added.
|
|
51
|
+
- [ ] Existing approval tests still pass.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-01-approval-candidates-model",
|
|
3
|
+
"ticket": "QUIVER-33-01",
|
|
4
|
+
"type": "feature",
|
|
5
|
+
"title": "Shared approval candidates model",
|
|
6
|
+
"objective": "Create a single approval-candidate model for acceptance, technical-plan, and plan-review decision data.",
|
|
7
|
+
"description": "Adds reusable read-only candidate construction so approval commands and workflow surfaces share the same current draft, version, review state, recommendation, and next-command guidance.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v33-approval-candidates-model",
|
|
12
|
+
"branch_name": "feature/QUIVER-33-01-v33-approval-candidates-model"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/lib/approvals.js",
|
|
16
|
+
"src/create-quiver/lib/ai/plan-review.js",
|
|
17
|
+
"tests/lib/approvals.test.js",
|
|
18
|
+
"tests/commands/ai-review-plan.test.js"
|
|
19
|
+
],
|
|
20
|
+
"expected_read_paths": [
|
|
21
|
+
"src/create-quiver/lib/approvals.js",
|
|
22
|
+
"src/create-quiver/lib/ai/plan-review.js",
|
|
23
|
+
"src/create-quiver/commands/ai.js",
|
|
24
|
+
"tests/lib/approvals.test.js",
|
|
25
|
+
"tests/commands/ai-review-plan.test.js",
|
|
26
|
+
"SPEC.md"
|
|
27
|
+
],
|
|
28
|
+
"allowed_write_paths": [
|
|
29
|
+
"src/create-quiver/lib/approvals.js",
|
|
30
|
+
"src/create-quiver/lib/ai/plan-review.js",
|
|
31
|
+
"tests/lib/approvals.test.js",
|
|
32
|
+
"tests/commands/ai-review-plan.test.js",
|
|
33
|
+
"specs/quiver-v33-approval-ux-and-planner-progress/**"
|
|
34
|
+
],
|
|
35
|
+
"depends_on": [
|
|
36
|
+
"slice-00-approval-ux-foundation"
|
|
37
|
+
],
|
|
38
|
+
"parallel_safe": "no",
|
|
39
|
+
"parallel_safe_reason": "This model is a dependency for later command and workflow surfaces.",
|
|
40
|
+
"must": [
|
|
41
|
+
"Expose candidate data without changing existing persisted approval metadata unless required.",
|
|
42
|
+
"Include phase, version, path, created_at, source_file, latest/current flags, status, recommendation, blocking state, recommended action, and next command.",
|
|
43
|
+
"Represent older drafts as history but mark them non-current and not recommended.",
|
|
44
|
+
"Expose technical-plan plan-review state using the existing plan-review semantics.",
|
|
45
|
+
"Use redacted/truncated summary helpers for any preview text.",
|
|
46
|
+
"Keep JSON/no-TTY consumers clean."
|
|
47
|
+
],
|
|
48
|
+
"not_included": [
|
|
49
|
+
"Interactive prompts.",
|
|
50
|
+
"Changing approval execution behavior.",
|
|
51
|
+
"Changing plan-review blocking rules."
|
|
52
|
+
],
|
|
53
|
+
"acceptance": [
|
|
54
|
+
"Acceptance candidates include the latest draft and draft history.",
|
|
55
|
+
"Technical-plan candidates include plan-review state and recommendation.",
|
|
56
|
+
"Older drafts are visible as history but not marked approvable.",
|
|
57
|
+
"A revise recommendation is represented as blocking.",
|
|
58
|
+
"Approve-with-risk is represented as approvable with risks.",
|
|
59
|
+
"Candidate summaries do not print unbounded draft contents."
|
|
60
|
+
],
|
|
61
|
+
"tests": [
|
|
62
|
+
"node --test tests/lib/approvals.test.js tests/commands/ai-review-plan.test.js",
|
|
63
|
+
"git diff --check"
|
|
64
|
+
],
|
|
65
|
+
"validation_hints": [
|
|
66
|
+
"Prefer pure functions that can be reused by commands without I/O side effects.",
|
|
67
|
+
"Do not call providers in this slice."
|
|
68
|
+
],
|
|
69
|
+
"estimated_hours": 6,
|
|
70
|
+
"status": "completed",
|
|
71
|
+
"blocked_reason": null,
|
|
72
|
+
"actual_hours": 6,
|
|
73
|
+
"completed_at": "2026-05-28"
|
|
74
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-02 Interactive approval selection
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Completed TTY approval selection for acceptance and technical-plan when `--version` is omitted, while preserving explicit version approval for scripts and CI.
|
|
6
|
+
|
|
7
|
+
## Validation
|
|
8
|
+
|
|
9
|
+
- [x] Acceptance selector test passes.
|
|
10
|
+
- [x] Technical-plan selector test passes.
|
|
11
|
+
- [x] No-TTY/CI failure test passes.
|
|
12
|
+
- [x] Explicit version regression test passes.
|
|
13
|
+
|
|
14
|
+
## Pending
|
|
15
|
+
|
|
16
|
+
- None.
|
|
17
|
+
|
|
18
|
+
## Remaining Risks
|
|
19
|
+
|
|
20
|
+
- None critical; slice-06 integrates shared guidance into the remaining surfaces.
|