create-quiver 0.17.3 → 0.17.4

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.
@@ -94,7 +94,7 @@ Reglas:
94
94
  |---|---:|---:|---:|---|
95
95
  | `init` | no | si | no | Interactive guia modo de proyecto, metodologia `wdd-sdd`, perfil inicial y proximo paso de perfiles de agentes. |
96
96
  | `migrate` | no | no | no | En TTY confirma antes de escribir; en CI/no-TTY requiere `--yes`. `--dry-run` no pide confirmacion ni escribe. |
97
- | `ai analyze-project` | no | no | si | `--dry-run` es read-only y no ejecuta proveedor; `--apply-docs` muestra selector en TTY; `--review` queda como modo avanzado de edicion JSON. |
97
+ | `ai analyze-project` | no | no | si | `--dry-run` es read-only y no ejecuta proveedor; el comando normal con provider aplica docs validados; `--review` queda como modo avanzado de edicion JSON. |
98
98
  | `ai prepare-context` | si | si | si | Modo deterministico por defecto; planner opcional con contrato docs-only. |
99
99
  | `ai plan` | si | si | si | El planner ya es implicito; `--with-planner` se acepta por consistencia. |
100
100
  | `spec create` | si | si | si | Consume un plan tecnico aprobado del planner; no vuelve a ejecutar proveedor. Review previsualiza el paquete antes de escribir. |
@@ -124,12 +124,12 @@ Analisis profundo de un proyecto existente:
124
124
  ```bash
125
125
  npx create-quiver ai analyze-project --deep --dry-run
126
126
  npx create-quiver ai analyze-project --deep --dry-run --json
127
+ npx create-quiver ai analyze-project --deep --provider codex --model gpt-5.5
127
128
  npx create-quiver ai analyze-project --deep --save-proposal --provider codex --model gpt-5.5
128
- npx create-quiver ai analyze-project --deep --apply-docs --provider codex --model gpt-5.5
129
129
  npx create-quiver ai analyze-project apply --run <run-id>
130
130
  ```
131
131
 
132
- `ai analyze-project` debe mantener estas garantias: en `--dry-run` no escribe ni ejecuta proveedor; el modo provider normal genera auditoria y propuesta pero no escribe docs finales; con proveedor no lee `.env`, dependencias, caches, binarios ni outputs generados; toda conclusion importante cita evidencia o queda como `unknown`; las escrituras se limitan a docs aprobados, usan bloques gestionados por Quiver, muestran diff y crean snapshot previo.
132
+ `ai analyze-project` debe mantener estas garantias: en `--dry-run` no escribe ni ejecuta proveedor; el modo provider normal genera auditoria, propuesta, snapshot y aplica docs finales validados; con proveedor no lee `.env`, dependencias, caches, binarios ni outputs generados; toda conclusion importante cita evidencia o queda como `unknown`; las escrituras se limitan a docs aprobados, usan bloques gestionados por Quiver y crean snapshot previo.
133
133
 
134
134
  Opciones de aplicacion:
135
135
 
@@ -137,7 +137,7 @@ Opciones de aplicacion:
137
137
  - `--apply-docs --yes` aplica en automatizacion despues de validar propuesta, hashes, snapshot y post-write.
138
138
  - `--save-proposal` guarda `.quiver/runs/<run-id>/proposal/*` sin escribir docs finales.
139
139
  - `ai analyze-project apply --run <run-id>` aplica una propuesta guardada sin ejecutar proveedor ni requerir `--provider` o `--model`.
140
- - `--review` se mantiene como modo avanzado: abre la propuesta JSON en editor, revalida el JSON editado, muestra diff final y pide confirmacion.
140
+ - `--review` se mantiene como modo avanzado: abre la propuesta JSON en editor y revalida el JSON editado antes de escribir.
141
141
 
142
142
  Modo deterministico:
143
143
 
@@ -114,13 +114,13 @@ npx --yes create-quiver@latest ai analyze-project --deep --max-files 40 --max-by
114
114
 
