create-quiver 0.17.4 → 0.17.6

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.
Files changed (53) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/docs/CLI_UX_GUIDE.md +7 -0
  3. package/docs/TROUBLESHOOTING.md +62 -0
  4. package/docs/reference/commands.md +16 -0
  5. package/docs/workflows/existing-project-ai-quiver-setup.md +0 -1
  6. package/docs/workflows/existing-project.md +1 -0
  7. package/package.json +1 -1
  8. package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +1 -0
  9. package/specs/quiver-v56-analyze-project-usable-doc-merge/EVIDENCE_REPORT.md +11 -0
  10. package/specs/quiver-v56-analyze-project-usable-doc-merge/EXECUTION_PLAN.md +28 -0
  11. package/specs/quiver-v56-analyze-project-usable-doc-merge/SPEC.md +96 -0
  12. package/specs/quiver-v56-analyze-project-usable-doc-merge/STATUS.md +26 -0
  13. package/specs/quiver-v56-analyze-project-usable-doc-merge/pr.md +56 -0
  14. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-01-document-classification-merge-engine/CLOSURE_BRIEF.md +61 -0
  15. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-01-document-classification-merge-engine/EXECUTION_BRIEF.md +59 -0
  16. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-01-document-classification-merge-engine/pr.md +61 -0
  17. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-01-document-classification-merge-engine/slice.json +71 -0
  18. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-02-apply-integration-validation-contract/CLOSURE_BRIEF.md +30 -0
  19. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-02-apply-integration-validation-contract/EXECUTION_BRIEF.md +39 -0
  20. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-02-apply-integration-validation-contract/pr.md +62 -0
  21. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-02-apply-integration-validation-contract/slice.json +80 -0
  22. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-03-cli-docs-real-fixture-smoke/CLOSURE_BRIEF.md +29 -0
  23. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-03-cli-docs-real-fixture-smoke/EXECUTION_BRIEF.md +32 -0
  24. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-03-cli-docs-real-fixture-smoke/pr.md +61 -0
  25. package/specs/quiver-v56-analyze-project-usable-doc-merge/slices/slice-03-cli-docs-real-fixture-smoke/slice.json +79 -0
  26. package/specs/quiver-v57-evidence-budget-recovery-ux/EVIDENCE_REPORT.md +27 -0
  27. package/specs/quiver-v57-evidence-budget-recovery-ux/EXECUTION_PLAN.md +41 -0
  28. package/specs/quiver-v57-evidence-budget-recovery-ux/SPEC.md +139 -0
  29. package/specs/quiver-v57-evidence-budget-recovery-ux/STATUS.md +20 -0
  30. package/specs/quiver-v57-evidence-budget-recovery-ux/pr.md +124 -0
  31. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-01-recovery-contract-security-classifier/CLOSURE_BRIEF.md +22 -0
  32. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-01-recovery-contract-security-classifier/EXECUTION_BRIEF.md +58 -0
  33. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-01-recovery-contract-security-classifier/pr.md +12 -0
  34. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-01-recovery-contract-security-classifier/slice.json +60 -0
  35. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-02-budget-command-recommendation/CLOSURE_BRIEF.md +9 -0
  36. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-02-budget-command-recommendation/EXECUTION_BRIEF.md +54 -0
  37. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-02-budget-command-recommendation/pr.md +12 -0
  38. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-02-budget-command-recommendation/slice.json +60 -0
  39. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-03-cli-json-i18n-output/CLOSURE_BRIEF.md +10 -0
  40. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-03-cli-json-i18n-output/EXECUTION_BRIEF.md +58 -0
  41. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-03-cli-json-i18n-output/pr.md +13 -0
  42. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-03-cli-json-i18n-output/slice.json +68 -0
  43. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-04-integration-fixtures-docs-release-smoke/CLOSURE_BRIEF.md +14 -0
  44. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-04-integration-fixtures-docs-release-smoke/EXECUTION_BRIEF.md +55 -0
  45. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-04-integration-fixtures-docs-release-smoke/pr.md +14 -0
  46. package/specs/quiver-v57-evidence-budget-recovery-ux/slices/slice-04-integration-fixtures-docs-release-smoke/slice.json +65 -0
  47. package/src/create-quiver/commands/ai.js +132 -2
  48. package/src/create-quiver/lib/ai/analyze-project-docs.js +284 -4
  49. package/src/create-quiver/lib/ai/analyze-project-proposal.js +11 -0
  50. package/src/create-quiver/lib/ai/analyze-project-recovery.js +736 -0
  51. package/src/create-quiver/lib/ai/analyze-project-validation.js +27 -0
  52. package/src/create-quiver/lib/i18n/messages/en.js +6 -0
  53. package/src/create-quiver/lib/i18n/messages/es.js +6 -0
package/CHANGELOG.md CHANGED
@@ -28,6 +28,7 @@ All notable changes to this project will be documented in this file.
28
28
 
29
29
  ### Changed
30
30
 
31
+ - `ai analyze-project` human output now reports compact merge decisions so users can see scaffold replacement, human-content preservation, old `context-prep` cleanup, and warnings without opening manifests.
31
32
  - Existing-project docs now recommend the simple `--apply-docs` flow instead of forcing users into the advanced `--review` editor path.
