create-quiver 0.15.1 → 0.15.2
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 +2 -0
- package/README_FOR_AI.md +5 -3
- package/docs/CLI_UX_GUIDE.md +15 -1
- package/docs/COMMANDS.md.template +2 -1
- package/docs/WORKFLOW.md.template +2 -2
- package/docs/reference/commands.md +10 -4
- package/package.json +1 -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/src/create-quiver/commands/ai.js +112 -12
- package/src/create-quiver/commands/flow.js +74 -12
- package/src/create-quiver/commands/spec.js +8 -1
- package/src/create-quiver/index.js +10 -2
- 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/git.js +13 -4
- package/src/create-quiver/lib/paths.js +45 -3
|
@@ -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.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-02 Interactive approval selection
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Users currently need to run `ai approvals`, inspect versions manually, then pass `--version <n>`. The requested UX should behave like `ai agent set`: guide users in TTY and stay explicit in automation.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Add TTY approval selection for `ai approve` when `--version` is omitted.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- `src/create-quiver/commands/ai.js`
|
|
14
|
+
- selector helpers if needed
|
|
15
|
+
- approval tests
|
|
16
|
+
|
|
17
|
+
## Acceptance Criteria
|
|
18
|
+
|
|
19
|
+
- TTY acceptance approval without `--version` shows candidates.
|
|
20
|
+
- TTY technical-plan approval without `--version` shows review-aware candidates.
|
|
21
|
+
- No-TTY/CI requires `--version`.
|
|
22
|
+
- Explicit `--version` behavior remains stable.
|
|
23
|
+
- Cancellation writes no files.
|
|
24
|
+
- Blocked candidates cannot be approved.
|
|
25
|
+
|
|
26
|
+
## Technical Plan Summary
|
|
27
|
+
|
|
28
|
+
Resolve candidates from slice-01, use `selectOption` for prompt-capable environments, and pass the selected version into the existing approval path.
|
|
29
|
+
|
|
30
|
+
## Suggested Steps
|
|
31
|
+
|
|
32
|
+
1. Add approval selection resolver.
|
|
33
|
+
2. Wire resolver into `runApprove`.
|
|
34
|
+
3. Add no-TTY guardrail message.
|
|
35
|
+
4. Add tests for acceptance and technical-plan.
|
|
36
|
+
5. Verify explicit version path remains unchanged.
|
|
37
|
+
|
|
38
|
+
## Restrictions
|
|
39
|
+
|
|
40
|
+
- Do not add `--review` support.
|
|
41
|
+
- Do not weaken technical-plan validation.
|
|
42
|
+
- Do not prompt in CI/no-TTY/JSON.
|
|
43
|
+
|
|
44
|
+
## Risks
|
|
45
|
+
|
|
46
|
+
- Prompt availability detection must match existing `ai agent set` behavior closely enough to avoid CI hangs.
|
|
47
|
+
|
|
48
|
+
## Completion Checklist
|
|
49
|
+
|
|
50
|
+
- [ ] TTY selector implemented.
|
|
51
|
+
- [ ] No-TTY guardrail tested.
|
|
52
|
+
- [ ] Cancellation tested.
|
|
53
|
+
- [ ] Explicit `--version` tested.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-02-approve-interactive-selection",
|
|
3
|
+
"ticket": "QUIVER-33-02",
|
|
4
|
+
"type": "feature",
|
|
5
|
+
"title": "Interactive approval selection",
|
|
6
|
+
"objective": "Let `ai approve --phase acceptance|technical-plan` guide TTY users when `--version` is omitted while preserving explicit non-interactive behavior.",
|
|
7
|
+
"description": "Adds a selector patterned after `ai agent set`, recommends the current latest draft, blocks unsafe approvals, and keeps CI/no-TTY requiring `--version <n>`.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v33-approve-interactive-selection",
|
|
12
|
+
"branch_name": "feature/QUIVER-33-02-v33-approve-interactive-selection"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/commands/ai.js",
|
|
16
|
+
"src/create-quiver/lib/cli/selectors.js",
|
|
17
|
+
"src/create-quiver/lib/approvals.js",
|
|
18
|
+
"tests/commands/ai-review-plan.test.js",
|
|
19
|
+
"tests/commands/ai-plan.test.js",
|
|
20
|
+
"tests/lib/cli-selectors.test.js"
|
|
21
|
+
],
|
|
22
|
+
"expected_read_paths": [
|
|
23
|
+
"src/create-quiver/commands/ai.js",
|
|
24
|
+
"src/create-quiver/lib/approvals.js",
|
|
25
|
+
"src/create-quiver/lib/cli/selectors.js",
|
|
26
|
+
"tests/commands/ai-review-plan.test.js",
|
|
27
|
+
"tests/commands/ai-plan.test.js",
|
|
28
|
+
"SPEC.md"
|
|
29
|
+
],
|
|
30
|
+
"allowed_write_paths": [
|
|
31
|
+
"src/create-quiver/commands/ai.js",
|
|
32
|
+
"src/create-quiver/lib/cli/selectors.js",
|
|
33
|
+
"src/create-quiver/lib/approvals.js",
|
|
34
|
+
"tests/commands/ai-review-plan.test.js",
|
|
35
|
+
"tests/commands/ai-plan.test.js",
|
|
36
|
+
"tests/lib/cli-selectors.test.js",
|
|
37
|
+
"specs/quiver-v33-approval-ux-and-planner-progress/**"
|
|
38
|
+
],
|
|
39
|
+
"depends_on": [
|
|
40
|
+
"slice-01-approval-candidates-model"
|
|
41
|
+
],
|
|
42
|
+
"parallel_safe": "no",
|
|
43
|
+
"parallel_safe_reason": "This slice changes approval command behavior and should land before downstream consumers rely on it.",
|
|
44
|
+
"must": [
|
|
45
|
+
"Open a selector only when `--version` is omitted and prompts are available.",
|
|
46
|
+
"Require explicit `--version <n>` in CI/no-TTY.",
|
|
47
|
+
"Keep explicit `--version <n>` behavior backward compatible.",
|
|
48
|
+
"Recommend the current/latest approvable draft.",
|
|
49
|
+
"Show concise useful decision information for each candidate.",
|
|
50
|
+
"Allow cancellation without writes.",
|
|
51
|
+
"Do not approve older or blocked drafts silently."
|
|
52
|
+
],
|
|
53
|
+
"not_included": [
|
|
54
|
+
"Changing plan-review result derivation.",
|
|
55
|
+
"Changing spec generation.",
|
|
56
|
+
"Adding editor review to approve."
|
|
57
|
+
],
|
|
58
|
+
"acceptance": [
|
|
59
|
+
"`ai approve --phase acceptance` in TTY without `--version` shows a selector.",
|
|
60
|
+
"`ai approve --phase technical-plan` in TTY without `--version` shows a selector with review context.",
|
|
61
|
+
"No-TTY/CI without `--version` fails actionably.",
|
|
62
|
+
"`--version 1` still approves through the existing path when valid.",
|
|
63
|
+
"Canceling the selector writes no approval.",
|
|
64
|
+
"Older draft versions cannot be approved through the selector."
|
|
65
|
+
],
|
|
66
|
+
"tests": [
|
|
67
|
+
"node --test tests/commands/ai-plan.test.js tests/commands/ai-review-plan.test.js tests/lib/cli-selectors.test.js",
|
|
68
|
+
"git diff --check"
|
|
69
|
+
],
|
|
70
|
+
"validation_hints": [
|
|
71
|
+
"Use injected selector helpers in tests; do not require a real terminal.",
|
|
72
|
+
"Test no-TTY and CI explicitly."
|
|
73
|
+
],
|
|
74
|
+
"estimated_hours": 8,
|
|
75
|
+
"status": "completed",
|
|
76
|
+
"blocked_reason": null,
|
|
77
|
+
"actual_hours": 8,
|
|
78
|
+
"completed_at": "2026-05-28"
|
|
79
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-03 Technical-plan review decision data
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Completed technical-plan candidate enrichment so approval decisions reflect review status, approval recommendation, blocking state, required fixes, optional hardening, risks, and next command.
|
|
6
|
+
|
|
7
|
+
## Validation
|
|
8
|
+
|
|
9
|
+
- [x] Plan-review state tests pass.
|
|
10
|
+
- [x] Revise blocking test passes.
|
|
11
|
+
- [x] Approve-with-risk test passes.
|
|
12
|
+
|
|
13
|
+
## Pending
|
|
14
|
+
|
|
15
|
+
- None.
|
|
16
|
+
|
|
17
|
+
## Remaining Risks
|
|
18
|
+
|
|
19
|
+
- None critical; workflow surfaces are integrated in slice-06.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-03 Technical-plan review decision data
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Technical-plan approval already has safety checks, but users need visible decision data before approving.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Surface plan-review state and recommendation consistently during technical-plan approval.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- `src/create-quiver/lib/ai/plan-review.js`
|
|
14
|
+
- approval candidate helpers
|
|
15
|
+
- `runApprove` selector output if needed
|
|
16
|
+
- focused plan-review tests
|
|
17
|
+
|
|
18
|
+
## Acceptance Criteria
|
|
19
|
+
|
|
20
|
+
- Missing, stale, unapproved, approve, approve-with-risk, and revise states are distinguishable.
|
|
21
|
+
- Revise blocks approval.
|
|
22
|
+
- Approve-with-risk remains approvable and visible.
|
|
23
|
+
- Required fixes, optional hardening, risks, and next command are shown where relevant.
|
|
24
|
+
- Existing technical-plan approval validation remains intact.
|
|
25
|
+
|
|
26
|
+
## Technical Plan Summary
|
|
27
|
+
|
|
28
|
+
Extend the shared candidate data with normalized review-decision fields and consume them in the approval selector.
|
|
29
|
+
|
|
30
|
+
## Suggested Steps
|
|
31
|
+
|
|
32
|
+
1. Normalize review decision state.
|
|
33
|
+
2. Add candidate annotations for technical-plan.
|
|
34
|
+
3. Update selector rendering or approval summaries.
|
|
35
|
+
4. Add tests for all review states.
|
|
36
|
+
|
|
37
|
+
## Restrictions
|
|
38
|
+
|
|
39
|
+
- Do not modify provider prompts.
|
|
40
|
+
- Do not change review-result schema unless needed for backward compatibility.
|
|
41
|
+
|
|
42
|
+
## Risks
|
|
43
|
+
|
|
44
|
+
- Displaying unapproved vs reviewed states incorrectly can lead users to approve the wrong artifact.
|
|
45
|
+
|
|
46
|
+
## Completion Checklist
|
|
47
|
+
|
|
48
|
+
- [ ] Review states normalized.
|
|
49
|
+
- [ ] Blocking behavior preserved.
|
|
50
|
+
- [ ] Tests cover all review states.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-03-technical-plan-review-decision-data",
|
|
3
|
+
"ticket": "QUIVER-33-03",
|
|
4
|
+
"type": "feature",
|
|
5
|
+
"title": "Technical-plan review decision data",
|
|
6
|
+
"objective": "Make technical-plan approval decisions visibly reflect plan-review state and recommendation.",
|
|
7
|
+
"description": "Ensures approval selection and command output distinguish missing, stale, unapproved, approve, approve-with-risk, and revise review states without weakening existing gates.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v33-technical-plan-review-decision-data",
|
|
12
|
+
"branch_name": "feature/QUIVER-33-03-v33-technical-plan-review-decision-data"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/lib/ai/plan-review.js",
|
|
16
|
+
"src/create-quiver/lib/approvals.js",
|
|
17
|
+
"src/create-quiver/commands/ai.js",
|
|
18
|
+
"tests/commands/ai-review-plan.test.js",
|
|
19
|
+
"tests/lib/approvals.test.js"
|
|
20
|
+
],
|
|
21
|
+
"expected_read_paths": [
|
|
22
|
+
"src/create-quiver/lib/ai/plan-review.js",
|
|
23
|
+
"src/create-quiver/lib/approvals.js",
|
|
24
|
+
"src/create-quiver/commands/ai.js",
|
|
25
|
+
"tests/commands/ai-review-plan.test.js",
|
|
26
|
+
"SPEC.md"
|
|
27
|
+
],
|
|
28
|
+
"allowed_write_paths": [
|
|
29
|
+
"src/create-quiver/lib/ai/plan-review.js",
|
|
30
|
+
"src/create-quiver/lib/approvals.js",
|
|
31
|
+
"src/create-quiver/commands/ai.js",
|
|
32
|
+
"tests/commands/ai-review-plan.test.js",
|
|
33
|
+
"tests/lib/approvals.test.js",
|
|
34
|
+
"specs/quiver-v33-approval-ux-and-planner-progress/**"
|
|
35
|
+
],
|
|
36
|
+
"depends_on": [
|
|
37
|
+
"slice-01-approval-candidates-model",
|
|
38
|
+
"slice-02-approve-interactive-selection"
|
|
39
|
+
],
|
|
40
|
+
"parallel_safe": "yes",
|
|
41
|
+
"parallel_safe_reason": "Can proceed after approval selection if command-file conflicts are coordinated.",
|
|
42
|
+
"must": [
|
|
43
|
+
"Represent plan-review statuses missing, stale, unapproved, reviewed approve, reviewed approve-with-risk, and reviewed revise.",
|
|
44
|
+
"Block approval when recommendation is revise.",
|
|
45
|
+
"Allow approve-with-risk with visible risk context.",
|
|
46
|
+
"Show required fixes count and next command when blocked.",
|
|
47
|
+
"Preserve existing explicit technical-plan approval validation."
|
|
48
|
+
],
|
|
49
|
+
"not_included": [
|
|
50
|
+
"Changing how reviewers generate review metadata.",
|
|
51
|
+
"Changing structured review schema unless required for display.",
|
|
52
|
+
"Relaxing stale review checks."
|
|
53
|
+
],
|
|
54
|
+
"acceptance": [
|
|
55
|
+
"Technical-plan selector shows missing review as not ready.",
|
|
56
|
+
"Stale review blocks or redirects to review-plan.",
|
|
57
|
+
"Unapproved review guides to approve with the reviewed version when valid.",
|
|
58
|
+
"Approve-with-risk exposes optional hardening and risks.",
|
|
59
|
+
"Revise recommendation blocks approval.",
|
|
60
|
+
"Explicit version approval still enforces the same blocking rules."
|
|
61
|
+
],
|
|
62
|
+
"tests": [
|
|
63
|
+
"node --test tests/commands/ai-review-plan.test.js tests/lib/approvals.test.js",
|
|
64
|
+
"git diff --check"
|
|
65
|
+
],
|
|
66
|
+
"validation_hints": [
|
|
67
|
+
"Reuse existing `reviewBlocksApproval` semantics.",
|
|
68
|
+
"Add tests around every plan-review status."
|
|
69
|
+
],
|
|
70
|
+
"estimated_hours": 6,
|
|
71
|
+
"status": "completed",
|
|
72
|
+
"blocked_reason": null,
|
|
73
|
+
"actual_hours": 6,
|
|
74
|
+
"completed_at": "2026-05-28"
|
|
75
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-04 Revise input guardrails
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Completed revise input guardrails for missing `--input` values, nonexistent feedback files, and accidental extra positional arguments before any provider execution.
|
|
6
|
+
|
|
7
|
+
## Validation
|
|
8
|
+
|
|
9
|
+
- [x] Missing input tests pass.
|
|
10
|
+
- [x] Nonexistent file tests pass.
|
|
11
|
+
- [x] Valid revise regression tests pass.
|
|
12
|
+
|
|
13
|
+
## Pending
|
|
14
|
+
|
|
15
|
+
- None.
|
|
16
|
+
|
|
17
|
+
## Remaining Risks
|
|
18
|
+
|
|
19
|
+
- None critical; broader CLI contract coverage passed in the full suite.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-04 Revise input guardrails
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
The requirement explicitly called out incomplete `ai revise --phase technical-plan --input` usage and an accidental trailing `s`. Production review expanded the scope to acceptance revise as well.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Make invalid `ai revise --input` usage fail clearly before provider execution for both planner phases.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- CLI argument parsing if needed.
|
|
14
|
+
- `runRevise` / `runPlan` input validation.
|
|
15
|
+
- focused command tests.
|
|
16
|
+
|
|
17
|
+
## Acceptance Criteria
|
|
18
|
+
|
|
19
|
+
- Missing `--input` value is detected for acceptance and technical-plan.
|
|
20
|
+
- Nonexistent feedback files fail before provider execution.
|
|
21
|
+
- Accidental extra arguments are reported or rejected clearly.
|
|
22
|
+
- No-TTY/CI never prompts.
|
|
23
|
+
- Valid revise commands remain unchanged.
|
|
24
|
+
|
|
25
|
+
## Technical Plan Summary
|
|
26
|
+
|
|
27
|
+
Add explicit guardrails at the parser/command boundary, then test command-level behavior with provider execution disabled or asserted absent.
|
|
28
|
+
|
|
29
|
+
## Suggested Steps
|
|
30
|
+
|
|
31
|
+
1. Inspect parse behavior for `--input` without value.
|
|
32
|
+
2. Add a consistent actionable error.
|
|
33
|
+
3. Add nonexistent-file regression coverage.
|
|
34
|
+
4. Add accidental extra-arg coverage if parser supports it.
|
|
35
|
+
5. Confirm valid revise flows still pass.
|
|
36
|
+
|
|
37
|
+
## Restrictions
|
|
38
|
+
|
|
39
|
+
- Do not run a provider when input is invalid.
|
|
40
|
+
- Do not auto-create feedback files.
|
|
41
|
+
|
|
42
|
+
## Risks
|
|
43
|
+
|
|
44
|
+
- Parser changes can affect other commands that use `--input`.
|
|
45
|
+
|
|
46
|
+
## Completion Checklist
|
|
47
|
+
|
|
48
|
+
- [ ] Missing input covered for both phases.
|
|
49
|
+
- [ ] Nonexistent input covered.
|
|
50
|
+
- [ ] Extra argument behavior covered.
|
|
51
|
+
- [ ] Valid revise flow still passes.
|