115
115
  Si `package-lock.json` aparece como problema, no deberías incluirlo completo. En versiones actuales debe aparecer resumido en `detected.lockfiles` y omitido como `sampling:lockfile-metadata`.
116
116
 
117
- Cuando el análisis sea válido y quieras escribir documentación:
117
+ Cuando el análisis sea válido, el comando normal ya escribe documentación final validada:
118
118
 
119
119
  ```bash
120
- npx --yes create-quiver@latest ai analyze-project --deep --apply-docs --provider codex --model gpt-5.5
120
+ npx --yes create-quiver@latest ai analyze-project --deep --provider codex --model gpt-5.5
121
121
  ```
122
122
 
123
- `--apply-docs` muestra opciones explicadas en TTY: aplicar documentación, ver diff, guardar propuesta, editar propuesta o cancelar. Si elegís aplicar, Quiver revalida la propuesta, crea snapshot y escribe solo docs permitidos.
123
+ Quiver revalida la propuesta, crea artifacts auditados, snapshot, write manifest y escribe solo docs permitidos. `--apply-docs` queda disponible para scripts o flujos interactivos que necesiten el selector anterior.
124
124
 
125
125
  Para guardar primero y aplicar después sin volver a ejecutar el proveedor:
126
126
 
@@ -145,20 +145,18 @@ los docs finales siguen con placeholders o falta `docs/ARCHITECTURE.md`.
145
145
 
146
146
  ### Explicación
147
147
 
148
- Ese comando ejecuta el análisis, valida la respuesta IA y guarda artifacts auditados en `.quiver/runs`, pero no escribe documentación final por defecto. Es intencional: evita cambios sorpresivos en repos reales.
148
+ 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
149
 
150
150
  ### Qué hacer
151
151
 
152
- Usá uno de estos caminos seguros:
152
+ Revisá el error mostrado y los artifacts del run. Los caminos seguros son:
153
153
 
154
154
  ```bash
155
- npx --yes create-quiver@latest ai analyze-project --deep --apply-docs --provider codex --model gpt-5.5
156
- npx --yes create-quiver@latest ai analyze-project --deep --apply-docs --yes --provider codex --model gpt-5.5
155
+ npx --yes create-quiver@latest ai analyze-project --deep --provider codex --model gpt-5.5
157
156
  npx --yes create-quiver@latest ai analyze-project --deep --save-proposal --provider codex --model gpt-5.5
158
157
  npx --yes create-quiver@latest ai analyze-project apply --run <run-id>
159
158
  ```
160
159
 
161
- - `--apply-docs` en TTY muestra opciones explicadas antes de escribir.
162
- - `--apply-docs --yes` aplica en automatización si la propuesta y los docs destino son seguros.
160
+ - el comando normal aplica docs después de validar JSON, proposal, snapshot y post-write;
163
161
  - `--save-proposal` guarda `.quiver/runs/<run-id>/proposal/*` sin tocar docs finales.
164
162
  - `apply --run <run-id>` aplica una propuesta guardada sin ejecutar proveedor ni pedir `--provider` o `--model`.
@@ -49,7 +49,7 @@ El contenido curado fuera de los marcadores se mantiene manual y no debe ser ree
49
49
  | AI lifecycle | `ai active-slice status\|reconcile` | Inspect or dry-run reconcile local active-slice state from every supported source. |
50
50
  | AI lifecycle | `ai status` | Show current AI lifecycle phase, approved versions, blockers, and next command. |
51
51
  | AI lifecycle | `ai resume` | Resume guidance from the last valid lifecycle phase without chat memory. |
52
- | AI lifecycle | `ai analyze-project` | Analyze a bounded project sample and generate audited documentation proposals. |
52
+ | AI lifecycle | `ai analyze-project` | Analyze a bounded project sample and apply validated documentation updates. |
53
53
  | AI lifecycle | `ai onboard` | Run or print the planner onboarding prompt with a token-aware context pack. |