32
33
  - English and Spanish CLI help now explain analyze-project docs apply options while preserving commands, flags, paths, providers, and model ids exactly.
33
34
  - `ai analyze-project --deep` now builds safer provider context by summarizing lockfiles as metadata, excluding generated/runtime directories, and prioritizing product source over Quiver-generated docs.
@@ -48,6 +49,7 @@ All notable changes to this project will be documented in this file.
48
49
 
49
50
  ### Fixed
50
51
 
52
+ - `ai analyze-project` now replaces visible Quiver scaffold placeholders and old template `context-prep` blocks when a valid project proposal is available, with nika-erp style regression coverage for `NIKA_ERP`/`stockflow`/`StockFlow` naming conflicts.
51
53
  - `ai analyze-project --deep` now repairs common safe provider schema drift, retries with compact schema feedback, records redacted raw artifacts, and fails closed without final doc writes when JSON remains invalid.
52
54
  - `doctor --fix` now gives an actionable repair path for existing `AGENTS.md` files that are missing Quiver contract sections while preserving manual content.
53
55
  - `ai analyze-project` now shows human TTY progress while provider analysis runs and reports schema validation issues with actionable detail.
@@ -139,6 +139,13 @@ Opciones de aplicacion:
139
139
  - `ai analyze-project apply --run <run-id>` aplica una propuesta guardada sin ejecutar proveedor ni requerir `--provider` o `--model`.
140
140
  - `--review` se mantiene como modo avanzado: abre la propuesta JSON en editor y revalida el JSON editado antes de escribir.
141
141
 
142
+ Feedback de merge:
143
+
144
+ - Cuando hay docs modificados, la salida humana muestra `Merge decisions`.
145
+ - Cada item informa estrategia, clasificacion, placeholders reemplazados, contenido humano preservado y bloques `context-prep` removidos cuando aplica.
146
+ - La salida debe ser compacta; el detalle auditable queda en `.quiver/runs/<run-id>/proposal/manifest.json` y `.quiver/runs/<run-id>/writes/analyze-project-doc-writes.json`.
147
+ - Conflictos de nombres o facts se muestran en `Post-write validation` como warnings o errores con `--strict`.
148
+
142
149
  Modo deterministico:
143
150
 
