create-quiver 0.17.1 → 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/ACTIVE_SLICES.md +43 -0
- package/CHANGELOG.md +8 -0
- package/auditoria-ux-ui-performance-documentacion.md +705 -0
- package/copys-landing-page.md +244 -0
- package/docs/CLI_UX_GUIDE.md +13 -3
- package/docs/TROUBLESHOOTING.md +94 -0
- package/docs/reference/commands.md +68 -4
- package/docs/workflows/existing-project-ai-quiver-setup.md +552 -0
- package/docs/workflows/existing-project.md +36 -0
- package/package.json +1 -1
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +5 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/EVIDENCE_REPORT.md +151 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/EXECUTION_PLAN.md +50 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/SPEC.md +207 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/STATUS.md +32 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/pr.md +73 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-00-analysis-run-contract/CLOSURE_BRIEF.md +32 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-00-analysis-run-contract/EXECUTION_BRIEF.md +63 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-00-analysis-run-contract/slice.json +70 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-01-provider-fixture-harness/CLOSURE_BRIEF.md +38 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-01-provider-fixture-harness/EXECUTION_BRIEF.md +60 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-01-provider-fixture-harness/slice.json +74 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-02-safe-context-boundary/CLOSURE_BRIEF.md +33 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-02-safe-context-boundary/EXECUTION_BRIEF.md +68 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-02-safe-context-boundary/slice.json +85 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-03-schema-error-grouping/CLOSURE_BRIEF.md +34 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-03-schema-error-grouping/EXECUTION_BRIEF.md +65 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-03-schema-error-grouping/slice.json +80 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-04-safe-repair-layer/CLOSURE_BRIEF.md +34 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-04-safe-repair-layer/EXECUTION_BRIEF.md +63 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-04-safe-repair-layer/slice.json +80 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-05-controlled-retry-layer/CLOSURE_BRIEF.md +34 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-05-controlled-retry-layer/EXECUTION_BRIEF.md +65 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-05-controlled-retry-layer/slice.json +81 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-06-audit-review-transaction/CLOSURE_BRIEF.md +35 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-06-audit-review-transaction/EXECUTION_BRIEF.md +71 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-06-audit-review-transaction/slice.json +88 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-07-semantic-validation-docs/CLOSURE_BRIEF.md +32 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-07-semantic-validation-docs/EXECUTION_BRIEF.md +66 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-07-semantic-validation-docs/slice.json +86 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-08-structural-map-hardening/CLOSURE_BRIEF.md +34 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-08-structural-map-hardening/EXECUTION_BRIEF.md +67 -0
- package/specs/quiver-v53-reliable-deep-project-analysis/slices/slice-08-structural-map-hardening/slice.json +81 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/EVIDENCE_REPORT.md +53 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/EXECUTION_PLAN.md +55 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/SPEC.md +184 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/STATUS.md +34 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-01-contract-regression-harness/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-01-contract-regression-harness/EXECUTION_BRIEF.md +54 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-01-contract-regression-harness/slice.json +72 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-02-safe-discovery-sampling/CLOSURE_BRIEF.md +11 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-02-safe-discovery-sampling/EXECUTION_BRIEF.md +53 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-02-safe-discovery-sampling/slice.json +69 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-03-run-lifecycle-cli-io/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-03-run-lifecycle-cli-io/EXECUTION_BRIEF.md +53 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-03-run-lifecycle-cli-io/slice.json +69 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-04-artifact-store-redaction/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-04-artifact-store-redaction/EXECUTION_BRIEF.md +54 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-04-artifact-store-redaction/slice.json +73 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-05-path-aware-repair-engine/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-05-path-aware-repair-engine/EXECUTION_BRIEF.md +57 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-05-path-aware-repair-engine/slice.json +72 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-06-retry-controller/CLOSURE_BRIEF.md +9 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-06-retry-controller/EXECUTION_BRIEF.md +52 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-06-retry-controller/slice.json +70 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-07-final-validation-review-write-gate/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-07-final-validation-review-write-gate/EXECUTION_BRIEF.md +57 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-07-final-validation-review-write-gate/slice.json +75 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-08-doctor-agents-guidance/CLOSURE_BRIEF.md +9 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-08-doctor-agents-guidance/EXECUTION_BRIEF.md +51 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-08-doctor-agents-guidance/slice.json +66 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-09-release-smoke-rollback-docs/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-09-release-smoke-rollback-docs/EXECUTION_BRIEF.md +54 -0
- package/specs/quiver-v54-deep-project-analysis-hardening/slices/slice-09-release-smoke-rollback-docs/slice.json +69 -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 +989 -136
- package/src/create-quiver/index.js +83 -1
- package/src/create-quiver/lib/ai/analyze-project-apply.js +269 -0
- package/src/create-quiver/lib/ai/analyze-project-discovery.js +213 -2
- package/src/create-quiver/lib/ai/analyze-project-docs.js +3 -1
- package/src/create-quiver/lib/ai/analyze-project-interactive.js +241 -0
- package/src/create-quiver/lib/ai/analyze-project-parser.js +1 -0
- package/src/create-quiver/lib/ai/analyze-project-prompts.js +130 -0
- package/src/create-quiver/lib/ai/analyze-project-proposal.js +582 -0
- package/src/create-quiver/lib/ai/analyze-project-repair.js +402 -0
- package/src/create-quiver/lib/ai/analyze-project-sampling.js +31 -4
- package/src/create-quiver/lib/ai/analyze-project-validation.js +178 -8
- package/src/create-quiver/lib/ai/artifacts.js +83 -2
- package/src/create-quiver/lib/cli/ux-flags.js +6 -0
- package/src/create-quiver/lib/doctor.js +107 -12
- package/src/create-quiver/lib/i18n/messages/en.js +33 -0
- package/src/create-quiver/lib/i18n/messages/es.js +34 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-02 safe discovery sampling
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
The live smoke selected `package-lock.json` and generated Quiver docs too heavily. Sampling must protect privacy, cost, and product-source coverage.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Make discovery and sampling deterministic, safe, and source-prioritized.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- Add lockfile summaries instead of full lockfile inclusion by default.
|
|
14
|
+
- Add source/docs/config/lockfile quotas.
|
|
15
|
+
- Exclude unsafe symlinks, secrets, caches, dumps, generated outputs, binaries, dependency folders, and `.quiver`.
|
|
16
|
+
- Preserve `--scope` and monorepo behavior.
|
|
17
|
+
|
|
18
|
+
## Acceptance Criteria
|
|
19
|
+
|
|
20
|
+
- `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `bun.lockb`, and comparable known lockfiles are summarized by default.
|
|
21
|
+
- Sampling reserves product-source budget and caps Quiver-generated docs.
|
|
22
|
+
- Unsafe symlinks are not followed.
|
|
23
|
+
- Denylisted files are omitted with a clear reason.
|
|
24
|
+
- `--dry-run --json` reports lock summaries, quotas, selected files, omitted files, and safety exclusions.
|
|
25
|
+
|
|
26
|
+
## Completion Checklist
|
|
27
|
+
|
|
28
|
+
- [ ] Sampling rules implemented.
|
|
29
|
+
- [ ] Discovery tests updated.
|
|
30
|
+
- [ ] `nika-erp` fixture/sample shows product source prioritized.
|
|
31
|
+
- [ ] Closure brief records budget evidence.
|
|
32
|
+
|
|
33
|
+
## Expected Files To Modify
|
|
34
|
+
|
|
35
|
+
- `src/create-quiver/lib/ai/analyze-project-discovery.js`
|
|
36
|
+
- `src/create-quiver/lib/ai/analyze-project-prompts.js`
|
|
37
|
+
- `tests/lib/ai-analyze-project-discovery.test.js`
|
|
38
|
+
- `tests/commands/ai-analyze-project.test.js`
|
|
39
|
+
- This slice's closure/status/evidence files.
|
|
40
|
+
|
|
41
|
+
## Validation Required
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
node --test tests/lib/ai-analyze-project-discovery.test.js
|
|
45
|
+
node --test tests/commands/ai-analyze-project.test.js
|
|
46
|
+
git diff --check
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Constraints
|
|
50
|
+
|
|
51
|
+
- Do not weaken secret exclusions.
|
|
52
|
+
- Do not read huge lockfiles fully when metadata is sufficient.
|
|
53
|
+
- Do not alter provider retry or repair behavior.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-02-safe-discovery-sampling",
|
|
3
|
+
"ticket": "QUIVER-54-02",
|
|
4
|
+
"type": "runtime-hardening",
|
|
5
|
+
"title": "Safe Discovery & Sampling",
|
|
6
|
+
"objective": "Ensure ai analyze-project selects a safe, representative, source-prioritized sample without dependency dumps or secrets.",
|
|
7
|
+
"description": "Adds quotas, lockfile summaries, symlink safety, denylist expansion, and product-source priority to deep project discovery.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v54-safe-discovery-sampling",
|
|
12
|
+
"branch_name": "feature/QUIVER-54-02-v54-safe-discovery-sampling"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/lib/ai/analyze-project-discovery.js",
|
|
16
|
+
"src/create-quiver/lib/ai/analyze-project-prompts.js",
|
|
17
|
+
"tests/lib/ai-analyze-project-discovery.test.js",
|
|
18
|
+
"tests/commands/ai-analyze-project.test.js",
|
|
19
|
+
"specs/quiver-v54-deep-project-analysis-hardening/**"
|
|
20
|
+
],
|
|
21
|
+
"expected_read_paths": [
|
|
22
|
+
"src/create-quiver/lib/ai/analyze-project-discovery.js",
|
|
23
|
+
"src/create-quiver/lib/ai/analyze-project-prompts.js",
|
|
24
|
+
"tests/lib/ai-analyze-project-discovery.test.js"
|
|
25
|
+
],
|
|
26
|
+
"allowed_write_paths": [
|
|
27
|
+
"src/create-quiver/lib/ai/analyze-project-discovery.js",
|
|
28
|
+
"src/create-quiver/lib/ai/analyze-project-prompts.js",
|
|
29
|
+
"tests/lib/ai-analyze-project-discovery.test.js",
|
|
30
|
+
"tests/commands/ai-analyze-project.test.js",
|
|
31
|
+
"specs/quiver-v54-deep-project-analysis-hardening/STATUS.md",
|
|
32
|
+
"specs/quiver-v54-deep-project-analysis-hardening/EVIDENCE_REPORT.md",
|
|
33
|
+
"specs/quiver-v54-deep-project-analysis-hardening/slices/slice-02-safe-discovery-sampling/CLOSURE_BRIEF.md",
|
|
34
|
+
"specs/quiver-v54-deep-project-analysis-hardening/slices/slice-02-safe-discovery-sampling/slice.json"
|
|
35
|
+
],
|
|
36
|
+
"depends_on": [
|
|
37
|
+
"slice-01-contract-regression-harness"
|
|
38
|
+
],
|
|
39
|
+
"parallel_safe": "after_dependencies",
|
|
40
|
+
"parallel_safe_reason": "Can run alongside lifecycle and doctor work once regression contract exists.",
|
|
41
|
+
"must": [
|
|
42
|
+
"Summarize lockfiles instead of sending full content by default.",
|
|
43
|
+
"Reserve context budget for product source.",
|
|
44
|
+
"Cap generated Quiver docs in the sample.",
|
|
45
|
+
"Never follow unsafe symlinks."
|
|
46
|
+
],
|
|
47
|
+
"not_included": [
|
|
48
|
+
"Provider retry behavior.",
|
|
49
|
+
"Repair engine changes.",
|
|
50
|
+
"Final docs writes."
|
|
51
|
+
],
|
|
52
|
+
"acceptance": [
|
|
53
|
+
"Dry-run JSON reports safe sample metadata and lock summaries.",
|
|
54
|
+
"Known secret/cache/generated paths are omitted.",
|
|
55
|
+
"Product source is prioritized over Quiver-generated docs.",
|
|
56
|
+
"Tests cover lockfiles and symlinks."
|
|
57
|
+
],
|
|
58
|
+
"tests": [
|
|
59
|
+
"node --test tests/lib/ai-analyze-project-discovery.test.js",
|
|
60
|
+
"node --test tests/commands/ai-analyze-project.test.js",
|
|
61
|
+
"git diff --check"
|
|
62
|
+
],
|
|
63
|
+
"estimated_hours": 6,
|
|
64
|
+
"actual_hours": 4,
|
|
65
|
+
"status": "completed",
|
|
66
|
+
"started_at": "2026-06-11",
|
|
67
|
+
"completed_at": "2026-06-11",
|
|
68
|
+
"blocked_reason": null
|
|
69
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-03 run lifecycle cli io
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Completed. `ai analyze-project` now shows progress in TTY and no-TTY modes while preserving clean `--json`, `--dry-run`, and `--print-prompt` behavior.
|
|
6
|
+
|
|
7
|
+
## Validation
|
|
8
|
+
|
|
9
|
+
- PASS: `node --test tests/commands/ai-analyze-project-provider.test.js`
|
|
10
|
+
- PASS: `node --test tests/commands/ai-analyze-project.test.js`
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-03 run lifecycle cli io
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
The live no-TTY run did not show progress until the command failed, while TTY output showed spinner progress. Run state and CLI IO need a production contract.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Add a run lifecycle state machine, deterministic progress behavior, timeout scaffolding, and cancellation cleanup.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- Persist run states such as `started`, `discovering`, `sampling`, `provider_running`, `validating`, `repairing`, `retrying`, `writing_artifacts`, `review_pending`, `succeeded`, `failed`, and `canceled`.
|
|
14
|
+
- Ensure progress goes to stderr and `--json` stdout stays clean.
|
|
15
|
+
- Add no-TTY line progress.
|
|
16
|
+
- Handle `SIGINT`/`SIGTERM` and terminate provider child processes.
|
|
17
|
+
|
|
18
|
+
## Acceptance Criteria
|
|
19
|
+
|
|
20
|
+
- First progress output appears before provider execution.
|
|
21
|
+
- TTY mode keeps readable loader behavior.
|
|
22
|
+
- No-TTY mode prints line-based progress to stderr.
|
|
23
|
+
- `--json` stdout remains parseable.
|
|
24
|
+
- Cancellation records `canceled` status and leaves no provider child process running.
|
|
25
|
+
|
|
26
|
+
## Completion Checklist
|
|
27
|
+
|
|
28
|
+
- [ ] State machine implemented.
|
|
29
|
+
- [ ] TTY/no-TTY tests added.
|
|
30
|
+
- [ ] Cancellation test added or documented if platform-limited.
|
|
31
|
+
- [ ] Closure brief records IO evidence.
|
|
32
|
+
|
|
33
|
+
## Expected Files To Modify
|
|
34
|
+
|
|
35
|
+
- `src/create-quiver/commands/ai.js`
|
|
36
|
+
- `src/create-quiver/lib/ai/providers.js`
|
|
37
|
+
- `tests/commands/ai-analyze-project-provider.test.js`
|
|
38
|
+
- `tests/commands/ai-analyze-project.test.js`
|
|
39
|
+
- This slice's closure/status/evidence files.
|
|
40
|
+
|
|
41
|
+
## Validation Required
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
node --test tests/commands/ai-analyze-project-provider.test.js
|
|
45
|
+
node --test tests/commands/ai-analyze-project.test.js
|
|
46
|
+
git diff --check
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Constraints
|
|
50
|
+
|
|
51
|
+
- Do not write final docs in provider mode without review.
|
|
52
|
+
- Do not send human progress to stdout in `--json`.
|
|
53
|
+
- Do not implement repair or retry logic in this slice beyond lifecycle hooks.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-03-run-lifecycle-cli-io",
|
|
3
|
+
"ticket": "QUIVER-54-03",
|
|
4
|
+
"type": "runtime-hardening",
|
|
5
|
+
"title": "Run Lifecycle & CLI IO",
|
|
6
|
+
"objective": "Make analyze-project run state, progress, stdout/stderr behavior, timeouts, and cancellation predictable.",
|
|
7
|
+
"description": "Adds a state machine and CLI IO contract so TTY and no-TTY users get visible progress without breaking JSON automation.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v54-run-lifecycle-cli-io",
|
|
12
|
+
"branch_name": "feature/QUIVER-54-03-v54-run-lifecycle-cli-io"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/commands/ai.js",
|
|
16
|
+
"src/create-quiver/lib/ai/providers.js",
|
|
17
|
+
"tests/commands/ai-analyze-project-provider.test.js",
|
|
18
|
+
"tests/commands/ai-analyze-project.test.js",
|
|
19
|
+
"specs/quiver-v54-deep-project-analysis-hardening/**"
|
|
20
|
+
],
|
|
21
|
+
"expected_read_paths": [
|
|
22
|
+
"src/create-quiver/commands/ai.js",
|
|
23
|
+
"src/create-quiver/lib/ai/providers.js",
|
|
24
|
+
"tests/commands/ai-analyze-project-provider.test.js"
|
|
25
|
+
],
|
|
26
|
+
"allowed_write_paths": [
|
|
27
|
+
"src/create-quiver/commands/ai.js",
|
|
28
|
+
"src/create-quiver/lib/ai/providers.js",
|
|
29
|
+
"tests/commands/ai-analyze-project-provider.test.js",
|
|
30
|
+
"tests/commands/ai-analyze-project.test.js",
|
|
31
|
+
"specs/quiver-v54-deep-project-analysis-hardening/STATUS.md",
|
|
32
|
+
"specs/quiver-v54-deep-project-analysis-hardening/EVIDENCE_REPORT.md",
|
|
33
|
+
"specs/quiver-v54-deep-project-analysis-hardening/slices/slice-03-run-lifecycle-cli-io/CLOSURE_BRIEF.md",
|
|
34
|
+
"specs/quiver-v54-deep-project-analysis-hardening/slices/slice-03-run-lifecycle-cli-io/slice.json"
|
|
35
|
+
],
|
|
36
|
+
"depends_on": [
|
|
37
|
+
"slice-01-contract-regression-harness"
|
|
38
|
+
],
|
|
39
|
+
"parallel_safe": "after_dependencies",
|
|
40
|
+
"parallel_safe_reason": "Can run alongside sampling after the regression contract exists.",
|
|
41
|
+
"must": [
|
|
42
|
+
"Persist run lifecycle states.",
|
|
43
|
+
"Keep --json stdout clean.",
|
|
44
|
+
"Emit no-TTY progress to stderr.",
|
|
45
|
+
"Handle cancellation and child-process cleanup."
|
|
46
|
+
],
|
|
47
|
+
"not_included": [
|
|
48
|
+
"Artifact redaction details.",
|
|
49
|
+
"Repair engine rules.",
|
|
50
|
+
"Final docs write gate."
|
|
51
|
+
],
|
|
52
|
+
"acceptance": [
|
|
53
|
+
"TTY and no-TTY progress are both covered.",
|
|
54
|
+
"Cancellation leaves status canceled.",
|
|
55
|
+
"No provider child process remains after cancellation.",
|
|
56
|
+
"--json output is parseable."
|
|
57
|
+
],
|
|
58
|
+
"tests": [
|
|
59
|
+
"node --test tests/commands/ai-analyze-project-provider.test.js",
|
|
60
|
+
"node --test tests/commands/ai-analyze-project.test.js",
|
|
61
|
+
"git diff --check"
|
|
62
|
+
],
|
|
63
|
+
"estimated_hours": 6,
|
|
64
|
+
"actual_hours": 3,
|
|
65
|
+
"status": "completed",
|
|
66
|
+
"started_at": "2026-06-11",
|
|
67
|
+
"completed_at": "2026-06-11",
|
|
68
|
+
"blocked_reason": null
|
|
69
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-04 artifact store redaction
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Completed. Raw provider stdout/stderr artifacts are redacted before persistence, bounded by byte cap, stored with head/tail truncation marker, and include SHA-256 metadata.
|
|
6
|
+
|
|
7
|
+
## Validation
|
|
8
|
+
|
|
9
|
+
- PASS: `node --test tests/lib/ai-artifacts.test.js`
|
|
10
|
+
- PASS: `node --test tests/commands/ai-analyze-project-provider.test.js`
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-04 artifact store redaction
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Provider stdout/stderr and manifests can contain sensitive or huge data. Redaction and size limits must happen before persistence, not as a later reporting step.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Create a bounded, redacted artifact store for analyze-project provider runs.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- Redact raw provider stdout/stderr before writing.
|
|
14
|
+
- Store head/tail, original size, persisted size, hash, truncation flag, command/options, `run_id`, `kind`, `schema_version`, timestamps, and status metadata.
|
|
15
|
+
- Ensure manifests and logs do not leak secrets.
|
|
16
|
+
- Keep artifacts under `.quiver/runs`.
|
|
17
|
+
|
|
18
|
+
## Acceptance Criteria
|
|
19
|
+
|
|
20
|
+
- Secret-like strings are redacted before artifact persistence.
|
|
21
|
+
- Oversized raw output is bounded with head/tail and hash.
|
|
22
|
+
- Artifacts include versioned metadata.
|
|
23
|
+
- Provider stderr is stored separately from schema validation details.
|
|
24
|
+
- Existing invalid-output docs-write guarantees remain intact.
|
|
25
|
+
|
|
26
|
+
## Completion Checklist
|
|
27
|
+
|
|
28
|
+
- [ ] Artifact helper or store implemented.
|
|
29
|
+
- [ ] Redaction tests added.
|
|
30
|
+
- [ ] Truncation tests added.
|
|
31
|
+
- [ ] Closure brief records artifact paths and limits.
|
|
32
|
+
|
|
33
|
+
## Expected Files To Modify
|
|
34
|
+
|
|
35
|
+
- `src/create-quiver/commands/ai.js`
|
|
36
|
+
- `src/create-quiver/lib/ai/analyze-project-artifacts.js`
|
|
37
|
+
- `src/create-quiver/lib/ai/analyze-project-validation.js`
|
|
38
|
+
- `tests/commands/ai-analyze-project-provider.test.js`
|
|
39
|
+
- `tests/lib/ai-safety.test.js`
|
|
40
|
+
- This slice's closure/status/evidence files.
|
|
41
|
+
|
|
42
|
+
## Validation Required
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
node --test tests/commands/ai-analyze-project-provider.test.js
|
|
46
|
+
node --test tests/lib/ai-safety.test.js
|
|
47
|
+
git diff --check
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Constraints
|
|
51
|
+
|
|
52
|
+
- Redact before writing to disk.
|
|
53
|
+
- Do not mix provider stderr with validation issue manifests.
|
|
54
|
+
- Do not implement final write gate changes here.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-04-artifact-store-redaction",
|
|
3
|
+
"ticket": "QUIVER-54-04",
|
|
4
|
+
"type": "security-hardening",
|
|
5
|
+
"title": "Artifact Store & Redaction",
|
|
6
|
+
"objective": "Persist provider-run artifacts in a redacted, bounded, versioned, auditable format.",
|
|
7
|
+
"description": "Adds artifact storage rules for provider stdout/stderr and manifests so sensitive or huge outputs cannot leak into .quiver/runs.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v54-artifact-store-redaction",
|
|
12
|
+
"branch_name": "feature/QUIVER-54-04-v54-artifact-store-redaction"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/commands/ai.js",
|
|
16
|
+
"src/create-quiver/lib/ai/analyze-project-artifacts.js",
|
|
17
|
+
"src/create-quiver/lib/ai/analyze-project-validation.js",
|
|
18
|
+
"tests/commands/ai-analyze-project-provider.test.js",
|
|
19
|
+
"tests/lib/ai-safety.test.js",
|
|
20
|
+
"specs/quiver-v54-deep-project-analysis-hardening/**"
|
|
21
|
+
],
|
|
22
|
+
"expected_read_paths": [
|
|
23
|
+
"src/create-quiver/commands/ai.js",
|
|
24
|
+
"src/create-quiver/lib/ai/analyze-project-validation.js",
|
|
25
|
+
"src/create-quiver/lib/ai/safety.js",
|
|
26
|
+
"tests/lib/ai-safety.test.js"
|
|
27
|
+
],
|
|
28
|
+
"allowed_write_paths": [
|
|
29
|
+
"src/create-quiver/commands/ai.js",
|
|
30
|
+
"src/create-quiver/lib/ai/analyze-project-artifacts.js",
|
|
31
|
+
"src/create-quiver/lib/ai/analyze-project-validation.js",
|
|
32
|
+
"tests/commands/ai-analyze-project-provider.test.js",
|
|
33
|
+
"tests/lib/ai-safety.test.js",
|
|
34
|
+
"specs/quiver-v54-deep-project-analysis-hardening/STATUS.md",
|
|
35
|
+
"specs/quiver-v54-deep-project-analysis-hardening/EVIDENCE_REPORT.md",
|
|
36
|
+
"specs/quiver-v54-deep-project-analysis-hardening/slices/slice-04-artifact-store-redaction/CLOSURE_BRIEF.md",
|
|
37
|
+
"specs/quiver-v54-deep-project-analysis-hardening/slices/slice-04-artifact-store-redaction/slice.json"
|
|
38
|
+
],
|
|
39
|
+
"depends_on": [
|
|
40
|
+
"slice-01-contract-regression-harness",
|
|
41
|
+
"slice-03-run-lifecycle-cli-io"
|
|
42
|
+
],
|
|
43
|
+
"parallel_safe": "after_dependencies",
|
|
44
|
+
"parallel_safe_reason": "Can run alongside repair once run lifecycle is defined.",
|
|
45
|
+
"must": [
|
|
46
|
+
"Redact before persistence.",
|
|
47
|
+
"Store head/tail plus hash for truncated raw output.",
|
|
48
|
+
"Include schema_version, kind, run_id, timestamps, command/options, sizes, and truncation flag.",
|
|
49
|
+
"Keep provider stderr separate from schema validation."
|
|
50
|
+
],
|
|
51
|
+
"not_included": [
|
|
52
|
+
"Sampling changes.",
|
|
53
|
+
"Retry controller.",
|
|
54
|
+
"Final docs writes."
|
|
55
|
+
],
|
|
56
|
+
"acceptance": [
|
|
57
|
+
"Secret-like content is not persisted raw.",
|
|
58
|
+
"Oversized provider output is bounded.",
|
|
59
|
+
"Artifact manifests are versioned and auditable.",
|
|
60
|
+
"Invalid JSON still writes no final docs."
|
|
61
|
+
],
|
|
62
|
+
"tests": [
|
|
63
|
+
"node --test tests/commands/ai-analyze-project-provider.test.js",
|
|
64
|
+
"node --test tests/lib/ai-safety.test.js",
|
|
65
|
+
"git diff --check"
|
|
66
|
+
],
|
|
67
|
+
"estimated_hours": 5,
|
|
68
|
+
"actual_hours": 3,
|
|
69
|
+
"status": "completed",
|
|
70
|
+
"started_at": "2026-06-11",
|
|
71
|
+
"completed_at": "2026-06-11",
|
|
72
|
+
"blocked_reason": null
|
|
73
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-05 path-aware repair engine
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Completed. The repair engine is path-aware and fail-closed for safe `notes` removal, safe `claim` to `name` mapping when `name` is missing, and unsupported `confidence` removal from questions.
|
|
6
|
+
|
|
7
|
+
## Validation
|
|
8
|
+
|
|
9
|
+
- PASS: `node --test tests/lib/ai/analyze-project-repair.test.js`
|
|
10
|
+
- PASS: `node --test tests/commands/ai-analyze-project-provider.test.js`
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-05 path-aware repair engine
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Codex returned useful but schema-invalid fields such as `claim`, `notes`, and `confidence`. Repair must be strictly structural, path-aware, and auditable.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Implement a closed repair table for safe provider schema drift.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- Remove unsupported `notes`.
|
|
14
|
+
- Remove unsupported `confidence`.
|
|
15
|
+
- Rename `claim` to `name` only when the path expects a human label, `name` is missing, and `claim` is a safe non-empty string.
|
|
16
|
+
- Reject conflicts and unsafe transforms.
|
|
17
|
+
- Add max total and per-path-family repair thresholds.
|
|
18
|
+
- Record every repair in manifest.
|
|
19
|
+
|
|
20
|
+
## Acceptance Criteria
|
|
21
|
+
|
|
22
|
+
- Repairs are allowed only by explicit path/type/action table.
|
|
23
|
+
- Conflicting `name` and `claim` does not repair.
|
|
24
|
+
- Non-string or empty `claim` does not repair.
|
|
25
|
+
- Threshold overflow fails closed.
|
|
26
|
+
- Repair manifest lists path, action, source key, destination key when applicable, redacted summary, and reason.
|
|
27
|
+
- Repaired output is revalidated.
|
|
28
|
+
|
|
29
|
+
## Completion Checklist
|
|
30
|
+
|
|
31
|
+
- [ ] Closed repair table implemented.
|
|
32
|
+
- [ ] Repair thresholds implemented.
|
|
33
|
+
- [ ] Tests cover allowed, denied, conflict, and threshold cases.
|
|
34
|
+
- [ ] Closure brief records chosen thresholds.
|
|
35
|
+
|
|
36
|
+
## Expected Files To Modify
|
|
37
|
+
|
|
38
|
+
- `src/create-quiver/lib/ai/analyze-project-repair.js`
|
|
39
|
+
- `src/create-quiver/lib/ai/analyze-project-parser.js`
|
|
40
|
+
- `src/create-quiver/lib/ai/analyze-project-validation.js`
|
|
41
|
+
- `tests/lib/ai/analyze-project-repair.test.js`
|
|
42
|
+
- `tests/commands/ai-analyze-project-provider.test.js`
|
|
43
|
+
- This slice's closure/status/evidence files.
|
|
44
|
+
|
|
45
|
+
## Validation Required
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
node --test tests/lib/ai/analyze-project-repair.test.js
|
|
49
|
+
node --test tests/commands/ai-analyze-project-provider.test.js
|
|
50
|
+
git diff --check
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Constraints
|
|
54
|
+
|
|
55
|
+
- Do not relax the schema.
|
|
56
|
+
- Do not move `notes` into semantic docs or claims.
|
|
57
|
+
- Do not repair ambiguous semantic conflicts.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slice_id": "slice-05-path-aware-repair-engine",
|
|
3
|
+
"ticket": "QUIVER-54-05",
|
|
4
|
+
"type": "runtime-hardening",
|
|
5
|
+
"title": "Path-Aware Repair Engine",
|
|
6
|
+
"objective": "Repair only explicitly allowed provider schema drift using a closed path-aware contract.",
|
|
7
|
+
"description": "Extends analyze-project repair to remove safe unsupported fields and rename claim to name only under strict path and value constraints.",
|
|
8
|
+
"git": {
|
|
9
|
+
"branch_type": "feature",
|
|
10
|
+
"base_branch": "main",
|
|
11
|
+
"branch_slug": "v54-path-aware-repair-engine",
|
|
12
|
+
"branch_name": "feature/QUIVER-54-05-v54-path-aware-repair-engine"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src/create-quiver/lib/ai/analyze-project-repair.js",
|
|
16
|
+
"src/create-quiver/lib/ai/analyze-project-parser.js",
|
|
17
|
+
"src/create-quiver/lib/ai/analyze-project-validation.js",
|
|
18
|
+
"tests/lib/ai/analyze-project-repair.test.js",
|
|
19
|
+
"tests/commands/ai-analyze-project-provider.test.js",
|
|
20
|
+
"specs/quiver-v54-deep-project-analysis-hardening/**"
|
|
21
|
+
],
|
|
22
|
+
"expected_read_paths": [
|
|
23
|
+
"src/create-quiver/lib/ai/analyze-project-repair.js",
|
|
24
|
+
"src/create-quiver/lib/ai/analyze-project-parser.js",
|
|
25
|
+
"src/create-quiver/lib/ai/analyze-project-schema.js",
|
|
26
|
+
"tests/lib/ai/analyze-project-repair.test.js"
|
|
27
|
+
],
|
|
28
|
+
"allowed_write_paths": [
|
|
29
|
+
"src/create-quiver/lib/ai/analyze-project-repair.js",
|
|
30
|
+
"src/create-quiver/lib/ai/analyze-project-parser.js",
|
|
31
|
+
"src/create-quiver/lib/ai/analyze-project-validation.js",
|
|
32
|
+
"tests/lib/ai/analyze-project-repair.test.js",
|
|
33
|
+
"tests/commands/ai-analyze-project-provider.test.js",
|
|
34
|
+
"specs/quiver-v54-deep-project-analysis-hardening/STATUS.md",
|
|
35
|
+
"specs/quiver-v54-deep-project-analysis-hardening/EVIDENCE_REPORT.md",
|
|
36
|
+
"specs/quiver-v54-deep-project-analysis-hardening/slices/slice-05-path-aware-repair-engine/CLOSURE_BRIEF.md",
|
|
37
|
+
"specs/quiver-v54-deep-project-analysis-hardening/slices/slice-05-path-aware-repair-engine/slice.json"
|
|
38
|
+
],
|
|
39
|
+
"depends_on": [
|
|
40
|
+
"slice-01-contract-regression-harness"
|
|
41
|
+
],
|
|
42
|
+
"parallel_safe": "after_dependencies",
|
|
43
|
+
"parallel_safe_reason": "Can run after fixtures exist and before retry controller.",
|
|
44
|
+
"must": [
|
|
45
|
+
"Use a closed allowlist of repair actions.",
|
|
46
|
+
"Fail closed on conflicts and threshold overflow.",
|
|
47
|
+
"Record every repair in manifest.",
|
|
48
|
+
"Revalidate after repair."
|
|
49
|
+
],
|
|
50
|
+
"not_included": [
|
|
51
|
+
"Retry controller.",
|
|
52
|
+
"Sampling rules.",
|
|
53
|
+
"Final docs writes."
|
|
54
|
+
],
|
|
55
|
+
"acceptance": [
|
|
56
|
+
"notes removal is path-aware and audited.",
|
|
57
|
+
"confidence removal is path-aware and audited.",
|
|
58
|
+
"claim to name rename is only applied under strict conditions.",
|
|
59
|
+
"Unsafe repairs fail without final docs writes."
|
|
60
|
+
],
|
|
61
|
+
"tests": [
|
|
62
|
+
"node --test tests/lib/ai/analyze-project-repair.test.js",
|
|
63
|
+
"node --test tests/commands/ai-analyze-project-provider.test.js",
|
|
64
|
+
"git diff --check"
|
|
65
|
+
],
|
|
66
|
+
"estimated_hours": 6,
|
|
67
|
+
"actual_hours": 4,
|
|
68
|
+
"status": "completed",
|
|
69
|
+
"started_at": "2026-06-11",
|
|
70
|
+
"completed_at": "2026-06-11",
|
|
71
|
+
"blocked_reason": null
|
|
72
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# CLOSURE_BRIEF - slice-06 retry controller
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Completed. Retry remains bounded, uses compact schema feedback without resending selected file contents, records retry manifests, and provider failures now persist raw artifacts/status before failing.
|
|
6
|
+
|
|
7
|
+
## Validation
|
|
8
|
+
|
|
9
|
+
- PASS: `node --test tests/commands/ai-analyze-project-provider.test.js`
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# EXECUTION_BRIEF - slice-06 retry controller
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
The live run retried but repeated the same drift and took too long. Retry must be cheap, bounded, and able to stop early.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Implement controlled retry with compact prompts, timeouts, drift signatures, and fail-fast behavior.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- Retry prompt uses compact validation feedback and does not resend full selected context.
|
|
14
|
+
- Add per-attempt timeout and total timeout.
|
|
15
|
+
- Compute drift signature from grouped validation issues.
|
|
16
|
+
- Stop early when dominant drift repeats or errors are clearly non-repairable.
|
|
17
|
+
- Keep max retries default 1 with hard cap defined by implementation.
|
|
18
|
+
|
|
19
|
+
## Acceptance Criteria
|
|
20
|
+
|
|
21
|
+
- Retry sends only schema feedback, failed paths/groups, and a minimal expected-shape reminder.
|
|
22
|
+
- Retry timeout produces actionable error and run status.
|
|
23
|
+
- Repeated drift fails early with compact diagnostics.
|
|
24
|
+
- Retry manifests include attempt count, max retries, drift signatures, issue counts, and final status.
|
|
25
|
+
|
|
26
|
+
## Completion Checklist
|
|
27
|
+
|
|
28
|
+
- [ ] Retry controller implemented.
|
|
29
|
+
- [ ] Timeout tests added.
|
|
30
|
+
- [ ] Repeated drift tests added.
|
|
31
|
+
- [ ] Closure brief records timeout defaults.
|
|
32
|
+
|
|
33
|
+
## Expected Files To Modify
|
|
34
|
+
|
|
35
|
+
- `src/create-quiver/commands/ai.js`
|
|
36
|
+
- `src/create-quiver/lib/ai/analyze-project-prompts.js`
|
|
37
|
+
- `src/create-quiver/lib/ai/analyze-project-validation.js`
|
|
38
|
+
- `tests/commands/ai-analyze-project-provider.test.js`
|
|
39
|
+
- This slice's closure/status/evidence files.
|
|
40
|
+
|
|
41
|
+
## Validation Required
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
node --test tests/commands/ai-analyze-project-provider.test.js
|
|
45
|
+
git diff --check
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Constraints
|
|
49
|
+
|
|
50
|
+
- Do not resend full context in retry.
|
|
51
|
+
- Do not increase default retry count beyond approved contract.
|
|
52
|
+
- Do not implement final write behavior here.
|