54
54
  | AI lifecycle | `ai prepare-context` | Preview or write docs-only AI context updates with assumptions and risks. |
55
55
  | AI lifecycle | `ai agent set\|list\|show\|doctor\|repair` | Manage, diagnose, and dry-run repair planner, executor, reviewer, and doctor provider profiles without secrets. |
@@ -199,8 +199,8 @@ En `--dry-run`, Quiver no escribe archivos, no ejecuta proveedor y muestra qué
199
199
  Para generar docs desde IA:
200
200
 
201
201
  ```bash
202
+ npx --yes create-quiver@latest ai analyze-project --deep --provider codex --model gpt-5.5
202
203
  npx --yes create-quiver@latest ai analyze-project --deep --save-proposal --provider codex --model gpt-5.5
203
- npx --yes create-quiver@latest ai analyze-project --deep --apply-docs --provider codex --model gpt-5.5
204
204
  npx --yes create-quiver@latest ai analyze-project apply --run <run-id>
205
205
  ```
206
206
 
@@ -216,12 +216,12 @@ Garantías del flujo con proveedor:
216
216
  - 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
217
  - Si el JSON sigue inválido pero el error es retryable, Quiver hace 1 retry por defecto, con cap duro de 2 retries.
218
218
  - Si el JSON final es inválido, Quiver falla sin escribir docs finales y deja manifests de validación/retry/repair en `.quiver/runs`.
219
- - El modo provider normal no escribe docs finales por defecto; usá `--apply-docs`, `--save-proposal` o `--review` para decidir qué hacer con la propuesta validada.
219
+ - 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
220
  - `--apply-docs` en TTY muestra opciones explicadas para aplicar, ver diff, guardar propuesta, editar propuesta o cancelar.
221
221
  - `--apply-docs --yes` aplica en automatización después de validar propuesta, paths permitidos, hashes, snapshot y post-write.
222
222
  - `--save-proposal` guarda `.quiver/runs/<run-id>/proposal/*` sin escribir docs finales.
223
223
  - `ai analyze-project apply --run <run-id>` aplica una propuesta guardada sin ejecutar proveedor ni requerir `--provider` o `--model`.
224
- - `--review` abre una propuesta JSON editable, revalida el JSON editado, muestra diff final y pide confirmación antes de escribir docs permitidos.
224
+ - `--review` queda como modo avanzado para editar manualmente una propuesta JSON antes de escribir.
225
225
  - Las escrituras aprobadas crean snapshot con hashes y se escriben con rename atómico.
226
226
 
227
227
  Benchmark recomendado:
@@ -238,7 +238,6 @@ cd /tmp/quiver-smoke/nika-erp
238
238
  npx --yes create-quiver@latest ai analyze-project --deep --dry-run --json
239
239
  npx --yes create-quiver@latest ai analyze-project --deep --provider codex --model gpt-5.5
240
240
  npx --yes create-quiver@latest ai analyze-project --deep --save-proposal --provider codex --model gpt-5.5
241
- npx --yes create-quiver@latest ai analyze-project --deep --apply-docs --provider codex --model gpt-5.5
242
241
  npx --yes create-quiver@latest ai analyze-project apply --run <run-id>
