create-quiver 0.17.1 → 0.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ACTIVE_SLICES.md +43 -0
- package/CHANGELOG.md +4 -0
- package/auditoria-ux-ui-performance-documentacion.md +705 -0
- package/copys-landing-page.md +244 -0
- package/docs/TROUBLESHOOTING.md +53 -0
- package/docs/reference/commands.md +42 -0
- package/docs/workflows/existing-project-ai-quiver-setup.md +552 -0
- package/docs/workflows/existing-project.md +21 -0
- package/package.json +1 -1
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +1 -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/src/create-quiver/commands/ai.js +353 -70
- package/src/create-quiver/index.js +3 -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-parser.js +1 -0
- package/src/create-quiver/lib/ai/analyze-project-prompts.js +130 -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 +168 -0
- package/src/create-quiver/lib/ai/artifacts.js +83 -2
- package/src/create-quiver/lib/doctor.js +107 -12
- package/src/create-quiver/lib/i18n/messages/en.js +5 -0
- package/src/create-quiver/lib/i18n/messages/es.js +5 -0
|
@@ -0,0 +1,705 @@
|
|
|
1
|
+
# Auditoría del Proyecto Quiver
|
|
2
|
+
|
|
3
|
+
> Fecha de auditoría: 2026-06-01
|
|
4
|
+
> Versión analizada: 0.15.4
|
|
5
|
+
> Tipo de producto: CLI framework (Node.js)
|
|
6
|
+
> Alcance: estructura de repositorio, comandos, documentación, tests, scripts, dependencias
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Resumen Ejecutivo
|
|
11
|
+
|
|
12
|
+
Quiver es un framework CLI técnicamente sólido, con una propuesta de valor clara (ordenar el trabajo asistido por IA con WDD + SDD), una arquitectura modular bien pensada, tests extensos (38 archivos en `tests/commands/`, más cobertura en `tests/lib/`), y una documentación considerablemente más madura que la mayoría de proyectos OSS equivalentes.
|
|
13
|
+
|
|
14
|
+
El producto está activamente desarrollado: pasó de v0.10 a v0.15 en menos de dos semanas de mayo de 2026, con dogfooding real y hardening iterativo. Esto es un punto muy favorable.
|
|
15
|
+
|
|
16
|
+
**Principales fortalezas:**
|
|
17
|
+
- Huella de dependencias mínima (solo `@clack/prompts` y `zod`)
|
|
18
|
+
- Documentación multi-idioma (EN/ES) y multi-plataforma (macOS, Linux, Windows)
|
|
19
|
+
- Arquitectura modular con separación clara entre comandos y servicios
|
|
20
|
+
- Smoke tests y CI scripts bien estructurados
|
|
21
|
+
- Flujo de workflow WDD + SDD completo y bien articulado
|
|
22
|
+
|
|
23
|
+
**Principales hallazgos de la auditoría:**
|
|
24
|
+
|
|
25
|
+
1. **UX/DX del CLI:** Problemas de experiencia detectables en feedback visual, mensajes de error (mezcla de i18n e inglés hardcodeado), y complejidad del namespace que aumenta la curva de aprendizaje.
|
|
26
|
+
2. **Documentación:** El `CONTRIBUTING.md` es críticamente escaso. El `ROADMAP.md` mezcla información interna con pública. Errores de encoding en `CLI_UX_GUIDE.md`. Falta `ARCHITECTURE.md`.
|
|
27
|
+
3. **Performance:** Arquitectura síncrona en toda la capa de I/O. El archivo `commands/ai.js` de 3438 líneas no impacta runtime pero sí el tiempo de carga del módulo.
|
|
28
|
+
4. **Automatización:** Sin CI/CD declarativo (GitHub Actions/similar). El changelog y la referencia de comandos son manuales.
|
|
29
|
+
5. **Modernización:** Parser manual de 1100+ líneas en lugar de Commander.js/yargs. Sin TypeScript. Sin shell completion scripts.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. Problemas Detectados de UX/UI
|
|
34
|
+
|
|
35
|
+
> Nota: Quiver es un CLI, por lo que "UX/UI" se refiere a experiencia en terminal, legibilidad de output, mensajes, flujos y documentación de usuario.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
### 2.1 Mensajes de error no localizados en múltiples comandos
|
|
40
|
+
|
|
41
|
+
**Problema detectado:**
|
|
42
|
+
Varios comandos tienen una función `formatError()` local que emite strings hardcodeados en inglés, ignorando el sistema i18n del proyecto. Afecta a: `commands/config.js`, `commands/evidence.js`, `commands/spec.js`, `commands/graph.js`, `commands/prepare.js` (en `buildNextSteps()`), y `commands/ai.js`.
|
|
43
|
+
|
|
44
|
+
**Archivo relacionado:** `src/create-quiver/commands/config.js`, `evidence.js`, `spec.js`, `graph.js`, `prepare.js`, `ai.js`
|
|
45
|
+
|
|
46
|
+
**Impacto:** Un usuario que configura `--lang es` recibe mensajes de error en inglés. Rompe la promesa de soporte completo EN/ES anunciada en el README y la `CLI_UX_GUIDE.md`.
|
|
47
|
+
|
|
48
|
+
**Recomendación:** Auditar todos los `formatError()` locales y reemplazarlos con `createTranslator(options.language).t(key)` usando keys del catálogo i18n. Agregar un test de contrato que verifique que ningún mensaje de error de nivel de usuario quede fuera del sistema i18n.
|
|
49
|
+
|
|
50
|
+
**Prioridad:** Alta
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
### 2.2 Namespace plano con 8 comandos de dominio slice/handoff en el root
|
|
55
|
+
|
|
56
|
+
**Problema detectado:**
|
|
57
|
+
Los comandos `start-slice`, `check-slice`, `check-pr`, `check-scope`, `cleanup-slice`, `refresh-active-slices`, `check-handoff` y `new-handoff` viven en el namespace root junto a comandos de nivel completamente distinto como `init`, `analyze` o `version`. Ejecutar `quiver --help` muestra 23+ entradas sin jerarquía clara.
|
|
58
|
+
|
|
59
|
+
**Archivo relacionado:** `src/create-quiver/index.js` (SUPPORTED_COMMAND_MODES)
|
|
60
|
+
|
|
61
|
+
**Impacto:** Alta carga cognitiva para usuarios nuevos. Percepción del CLI como colección de scripts ad-hoc en lugar de framework estructurado. El TAB completion (cuando esté disponible) será difícil de usar.
|
|
62
|
+
|
|
63
|
+
**Recomendación:** Introducir namespaces `slice` y `handoff` (ya están definidos como canónicos en `docs/CLI_UX_GUIDE.md` sección "Namespaces y aliases") con aliases de compatibilidad deprecated para los comandos legacy. El `CLI_UX_GUIDE.md` ya documenta este contrato — falta completar la implementación.
|
|
64
|
+
|
|
65
|
+
**Prioridad:** Alta
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### 2.3 Ausencia de feedback visual de progreso en `init` y `analyze`
|
|
70
|
+
|
|
71
|
+
**Problema detectado:**
|
|
72
|
+
Los comandos `init` (que escribe múltiples archivos y puede llamar a npm install) y `analyze` (que escanea todo el proyecto) no muestran progreso durante la ejecución. El usuario ve un cursor parpadeando sin saber si el proceso está funcionando.
|
|
73
|
+
|
|
74
|
+
**Archivo relacionado:** `src/create-quiver/index.js` (runAnalyze, lógica de init)
|
|
75
|
+
|
|
76
|
+
**Impacto:** Percepción de que el CLI no responde. Peor en proyectos grandes o conexiones lentas donde npm install puede tardar varios segundos.
|
|
77
|
+
|
|
78
|
+
**Recomendación:** Agregar spinner de `@clack/prompts` (ya está como dependencia) durante las fases lentas. Al finalizar, mostrar un resumen: "Creados N archivos. Próximo paso: `quiver flow`."
|
|
79
|
+
|
|
80
|
+
**Prioridad:** Alta
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
### 2.4 `--auto-start` en `next` mezcla consulta con acción sin advertencia clara
|
|
85
|
+
|
|
86
|
+
**Problema detectado:**
|
|
87
|
+
El flag `--auto-start` convierte un comando de solo lectura (`next`) en un comando que ejecuta `start-slice`. La confirmación usa un `[y/N]` de readline propio que no pasa por el sistema i18n ni por `lib/cli/selectors.js`.
|
|
88
|
+
|
|
89
|
+
**Archivo relacionado:** `src/create-quiver/commands/next.js` (líneas 85-104)
|
|
90
|
+
|
|
91
|
+
**Impacto:** Sorpresa para el usuario que no espera que un comando de consulta ejecute acciones. La confirmación en inglés fijo rompe la experiencia en modo `--lang es`.
|
|
92
|
+
|
|
93
|
+
**Recomendación:** Mover `promptConfirm` para que use `promptText` de `lib/cli/selectors.js`. Documentar claramente en el help que `--auto-start` ejecuta `slice start` tras confirmación.
|
|
94
|
+
|
|
95
|
+
**Prioridad:** Media
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### 2.5 `--section` en `dashboard` sin validación ni lista de valores válidos en el help
|
|
100
|
+
|
|
101
|
+
**Problema detectado:**
|
|
102
|
+
El flag `--section <name>` acepta cualquier string. Si se pasa un valor inválido, el comportamiento no está documentado. El help genérico dice "Show one human dashboard section" sin listar las secciones disponibles. La referencia de comandos sí las lista (`specs`, `slices`, `blockers`, `warnings`, `agents`, `approvals`, `runs`, `active-slice`, `next-steps`) pero esa información no está en el help inline.
|
|
103
|
+
|
|
104
|
+
**Archivo relacionado:** `src/create-quiver/commands/dashboard.js`
|
|
105
|
+
|
|
106
|
+
**Impacto:** Experiencia confusa cuando el usuario prueba un nombre de sección incorrecto.
|
|
107
|
+
|
|
108
|
+
**Recomendación:** Agregar validación de `--section` con mensaje accionable: "Sección desconocida 'X'. Secciones disponibles: specs, slices, blockers, warnings, agents, approvals, runs, active-slice, next-steps."
|
|
109
|
+
|
|
110
|
+
**Prioridad:** Media
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### 2.6 `plan` no avisa cuando faltan `estimated_hours` en los slices
|
|
115
|
+
|
|
116
|
+
**Problema detectado:**
|
|
117
|
+
La ruta crítica se calcula a partir de `estimated_hours` en `slice.json`. Si ese campo falta o es 0, la ruta crítica aparece como `-` sin ninguna explicación de por qué.
|
|
118
|
+
|
|
119
|
+
**Archivo relacionado:** `src/create-quiver/commands/plan.js` (línea 8, `toHourCount`)
|
|
120
|
+
|
|
121
|
+
**Impacto:** El usuario no sabe que puede mejorar la utilidad del comando completando el campo `estimated_hours`.
|
|
122
|
+
|
|
123
|
+
**Recomendación:** Si ningún slice tiene `estimated_hours > 0`, agregar al output: "Nota: agregá `estimated_hours` a tus archivos `slice.json` para activar el cálculo de ruta crítica."
|
|
124
|
+
|
|
125
|
+
**Prioridad:** Baja
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
### 2.7 `graph --level <n>` devuelve output vacío sin mensaje explicativo
|
|
130
|
+
|
|
131
|
+
**Problema detectado:**
|
|
132
|
+
Si `--level` filtra a un nivel sin slices (por ejemplo, el nivel solicitado excede la profundidad del grafo), el output es vacío sin ningún mensaje.
|
|
133
|
+
|
|
134
|
+
**Archivo relacionado:** `src/create-quiver/commands/graph.js`
|
|
135
|
+
|
|
136
|
+
**Impacto:** El usuario no sabe si el comando funcionó o si hay un problema.
|
|
137
|
+
|
|
138
|
+
**Recomendación:** Si el nivel filtrado no contiene slices, mostrar: "No hay slices en el nivel N. Ejecutá `graph` sin `--level` para ver todos los niveles."
|
|
139
|
+
|
|
140
|
+
**Prioridad:** Baja
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### 2.8 Relación entre `--json` y `--format` en `graph` no está documentada
|
|
145
|
+
|
|
146
|
+
**Problema detectado:**
|
|
147
|
+
`--json` emite la estructura de datos del grafo. `--format tree|mermaid|dot` cambia el renderizado human-readable. Si se combinan `--json --format mermaid`, el resultado no está documentado y podría confundir.
|
|
148
|
+
|
|
149
|
+
**Archivo relacionado:** `src/create-quiver/commands/graph.js`
|
|
150
|
+
|
|
151
|
+
**Impacto:** Comportamiento impredecible para usuarios avanzados.
|
|
152
|
+
|
|
153
|
+
**Recomendación:** Documentar explícitamente en el help: "`--json` emite datos estructurados independientemente de `--format`. Los dos flags son ortogonales."
|
|
154
|
+
|
|
155
|
+
**Prioridad:** Baja
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### 2.9 `migrate` puede modificar archivos sin confirmación previa
|
|
160
|
+
|
|
161
|
+
**Problema detectado:**
|
|
162
|
+
`migrate` sin `--dry-run` aplica cambios a archivos existentes sin mostrar una advertencia previa. No exige revisión antes de ejecutar operaciones potencialmente destructivas.
|
|
163
|
+
|
|
164
|
+
**Archivo relacionado:** `src/create-quiver/index.js` (runMigrate / updateStateForMigrate)
|
|
165
|
+
|
|
166
|
+
**Impacto:** Riesgo de pérdida de datos o modificaciones inesperadas en proyectos con estructura legacy.
|
|
167
|
+
|
|
168
|
+
**Recomendación:** Mostrar advertencia antes de ejecutar: "Esto modificará archivos existentes. Ejecutá con `--dry-run` primero para previsualizar." Idealmente, requerir confirmación explícita en TTY o `--yes` en modo no interactivo.
|
|
169
|
+
|
|
170
|
+
**Prioridad:** Alta
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### 2.10 `demo create spec-viewer` tiene tres niveles de profundidad para un único caso
|
|
175
|
+
|
|
176
|
+
**Problema detectado:**
|
|
177
|
+
La estructura `demo create spec-viewer` tiene tres niveles de anidamiento para un único caso de uso con un único valor posible (`spec-viewer`).
|
|
178
|
+
|
|
179
|
+
**Archivo relacionado:** `src/create-quiver/commands/demo.js`
|
|
180
|
+
|
|
181
|
+
**Impacto:** Fricción innecesaria. El usuario debe recordar exactamente los tres niveles del comando.
|
|
182
|
+
|
|
183
|
+
**Recomendación:** Simplificar a `demo spec-viewer [--dry-run]`. El nivel `create` puede mantenerse como alias de compatibilidad. La `README_FOR_AI.md` ya documenta `demo spec-viewer` como la forma canónica.
|
|
184
|
+
|
|
185
|
+
**Prioridad:** Baja
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 3. Oportunidades de Mejora UX/UI
|
|
190
|
+
|
|
191
|
+
### 3.1 Agregar un comando `status` de nivel superior
|
|
192
|
+
|
|
193
|
+
La `docs/reference/commands.md` ya documenta `status` y `README_FOR_AI.md` lo menciona como canónico. Si el comando ya existe, hay que asegurarse de que esté en `SUPPORTED_COMMAND_MODES` y en el `--help`. Si no está completamente implementado, completarlo. Un `quiver status` que muestra el estado más relevante en contexto (slice activo si hay uno, o el próximo paso del flow si no) sería el análogo CLI de `git status`: el comando que cualquier usuario ejecuta cuando no sabe qué hacer.
|
|
194
|
+
|
|
195
|
+
### 3.2 Resumen post-ejecución en `init`
|
|
196
|
+
|
|
197
|
+
Al finalizar `init`, mostrar un resumen accionable: "Archivos creados: N. Próximo paso recomendado: `quiver flow`." Esto reduce la desorientación de usuarios nuevos que no saben qué hacer después de inicializar.
|
|
198
|
+
|
|
199
|
+
### 3.3 Agregar campo `next_command` al output JSON de `flow`
|
|
200
|
+
|
|
201
|
+
El comando `flow` es el punto de entrada de orientación para automatizaciones y agentes. Agregar un campo `next_command` con el comando exacto a ejecutar (string) permite que un script o agente lo ejecute directamente sin parsear texto humano.
|
|
202
|
+
|
|
203
|
+
### 3.4 Expandir `evidence` con `list` y `show`
|
|
204
|
+
|
|
205
|
+
`evidence run` genera archivos de evidencia pero no hay forma de listarlos o visualizarlos desde el CLI. Agregar `evidence list` (lista los archivos generados en `.quiver/evidence/`) y `evidence show <path>` (muestra el contenido de un archivo de evidencia) cierra el loop del flujo de validación. La `README_FOR_AI.md` ya los documenta como comandos canónicos.
|
|
206
|
+
|
|
207
|
+
### 3.5 Detectar rama principal automáticamente en `spec close`
|
|
208
|
+
|
|
209
|
+
En lugar de defaultear a `main` para `--base <branch>`, detectar la rama principal del remote via `git remote show origin`. Muchos proyectos usan `master`, `develop` u otras ramas base.
|
|
210
|
+
|
|
211
|
+
### 3.6 Indicador de ruta crítica en la tabla de `plan`
|
|
212
|
+
|
|
213
|
+
Agregar una columna o marcador visual (por ejemplo `*`) en la tabla de `plan` para identificar qué slices están en la ruta crítica. Actualmente la ruta crítica solo aparece como una línea de texto al inicio, desconectada de la tabla.
|
|
214
|
+
|
|
215
|
+
### 3.7 Autocompletado de shell (bash/zsh/fish)
|
|
216
|
+
|
|
217
|
+
Generar scripts de completion para bash, zsh y fish mejoraría significativamente la ergonomía del CLI para usuarios avanzados. Commander.js y yargs los generan automáticamente. En el parser manual actual, se podría agregar un comando `completion` que emite el script de shell correspondiente.
|
|
218
|
+
|
|
219
|
+
### 3.8 Consistencia de verbos en mensajes de confirmación
|
|
220
|
+
|
|
221
|
+
Los mensajes de confirmación que usan readline manual (`[y/N]`) deberían pasar por `lib/cli/selectors.js` para garantizar consistencia visual, localización y que respeten `--no-color`.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## 4. Oportunidades de Modernización
|
|
226
|
+
|
|
227
|
+
### 4.1 Migración a Commander.js o yargs
|
|
228
|
+
|
|
229
|
+
**Estado actual:** Parser manual de 1100+ líneas en `src/create-quiver/index.js`.
|
|
230
|
+
|
|
231
|
+
**Por qué modernizar:**
|
|
232
|
+
- Definición declarativa de comandos y flags (en lugar de condicionales manuales)
|
|
233
|
+
- Help automático y contextual por subcomando
|
|
234
|
+
- Autocompletado de shell generado automáticamente
|
|
235
|
+
- Validación de tipos de argumentos built-in
|
|
236
|
+
- Menor superficie de bugs de parsing
|
|
237
|
+
|
|
238
|
+
**Costo estimado:** Alto (migración completa). Puede hacerse iterativamente: Commander en comandos nuevos, aliases para los existentes.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
### 4.2 TypeScript para el código fuente
|
|
243
|
+
|
|
244
|
+
**Estado actual:** JavaScript puro sin tipos.
|
|
245
|
+
|
|
246
|
+
**Por qué modernizar:**
|
|
247
|
+
- Mejora la experiencia de desarrollo en IDEs
|
|
248
|
+
- Detecta errores de tipos en tiempo de compilación (especialmente importante en un proyecto con muchos módulos interconectados)
|
|
249
|
+
- Facilita contribuciones externas (autocompletado e inferencia)
|
|
250
|
+
|
|
251
|
+
**Costo estimado:** Alto. Puede comenzarse con los módulos `lib/` más críticos y expandirse incrementalmente.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
### 4.3 JSON Schema publicado para `slice.json`
|
|
256
|
+
|
|
257
|
+
**Estado actual:** `slice.json` tiene una estructura bien definida internamente pero no hay un schema JSON publicado.
|
|
258
|
+
|
|
259
|
+
**Por qué modernizar:**
|
|
260
|
+
- Validación en IDEs con Language Server Protocol (VSCode, JetBrains)
|
|
261
|
+
- Reducción de errores de edición manual
|
|
262
|
+
- Documentación implícita de la estructura
|
|
263
|
+
|
|
264
|
+
**Costo:** Bajo. Generar el schema a partir de los objetos Zod existentes en el código.
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
### 4.4 GitHub Actions para CI declarativo
|
|
269
|
+
|
|
270
|
+
**Estado actual:** Los tests y smokes se ejecutan mediante scripts bash en `scripts/ci/`. No hay configuración de CI declarativa visible en el repositorio (no se encontró `.github/workflows/`).
|
|
271
|
+
|
|
272
|
+
**Por qué modernizar:**
|
|
273
|
+
- CI automático en cada PR sin depender de que el mantenedor lo ejecute manualmente
|
|
274
|
+
- Matrix de SO (macOS, Linux, Windows) automatizada
|
|
275
|
+
- Integración con status checks de GitHub
|
|
276
|
+
- Reducción de errores de regresión por cambios no testeados
|
|
277
|
+
|
|
278
|
+
**Costo:** Medio. Traducir los scripts existentes de `scripts/ci/` a un workflow de GitHub Actions.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
### 4.5 Scripts `package.json` mixtos (bash y Node)
|
|
283
|
+
|
|
284
|
+
**Estado actual:** Los scripts de `package.json` mezclan invocaciones bash (`bash tools/scripts/check-slice-readiness.sh`) con comandos Node (`node bin/create-quiver.js plan`). Los scripts bash no funcionan nativamente en Windows PowerShell.
|
|
285
|
+
|
|
286
|
+
**Por qué modernizar:** Usar el CLI Node para todos los scripts del `package.json` mejora la portabilidad cross-platform, que es uno de los objetivos declarados del proyecto.
|
|
287
|
+
|
|
288
|
+
**Costo:** Bajo. Reemplazar scripts bash con sus equivalentes `npx create-quiver <command>`.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
### 4.6 Fragmentación de `commands/ai.js`
|
|
293
|
+
|
|
294
|
+
**Estado actual:** Archivo de 3438 líneas con 23 subcomandos.
|
|
295
|
+
|
|
296
|
+
**Por qué modernizar:** Impacta directamente el tiempo de require y la mantenibilidad. Fragmentar en módulos por dominio (`lifecycle.js`, `planner.js`, `agents.js`, `execution.js`, `inspection.js`) mantiene el mismo comportamiento externo con mejor estructura interna.
|
|
297
|
+
|
|
298
|
+
**Costo:** Medio. Refactor sin cambios de API.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 5. Oportunidades de Automatización
|
|
303
|
+
|
|
304
|
+
### 5.1 Generación automática de `docs/reference/commands.md`
|
|
305
|
+
|
|
306
|
+
**Estado actual:** La referencia de comandos se mantiene manualmente y puede quedar desactualizada respecto a la implementación real.
|
|
307
|
+
|
|
308
|
+
**Propuesta:** Crear un script que genere `docs/reference/commands.md` a partir del output de `quiver --help` (o de una fuente declarativa en el código). Ejecutar como parte del proceso de release.
|
|
309
|
+
|
|
310
|
+
**Valor:** Garantiza que la documentación siempre refleje la implementación real.
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
### 5.2 Generación automática del `CHANGELOG.md`
|
|
315
|
+
|
|
316
|
+
**Estado actual:** El changelog se mantiene manualmente. La sección `[Unreleased]` acumula cambios sin formatear.
|
|
317
|
+
|
|
318
|
+
**Propuesta:** Adoptar [Conventional Commits](https://www.conventionalcommits.org/) y usar `standard-version` o `release-please` para generar automáticamente el changelog desde los mensajes de commit.
|
|
319
|
+
|
|
320
|
+
**Valor:** Reduce el esfuerzo manual de releases y garantiza consistencia en el formato.
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
### 5.3 CI automático en PRs con GitHub Actions
|
|
325
|
+
|
|
326
|
+
**Estado actual:** Los smoke tests y la suite de tests se ejecutan manualmente.
|
|
327
|
+
|
|
328
|
+
**Propuesta:** Workflow de GitHub Actions que ejecute automáticamente `node --test tests/**/*.test.js`, `npm run smoke:create-quiver`, `npm run smoke:doctor-fixtures` y `npm run smoke:guided-workflow` en cada PR, con matriz de SO (ubuntu, macos, windows).
|
|
329
|
+
|
|
330
|
+
**Valor:** Detecta regresiones antes de merge sin intervención manual.
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
### 5.4 Lint de documentación (links rotos, acentos faltantes)
|
|
335
|
+
|
|
336
|
+
**Estado actual:** El `CLI_UX_GUIDE.md` tiene palabras sin acentos ("estandar", "Ningun", "solo", "canonico"). No hay validación automática de links en la documentación.
|
|
337
|
+
|
|
338
|
+
**Propuesta:** Agregar `markdownlint` y `markdown-link-check` como devDependencies. Ejecutar en CI en cada PR.
|
|
339
|
+
|
|
340
|
+
**Valor:** Previene regresiones de calidad en documentación.
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
### 5.5 Publicación automática a npm en releases
|
|
345
|
+
|
|
346
|
+
**Estado actual:** El proceso de release usa `scripts/release-quiver.sh`. No está claro si el publish a npm es manual o automatizado.
|
|
347
|
+
|
|
348
|
+
**Propuesta:** Agregar un workflow de GitHub Actions que publique automáticamente a npm cuando se crea un tag `v*.*.*` en el repositorio.
|
|
349
|
+
|
|
350
|
+
**Valor:** Elimina pasos manuales propensos a errores en el proceso de release.
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
### 5.6 Verificación de versión mínima de Node.js
|
|
355
|
+
|
|
356
|
+
**Estado actual:** El `package.json` no declara `engines` con la versión mínima de Node.js requerida.
|
|
357
|
+
|
|
358
|
+
**Propuesta:** Agregar `"engines": { "node": ">=18.0.0" }` (o la versión mínima que efectivamente se soporta) y validarlo en CI.
|
|
359
|
+
|
|
360
|
+
**Valor:** Evita reportes de bugs por incompatibilidades de runtime.
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
### 5.7 Smoke test de instalación desde npm pack
|
|
365
|
+
|
|
366
|
+
**Estado actual:** `npm run smoke:tiered-pack` existe pero no está claro si se ejecuta en CI automáticamente.
|
|
367
|
+
|
|
368
|
+
**Propuesta:** Incluir el smoke de `npm pack --dry-run` y validación del tarball en el workflow de CI para cada release candidate.
|
|
369
|
+
|
|
370
|
+
**Valor:** Garantiza que el paquete publicado en npm es válido antes de publicarlo.
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## 6. Problemas de Performance
|
|
375
|
+
|
|
376
|
+
### 6.1 I/O síncrono en toda la capa de lectura de archivos
|
|
377
|
+
|
|
378
|
+
**Problema detectado:** Todos los módulos usan `fs.readFileSync`, `fs.readdirSync` y similares. En proyectos con muchos specs y slices, esto puede acumular latencia sincrónica.
|
|
379
|
+
|
|
380
|
+
**Posible causa:** Decisión de simplicidad en un CLI que no necesita concurrencia. Sin embargo, comandos como `analyze` o `doctor` hacen múltiples lecturas secuenciales.
|
|
381
|
+
|
|
382
|
+
**Impacto:** En proyectos pequeños, imperceptible. En monorepos con decenas de specs y cientos de slices, el tiempo de respuesta puede crecer linealmente.
|
|
383
|
+
|
|
384
|
+
**Recomendación:** Para los comandos de lectura masiva (`analyze`, `plan`, `graph`), evaluar el uso de `fs.promises` con `Promise.all()` para lecturas paralelas donde el orden no importe.
|
|
385
|
+
|
|
386
|
+
**Prioridad:** Baja (no es un problema actualmente, pero conviene prevenir)
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
### 6.2 Carga completa de `commands/ai.js` en cada invocación del CLI
|
|
391
|
+
|
|
392
|
+
**Problema detectado:** El archivo `commands/ai.js` tiene 3438 líneas y requiere (via `require`) toda su cadena de dependencias en cada invocación del CLI, aunque el usuario esté ejecutando `quiver flow` o `quiver plan`.
|
|
393
|
+
|
|
394
|
+
**Posible causa:** Node.js carga y parsea todos los `require()` en el entrypoint de forma síncrona.
|
|
395
|
+
|
|
396
|
+
**Impacto:** Pequeño overhead de startup. En Node.js moderno es menos de 100ms en la mayoría de casos, pero es un overhead evitable.
|
|
397
|
+
|
|
398
|
+
**Recomendación:** Lazy-require de `commands/ai.js` y otros módulos pesados. Cargarlos solo cuando el comando correspondiente sea el que se invoca.
|
|
399
|
+
|
|
400
|
+
**Prioridad:** Baja
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
### 6.3 `evidence run` usa `spawnSync` (bloqueante)
|
|
405
|
+
|
|
406
|
+
**Problema detectado:** La ejecución de comandos en `evidence run` usa `spawnSync`, que bloquea el event loop durante toda la ejecución del comando.
|
|
407
|
+
|
|
408
|
+
**Posible causa:** Simplicidad de implementación para capturar output completo.
|
|
409
|
+
|
|
410
|
+
**Impacto:** Para comandos de evidencia cortos (segundos), el impacto es mínimo. Para comandos largos (suites de tests de varios minutos), el proceso CLI queda bloqueado sin posibilidad de manejar señales.
|
|
411
|
+
|
|
412
|
+
**Recomendación:** Migrar a `spawn` async con acumulación de output en streams. Agregar manejo de `SIGINT` para poder interrumpir la ejecución.
|
|
413
|
+
|
|
414
|
+
**Prioridad:** Media
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
### 6.4 Escaneo de proyecto sin límite de profundidad declarado
|
|
419
|
+
|
|
420
|
+
**Problema detectado:** El análisis del proyecto en `analyze` usa lectura recursiva de directorios. Si no hay límite de profundidad configurado, en monorepos muy grandes puede leer miles de archivos innecesarios.
|
|
421
|
+
|
|
422
|
+
**Posible causa:** No se pudo verificar el comportamiento exacto de `lib/project-scan.js` — es un supuesto basado en el patrón observado en `commands/spec.js` (`findSliceJsonFiles`).
|
|
423
|
+
|
|
424
|
+
**Impacto:** Potencial lentitud en el primer `analyze` de proyectos grandes.
|
|
425
|
+
|
|
426
|
+
**Recomendación:** Verificar si `lib/project-scan.js` respeta archivos `.gitignore` y límites de profundidad. Si no, agregar soporte para ignorar `node_modules`, `.git`, `dist`, y otras carpetas pesadas.
|
|
427
|
+
|
|
428
|
+
**Prioridad:** Media
|
|
429
|
+
|
|
430
|
+
---
|
|
431
|
+
|
|
432
|
+
## 7. Mejoras de Performance Recomendadas
|
|
433
|
+
|
|
434
|
+
### 7.1 Implementar lazy-require para módulos pesados
|
|
435
|
+
|
|
436
|
+
```js
|
|
437
|
+
// En lugar de en el top del archivo:
|
|
438
|
+
const { runXxx } = require('./commands/ai');
|
|
439
|
+
|
|
440
|
+
// Dentro del bloque que lo necesita:
|
|
441
|
+
if (mode === 'ai') {
|
|
442
|
+
const { runXxx } = require('./commands/ai');
|
|
443
|
+
// ...
|
|
444
|
+
}
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
Esto reduce el tiempo de startup cuando el usuario ejecuta comandos simples como `quiver flow` o `quiver version`.
|
|
448
|
+
|
|
449
|
+
### 7.2 Caché de estado de proyecto durante la sesión
|
|
450
|
+
|
|
451
|
+
Comandos como `flow`, `dashboard`, `plan` y `next` todos llaman a `resolveProjectState()`. Si se ejecutan en el mismo proceso (por ejemplo, en automatizaciones que encadenan comandos), no hay caché entre llamadas. Implementar un módulo de caché en memoria con TTL corto (1-2 segundos) reduciría el I/O redundante.
|
|
452
|
+
|
|
453
|
+
### 7.3 Agregar campo `engines` en `package.json`
|
|
454
|
+
|
|
455
|
+
```json
|
|
456
|
+
"engines": {
|
|
457
|
+
"node": ">=18.0.0"
|
|
458
|
+
}
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
Permite que npm advierta al usuario si está usando una versión de Node.js incompatible, evitando bugs de runtime difíciles de diagnosticar.
|
|
462
|
+
|
|
463
|
+
### 7.4 Lazy-load de dependencias opcionales
|
|
464
|
+
|
|
465
|
+
`@clack/prompts` solo se necesita en comandos interactivos (TTY). Si el CLI detecta que está en modo JSON o no-TTY, no necesita cargar esa dependencia. Cargarla lazy reduce el overhead de startup en pipelines de CI.
|
|
466
|
+
|
|
467
|
+
### 7.5 Paralelización de lecturas en `analyze`
|
|
468
|
+
|
|
469
|
+
En `analyze`, las lecturas de archivos de configuración, detección de frameworks y generación de mapa de proyecto pueden paralelizarse con `Promise.all()`. Esto puede reducir el tiempo de análisis en proyectos medianos de 2-4 segundos a menos de 1 segundo.
|
|
470
|
+
|
|
471
|
+
---
|
|
472
|
+
|
|
473
|
+
## 8. Errores o Debilidades en la Documentación
|
|
474
|
+
|
|
475
|
+
### 8.1 `CONTRIBUTING.md` críticamente escaso
|
|
476
|
+
|
|
477
|
+
**Problema:** El `CONTRIBUTING.md` tiene 16 líneas totales. Describe el proceso a muy alto nivel pero omite completamente:
|
|
478
|
+
- Cómo configurar el entorno de desarrollo
|
|
479
|
+
- Cómo ejecutar los tests
|
|
480
|
+
- Guías de estilo de código
|
|
481
|
+
- Proceso de revisión de PRs
|
|
482
|
+
- Convenciones de nombres de branches
|
|
483
|
+
- Cómo reportar bugs vs. proponer features
|
|
484
|
+
|
|
485
|
+
**Impacto:** Un contribuidor externo no puede empezar sin leer el README y deducir los pasos de desarrollo.
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
489
|
+
### 8.2 Errores de encoding en `CLI_UX_GUIDE.md`
|
|
490
|
+
|
|
491
|
+
**Problema:** El archivo `docs/CLI_UX_GUIDE.md` tiene múltiples palabras sin acentos:
|
|
492
|
+
- "estandar" → "estándar"
|
|
493
|
+
- "Ningun" → "Ningún"
|
|
494
|
+
- "solo" → "sólo" (en contexto de restricción)
|
|
495
|
+
- "canonico" → "canónico"
|
|
496
|
+
- "Mas" → "Más"
|
|
497
|
+
- "Tambien" → "También"
|
|
498
|
+
|
|
499
|
+
**Archivo relacionado:** `docs/CLI_UX_GUIDE.md`
|
|
500
|
+
|
|
501
|
+
**Impacto:** Reduce la percepción de calidad y profesionalismo del proyecto, especialmente en un CLI que tiene soporte oficial de español.
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
505
|
+
### 8.3 `ROADMAP.md` mezcla información interna con pública
|
|
506
|
+
|
|
507
|
+
**Problema:** El ROADMAP usa referencias internas de specs (`v27`, `v28`, etc.), menciona entradas `[Unreleased]` del changelog, y tiene secciones de "Post-Checkpoint Plan" con notas internas que no aportan valor a un contribuidor o usuario externo.
|
|
508
|
+
|
|
509
|
+
**Impacto:** Un usuario externo que lee el ROADMAP no puede distinguir qué está planeado, qué ya está implementado y qué es una nota interna de mantenimiento.
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
### 8.4 `SECURITY.md` sin método de contacto
|
|
514
|
+
|
|
515
|
+
**Problema:** La política de seguridad dice "Report the issue privately to the maintainers" sin especificar un email, formulario o proceso concreto.
|
|
516
|
+
|
|
517
|
+
**Archivo relacionado:** `SECURITY.md`
|
|
518
|
+
|
|
519
|
+
**Impacto:** Un investigador de seguridad que encuentra una vulnerabilidad no tiene forma clara de reportarla de manera responsable.
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
### 8.5 `[Unreleased]` en `CHANGELOG.md` sin formalizar
|
|
524
|
+
|
|
525
|
+
**Problema:** La sección `[Unreleased]` del changelog describe cambios de v30 y v31 (que el ROADMAP marca como "release-ready, pending package publication") pero no tienen fecha ni número de versión final asignado.
|
|
526
|
+
|
|
527
|
+
**Impacto:** Un usuario que lee el changelog no puede saber qué versión del CLI incluye los cambios de esa sección.
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
531
|
+
### 8.6 Falta `ARCHITECTURE.md`
|
|
532
|
+
|
|
533
|
+
**Problema:** No existe un documento que explique la arquitectura del proyecto: estructura de módulos, responsabilidades de cada capa (`commands/`, `lib/`, `lib/ai/`, `lib/cli/`, `lib/i18n/`, `lib/renderers/`), flujo de datos, y decisiones de diseño.
|
|
534
|
+
|
|
535
|
+
**Impacto:** Un nuevo contribuidor debe leer el código fuente completo para entender cómo encajan las piezas.
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
### 8.7 Referencia a "v47" en `CLI_UX_GUIDE.md` y `reference/commands.md`
|
|
540
|
+
|
|
541
|
+
**Problema:** El `CLI_UX_GUIDE.md` menciona "En v47 la superficie canónica de configuración sigue siendo `config language show|set`". El proyecto está en v0.15. "v47" es un número de spec interno que no tiene ningún significado para un lector externo.
|
|
542
|
+
|
|
543
|
+
**Archivo relacionado:** `docs/CLI_UX_GUIDE.md`, `docs/reference/commands.md`
|
|
544
|
+
|
|
545
|
+
**Impacto:** Confusión sobre la versión a la que aplica la documentación.
|
|
546
|
+
|
|
547
|
+
---
|
|
548
|
+
|
|
549
|
+
### 8.8 `separator.md` sin propósito documentado
|
|
550
|
+
|
|
551
|
+
**Problema:** Existe un archivo `separator.md` en la raíz del proyecto sin contenido explicativo de su propósito. No está referenciado en el README ni en la guía de contribución.
|
|
552
|
+
|
|
553
|
+
**Impacto:** Confusión para contribuidores que no saben si es un archivo de configuración, un artefacto de proceso o un error.
|
|
554
|
+
|
|
555
|
+
---
|
|
556
|
+
|
|
557
|
+
### 8.9 Archivos `.template` en la raíz del repositorio sin explicación
|
|
558
|
+
|
|
559
|
+
**Problema:** Archivos como `TEMPLATE.md`, `AGENTS.md.template`, `AGENTS.md.es.template`, `package.template.json` en la raíz no están explicados en el README ni en el `CONTRIBUTING.md`.
|
|
560
|
+
|
|
561
|
+
**Impacto:** Un contribuidor no sabe qué son estos archivos, si debe editarlos o si son generados automáticamente.
|
|
562
|
+
|
|
563
|
+
---
|
|
564
|
+
|
|
565
|
+
### 8.10 `docs/TROUBLESHOOTING.md.template` existe como template pero la instancia del proyecto vive en `docs/TROUBLESHOOTING.md`
|
|
566
|
+
|
|
567
|
+
**Problema:** Existe tanto `docs/TROUBLESHOOTING.md.template` (template para proyectos generados por Quiver) como `docs/TROUBLESHOOTING.md` (para el propio repositorio de Quiver). La distinción no está clara sin leer los archivos.
|
|
568
|
+
|
|
569
|
+
---
|
|
570
|
+
|
|
571
|
+
### 8.11 Ejemplos en `examples/` sin enlace prominente desde el README
|
|
572
|
+
|
|
573
|
+
**Problema:** El directorio `examples/01-basic-slice/` existe pero no está enlazado ni mencionado en el README principal. Es un recurso valioso para usuarios nuevos que no tiene visibilidad.
|
|
574
|
+
|
|
575
|
+
---
|
|
576
|
+
|
|
577
|
+
## 9. Oportunidades de Mejora en Documentación
|
|
578
|
+
|
|
579
|
+
### 9.1 Expandir `CONTRIBUTING.md`
|
|
580
|
+
|
|
581
|
+
Agregar como mínimo:
|
|
582
|
+
- **Setup de desarrollo:** `git clone`, `npm install`, `node bin/create-quiver.js --help`
|
|
583
|
+
- **Cómo ejecutar tests:** `node --test tests/**/*.test.js`
|
|
584
|
+
- **Cómo ejecutar smoke tests:** los 4 scripts disponibles
|
|
585
|
+
- **Convenciones de commits:** si hay convención (Conventional Commits u otra)
|
|
586
|
+
- **Proceso de PR:** qué se espera en el body, qué checks deben pasar
|
|
587
|
+
- **Arquitectura del proyecto:** referencia a `ARCHITECTURE.md` (a crear)
|
|
588
|
+
|
|
589
|
+
### 9.2 Crear `ARCHITECTURE.md`
|
|
590
|
+
|
|
591
|
+
Un documento de 1-2 páginas que explique:
|
|
592
|
+
- Entrypoints (`bin/`, `src/create-quiver/index.js`)
|
|
593
|
+
- Responsabilidades de `commands/` vs `lib/`
|
|
594
|
+
- Subdirectorios clave: `lib/ai/`, `lib/cli/`, `lib/i18n/`, `lib/renderers/`
|
|
595
|
+
- Cómo se registra un nuevo comando
|
|
596
|
+
- Cómo funciona el sistema i18n
|
|
597
|
+
- Cómo se ejecutan los tests
|
|
598
|
+
|
|
599
|
+
### 9.3 Corregir acentos en `CLI_UX_GUIDE.md`
|
|
600
|
+
|
|
601
|
+
Pasada de revisión para corregir todos los acentos faltantes. Agregar un linter de markdown (`markdownlint`) para prevenir regresiones.
|
|
602
|
+
|
|
603
|
+
### 9.4 Simplificar `ROADMAP.md` para audiencia pública
|
|
604
|
+
|
|
605
|
+
Separar en dos secciones:
|
|
606
|
+
- **Público:** qué funcionalidades están planeadas, en qué orden, sin referencias a specs internas
|
|
607
|
+
- **Interno:** (o mover a un archivo separado) referencias a specs v27-v31, notas de dogfooding, etc.
|
|
608
|
+
|
|
609
|
+
### 9.5 Agregar contacto a `SECURITY.md`
|
|
610
|
+
|
|
611
|
+
Agregar un email de contacto o un formulario (por ejemplo, un issue privado de GitHub con la plantilla de seguridad). GitHub tiene soporte nativo para reportes de vulnerabilidades privados vía `Settings > Code security > Private vulnerability reporting`.
|
|
612
|
+
|
|
613
|
+
### 9.6 Enlazar `examples/` desde el README
|
|
614
|
+
|
|
615
|
+
Agregar una sección "Ejemplos" en el README que enlace al directorio `examples/01-basic-slice/` y explique brevemente qué muestra cada ejemplo.
|
|
616
|
+
|
|
617
|
+
### 9.7 Eliminar referencias a versiones internas de specs en documentación pública
|
|
618
|
+
|
|
619
|
+
Reemplazar referencias como "En v47" por "En la versión actual" o simplemente omitirlas. Los números de spec son artefactos de proceso interno sin significado externo.
|
|
620
|
+
|
|
621
|
+
### 9.8 Documentar el propósito de archivos en la raíz
|
|
622
|
+
|
|
623
|
+
En el `CONTRIBUTING.md` o en un `README` de la raíz, explicar para qué sirven `separator.md`, `TEMPLATE.md`, `package.template.json`, y los archivos `.template`.
|
|
624
|
+
|
|
625
|
+
### 9.9 Agregar campo `engines` al `package.json` y documentarlo
|
|
626
|
+
|
|
627
|
+
```json
|
|
628
|
+
"engines": {
|
|
629
|
+
"node": ">=18.0.0"
|
|
630
|
+
}
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
Y documentar en el README / guías de instalación qué versión de Node.js es la mínima requerida.
|
|
634
|
+
|
|
635
|
+
### 9.10 Formalizar la sección `[Unreleased]` del CHANGELOG antes de cada release
|
|
636
|
+
|
|
637
|
+
Agregar el proceso de formalización del changelog como un paso documentado en `scripts/release-quiver.sh` o en el CONTRIBUTING.
|
|
638
|
+
|
|
639
|
+
---
|
|
640
|
+
|
|
641
|
+
## 10. Priorización General
|
|
642
|
+
|
|
643
|
+
| Prioridad | Área | Hallazgo | Acción Recomendada | Impacto Esperado |
|
|
644
|
+
|---|---|---|---|---|
|
|
645
|
+
| Alta | UX/CLI | Mensajes de error no localizados (6 comandos) | Reemplazar `formatError()` locales con i18n | Experiencia consistente para usuarios de `--lang es` |
|
|
646
|
+
| Alta | UX/CLI | `migrate` modifica archivos sin confirmación | Agregar advertencia y paso de preview obligatorio | Prevenir pérdida de datos en migración |
|
|
647
|
+
| Alta | UX/CLI | Namespace plano con 8 comandos de slice/handoff | Completar implementación de `slice` y `handoff` namespaces (ya en CLI_UX_GUIDE) | Reducir carga cognitiva, CLI más coherente |
|
|
648
|
+
| Alta | Docs | `CONTRIBUTING.md` de 16 líneas | Expandir con setup, tests, convenciones, arquitectura | Facilita contribuciones externas |
|
|
649
|
+
| Alta | Automatización | Sin CI declarativo (GitHub Actions) | Crear workflow que ejecute tests y smokes en cada PR | Detecta regresiones antes de merge |
|
|
650
|
+
| Alta | UX/CLI | Sin feedback de progreso en `init` y `analyze` | Agregar spinner de `@clack/prompts` | Percepción de CLI responsivo |
|
|
651
|
+
| Media | Performance | `evidence run` usa `spawnSync` | Migrar a `spawn` async con manejo de señales | Permite interrumpir evidencias largas |
|
|
652
|
+
| Media | UX/CLI | `--auto-start` en `next` no usa sistema i18n | Reemplazar readline manual con `lib/cli/selectors.js` | Consistencia de UX y localización |
|
|
653
|
+
| Media | Docs | Acentos faltantes en `CLI_UX_GUIDE.md` | Corrección manual + agregar `markdownlint` | Calidad y profesionalismo de docs |
|
|
654
|
+
| Media | Docs | `SECURITY.md` sin método de contacto | Agregar email o activar private vulnerability reporting | Proceso de seguridad responsable |
|
|
655
|
+
| Media | Modernización | Scripts bash en `package.json` no portables | Reemplazar con comandos Node CLI | Portabilidad Windows |
|
|
656
|
+
| Media | Automatización | Changelog manual | Adoptar Conventional Commits + release-please | Releases más ágiles y consistentes |
|
|
657
|
+
| Media | Docs | Referencias a "v47" en docs públicas | Eliminar referencias a versiones de spec internas | Claridad para contribuidores externos |
|
|
658
|
+
| Baja | Performance | I/O síncrono en toda la capa de lecturas | Evaluar paralelización en `analyze` con `Promise.all` | Mejora en proyectos grandes |
|
|
659
|
+
| Baja | Modernización | Sin TypeScript | Migración incremental desde módulos `lib/` | Mejor DX para contribuidores |
|
|
660
|
+
| Baja | Modernización | Sin JSON Schema para `slice.json` | Generar desde Zod, publicar en SchemaStore | Validación en IDE para usuarios |
|
|
661
|
+
| Baja | Modernización | Sin shell completion | Implementar comando `completion` | Ergonomía para usuarios avanzados |
|
|
662
|
+
| Baja | UX/CLI | `plan` no avisa de `estimated_hours` faltante | Agregar nota informativa en el output | Mejor guía para usuarios nuevos |
|
|
663
|
+
| Baja | UX/CLI | `graph --level` vacío sin mensaje | Agregar mensaje explicativo | Evita confusión sobre si funcionó |
|
|
664
|
+
| Baja | Docs | `examples/` no enlazado desde README | Agregar sección Ejemplos en README | Mejor onboarding de usuarios nuevos |
|
|
665
|
+
|
|
666
|
+
---
|
|
667
|
+
|
|
668
|
+
## 11. Roadmap de Mejoras Sugerido
|
|
669
|
+
|
|
670
|
+
### Corto plazo (próximas 2-4 semanas)
|
|
671
|
+
|
|
672
|
+
- Localizar todos los `formatError()` hardcodeados en inglés en los 6 comandos afectados.
|
|
673
|
+
- Agregar advertencia de preview obligatoria en `migrate` antes de ejecutar.
|
|
674
|
+
- Completar la implementación de los namespaces `slice` y `handoff` (ya documentados en `CLI_UX_GUIDE.md` como canónicos).
|
|
675
|
+
- Agregar spinner de progreso en `init` y `analyze`.
|
|
676
|
+
- Expandir `CONTRIBUTING.md` con setup, tests y convenciones.
|
|
677
|
+
- Corregir acentos faltantes en `CLI_UX_GUIDE.md`.
|
|
678
|
+
- Agregar `"engines"` al `package.json`.
|
|
679
|
+
- Agregar método de contacto a `SECURITY.md` (activar private vulnerability reporting en GitHub).
|
|
680
|
+
- Agregar `next_command` al JSON output de `flow`.
|
|
681
|
+
- Agregar validación de `--section` en `dashboard` con lista de valores válidos.
|
|
682
|
+
|
|
683
|
+
### Mediano plazo (próximos 1-3 meses)
|
|
684
|
+
|
|
685
|
+
- Crear workflow de GitHub Actions para CI (tests + smokes en ubuntu, macos, windows).
|
|
686
|
+
- Crear `ARCHITECTURE.md` con descripción de capas, módulos y flujo de datos.
|
|
687
|
+
- Implementar `evidence list` y `evidence show` (ya documentados en `README_FOR_AI.md`).
|
|
688
|
+
- Migrar `evidence run` de `spawnSync` a `spawn` async.
|
|
689
|
+
- Fragmentar `commands/ai.js` en módulos por dominio.
|
|
690
|
+
- Simplificar `demo create spec-viewer` a `demo spec-viewer`.
|
|
691
|
+
- Reemplazar scripts bash en `package.json` con equivalentes Node CLI.
|
|
692
|
+
- Adoptar Conventional Commits y automatizar generación de changelog.
|
|
693
|
+
- Simplificar `ROADMAP.md` para separar información pública de interna.
|
|
694
|
+
- Generar JSON Schema para `slice.json` desde Zod.
|
|
695
|
+
- Agregar `markdownlint` y `markdown-link-check` al proceso de CI.
|
|
696
|
+
|
|
697
|
+
### Largo plazo (próximos 3-6 meses)
|
|
698
|
+
|
|
699
|
+
- Migrar el parser manual a Commander.js o yargs (lazy-loading para mantener startup rápido).
|
|
700
|
+
- Implementar lazy-require para módulos pesados (especialmente `commands/ai.js`).
|
|
701
|
+
- Agregar scripts de shell completion (bash, zsh, fish).
|
|
702
|
+
- Migración incremental a TypeScript (comenzar por `lib/`).
|
|
703
|
+
- Automatización completa de releases con GitHub Actions (tag → npm publish).
|
|
704
|
+
- Publicar JSON Schema de `slice.json` en SchemaStore.
|
|
705
|
+
- Implementar paralelización de lecturas en `analyze` con `Promise.all`.
|