144
151
  ```bash
@@ -131,6 +131,58 @@ npx --yes create-quiver@latest ai analyze-project apply --run <run-id>
131
131
 
132
132
  `--review` sigue disponible como modo avanzado si querés editar la propuesta JSON manualmente antes de escribir.
133
133
 
134
+ ## `ai analyze-project` falla con `evidence-not-selected`
135
+
136
+ ### Síntoma
137
+
138
+ El comando:
139
+
140
+ ```bash
141
+ npx --yes create-quiver@latest ai analyze-project --deep --provider codex --model gpt-5.5
142
+ ```
143
+
144
+ falla con un mensaje como:
145
+
146
+ ```text
147
+ provider analysis JSON failed evidence validation
148
+ evidence-not-selected
149
+ ```
150
+
151
+ ### Explicación
152
+
153
+ El provider citó una ruta que no estaba dentro de la muestra enviada. Quiver mantiene esa validación porque evita que el modelo afirme cosas usando archivos que no leyó.
154
+
155
+ En versiones actuales, Quiver clasifica esas rutas antes de sugerir un fix:
156
+
157
+ - rutas seguras omitidas por presupuesto pueden recomendar `--max-files` o `--max-bytes` mayores;
158
+ - tests omitidos pueden recomendar `--include-tests`;
159
+ - DB/schema omitidos pueden recomendar `--include-db`;
160
+ - `.env`, secretos, `.git`, `.quiver`, dependencias, caches, dumps, binarios y outputs generados no se recomiendan;
161
+ - `.env.example` se trata como metadata/redacted, no como contenido seguro completo.
162
+
163
+ ### Qué hacer
164
+
165
+ Usá el comando exacto que Quiver imprime debajo de `Recommended fix` o `Solucion recomendada`. Por ejemplo:
166
+
167
+ ```bash
168
+ npx --yes create-quiver@latest ai analyze-project --deep --max-files 120 --max-bytes 500000 --provider codex --model gpt-5.5
169
+ ```
170
+
171
+ Si Quiver no puede recomendar un aumento seguro porque se exceden los caps o la evidencia no debe enviarse, inspeccioná la muestra y acotá el scope:
172
+
173
+ ```bash
174
+ npx --yes create-quiver@latest ai analyze-project --deep --dry-run --json
175
+ npx --yes create-quiver@latest ai analyze-project --deep --scope apps/web --provider codex --model gpt-5.5
176
+ ```
177
+
178
+ La auditoría queda en:
179
+
180
+ ```text
181
+ .quiver/runs/run-.../validation/analyze-project-validation.json
182
+ ```
183
+
184
+ Ese manifest incluye `recovery`, con clasificación de rutas, presupuesto calculado, comando sugerido y warnings.
185
+
134
186
  ## `ai analyze-project` no completa `docs/CONTEXTO.md` ni crea `docs/ARCHITECTURE.md`
135
187
 
136
188
  ### Síntoma
@@ -147,6 +199,14 @@ los docs finales siguen con placeholders o falta `docs/ARCHITECTURE.md`.
147
199
 
148
200
  En versiones actuales, ese comando debe escribir documentación final validada. Si los docs siguen con placeholders, el flujo se bloqueó antes de escribir o la propuesta IA no incluyó contenido útil para esos paths.
149
201
 
202
+ Quiver clasifica cada doc antes de escribir:
203
+
204
+ - `scaffold`: reemplaza el contenido visible de template y conserva frontmatter válido.
205
+ - `partial_scaffold` o `mixed`: elimina placeholders críticos, conserva contenido humano real y consolida bloques gestionados.
206
+ - `human_content`: conserva el contenido humano y agrega/actualiza el bloque `quiver:analyze-project`.
207
+
208
+ Los bloques antiguos `quiver:context-prep` que todavía contienen placeholders se eliminan durante `analyze-project` para que no compitan con el contexto nuevo. Si hay conflicto de nombres, por ejemplo `NIKA_ERP`, `stockflow` y `StockFlow`, Quiver lo reporta como warning o error en `--strict` en vez de ocultarlo.
209
+
150
210
  ### Qué hacer
151
211
 
152
212
  Revisá el error mostrado y los artifacts del run. Los caminos seguros son:
@@ -160,3 +220,5 @@ npx --yes create-quiver@latest ai analyze-project apply --run <run-id>
160
220
  - el comando normal aplica docs después de validar JSON, proposal, snapshot y post-write;
161
221
  - `--save-proposal` guarda `.quiver/runs/<run-id>/proposal/*` sin tocar docs finales.
162
222
  - `apply --run <run-id>` aplica una propuesta guardada sin ejecutar proveedor ni pedir `--provider` o `--model`.
223
+
224
+ Si venís de una versión anterior y tus docs tienen placeholders arriba y un bloque `quiver:analyze-project` útil abajo, volvé a ejecutar el comando normal. La salida debe mostrar `Merge decisions`, el strategy aplicado, si reemplazó scaffold, si preservó contenido humano y si removió `context-prep`.
@@ -206,6 +206,16 @@ npx --yes create-quiver@latest ai analyze-project apply --run <run-id>
206
206
 
207
207
  El modo con proveedor exige JSON validado por schema, evidencia por conclusión, niveles `confirmed`, `inferred`, `unknown` o `conflict`, artifacts auditados en `.quiver/runs`, diff, snapshot previo cuando se escribe y validación post-write. `--strict` convierte conflictos importantes de docs en error. El resultado puede quedar como `unknown` o `needs_confirmation` cuando el código no prueba una conclusión.
208
208
 
209
+ Al escribir docs, Quiver no pega la respuesta del proveedor sin más. Primero clasifica el contenido existente y aplica un merge determinístico:
210
+
211
+ - reemplaza scaffolds con placeholders críticos en español o inglés;
212
+ - preserva contenido humano real;
213
+ - reemplaza un bloque `quiver:analyze-project` previo en lugar de duplicarlo;
214
+ - remueve bloques `quiver:context-prep` viejos cuando todavía son template;
215
+ - reporta `Merge decisions` con estrategia, placeholders reemplazados, contenido humano preservado y warnings.
216
+
217
+ Los conflictos de nombres o facts, por ejemplo `NIKA_ERP`, `stockflow` y `StockFlow`, se reportan en la validación post-write. En modo normal aparecen como warnings; con `--strict` bloquean la ejecución.
218
+
209
219
  Garantías del flujo con proveedor:
210
220
 
211
221
  - `--dry-run` no escribe archivos ni ejecuta proveedor.
@@ -216,6 +226,7 @@ Garantías del flujo con proveedor:
216
226
  - Si el proveedor devuelve JSON con drift seguro como `notes`, `claim` usado como `name` faltante, o `confidence` en paths no permitidos, Quiver lo repara, registra el repair y revalida.
217
227
  - Si el JSON sigue inválido pero el error es retryable, Quiver hace 1 retry por defecto, con cap duro de 2 retries.
218
228
  - Si el JSON final es inválido, Quiver falla sin escribir docs finales y deja manifests de validación/retry/repair en `.quiver/runs`.
229
+ - Si el proveedor cita evidencia fuera de la muestra seleccionada, Quiver clasifica esas rutas, no recomienda incluir secretos ni binarios, y muestra una `Recommended fix` / `Solucion recomendada` con un comando seguro cuando corresponde.
219
230
  - El modo provider normal aplica docs finales por defecto después de validar la propuesta, crear proposal artifacts, snapshot, write manifest y validación post-write.
220
231
  - `--apply-docs` en TTY muestra opciones explicadas para aplicar, ver diff, guardar propuesta, editar propuesta o cancelar.
221
232
  - `--apply-docs --yes` aplica en automatización después de validar propuesta, paths permitidos, hashes, snapshot y post-write.
@@ -223,6 +234,7 @@ Garantías del flujo con proveedor:
223
234
  - `ai analyze-project apply --run <run-id>` aplica una propuesta guardada sin ejecutar proveedor ni requerir `--provider` o `--model`.
224
235
  - `--review` queda como modo avanzado para editar manualmente una propuesta JSON antes de escribir.
225
236
  - Las escrituras aprobadas crean snapshot con hashes y se escriben con rename atómico.
237
+ - El write manifest guarda `merge_report` por archivo y el proposal manifest guarda `merge_plan` para auditoría.
226
238
 
227
239
  Benchmark recomendado:
228
240
 
@@ -249,9 +261,12 @@ Evidencia esperada:
249
261
  - `package-lock.json` aparece en `detected.lockfiles` y en omitidos con `sampling:lockfile-metadata`, no en contenido enviado al provider.
250
262
  - El modo provider escribe artifacts auditados en `.quiver/runs`, redactados y con tamaño controlado, y aplica docs finales validados por defecto.
251
263
  - Si el provider devuelve drift no reparable, el comando falla con path/tipo/causa probable y próximo comando seguro, sin escribir docs finales.
264
+ - Si el error es `evidence-not-selected`, el validation manifest incluye un bloque `recovery` con clasificación de rutas, presupuesto calculado, warnings y comando recomendado. Por ejemplo, si el provider citó tests omitidos, Quiver puede sugerir `--include-tests`; si faltó presupuesto seguro, puede sugerir `--max-files` y `--max-bytes` mayores. Si la evidencia es `.env`, dependencias, caches, dumps o binarios, no la recomienda.
252
265
  - `--save-proposal` debe crear `.quiver/runs/<run-id>/proposal/*` sin modificar docs finales.
253
266
  - `--apply-docs` debe mostrar selector explicado en TTY o requerir `--yes` en automatización.
254
267
  - `apply --run <run-id>` debe aplicar la propuesta guardada sin volver a ejecutar proveedor.
268
+ - La salida humana debe mostrar `Merge decisions` cuando haya docs modificados.
269
+ - En fixtures tipo `nika-erp`, `docs/CONTEXTO.md` no debe conservar placeholders visibles ni bloques `quiver:context-prep` de template después de aplicar.
255
270
 
256
271
  Rollback de release:
257
272
 
@@ -270,6 +285,7 @@ Rollback de release:
270
285
  | `npx --yes create-quiver@latest ai analyze-project --deep --apply-docs --yes --provider codex --model gpt-5.5` | Aplica docs validados en modo automatizado, con snapshots y validación post-write. |
271
286
  | `npx --yes create-quiver@latest ai analyze-project apply --run <run-id>` | Aplica una propuesta guardada sin ejecutar proveedor ni requerir `--provider` o `--model`. |
272
287
  | `npx --yes create-quiver@latest ai analyze-project --scope apps/web --max-files 80 --max-bytes 300000 --include-tests --dry-run` | Acota el análisis por workspace/ruta y presupuesto de muestra. |
288
+ | `npx --yes create-quiver@latest ai analyze-project --deep --max-files 120 --max-bytes 500000 --provider codex --model gpt-5.5` | Ejemplo de rerun cuando Quiver recomienda ampliar una muestra segura después de `evidence-not-selected`. Usá el comando exacto que imprime el error. |
273
289
  | `npx --yes create-quiver@latest ai prepare-context --dry-run` | Previsualiza actualizaciones documentales de contexto para IA. |
274
290
  | `npx --yes create-quiver@latest ai prepare-context` | Escribe actualizaciones documentales de contexto para IA. |
275
291
  | `npx --yes create-quiver@latest ai prepare-context --with-planner --dry-run` | Previsualiza una propuesta docs-only generada por el planner sin escribir archivos. |
@@ -108,7 +108,6 @@ Archivos que puede crear o actualizar:
108
108
  ```bash
109
109
  npx --yes create-quiver@latest ai analyze-project \
110
110
  --deep \
111
- --review \
112
111
  --provider codex \
113
112
  --model gpt-5.5
114
113
  ```
@@ -98,6 +98,7 @@ Qué hace:
98
98
  - muestra loader en TTY y progreso lineal en no-TTY;
99
99
  - si hay drift seguro de schema, como `notes` extra, `claim` usado como `name` faltante o `confidence` donde no está permitido, lo repara de forma auditada;
100
100
  - si el error es retryable, hace un retry acotado con feedback compacto;
101
+ - si el provider cita evidencia fuera de la muestra, clasifica esas rutas y muestra una solución recomendada con `--include-tests`, `--include-db`, `--max-files` o `--max-bytes` solo cuando sea seguro;
101
102
  - si la propuesta final no es válida, falla sin escribir docs finales.
102
103
 
103
104
  Si preferís separar generación y aplicación:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-quiver",
3
- "version": "0.17.4",
3
+ "version": "0.17.6",
4
4
  "private": false,
5
5
  "description": "Quiver CLI for scaffolding projects from the packaged template",
6
6
  "license": "MIT",
@@ -610,6 +610,7 @@
610
610
  { "command": "ai analyze-project --deep --review", "profile": "ai-analyze-project", "critical": "pass" },
611
611
  { "command": "ai analyze-project --deep --provider codex --model gpt-5.5", "profile": "ai-analyze-project", "critical": "pass" },
612
612
  { "command": "ai analyze-project --deep --save-proposal --provider codex --model gpt-5.5", "profile": "ai-analyze-project", "critical": "pass" },
613
+ { "command": "ai analyze-project --deep --max-files 120 --max-bytes 500000 --provider codex --model gpt-5.5", "profile": "ai-analyze-project", "critical": "pass" },
613
614
  { "command": "ai analyze-project --deep --apply-docs --provider codex --model gpt-5.5", "profile": "ai-analyze-project", "critical": "pass" },
614
615
  { "command": "ai analyze-project --deep --apply-docs --yes --provider codex --model gpt-5.5", "profile": "ai-analyze-project", "critical": "pass" },
615
616
  { "command": "ai analyze-project apply --run <run-id>", "profile": "ai-analyze-project", "critical": "pass" },
@@ -0,0 +1,11 @@
1
+ # Evidence Report - Quiver v56 Analyze Project Usable Doc Merge
2
+
3
+ Evidence is recorded per slice closure.
4
+
5
+ ## Slice Evidence
6
+
7
+ | Slice | Evidence |
8
+ |---|---|
9
+ | slice-01-document-classification-merge-engine | `node --test tests/lib/ai-analyze-project-docs.test.js`; `node --test tests/commands/ai-analyze-project-provider.test.js`; `node --test tests/commands/ai-analyze-project-review.test.js`; `node bin/create-quiver.js spec validate specs/quiver-v56-analyze-project-usable-doc-merge --strict`; `git diff --check` |
10
+ | slice-02-apply-integration-validation-contract | `node --test tests/commands/ai-analyze-project-provider.test.js tests/commands/ai-analyze-project-review.test.js`; `node --test tests/lib/ai-analyze-project-docs.test.js tests/lib/ai-analyze-project-validation.test.js`; `node --test tests/lib/ai-analyze-project-proposal.test.js`; `node bin/create-quiver.js spec validate specs/quiver-v56-analyze-project-usable-doc-merge --strict`; `git diff --check` |
11
+ | slice-03-cli-docs-real-fixture-smoke | `node --test tests/commands/ai-analyze-project-provider.test.js tests/commands/cli-contract.test.js`; `npm run docs:check`; `node bin/create-quiver.js spec validate specs/quiver-v56-analyze-project-usable-doc-merge --strict`; `git diff --check` |
@@ -0,0 +1,28 @@
1
+ # Execution Plan - Quiver v56 Analyze Project Usable Doc Merge
2
+
3
+ ## Order
4
+
5
+ 1. `slice-01-document-classification-merge-engine`
6
+ 2. `slice-02-apply-integration-validation-contract`
7
+ 3. `slice-03-cli-docs-real-fixture-smoke`
8
+
9
+ ## Parallelism
10
+
11
+ - Slice 01 is sequential and blocks everything else.
12
+ - Slice 02 is sequential after Slice 01.
13
+ - Slice 03 docs can draft after Slice 01, but final smoke and output validation depend on Slice 02.
14
+
15
+ ## PR Strategy
16
+
17
+ - PR 1: Slice 01.
18
+ - PR 2: Slice 02.
19
+ - PR 3: Slice 03.
20
+
21
+ ## Validation Gates
22
+
23
+ Each PR must run its focused tests plus:
24
+
25
+ ```bash
26
+ git diff --check
27
+ node bin/create-quiver.js spec validate specs/quiver-v56-analyze-project-usable-doc-merge --strict
28
+ ```
@@ -0,0 +1,96 @@
1
+ # Quiver v56 - Analyze Project Usable Doc Merge
2
+
3
+ **Date:** 2026-06-17
4
+ **Status:** Completed
5
+ **Source:** User-approved requirement, production review, stricter second-pass review, and execution plan for `ai analyze-project` usable documentation output.
6
+
7
+ ## Problem
8
+
9
+ `ai analyze-project --deep --provider codex --model gpt-5.5` now writes documentation by default, but real projects can still end with unusable docs. In `nika-erp`, Quiver wrote a valid `quiver:analyze-project` block, but preserved scaffold placeholders at the top of `docs/CONTEXTO.md`, plus an older `quiver:context-prep` block. The command reported success even though the first visible content still looked unmodified.
10
+
11
+ ## Objective
12
+
13
+ Make analyze-project doc writes produce usable human-facing context files by applying a deterministic documentation merge contract:
14
+
15
+ ```text
16
+ classify existing doc -> merge by classification -> preserve real human content -> replace scaffold placeholders -> consolidate managed blocks -> validate visible output
17
+ ```
18
+
19
+ ## Scope
20
+
21
+ ### Included
22
+
23
+ - Document classification contract for scaffold, partial scaffold, human content, managed-only, mixed, and unknown docs.
24
+ - Deterministic merge strategy for `docs/CONTEXTO.md`, `docs/AI_CONTEXT.md`, and `docs/ARCHITECTURE.md`.
25
+ - Critical placeholder detection in English and Spanish.
26
+ - Idempotent managed block replacement.
27
+ - Safe handling of old `quiver:context-prep` blocks.
28
+ - Integration with live apply, saved proposal apply, review, JSON, and strict validation.
29
+ - Human output, manifests, docs, troubleshooting, and nika-erp regression fixture/smoke.
30
+
31
+ ### Excluded
32
+
33
+ - Product-code changes in analyzed repositories.
34
+ - Writing outside the existing analyze-project documentation allowlist.
35
+ - Automatic spec generation from project analysis.
36
+ - Relaxing provider schema validation.
37
+ - Translating technical evidence or provider claims semantically.
38
+
39
+ ## Requirements
40
+
41
+ 1. Quiver must not preserve critical scaffold placeholders as primary visible content when a valid proposal can replace them.
42
+ 2. Quiver must not delete real human content without preserving it or reporting a warning.
43
+ 3. Existing frontmatter must be preserved when it is parseable.
44
+ 4. If frontmatter is ambiguous, Quiver must preserve it and warn.
45
+ 5. `quiver:analyze-project` must be replaced in place on repeated runs, never duplicated.
46
+ 6. `quiver:context-prep` scaffold content must not remain as confusing primary content after analyze-project applies.
47
+ 7. The merge must be idempotent for the same proposal and input.
48
+ 8. `apply --run` and live provider apply must use the same merge engine.
49
+ 9. `--save-proposal` must persist a merge plan or enough metadata to preview the eventual write result.
50
+ 10. `--review` must show the final post-merge diff, not only raw provider Markdown.
51
+ 11. `--json` must expose merge strategy and warnings without removing existing fields.
52
+ 12. `--strict` must fail when critical placeholders remain in primary visible content.
53
+ 13. Name conflicts such as `NIKA_ERP`, `stockflow`, and `StockFlow` must be reported, not silently hidden.
54
+
55
+ ## Classification Contract
56
+
57
+ | Classification | Condition | Action |
58
+ |---|---|---|
59
+ | `scaffold` | Quiver/template signals plus known placeholders, with no significant human text | Replace primary content while preserving frontmatter |
60
+ | `partial_scaffold` | Some sections are placeholder-only and other sections have human text | Replace placeholder sections and preserve completed sections |
61
+ | `human_content` | Significant non-placeholder text outside managed markers | Preserve human text and insert generated summary visibly |
62
+ | `managed_only` | File is empty or only contains Quiver managed blocks | Replace managed content |
63
+ | `mixed` | Human text plus Quiver blocks plus placeholders | Preserve human text, remove/replace scaffold portions, consolidate blocks |
64
+ | `unknown` | Not safely classifiable | Preserve content, insert generated block visibly, warn |
65
+
66
+ ## Slice Roadmap
67
+
68
+ | Slice | Title | Status | Dependencies | Parallel Guidance |
69
+ |---|---|---|---|---|
70
+ | slice-01-document-classification-merge-engine | Document Classification + Merge Engine | completed | none | sequential first |
71
+ | slice-02-apply-integration-validation-contract | Apply Integration + Validation Contract | completed | slice-01 | sequential after slice-01 |
72
+ | slice-03-cli-docs-real-fixture-smoke | CLI UX + Docs + Real Fixture Smoke | completed | slice-02 | final hardening; docs can draft after slice-01 |
73
+
74
+ ## Validation Strategy
75
+
76
+ ```bash
77
+ node --test tests/lib/ai-analyze-project-docs.test.js
78
+ node --test tests/commands/ai-analyze-project-provider.test.js tests/commands/ai-analyze-project-review.test.js
79
+ npm run docs:check
80
+ node bin/create-quiver.js spec validate specs/quiver-v56-analyze-project-usable-doc-merge --strict
81
+ git diff --check
82
+ ```
83
+
84
+ ## Production Guardrails
85
+
86
+ - Snapshot before writes remains mandatory.
87
+ - Writes remain atomic.
88
+ - Path allowlist remains unchanged.
89
+ - Provider output remains untrusted until schema validation passes.
90
+ - Merge decisions must be recorded in the write plan/report.
91
+ - Critical placeholder validation checks primary visible content, not only managed blocks.
92
+
93
+ ## Open Questions
94
+
95
+ - Whether `token_cost` should be recalculated immediately in v56 or deferred to a metadata cleanup.
96
+ - Whether old `context-prep` human notes should be moved into a named preserved section or only marked as superseded.
@@ -0,0 +1,26 @@
1
+ # Status - Quiver v56 Analyze Project Usable Doc Merge
2
+
3
+ **Status:** Completed
4
+ **Last updated:** 2026-06-17
5
+
6
+ ## Current State
7
+
8
+ The requirement, acceptance criteria, production review, second stricter review, and execution plan are approved. All slices are complete.
9
+
10
+ ## Slice Status
11
+
12
+ | Slice | Status | Notes |
13
+ |---|---|---|
14
+ | slice-01-document-classification-merge-engine | completed | Deterministic classification and merge engine implemented with unit and analyze-project flow tests. |
15
+ | slice-02-apply-integration-validation-contract | completed | Merge metadata is exposed in JSON/write reports, proposal/write manifests persist merge plan/report, review diff uses post-merge output, and strict validation fails visible scaffold placeholders. |
16
+ | slice-03-cli-docs-real-fixture-smoke | completed | Human output reports merge decisions, docs explain placeholder recovery, and deterministic nika-erp style fixture validates visible placeholder cleanup plus name-conflict warnings. |
17
+
18
+ ## Blockers
19
+
20
+ - None.
21
+
22
+ ## Next Command
23
+
24
+ ```bash
25
+ node --test tests/commands/ai-analyze-project-provider.test.js tests/commands/cli-contract.test.js
26
+ ```
@@ -0,0 +1,56 @@
1
+ ## Title
2
+
3
+ Quiver v56 analyze-project usable doc merge
4
+
5
+ ## Summary
6
+
7
+ Implements a deterministic document merge contract so `ai analyze-project` replaces scaffold placeholders, preserves real human content, consolidates managed blocks, and validates that final docs are usable.
8
+
9
+ ## PR Policy
10
+
11
+ Individual PRs by slice. Runtime behavior changes must not be grouped with unrelated docs-only work.
12
+
13
+ ## Scope
14
+
15
+ See the active slice `pr.md`.
16
+
17
+ ## Files
18
+
19
+ See the active slice `slice.json`.
20
+
21
+ ## How to Test (DETAILED - REQUIRED)
22
+
23
+ ### Required Environment
24
+
25
+ Node.js/npm and local checkout.
26
+
27
+ ### Worktree Access
28
+
29
+ Use the branch created for the active slice.
30
+
31
+ ### Run the Project
32
+
33
+ No dev server is required.
34
+
35
+ ### Use Cases
36
+
37
+ See active slice.
38
+
39
+ ### Technical Verification
40
+
41
+ ```bash
42
+ node bin/create-quiver.js spec validate specs/quiver-v56-analyze-project-usable-doc-merge --strict
43
+ git diff --check
44
+ ```
45
+
46
+ ## Evidence
47
+
48
+ See active slice closure.
49
+
50
+ ## Rollback
51
+
52
+ Revert the slice PR.
53
+
54
+ ## Risks / Notes
55
+
56
+ This spec changes doc merge behavior for `ai analyze-project`; preserve snapshots and allowlist protections.
@@ -0,0 +1,61 @@
1
+ # CLOSURE_BRIEF - slice-01 Document Classification + Merge Engine
2
+
3
+ ## Summary
4
+
5
+ Implemented the Slice 01 merge engine contract for analyze-project docs.
6
+
7
+ The engine now:
8
+
9
+ - classifies existing docs as scaffold, partial scaffold, human content, managed-only, mixed, or unknown;
10
+ - detects known critical Quiver scaffold placeholders in English and Spanish;
11
+ - preserves parseable frontmatter;
12
+ - replaces scaffold primary content with proposed analyze-project content;
13
+ - preserves significant human content in partial/mixed docs;
14
+ - replaces existing `quiver:analyze-project` blocks without duplication;
15
+ - removes scaffold-only `quiver:context-prep` content when analyze-project content is applied;
16
+ - exposes `merge_report` metadata on write plan items;
17
+ - remains idempotent for the same proposal.
18
+
19
+ ## Evidence
20
+
21
+ ```bash
22
+ node --test tests/lib/ai-analyze-project-docs.test.js
23
+ ```
24
+
25
+ Result: 10 tests passed, 0 failed.
26
+
27
+ ```bash
28
+ node --test tests/commands/ai-analyze-project-provider.test.js
29
+ ```
30
+
31
+ Result: 23 tests passed, 0 failed.
32
+
33
+ ```bash
34
+ node --test tests/commands/ai-analyze-project-review.test.js
35
+ ```
36
+
37
+ Result: 20 tests passed, 0 failed.
38
+
39
+ ## Validation
40
+
41
+ ```bash
42
+ node bin/create-quiver.js spec validate specs/quiver-v56-analyze-project-usable-doc-merge --strict
43
+ git diff --check
44
+ ```
45
+
46
+ Result: passed.
47
+
48
+ ## Acceptance Coverage
49
+
50
+ - Scaffold docs no longer keep critical placeholders as primary visible content: covered by `mergeAnalyzeProjectDoc replaces Spanish Quiver scaffold primary content`.
51
+ - Partial scaffold docs preserve completed human sections: covered by `mergeAnalyzeProjectDoc preserves completed human sections in partial scaffold`.
52
+ - Human docs preserve human text: covered by `mergeAnalyzeProjectDoc preserves human docs and replaces existing analyze-project block`.
53
+ - Existing analyze-project block is replaced in place: covered by unit test and provider/review command tests.
54
+ - Context-prep scaffold does not remain confusing primary content: covered by `mergeAnalyzeProjectDoc removes scaffold context-prep block when applying analyze-project content`.
55
+ - Same input/proposal is stable: covered by `mergeAnalyzeProjectDoc is idempotent for the same proposal`.
56
+ - Write plan items include classification/strategy metadata: covered by `write plan preserves human content and snapshot manifest records hashes`.
57
+
58
+ ## Risks / Follow-ups
59
+
60
+ - Slice 02 must wire this metadata into JSON/output and strict visible-placeholder validation.
61
+ - Slice 03 must add the nika-erp style fixture and user-facing docs/output polish.
@@ -0,0 +1,59 @@
1
+ # EXECUTION_BRIEF - slice-01 Document Classification + Merge Engine
2
+
3
+ ## Objective
4
+
5
+ Implement the deterministic merge engine for analyze-project docs.
6
+
7
+ ## Context
8
+
9
+ The current `mergeManagedBlock` preserves the whole document and appends/replaces only the `quiver:analyze-project` block. This leaves scaffold placeholders visible above generated content. Slice 01 must solve the core merge contract before any CLI/output integration.
10
+
11
+ ## Scope
12
+
13
+ - Add explicit critical placeholder detection for EN/ES Quiver scaffold text.
14
+ - Add classification for existing docs.
15
+ - Preserve parseable frontmatter.
16
+ - Replace scaffold primary content with proposed Markdown.
17
+ - Preserve human content.
18
+ - Replace existing `quiver:analyze-project` block idempotently.
19
+ - Remove or supersede scaffold-only `quiver:context-prep` blocks.
20
+ - Add merge metadata to write plan items.
21
+
22
+ ## Acceptance Criteria
23
+
24
+ - Scaffold docs no longer keep critical placeholders as primary visible content.
25
+ - Partial scaffold docs preserve human-completed sections.
26
+ - Human docs preserve human text.
27
+ - Existing analyze-project block is replaced in place.
28
+ - Context-prep scaffold does not remain as confusing primary content.
29
+ - Same input/proposal produces stable output across repeated merges.
30
+ - Unit tests cover the above.
31
+
32
+ ## Expected Files
33
+
34
+ - `src/create-quiver/lib/ai/analyze-project-docs.js`
35
+ - `tests/lib/ai-analyze-project-docs.test.js`
36
+ - `specs/quiver-v56-analyze-project-usable-doc-merge/**`
37
+
38
+ ## Validation
39
+
40
+ ```bash
41
+ node --test tests/lib/ai-analyze-project-docs.test.js
42
+ node bin/create-quiver.js spec validate specs/quiver-v56-analyze-project-usable-doc-merge --strict
43
+ git diff --check
44
+ ```
45
+
46
+ ## Completion Checklist
47
+
48
+ - Classification helpers implemented and exported for tests.
49
+ - Merge engine replaces scaffold primary content safely.
50
+ - Merge engine preserves human content.
51
+ - Idempotency tests pass.
52
+ - Slice closure brief records validation evidence.
53
+
54
+ ## Constraints
55
+
56
+ - Do not change provider schema.
57
+ - Do not widen the analyze-project doc path allowlist.
58
+ - Do not change CLI output in this slice except what write plan metadata naturally exposes to tests.
59
+ - Do not implement post-write strict placeholder validation here; that belongs to Slice 02.
@@ -0,0 +1,61 @@
1
+ ## Title
2
+
3
+ QUIVER-56-01 document classification merge engine
4
+
5
+ ## Summary
6
+
7
+ Implements deterministic document classification and merge behavior for analyze-project docs.
8
+
9
+ ## PR Policy
10
+
11
+ Individual PR required because this changes CLI write behavior internals.
12
+
13
+ ## Scope
14
+
15
+ Slice 01 only.
16
+
17
+ ## Files
18
+
19
+ - `src/create-quiver/lib/ai/analyze-project-docs.js`
20
+ - `tests/lib/ai-analyze-project-docs.test.js`
21
+ - `specs/quiver-v56-analyze-project-usable-doc-merge/**`
22
+
23
+ ## How to Test (DETAILED - REQUIRED)
24
+
25
+ ### Required Environment
26
+
27
+ Node.js/npm.
28
+
29
+ ### Worktree Access
30
+
31
+ Use the slice branch.
32
+
33
+ ### Run the Project
34
+
35
+ No dev server required.
36
+
37
+ ### Use Cases
38
+
39
+ Validate scaffold replacement, partial scaffold preservation, human content preservation, context-prep cleanup, and idempotency.
40
+
41
+ ### Technical Verification
42
+
43
+ ```bash
44
+ node --test tests/lib/ai-analyze-project-docs.test.js
45
+ node bin/create-quiver.js spec validate specs/quiver-v56-analyze-project-usable-doc-merge --strict
46
+ git diff --check
47
+ ```
48
+
49
+ ## Evidence
50
+
51
+ - `node --test tests/lib/ai-analyze-project-docs.test.js`: passed.
52
+ - `node bin/create-quiver.js spec validate specs/quiver-v56-analyze-project-usable-doc-merge --strict`: passed.
53
+ - `git diff --check`: passed.
54
+
55
+ ## Rollback
56
+
57
+ Revert the PR.
58
+
59
+ ## Risks / Notes
60
+
61
+ Later slices integrate this engine into all apply/review/strict CLI paths.