243
242
  ```
244
243
 
@@ -248,7 +247,7 @@ Evidencia esperada:
248
247
 
249
248
  - `--dry-run --json` parsea como JSON, `provider_execution` queda `skipped`, `writes` queda vacío y no crea docs finales.
250
249
  - `package-lock.json` aparece en `detected.lockfiles` y en omitidos con `sampling:lockfile-metadata`, no en contenido enviado al provider.
251
- - El modo provider escribe artifacts auditados en `.quiver/runs`, redactados y con tamaño controlado, pero no escribe docs finales sin `--apply-docs`, `--review` o `apply --run`.
250
+ - El modo provider escribe artifacts auditados en `.quiver/runs`, redactados y con tamaño controlado, y aplica docs finales validados por defecto.
252
251
  - Si el provider devuelve drift no reparable, el comando falla con path/tipo/causa probable y próximo comando seguro, sin escribir docs finales.
253
252
  - `--save-proposal` debe crear `.quiver/runs/<run-id>/proposal/*` sin modificar docs finales.
254
253
  - `--apply-docs` debe mostrar selector explicado en TTY o requerir `--yes` en automatización.
@@ -256,7 +255,7 @@ Evidencia esperada:
256
255
 
257
256
  Rollback de release:
258
257
 
259
- - Si el smoke live escribe docs inesperadamente sin `--review`, filtra secretos, omite artifacts críticos o falla con ruido masivo de schema, no publiques `latest`.
258
+ - Si el smoke live no escribe docs validados en el comando normal, filtra secretos, omite artifacts críticos o falla con ruido masivo de schema, no publiques `latest`.
260
259
  - Publicá una corrección como canary o revertí la versión npm afectada según el proceso de release vigente.
261
260
  - Para usuarios impactados, indicar `npx create-quiver ai analyze-project --deep --dry-run --json` como siguiente comando seguro y pedir `.quiver/runs/run-.../validation/analyze-project-validation.json` redactado como evidencia.
262
261
 
@@ -264,8 +263,8 @@ Rollback de release:
264
263
  |---|---|
265
264
  | `npx --yes create-quiver@latest ai analyze-project --deep --dry-run` | Previsualiza descubrimiento y muestreo del repo sin escribir ni ejecutar proveedor. |
266
265
  | `npx --yes create-quiver@latest ai analyze-project --deep --dry-run --json` | Emite el plan de análisis como JSON parseable para automatización. |
267
- | `npx --yes create-quiver@latest ai analyze-project --deep --review` | Ejecuta proveedor, valida análisis JSON con evidencia, abre revisión humana y escribe solo docs permitidos tras confirmación. |
268
- | `npx --yes create-quiver@latest ai analyze-project --deep --provider codex --model gpt-5.5` | Ejecuta proveedor y genera propuesta auditada en `.quiver/runs`; no escribe docs finales sin `--review`. |
266
+ | `npx --yes create-quiver@latest ai analyze-project --deep --review` | Modo avanzado: ejecuta proveedor, valida análisis JSON con evidencia y abre edición manual antes de escribir docs permitidos. |
267
+ | `npx --yes create-quiver@latest ai analyze-project --deep --provider codex --model gpt-5.5` | Ejecuta proveedor, valida JSON y aplica docs finales con proposal artifacts, snapshot, write manifest y validación post-write. |
269
268
  | `npx --yes create-quiver@latest ai analyze-project --deep --save-proposal --provider codex --model gpt-5.5` | Guarda una propuesta validada en `.quiver/runs/<run-id>/proposal` sin escribir docs finales. |
270
269
  | `npx --yes create-quiver@latest ai analyze-project --deep --apply-docs --provider codex --model gpt-5.5` | En TTY debe mostrar opciones explicadas para aplicar, ver diff, guardar, editar o cancelar. |
271
270
  | `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. |
@@ -86,19 +86,19 @@ Si querés que Quiver infiera producto, arquitectura, funcionalidades y riesgos
86
86
  ```bash
87
87
  npx --yes create-quiver@latest ai analyze-project --deep --dry-run
88
88
  npx --yes create-quiver@latest ai analyze-project --deep --provider codex --model gpt-5.5
89
- npx --yes create-quiver@latest ai analyze-project --deep --apply-docs --provider codex --model gpt-5.5
90
89
  ```
91
90
 
92
91
  Qué hace:
93
92
 
94
93
  - `--dry-run` muestra qué leería y qué excluiría, sin proveedor ni escrituras;
95
- - el modo con proveedor guarda auditoría en `.quiver/runs`, valida JSON con evidencia y no escribe docs finales por defecto;
94
+ - el modo con proveedor guarda auditoría en `.quiver/runs`, valida JSON con evidencia y aplica docs finales validados por defecto;
95
+ - antes de escribir crea propuesta, snapshot, write manifest y validación post-write;
96
96
  - resume lockfiles como metadata para no consumir el presupuesto principal con `package-lock.json`, `pnpm-lock.yaml` o equivalentes;
97
97
  - prioriza entrypoints, componentes, contexts/state, lib/data layer, auth, DB/integraciones y documentación humana del producto por encima de docs generados por Quiver;
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
- - `--apply-docs` muestra un selector simple en TTY para aplicar, ver diff, guardar, editar o cancelar.
101
+ - si la propuesta final no es válida, falla sin escribir docs finales.
102
102
 
103
103
  Si preferís separar generación y aplicación:
104
104
 
@@ -107,13 +107,13 @@ npx --yes create-quiver@latest ai analyze-project --deep --save-proposal --provi
107
107
  npx --yes create-quiver@latest ai analyze-project apply --run <run-id>
108
108
  ```
109
109
 
110
- Para automatización sin selector:
110
+ Si necesitás conservar compatibilidad con scripts que ya usaban el flujo explícito:
111
111
 
112
112
  ```bash
113
113
  npx --yes create-quiver@latest ai analyze-project --deep --apply-docs --yes --provider codex --model gpt-5.5
114
114
  ```
115
115
 
116
- `--review` sigue disponible como modo avanzado: abre la propuesta JSON en editor, revalida el JSON editado y pide confirmación antes de escribir docs permitidos.
116
+ `--review` sigue disponible como modo avanzado: abre la propuesta JSON en editor y revalida el JSON editado antes de escribir docs permitidos.
117
117
 
118
118
  No envía `.env`, `.git`, `.quiver`, dependencias, caches, binarios ni outputs generados. Si no puede probar una conclusión, debe quedar como `unknown` o `needs_confirmation`.
119
119
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-quiver",
3
- "version": "0.17.3",
3
+ "version": "0.17.4",
4
4
  "private": false,
5
5
  "description": "Quiver CLI for scaffolding projects from the packaged template",
6
6
  "license": "MIT",
@@ -2886,7 +2886,11 @@ async function runAnalyzeProject(repoRoot, options = {}) {
2886
2886
  run_status_path: path.join('.quiver', 'runs', auditRunId, 'status.json').split(path.sep).join('/'),
2887
2887
  selected_context_manifest: selectedContextManifest,
2888
2888
  };
2889
- const needsDocProposal = options.applyDocs === true || options.saveProposal === true || options.review === true;
2889
+ const autoApplyDocs = options.applyDocs !== true
2890
+ && options.saveProposal !== true
2891
+ && options.review !== true
2892
+ && options.json !== true;
2893
+ const needsDocProposal = autoApplyDocs || options.applyDocs === true || options.saveProposal === true || options.review === true;
2890
2894
  const docProposal = needsDocProposal ? buildAnalyzeProjectDocProposal(parsed.analysis) : null;
2891
2895
  const docWritePlan = docProposal ? buildAnalyzeProjectWritePlan(repoRoot, docProposal) : [];
2892
2896
  const docActionContext = {
@@ -2911,6 +2915,15 @@ async function runAnalyzeProject(repoRoot, options = {}) {
2911
2915
  return emitAnalyzeProjectApplyReport(applyReport, options);
2912
2916
  }
2913
2917
 
2918
+ if (autoApplyDocs) {
2919
+ const applyReport = applyAnalyzeProjectDocProposalReport(repoRoot, {
2920
+ ...docActionContext,
2921
+ allowDirtyDocs: true,
2922
+ interactiveAction: 'auto-apply',
2923
+ });
2924
+ return emitAnalyzeProjectApplyReport(applyReport, options);
2925
+ }
2926
+
2914
2927
  if (options.applyDocs === true) {
2915
2928
  return runAnalyzeProjectInteractiveApplySelector({
2916
2929
  report: completedReport,
@@ -230,7 +230,7 @@ const COMMAND_HELP_GROUPS = [
230
230
  ['ai active-slice status|reconcile', 'Inspect or dry-run reconcile local active-slice state from every supported source.'],
231
231
  ['ai status', 'Show current AI lifecycle phase, approved versions, blockers, and next command.'],
232
232
  ['ai resume', 'Resume guidance from the last valid lifecycle phase without chat memory.'],
233
- ['ai analyze-project', 'Analyze a bounded project sample and generate audited documentation proposals.'],
233
+ ['ai analyze-project', 'Analyze a bounded project sample and apply validated documentation updates.'],
234
234
  ['ai onboard', 'Run or print the planner onboarding prompt with a token-aware context pack.'],
235
235
  ['ai prepare-context', 'Preview or write docs-only AI context updates with assumptions and risks.'],
236
236
  ['ai agent set|list|show|doctor|repair', 'Manage, diagnose, and dry-run repair planner, executor, reviewer, and doctor provider profiles without secrets.'],
@@ -93,6 +93,21 @@ function mergeManagedBlock(currentContent, proposedContent) {
93
93
  return `${current.replace(/\s+$/g, '')}\n\n${block}`;
94
94
  }
95
95
 
96
+ function redactSnapshotValue(value, repoRoot) {
97
+ if (typeof value === 'string') {
98
+ return redactSensitiveLocalValues(value, { projectRoot: repoRoot });
99
+ }
100
+ if (Array.isArray(value)) {
101
+ return value.map((item) => redactSnapshotValue(item, repoRoot));
102
+ }
103
+ if (value && typeof value === 'object') {
104
+ return Object.fromEntries(
105
+ Object.entries(value).map(([key, item]) => [key, redactSnapshotValue(item, repoRoot)]),
106
+ );
107
+ }
108
+ return value;
109
+ }
110
+
96
111
  function validateDocPath(docPath) {
97
112
  let normalized;
98
113
  try {
@@ -303,7 +318,7 @@ function createAnalyzeProjectSnapshot(repoRoot, run, writePlan, options = {}) {
303
318
 
304
319
  const providerArtifactPath = path.join(rawRoot, 'analyze-project-provider-artifact.json');
305
320
  const providerArtifact = options.providerArtifact
306
- ? JSON.parse(redactSensitiveLocalValues(JSON.stringify(options.providerArtifact), { projectRoot: repoRoot }))
321
+ ? redactSnapshotValue(options.providerArtifact, repoRoot)
307
322
  : null;
308
323
  fs.writeFileSync(providerArtifactPath, `${JSON.stringify(providerArtifact, null, 2)}\n`);
309
324
 
@@ -37,7 +37,7 @@ module.exports = {
37
37
  'ai active-slice status|reconcile': 'Inspecciona o simula reconciliar el estado local de active-slice desde todas las fuentes soportadas.',
38
38
  'ai status': 'Muestra fase actual del ciclo de vida de IA, versiones aprobadas, bloqueos y proximo comando.',
39
39
  'ai resume': 'Reanuda la guia desde la ultima fase valida del ciclo de vida sin memoria de chat.',
40
- 'ai analyze-project': 'Analiza una muestra acotada del proyecto y genera propuestas documentales auditadas.',
40
+ 'ai analyze-project': 'Analiza una muestra acotada del proyecto y aplica actualizaciones documentales validadas.',
41
41
  'ai onboard': 'Ejecuta o imprime el prompt de onboarding del planner con contexto optimizado por tokens.',
42
42
  'ai prepare-context': 'Previsualiza o escribe actualizaciones docs-only del contexto de IA con supuestos y riesgos.',
43
43
  'ai agent set|list|show|doctor|repair': 'Gestiona, diagnostica y simula reparaciones de perfiles planner, executor, reviewer y doctor sin secretos.',