create-quiver 0.17.2 → 0.17.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/CHANGELOG.md +4 -0
- package/docs/CLI_UX_GUIDE.md +13 -3
- package/docs/TROUBLESHOOTING.md +43 -2
- package/docs/reference/commands.md +31 -9
- package/docs/workflows/existing-project.md +18 -3
- package/package.json +1 -1
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +4 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/EVIDENCE_REPORT.md +209 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/EXECUTION_PLAN.md +49 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/SPEC.md +276 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/STATUS.md +29 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-01-cli-proposal-contract/CLOSURE_BRIEF.md +47 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-01-cli-proposal-contract/EXECUTION_BRIEF.md +67 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-01-cli-proposal-contract/pr.md +129 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-01-cli-proposal-contract/slice.json +82 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-02-save-proposal-flow/CLOSURE_BRIEF.md +39 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-02-save-proposal-flow/EXECUTION_BRIEF.md +61 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-02-save-proposal-flow/pr.md +116 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-02-save-proposal-flow/slice.json +69 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-03-noninteractive-apply-engine/CLOSURE_BRIEF.md +36 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-03-noninteractive-apply-engine/EXECUTION_BRIEF.md +62 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-03-noninteractive-apply-engine/pr.md +132 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-03-noninteractive-apply-engine/slice.json +76 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-04-interactive-apply-ux/CLOSURE_BRIEF.md +47 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-04-interactive-apply-ux/EXECUTION_BRIEF.md +70 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-04-interactive-apply-ux/pr.md +141 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-04-interactive-apply-ux/slice.json +72 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-05-apply-saved-proposal/CLOSURE_BRIEF.md +42 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-05-apply-saved-proposal/EXECUTION_BRIEF.md +61 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-05-apply-saved-proposal/pr.md +129 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-05-apply-saved-proposal/slice.json +67 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-06-i18n-docs-release-smoke/CLOSURE_BRIEF.md +38 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-06-i18n-docs-release-smoke/EXECUTION_BRIEF.md +64 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-06-i18n-docs-release-smoke/pr.md +123 -0
- package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-06-i18n-docs-release-smoke/slice.json +76 -0
- package/src/create-quiver/commands/ai.js +636 -66
- package/src/create-quiver/index.js +80 -1
- package/src/create-quiver/lib/ai/analyze-project-apply.js +269 -0
- package/src/create-quiver/lib/ai/analyze-project-interactive.js +241 -0
- package/src/create-quiver/lib/ai/analyze-project-proposal.js +582 -0
- package/src/create-quiver/lib/ai/analyze-project-validation.js +10 -8
- package/src/create-quiver/lib/cli/ux-flags.js +6 -0
- package/src/create-quiver/lib/i18n/messages/en.js +28 -0
- package/src/create-quiver/lib/i18n/messages/es.js +29 -0
package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-04-interactive-apply-ux/pr.md
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
## Title
|
|
2
|
+
|
|
3
|
+
QUIVER-55-04 - Interactive Analyze Project Apply UX
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
Implements the fourth v55 slice for `ai analyze-project`: plain TTY `--apply-docs` now shows an explained selector after provider validation instead of forcing users into a large editor buffer.
|
|
8
|
+
|
|
9
|
+
The selector supports:
|
|
10
|
+
|
|
11
|
+
- Apply documentation.
|
|
12
|
+
- View bounded diff, then choose again.
|
|
13
|
+
- Save proposal artifacts only.
|
|
14
|
+
- Edit proposal through the existing review flow.
|
|
15
|
+
- Cancel without final docs writes.
|
|
16
|
+
|
|
17
|
+
## PR Policy
|
|
18
|
+
|
|
19
|
+
- One slice, one commit, one PR.
|
|
20
|
+
- Runtime UX change, so this must be an individual PR.
|
|
21
|
+
- Human merge required after CI passes.
|
|
22
|
+
|
|
23
|
+
## Scope
|
|
24
|
+
|
|
25
|
+
Included:
|
|
26
|
+
|
|
27
|
+
- Interactive selector module for `--apply-docs`.
|
|
28
|
+
- Safe routing from selector actions into existing save/apply/review flows.
|
|
29
|
+
- Dynamic recommendation based on clean creates vs dirty/update targets.
|
|
30
|
+
- Bounded terminal diff with full diff artifact saved under `.quiver/runs`.
|
|
31
|
+
- English and Spanish selector copy with option descriptions.
|
|
32
|
+
- Tests for apply, save, edit, cancel, view-diff second decision, no-TTY guard, and selector recommendation.
|
|
33
|
+
- Slice status, evidence, and closure updates.
|
|
34
|
+
|
|
35
|
+
Excluded:
|
|
36
|
+
|
|
37
|
+
- `ai analyze-project apply --run <run-id>`.
|
|
38
|
+
- Release smoke docs.
|
|
39
|
+
- Product repo code changes.
|
|
40
|
+
|
|
41
|
+
## Files
|
|
42
|
+
|
|
43
|
+
- `src/create-quiver/commands/ai.js`
|
|
44
|
+
- `src/create-quiver/lib/ai/analyze-project-interactive.js`
|
|
45
|
+
- `src/create-quiver/lib/i18n/messages/en.js`
|
|
46
|
+
- `src/create-quiver/lib/i18n/messages/es.js`
|
|
47
|
+
- `tests/commands/ai-analyze-project-review.test.js`
|
|
48
|
+
- `tests/lib/cli-ux.test.js`
|
|
49
|
+
- `specs/quiver-v55-analyze-project-doc-apply-ux/**`
|
|
50
|
+
|
|
51
|
+
## How to Test (DETAILED - REQUIRED)
|
|
52
|
+
|
|
53
|
+
### Required Environment
|
|
54
|
+
|
|
55
|
+
- Node/npm environment for this repo.
|
|
56
|
+
- No live provider credentials required for automated tests.
|
|
57
|
+
|
|
58
|
+
### Worktree Access
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
git checkout feature/QUIVER-55-04-v55-interactive-apply-ux
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Run the Project
|
|
65
|
+
|
|
66
|
+
No dev server is required. This is CLI behavior.
|
|
67
|
+
|
|
68
|
+
### Use Cases
|
|
69
|
+
|
|
70
|
+
1. Interactive apply selector:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
node --test tests/commands/ai-analyze-project-review.test.js
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Expected: selector paths for apply, save, edit, cancel, view diff, no-TTY, and Spanish copy pass.
|
|
77
|
+
|
|
78
|
+
2. UX helper behavior:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
node --test tests/lib/cli-ux.test.js
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Expected: selector recommendations and bounded diff formatting pass.
|
|
85
|
+
|
|
86
|
+
3. Contract regressions:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
node --test tests/commands/ai-analyze-project.test.js
|
|
90
|
+
node --test tests/commands/cli-contract.test.js
|
|
91
|
+
node --test tests/commands/ux-flags.test.js
|
|
92
|
+
node --test tests/lib/i18n-catalog.test.js
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Expected: CLI contracts, help, UX flags, and i18n catalog remain valid.
|
|
96
|
+
|
|
97
|
+
### Technical Verification
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
node --test tests/commands/ai-analyze-project-provider.test.js
|
|
101
|
+
node --test tests/lib/ai-analyze-project-validation.test.js tests/lib/ai/analyze-project-repair.test.js
|
|
102
|
+
npm run docs:check
|
|
103
|
+
npm run schema:slice:check
|
|
104
|
+
node bin/create-quiver.js spec validate specs/quiver-v55-analyze-project-doc-apply-ux --strict
|
|
105
|
+
git diff --check
|
|
106
|
+
npm test
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Expected: all pass.
|
|
110
|
+
|
|
111
|
+
## Evidence
|
|
112
|
+
|
|
113
|
+
Executed locally:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
node --test tests/commands/ai-analyze-project-review.test.js
|
|
117
|
+
node --test tests/lib/cli-ux.test.js
|
|
118
|
+
node --test tests/commands/ai-analyze-project.test.js
|
|
119
|
+
node --test tests/commands/cli-contract.test.js
|
|
120
|
+
node --test tests/lib/i18n-catalog.test.js
|
|
121
|
+
node --test tests/commands/ux-flags.test.js
|
|
122
|
+
node --test tests/commands/ai-analyze-project-provider.test.js
|
|
123
|
+
node --test tests/lib/ai-analyze-project-validation.test.js tests/lib/ai/analyze-project-repair.test.js
|
|
124
|
+
npm run docs:check
|
|
125
|
+
npm run schema:slice:check
|
|
126
|
+
node bin/create-quiver.js spec validate specs/quiver-v55-analyze-project-doc-apply-ux --strict
|
|
127
|
+
git diff --check
|
|
128
|
+
npm test
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Result: all passed. Full `npm test` passed with 741 tests.
|
|
132
|
+
|
|
133
|
+
## Rollback
|
|
134
|
+
|
|
135
|
+
Revert this PR. `--apply-docs --yes`, `--save-proposal`, and `--review` remain available from earlier slices if this selector UX must be removed.
|
|
136
|
+
|
|
137
|
+
## Risks / Notes
|
|
138
|
+
|
|
139
|
+
- `--apply-docs` without `--yes` now runs the provider in interactive TTY mode before showing the selector.
|
|
140
|
+
- no-TTY and CI usage still require `--yes`; otherwise the command fails before provider execution.
|
|
141
|
+
- `apply --run <run-id>` remains intentionally deferred to slice-05.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-04-interactive-apply-ux",
|
|
3
|
+
"ticket": "QUIVER-55-04",
|
|
4
|
+
"type": "ux",
|
|
5
|
+
"title": "Interactive Apply UX",
|
|
6
|
+
"objective": "Add the explained TTY selector for --apply-docs while delegating all writes to the tested apply engine.",
|
|
7
|
+
"description": "Implements the human selector with option descriptions, dynamic recommendation, diff flow, save/edit/cancel actions, and bounded terminal output.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v55-interactive-apply-ux",
|
|
12
|
+
"branch_name": "feature/QUIVER-55-04-v55-interactive-apply-ux"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/commands/ai.js",
|
|
16
|
+
"src/create-quiver/lib/ai/analyze-project-interactive.js",
|
|
17
|
+
"src/create-quiver/lib/ai/analyze-project-apply.js",
|
|
18
|
+
"src/create-quiver/lib/i18n/messages/en.js",
|
|
19
|
+
"src/create-quiver/lib/i18n/messages/es.js",
|
|
20
|
+
"tests/commands/ai-analyze-project-review.test.js",
|
|
21
|
+
"tests/lib/cli-ux.test.js",
|
|
22
|
+
"specs/quiver-v55-analyze-project-doc-apply-ux/**"
|
|
23
|
+
],
|
|
24
|
+
"expected_read_paths": [
|
|
25
|
+
"src/create-quiver/lib/cli/ux.js",
|
|
26
|
+
"src/create-quiver/lib/ai/analyze-project-review.js",
|
|
27
|
+
"src/create-quiver/lib/ai/analyze-project-apply.js"
|
|
28
|
+
],
|
|
29
|
+
"allowed_write_paths": [
|
|
30
|
+
"src/create-quiver/commands/ai.js",
|
|
31
|
+
"src/create-quiver/lib/ai/analyze-project-interactive.js",
|
|
32
|
+
"src/create-quiver/lib/ai/analyze-project-apply.js",
|
|
33
|
+
"src/create-quiver/lib/i18n/messages/en.js",
|
|
34
|
+
"src/create-quiver/lib/i18n/messages/es.js",
|
|
35
|
+
"tests/commands/ai-analyze-project-review.test.js",
|
|
36
|
+
"tests/lib/cli-ux.test.js",
|
|
37
|
+
"specs/quiver-v55-analyze-project-doc-apply-ux/**"
|
|
38
|
+
],
|
|
39
|
+
"depends_on": [
|
|
40
|
+
"slice-03-noninteractive-apply-engine"
|
|
41
|
+
],
|
|
42
|
+
"parallel_safe": "never",
|
|
43
|
+
"parallel_safe_reason": "Selector behavior depends on the completed apply engine contract.",
|
|
44
|
+
"must": [
|
|
45
|
+
"Show option descriptions.",
|
|
46
|
+
"Use dynamic recommendation.",
|
|
47
|
+
"Keep terminal diff bounded.",
|
|
48
|
+
"Route write actions through apply engine."
|
|
49
|
+
],
|
|
50
|
+
"not_included": [
|
|
51
|
+
"Apply saved run.",
|
|
52
|
+
"Release smoke docs."
|
|
53
|
+
],
|
|
54
|
+
"acceptance": [
|
|
55
|
+
"TTY --apply-docs shows explained selector.",
|
|
56
|
+
"no-TTY --apply-docs without --yes fails actionably.",
|
|
57
|
+
"Cancel writes no final docs.",
|
|
58
|
+
"View diff requires a second decision."
|
|
59
|
+
],
|
|
60
|
+
"tests": [
|
|
61
|
+
"node --test tests/commands/ai-analyze-project-review.test.js",
|
|
62
|
+
"node --test tests/lib/cli-ux.test.js",
|
|
63
|
+
"node bin/create-quiver.js spec validate specs/quiver-v55-analyze-project-doc-apply-ux --strict",
|
|
64
|
+
"git diff --check"
|
|
65
|
+
],
|
|
66
|
+
"estimated_hours": 6,
|
|
67
|
+
"actual_hours": 6,
|
|
68
|
+
"status": "completed",
|
|
69
|
+
"blocked_reason": null,
|
|
70
|
+
"started_at": "2026-06-12T00:00:00.000Z",
|
|
71
|
+
"completed_at": "2026-06-12T00:00:00.000Z"
|
|
72
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-05 apply saved proposal
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Completed. `ai analyze-project apply --run <run-id>` now loads a saved analyze-project doc proposal from `.quiver/runs/<run-id>/proposal/`, revalidates the manifest and proposal JSON, and applies it through the same safe apply engine without executing a provider or requiring provider/model flags.
|
|
6
|
+
|
|
7
|
+
## Behavior Delivered
|
|
8
|
+
|
|
9
|
+
- Explicit run ids are validated as safe single path segments before artifact access.
|
|
10
|
+
- Missing or invalid saved proposal manifests fail before docs writes.
|
|
11
|
+
- Saved proposal JSON is reparsed through the doc proposal schema and allowed-path checks.
|
|
12
|
+
- Saved proposal manifest doc paths must match the proposal target docs.
|
|
13
|
+
- Manual proposal content edits are accepted only after revalidation and recorded as `saved-proposal-edited` in the write manifest.
|
|
14
|
+
- Dirty target docs block by default and can be applied only with `--allow-dirty-docs`.
|
|
15
|
+
- Stale target docs block before any final docs write.
|
|
16
|
+
- `--run latest` is resolved only in an interactive terminal, and is rejected with `--yes` or `--json`.
|
|
17
|
+
- Apply-run reports set `provider_execution: skipped` and do not call provider/model resolution.
|
|
18
|
+
|
|
19
|
+
## Required Evidence
|
|
20
|
+
|
|
21
|
+
- Apply saved run success test passes.
|
|
22
|
+
- Invalid run id test passes.
|
|
23
|
+
- Stale/dirty blocking tests pass.
|
|
24
|
+
- No-provider-execution test passes.
|
|
25
|
+
- Manual proposal edit audit test passes.
|
|
26
|
+
|
|
27
|
+
## Validation
|
|
28
|
+
|
|
29
|
+
Executed:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
node --test tests/commands/ai-analyze-project-review.test.js
|
|
33
|
+
node --test tests/lib/ai-analyze-project-proposal.test.js
|
|
34
|
+
node --test tests/commands/ai-analyze-project.test.js
|
|
35
|
+
npm run docs:check
|
|
36
|
+
npm run schema:slice:check
|
|
37
|
+
node bin/create-quiver.js spec validate specs/quiver-v55-analyze-project-doc-apply-ux --strict
|
|
38
|
+
git diff --check
|
|
39
|
+
npm test
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Result: all passed. Full `npm test` passed with 747 tests.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-05 apply saved proposal
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Saving a proposal is only useful if users can later apply it without re-running the provider. This flow has a higher trust boundary because proposal artifacts may be stale or manually edited.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Implement `ai analyze-project apply --run <run-id>` to apply saved proposals without provider execution.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- Resolve and validate run id.
|
|
14
|
+
- Load proposal manifest and normalized JSON.
|
|
15
|
+
- Revalidate proposal schema and allowed paths.
|
|
16
|
+
- Recalculate target doc hashes.
|
|
17
|
+
- Detect stale/dirty docs before writing.
|
|
18
|
+
- Apply through the same apply engine from slice-03.
|
|
19
|
+
- Support `--yes`, `--strict`, `--allow-dirty-docs`, and `--json` where safe.
|
|
20
|
+
- Optionally support `--run latest` only in TTY and never with `--yes`.
|
|
21
|
+
|
|
22
|
+
## Acceptance Criteria
|
|
23
|
+
|
|
24
|
+
- `apply --run <run-id>` does not execute provider and does not require provider/model.
|
|
25
|
+
- Invalid or missing run id fails with actionable guidance.
|
|
26
|
+
- Missing/invalid proposal manifest fails without docs writes.
|
|
27
|
+
- Stale or dirty docs block non-interactive apply unless explicitly allowed.
|
|
28
|
+
- Manual proposal edits are accepted only after full revalidation and recorded as edited.
|
|
29
|
+
- `--run latest --yes` is rejected.
|
|
30
|
+
|
|
31
|
+
## Expected Files To Modify
|
|
32
|
+
|
|
33
|
+
- `src/create-quiver/commands/ai.js`
|
|
34
|
+
- `src/create-quiver/lib/ai/analyze-project-apply.js`
|
|
35
|
+
- `src/create-quiver/lib/ai/analyze-project-proposal.js`
|
|
36
|
+
- `tests/commands/ai-analyze-project-review.test.js`
|
|
37
|
+
- `tests/lib/ai-analyze-project-proposal.test.js`
|
|
38
|
+
- this slice closure/status/evidence files
|
|
39
|
+
|
|
40
|
+
## Validation Required
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
node --test tests/commands/ai-analyze-project-review.test.js
|
|
44
|
+
node --test tests/lib/ai-analyze-project-proposal.test.js
|
|
45
|
+
node bin/create-quiver.js spec validate specs/quiver-v55-analyze-project-doc-apply-ux --strict
|
|
46
|
+
git diff --check
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Completion Checklist
|
|
50
|
+
|
|
51
|
+
- Saved proposal apply path never executes provider.
|
|
52
|
+
- Proposal manifest and normalized JSON are revalidated before writes.
|
|
53
|
+
- Stale/dirty target docs behavior is tested.
|
|
54
|
+
- Edited proposal audit metadata is recorded.
|
|
55
|
+
- Slice closure brief updated with evidence.
|
|
56
|
+
|
|
57
|
+
## Constraints
|
|
58
|
+
|
|
59
|
+
- Do not execute provider in `apply --run`.
|
|
60
|
+
- Do not trust saved artifacts without revalidation.
|
|
61
|
+
- Do not allow ambiguous `latest` in automation.
|
package/specs/quiver-v55-analyze-project-doc-apply-ux/slices/slice-05-apply-saved-proposal/pr.md
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
## Title
|
|
2
|
+
|
|
3
|
+
QUIVER-55-05 - Apply Saved Analyze Project Proposals
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
Implements the fifth v55 slice for `ai analyze-project`: saved documentation proposals can now be applied by run id without executing a provider.
|
|
8
|
+
|
|
9
|
+
`ai analyze-project apply --run <run-id>` now loads `.quiver/runs/<run-id>/proposal/manifest.json`, revalidates the saved proposal JSON, checks dirty/stale target docs, and delegates final writes to the existing safe apply engine.
|
|
10
|
+
|
|
11
|
+
## PR Policy
|
|
12
|
+
|
|
13
|
+
- One slice, one commit, one PR.
|
|
14
|
+
- Runtime CLI behavior change, so this must be an individual PR.
|
|
15
|
+
- Human merge required after CI passes.
|
|
16
|
+
|
|
17
|
+
## Scope
|
|
18
|
+
|
|
19
|
+
Included:
|
|
20
|
+
|
|
21
|
+
- `ai analyze-project apply --run <run-id>` runtime implementation.
|
|
22
|
+
- Safe run id validation before artifact access.
|
|
23
|
+
- Saved proposal manifest and JSON revalidation.
|
|
24
|
+
- Dirty/stale doc blocking using the original saved proposal hashes.
|
|
25
|
+
- Manual proposal edit detection and write-manifest audit events.
|
|
26
|
+
- `--run latest` guardrails for interactive-only usage.
|
|
27
|
+
- Apply-run post-write validation without requiring the original provider analysis payload.
|
|
28
|
+
- Tests for success, missing artifacts, dirty/stale blocking, no-provider execution, and manual proposal edits.
|
|
29
|
+
- Slice status, evidence, closure, and PR docs.
|
|
30
|
+
|
|
31
|
+
Excluded:
|
|
32
|
+
|
|
33
|
+
- Fresh provider prompt/schema changes.
|
|
34
|
+
- Product repo code changes in analyzed projects.
|
|
35
|
+
- Release smoke docs for npm publishing.
|
|
36
|
+
|
|
37
|
+
## Files
|
|
38
|
+
|
|
39
|
+
- `src/create-quiver/commands/ai.js`
|
|
40
|
+
- `src/create-quiver/index.js`
|
|
41
|
+
- `src/create-quiver/lib/ai/analyze-project-apply.js`
|
|
42
|
+
- `src/create-quiver/lib/ai/analyze-project-proposal.js`
|
|
43
|
+
- `src/create-quiver/lib/ai/analyze-project-validation.js`
|
|
44
|
+
- `tests/commands/ai-analyze-project-review.test.js`
|
|
45
|
+
- `tests/commands/ai-analyze-project.test.js`
|
|
46
|
+
- `tests/lib/ai-analyze-project-proposal.test.js`
|
|
47
|
+
- `specs/quiver-v55-analyze-project-doc-apply-ux/**`
|
|
48
|
+
|
|
49
|
+
## How to Test (DETAILED - REQUIRED)
|
|
50
|
+
|
|
51
|
+
### Required Environment
|
|
52
|
+
|
|
53
|
+
- Node/npm environment for this repo.
|
|
54
|
+
- No live provider credentials required for automated tests.
|
|
55
|
+
|
|
56
|
+
### Worktree Access
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
git checkout feature/QUIVER-55-05-v55-apply-saved-proposal
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Run the Project
|
|
63
|
+
|
|
64
|
+
No dev server is required. This is CLI behavior.
|
|
65
|
+
|
|
66
|
+
### Use Cases
|
|
67
|
+
|
|
68
|
+
1. Apply a saved proposal by run id:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
node --test tests/commands/ai-analyze-project-review.test.js
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Expected: saved proposal apply writes docs without provider execution, blocks dirty/stale targets, and records manual proposal edits.
|
|
75
|
+
|
|
76
|
+
2. Validate saved proposal artifact helpers:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
node --test tests/lib/ai-analyze-project-proposal.test.js
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Expected: run id validation, saved proposal loading, manifest validation, and edit detection pass.
|
|
83
|
+
|
|
84
|
+
3. Validate CLI contract:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
node --test tests/commands/ai-analyze-project.test.js
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Expected: `apply --run` no longer hits the old stub, missing artifacts fail actionably, and unsafe `latest` combinations are rejected.
|
|
91
|
+
|
|
92
|
+
### Technical Verification
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm run docs:check
|
|
96
|
+
npm run schema:slice:check
|
|
97
|
+
node bin/create-quiver.js spec validate specs/quiver-v55-analyze-project-doc-apply-ux --strict
|
|
98
|
+
git diff --check
|
|
99
|
+
npm test
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Expected: all pass.
|
|
103
|
+
|
|
104
|
+
## Evidence
|
|
105
|
+
|
|
106
|
+
Executed locally:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
node --test tests/commands/ai-analyze-project-review.test.js
|
|
110
|
+
node --test tests/lib/ai-analyze-project-proposal.test.js
|
|
111
|
+
node --test tests/commands/ai-analyze-project.test.js
|
|
112
|
+
npm run docs:check
|
|
113
|
+
npm run schema:slice:check
|
|
114
|
+
node bin/create-quiver.js spec validate specs/quiver-v55-analyze-project-doc-apply-ux --strict
|
|
115
|
+
git diff --check
|
|
116
|
+
npm test
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Result: all passed. Full `npm test` passed with 747 tests.
|
|
120
|
+
|
|
121
|
+
## Rollback
|
|
122
|
+
|
|
123
|
+
Revert this PR. Fresh `--save-proposal`, `--apply-docs`, `--apply-docs --yes`, and `--review` behavior from earlier slices remain available.
|
|
124
|
+
|
|
125
|
+
## Risks / Notes
|
|
126
|
+
|
|
127
|
+
- `apply --run <run-id>` now writes docs when the saved proposal is valid and current target hashes match.
|
|
128
|
+
- Stale docs always block; `--allow-dirty-docs` only bypasses the dirty-doc guard.
|
|
129
|
+
- `--run latest` is intentionally not available for `--yes` or `--json` automation.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-05-apply-saved-proposal",
|
|
3
|
+
"ticket": "QUIVER-55-05",
|
|
4
|
+
"type": "feature",
|
|
5
|
+
"title": "Apply Saved Proposal",
|
|
6
|
+
"objective": "Apply saved analyze-project doc proposals by run id without provider execution.",
|
|
7
|
+
"description": "Adds ai analyze-project apply --run <run-id>, revalidates saved artifacts against current repo state, detects stale/dirty docs, and delegates writes to the apply engine.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v55-apply-saved-proposal",
|
|
12
|
+
"branch_name": "feature/QUIVER-55-05-v55-apply-saved-proposal"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/commands/ai.js",
|
|
16
|
+
"src/create-quiver/lib/ai/analyze-project-apply.js",
|
|
17
|
+
"src/create-quiver/lib/ai/analyze-project-proposal.js",
|
|
18
|
+
"tests/commands/ai-analyze-project-review.test.js",
|
|
19
|
+
"tests/lib/ai-analyze-project-proposal.test.js",
|
|
20
|
+
"specs/quiver-v55-analyze-project-doc-apply-ux/**"
|
|
21
|
+
],
|
|
22
|
+
"expected_read_paths": [
|
|
23
|
+
"src/create-quiver/lib/ai/analyze-project-apply.js",
|
|
24
|
+
"src/create-quiver/lib/ai/analyze-project-proposal.js",
|
|
25
|
+
"src/create-quiver/lib/ai/analyze-project-docs.js"
|
|
26
|
+
],
|
|
27
|
+
"allowed_write_paths": [
|
|
28
|
+
"src/create-quiver/commands/ai.js",
|
|
29
|
+
"src/create-quiver/lib/ai/analyze-project-apply.js",
|
|
30
|
+
"src/create-quiver/lib/ai/analyze-project-proposal.js",
|
|
31
|
+
"tests/commands/ai-analyze-project-review.test.js",
|
|
32
|
+
"tests/lib/ai-analyze-project-proposal.test.js",
|
|
33
|
+
"specs/quiver-v55-analyze-project-doc-apply-ux/**"
|
|
34
|
+
],
|
|
35
|
+
"depends_on": [
|
|
36
|
+
"slice-02-save-proposal-flow",
|
|
37
|
+
"slice-03-noninteractive-apply-engine"
|
|
38
|
+
],
|
|
39
|
+
"parallel_safe": "never",
|
|
40
|
+
"parallel_safe_reason": "Saved-run apply crosses a trust boundary and must reuse completed apply engine behavior.",
|
|
41
|
+
"must": [
|
|
42
|
+
"Never run provider.",
|
|
43
|
+
"Revalidate saved proposal and manifest.",
|
|
44
|
+
"Detect stale/dirty target docs.",
|
|
45
|
+
"Reject --run latest --yes."
|
|
46
|
+
],
|
|
47
|
+
"not_included": [
|
|
48
|
+
"Interactive fresh analysis selector.",
|
|
49
|
+
"Docs release smoke."
|
|
50
|
+
],
|
|
51
|
+
"acceptance": [
|
|
52
|
+
"Explicit run id applies valid saved proposal.",
|
|
53
|
+
"Invalid run id fails actionably.",
|
|
54
|
+
"Stale saved proposal blocks unsafe writes.",
|
|
55
|
+
"Provider/model are not required."
|
|
56
|
+
],
|
|
57
|
+
"tests": [
|
|
58
|
+
"node --test tests/commands/ai-analyze-project-review.test.js",
|
|
59
|
+
"node --test tests/lib/ai-analyze-project-proposal.test.js",
|
|
60
|
+
"node bin/create-quiver.js spec validate specs/quiver-v55-analyze-project-doc-apply-ux --strict",
|
|
61
|
+
"git diff --check"
|
|
62
|
+
],
|
|
63
|
+
"estimated_hours": 5,
|
|
64
|
+
"status": "completed",
|
|
65
|
+
"completed_at": "2026-06-12T15:00:00.000Z",
|
|
66
|
+
"blocked_reason": null
|
|
67
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-06 i18n docs release smoke
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Completed. The final v55 slice updates the user-facing docs, command matrix, troubleshooting guidance, and EN/ES coverage so the completed analyze-project doc apply workflow is discoverable and safe to smoke before release.
|
|
6
|
+
|
|
7
|
+
## Behavior Delivered
|
|
8
|
+
|
|
9
|
+
- `docs/reference/commands.md` now describes the recommended `--save-proposal`, `--apply-docs`, and `apply --run <run-id>` flows.
|
|
10
|
+
- `docs/CLI_UX_GUIDE.md` documents the TTY selector, automation path, saved proposal path, and advanced `--review` mode.
|
|
11
|
+
- `docs/workflows/existing-project.md` now recommends `--apply-docs` for existing projects and explains save/apply separation.
|
|
12
|
+
- `docs/TROUBLESHOOTING.md` explains why normal provider mode does not write final docs and how to apply a proposal safely.
|
|
13
|
+
- Release smoke guidance uses a temporary copy of `nika-erp` and explicitly avoids mutating the main checkout.
|
|
14
|
+
- Spanish help coverage now asserts the new analyze-project flags are localized while commands, flags, and paths stay untranslated.
|
|
15
|
+
|
|
16
|
+
## Required Evidence
|
|
17
|
+
|
|
18
|
+
- i18n tests pass.
|
|
19
|
+
- docs checks pass.
|
|
20
|
+
- spec validation passes.
|
|
21
|
+
- release smoke guidance is documented.
|
|
22
|
+
|
|
23
|
+
## Validation
|
|
24
|
+
|
|
25
|
+
Executed:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
node --test tests/commands/cli-contract.test.js
|
|
29
|
+
node --test tests/lib/i18n-catalog.test.js
|
|
30
|
+
node --test tests/commands/ai-analyze-project-review.test.js
|
|
31
|
+
npm run docs:check
|
|
32
|
+
npm run schema:slice:check
|
|
33
|
+
node bin/create-quiver.js spec validate specs/quiver-v55-analyze-project-doc-apply-ux --strict
|
|
34
|
+
git diff --check
|
|
35
|
+
npm test
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Result: all passed. Full `npm test` passed with 747 tests.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-06 i18n docs release smoke
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
The feature is only useful if users can discover the simpler apply flow and understand it in English and Spanish. Release confidence also needs a documented real-project smoke that avoids mutating the user's main `nika-erp` checkout.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Complete i18n coverage, user documentation, command matrix/help alignment, and release smoke guidance.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- Add/verify EN and ES messages for all new flows.
|
|
14
|
+
- Ensure commands, flags, and paths remain untranslated.
|
|
15
|
+
- Update:
|
|
16
|
+
- `docs/reference/commands.md`;
|
|
17
|
+
- `docs/CLI_UX_GUIDE.md`;
|
|
18
|
+
- `docs/workflows/existing-project.md`;
|
|
19
|
+
- `docs/TROUBLESHOOTING.md`.
|
|
20
|
+
- Update i18n/UX command matrix if applicable.
|
|
21
|
+
- Document release smoke against temporary copy/disposable branch of `nika-erp`.
|
|
22
|
+
- Validate docs and spec.
|
|
23
|
+
|
|
24
|
+
## Acceptance Criteria
|
|
25
|
+
|
|
26
|
+
- English and Spanish outputs are covered by tests.
|
|
27
|
+
- Command docs explain `--apply-docs`, `--save-proposal`, `--review`, `--yes`, `--diff`, and `apply --run`.
|
|
28
|
+
- Troubleshooting explains why normal provider mode does not write final docs.
|
|
29
|
+
- Release smoke commands avoid modifying the main `nika-erp` checkout.
|
|
30
|
+
- Docs checks and spec validation pass.
|
|
31
|
+
|
|
32
|
+
## Expected Files To Modify
|
|
33
|
+
|
|
34
|
+
- `src/create-quiver/lib/i18n/messages/en.js`
|
|
35
|
+
- `src/create-quiver/lib/i18n/messages/es.js`
|
|
36
|
+
- `docs/reference/commands.md`
|
|
37
|
+
- `docs/CLI_UX_GUIDE.md`
|
|
38
|
+
- `docs/workflows/existing-project.md`
|
|
39
|
+
- `docs/TROUBLESHOOTING.md`
|
|
40
|
+
- `specs/quiver-v55-analyze-project-doc-apply-ux/**`
|
|
41
|
+
- relevant tests
|
|
42
|
+
|
|
43
|
+
## Validation Required
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm run docs:check
|
|
47
|
+
npm run schema:slice:check
|
|
48
|
+
node bin/create-quiver.js spec validate specs/quiver-v55-analyze-project-doc-apply-ux --strict
|
|
49
|
+
git diff --check
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Completion Checklist
|
|
53
|
+
|
|
54
|
+
- English and Spanish copy tests pass.
|
|
55
|
+
- Command reference and troubleshooting docs updated.
|
|
56
|
+
- Existing-project workflow documents recommended path.
|
|
57
|
+
- Release smoke evidence is recorded without mutating the main `nika-erp` checkout.
|
|
58
|
+
- Slice closure brief updated with evidence.
|
|
59
|
+
|
|
60
|
+
## Constraints
|
|
61
|
+
|
|
62
|
+
- Do not run live provider smoke as CI.
|
|
63
|
+
- Do not mutate the main `nika-erp` checkout during smoke.
|
|
64
|
+
- Do not translate commands, flags, or paths.
|