@tacuchi/agent-workflow-cli 10.4.0 → 10.5.0

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.
@@ -1,289 +1,49 @@
1
- # Plantilla — README del bundle export-scripts (v4.0.0)
1
+ # Plantilla — README del bundle export-scripts
2
2
 
3
- Plantilla canónica del `README.md` único del bundle. Reemplaza `manifest.md` + `ORDER.md` legacy desde v4.0.0 (session093). Reemplazar `[entre corchetes]` con valores reales al momento de generar.
4
-
5
- > **Heredada y consolidada de**: `manifest-template.md` v3.x (informe) + `readme-template.md` v3.x (índice). v4.0.0 unifica ambos en una sola plantilla siguiendo la doctrina "un solo punto de verdad" del usuario.
3
+ README mínimo del bundle. Reemplaza `[entre corchetes]` con valores reales. Sin resumen ejecutivo, sin tabla de sesiones, sin plantillas de correo, sin acciones manuales narradas, sin checklist de producción.
6
4
 
7
5
  ---
8
6
 
9
7
  ```markdown
10
8
  # Bundle export-scripts NNN — [YYYY-MM-DD]
11
9
 
12
- - **Rama actual:** `[nombre-rama]`
13
- - **Rama destino:** `certificacion`
14
- - **Sesiones incluidas:** [N]
15
- - **Readiness:** [🟢 verde | 🟡 amarillo | 🔴 rojo]
16
- - **Generado por:** agent-workflow · skill `export-scripts` v4.0.0
17
-
18
- ## Contenido del bundle (layout v4.0.0)
19
-
20
- | Archivo | Propósito | Condicional |
21
- |---|---|---|
22
- | `00-ROLLBACK.sql` | Único rollback cross-session — encadenado 04→01 dentro de un `BEGIN; ... COMMIT;` único. Bloque "Fase 5 — Cleanup irreversible" al final fuera de la transacción. | Siempre (si hay sentencias) |
23
- | `01-DDL-TABLES.sql` | `CREATE TABLE` / `ALTER TABLE` / `CREATE INDEX` / `CREATE SEQUENCE` cross-session. | Skip si categoría vacía |
24
- | `02-DDL-FUNCTIONS.sql` | `CREATE OR REPLACE FUNCTION` / `PROCEDURE` cross-session. | Skip si categoría vacía |
25
- | `03-DML.sql` | `UPDATE` / `DELETE` / migración de datos cross-session (con backup en `esq_audit` cuando aplica). | Skip si categoría vacía |
26
- | `04-INSERTS.sql` | `INSERT` / seed de datos maestros cross-session. | Skip si categoría vacía |
27
- | `README.md` | Este archivo — único informe + índice + how-to-execute. | Siempre |
28
- | `_queries/sessionXXX/` | Queries de consulta de soporte por sesión (no ejecución). | Solo si alguna sesión tenía `queries/` |
29
- | `por-tema/<slug>/` | Capa adicional opt-in con consolidado per-tema (sin rollback duplicado). | Solo si `--themes` activado o `## Temas` declarado |
30
-
31
- ---
32
-
33
- ## 1. Resumen ejecutivo
34
-
35
- [1-2 párrafos sintetizando qué entra en este bundle: módulos tocados, tipo de cambios predominantes (features, fixes, migración de datos), y el juicio general de readiness con 1-2 motivos principales.]
36
-
37
- **Motivos del color de readiness:**
38
- - [motivo 1]
39
- - [motivo 2]
40
-
41
- ---
42
-
43
- ## 2. Sesiones incluidas
44
-
45
- | # | Sesión | Estado | Fase | Fechas | Resumen | Refs |
46
- |---|---|---|---|---|---|---|
47
- | 1 | session001-nombre | closed | 5 | YYYY-MM-DD → YYYY-MM-DD | [resumen 1 línea] | [DEC](../decisiones/001-*.md) |
48
- | 2 | session002-nombre | ⚠ active | 3 | YYYY-MM-DD → — | [resumen 1 línea] + motivo de apertura | — |
49
-
50
- **Sesiones abiertas:** destacadas con ⚠. Cada una baja la readiness del bundle. Motivo y próxima acción debe quedar explícito en el resumen.
10
+ ## Archivos
51
11
 
52
- ---
53
-
54
- ## 3. Acciones manuales previas a producción
55
-
56
- Checklist ordenado. Marcar cada ítem antes del despliegue.
57
-
58
- - [ ] **ACT-001** — [Título corto]
59
- - **Motivo:** [por qué es necesaria]
60
- - **Quién:** [rol/persona sugerida]
61
- - **Detalle:** [qué hacer, con qué entrada/salida esperada]
12
+ | Archivo | Contiene |
13
+ |---|---|
14
+ | `00-ROLLBACK.sql` | Reversa de todo el bundle. |
15
+ | `01-[CATEGORIA].sql` | [Primera categoría con contenido] |
16
+ | `02-[CATEGORIA].sql` | [Segunda categoría con contenido — si aplica] |
17
+ | ... | ... |
62
18
 
63
- - [ ] **ACT-002** Solicitar API keys de producción
64
- - **Motivo:** REQUIREMENTS de session003 menciona integración con servicio externo pero no hay claves concretas.
65
- - **Quién:** Administrador de infraestructura
66
- - **Detalle:** enviar correo con plantilla en §3.1.
19
+ > La numeración es continua tras `00-ROLLBACK.sql`. Las categorías sin contenido no ocupan número.
67
20
 
68
- ### 3.1 Plantillas de correo
69
-
70
- Copiar, personalizar y enviar manualmente. **Este plugin no envía correos.**
71
-
72
- ```
73
- Para: [correo-destino]
74
- CC: [correo-cc]
75
- Asunto: [Bundle NNN] Solicitud de API keys de producción
76
-
77
- Buen día,
78
-
79
- Para el bundle NNN-[nombre] que se despliega el [fecha objetivo] requerimos las siguientes credenciales de producción:
80
-
81
- - [servicio 1] — URL y token de acceso
82
- - [servicio 2] — usuario/clave técnica
83
-
84
- Adjunto el bundle: docs/scripts/NNN-export-scripts-[YYYY-MM-DD]/README.md
85
-
86
- Quedamos atentos.
87
- Saludos.
88
- ```
89
-
90
- ---
91
-
92
- ## 4. Secuencia de ejecución (01 → 04)
93
-
94
- Orden obligatorio. Categorías vacías se omiten (no aparece el archivo).
21
+ ## Aplicar
95
22
 
96
23
  ```bash
97
- # 1. DDL de tablas (CREATE/ALTER TABLE, INDEX, SEQUENCE)
98
- psql -h <host> -U <user> -d <db> -f 01-DDL-TABLES.sql
99
-
100
- # 2. DDL de funciones (CREATE OR REPLACE FUNCTION/PROCEDURE)
101
- psql -h <host> -U <user> -d <db> -f 02-DDL-FUNCTIONS.sql
102
-
103
- # 3. DML / migración (UPDATE, DELETE, backup en esq_audit)
104
- psql -h <host> -U <user> -d <db> -f 03-DML.sql
105
-
106
- # 4. Inserts / seed maestros
107
- psql -h <host> -U <user> -d <db> -f 04-INSERTS.sql
24
+ psql -h <host> -U <user> -d <db> -f 01-[CATEGORIA].sql
25
+ psql -h <host> -U <user> -d <db> -f 02-[CATEGORIA].sql
26
+ # ...
108
27
  ```
109
28
 
110
- > **Importante**: este plugin NO ejecuta SQL. El usuario aplica los scripts manualmente.
111
-
112
- ### 4.1 Mapping sesión ↔ tema ↔ scripts
113
-
114
- > **Condicional**: incluir esta sub-sección **sólo si** `--themes` activado y `por-tema/` se generó. Si no, omitir entera la 4.1.
115
-
116
- | Sesión | Tema | Sentencias (categoría:NNN-stmt) |
117
- |---|---|---|
118
- | session001 | `tema-rbac` | 01:001-rol-permiso, 02:001-fn-validacion, 03:001-mig-roles |
119
- | session002 | `tema-rbac` | 01:001-asignacion-default |
120
- | session003 | `tema-lista-negra-blanca` | 01:001-listas-table, 04:001-inserts-iniciales |
121
-
122
- ---
123
-
124
- ## 5. Rollback (`00-ROLLBACK.sql`)
29
+ Orden estricto: ascendente por número (01 → 02 → …). El plugin no ejecuta nada — el operador aplica.
125
30
 
126
- Un solo archivo cross-session al root del bundle. Orden interno inverso absoluto: última sesión → primera; dentro de cada una 04 → 03 → 02 → 01.
31
+ ## Revertir
127
32
 
128
33
  ```bash
129
- # Ejecutar el rollback completo en una sola transacción:
130
34
  psql -h <host> -U <user> -d <db> -f 00-ROLLBACK.sql
131
35
  ```
132
36
 
133
- ### 5.1 Operaciones irreversibles
134
-
135
- **Detectadas en el bundle:**
136
-
137
- | Sesión origen | Operación | Mitigación disponible |
138
- |---|---|---|
139
- | session003 | `DROP COLUMN col_legacy` | Respaldo previo en `esq_audit.tb_bkp_session003` (incluido en `03-DML.sql`) |
140
- | session005 | `TRUNCATE esq_x.tb_z` | Sin backup automático — pérdida total de datos |
141
-
142
- Si no hay irreversibles: incluir un placeholder con "Sin operaciones irreversibles en este bundle." (el AI debe reemplazar la tabla por esta frase única).
143
-
144
- **Bloque "Fase 5" del `00-ROLLBACK.sql`**: las operaciones irreversibles aparecen al final del archivo **fuera de la transacción** principal, con header `-- WARNING: IRREVERSIBLE` y referencia a la DECISION de la sesión origen. El operador decide ejecutar este bloque manualmente.
145
-
146
- ### 5.2 Impacto
147
-
148
- - **Tablas creadas:** [lista]
149
- - **Tablas modificadas:** [lista, indicando tipo de ALTER]
150
- - **Funciones creadas/modificadas:** [lista]
151
- - **Filas afectadas por migración:** [estimación si hay count en sesiones]
152
-
153
- ---
154
-
155
- ## 6. Código fuente — hallazgos del escaneo
156
-
157
- > **Condicional V4.b**: si `--skip-code-scan` fue usado, esta sección contiene **sólo** una nota inline `_(Escaneo omitido por --skip-code-scan)_` y nada más.
158
-
159
- **Resumen:** [X] críticos · [Y] medios · [Z] bajos
160
-
161
- ### 6.1 Severidad alta (bloqueantes para producción)
162
-
163
- | # | Patrón | Archivo:línea | Snippet | Recomendación |
164
- |---|---|---|---|---|
165
- | H1 | Credencial hardcodeada | `src/.../Config.java:42` | `password = "..."` | Mover a variable de entorno o gestor de secretos. Rotar la credencial si fue commiteada. |
166
-
167
- Si vacío: incluir un placeholder con "Sin hallazgos de severidad alta." (frase única que reemplaza la tabla).
168
-
169
- ### 6.2 Severidad media
170
-
171
- | # | Patrón | Archivo:línea | Snippet | Recomendación |
172
- |---|---|---|---|---|
173
- | M1 | URL localhost | `src/.../api.service.ts:18` | `http://localhost:8080` | Reemplazar por `environment.apiUrl` u otro mecanismo de configuración. |
174
-
175
- ### 6.3 Severidad baja
176
-
177
- Agrupados por patrón, con conteo.
178
-
179
- | Patrón | Conteo | Ejemplos |
180
- |---|---|---|
181
- | `TODO` | 7 | `UserService.java:88`, `OrderService.java:42`, ... |
182
- | `FIXME` | 2 | `validator.ts:15`, `payment.ts:103` |
183
-
184
- ### 6.4 Alcance del escaneo
185
-
186
- - **Directorios incluidos:** [lista]
187
- - **Directorios excluidos:** `node_modules/`, `target/`, `dist/`, `build/`, `.workflow/`, `docs/`, `tests/`, `test/`, `.git/`
188
- - **Extensiones:** [lista]
189
-
190
- ---
191
-
192
- ## 7. Git y ramas
193
-
194
- - **Rama actual:** `[nombre]`
195
- - **Rama destino:** `certificacion`
196
- - **Commits pendientes de merge (rama actual → certificacion):** [N]
197
-
198
- ### 7.1 Commits pendientes
199
-
200
- ```
201
- [sha corto] [mensaje]
202
- [sha corto] [mensaje]
203
- ```
204
-
205
- ### 7.2 Archivos modificados (git diff --stat)
206
-
207
- ```
208
- [salida de git diff certificacion --stat]
209
- ```
210
-
211
- ### 7.3 Cambios sin commitear
212
-
213
- Si `git status` muestra archivos modificados/untracked:
214
-
215
- ```
216
- [salida de git status --porcelain]
217
- ```
218
-
219
- **Acción recomendada:** el usuario decide si esos cambios entran al bundle (commit) o no (stash/descartar).
220
-
221
- ### 7.4 PR sugerido (texto — no se crea)
222
-
223
- ```
224
- Título: [feat/fix/chore]: [resumen del bundle]
225
- Rama origen: [rama actual]
226
- Rama destino: certificacion
227
- Descripción:
228
- - Bundle NNN consolidando las siguientes sesiones:
229
- - session001 — [título]
230
- - session002 — [título]
231
- - Bundle completo: docs/scripts/NNN-export-scripts-[YYYY-MM-DD]/
37
+ Si hay bloque `Fase 5 Cleanup irreversible` al final del rollback, leerlo antes de ejecutar — son operaciones manuales (sin reversa automática).
232
38
  ```
233
39
 
234
40
  ---
235
41
 
236
- ## 8. Documentación graduada
237
-
238
- | Sesión | Decisiones | Manuales | Especificaciones | Conclusiones |
239
- |---|---|---|---|---|
240
- | session001 | `001-*.md`, `002-*.md` | — | — | — |
241
- | session002 | — | `003-*.md` | — | — |
242
- | session003 | `004-*.md` | — | `001-*/` | — |
243
-
244
- Nota: el modelo nuevo gradua 6 kinds (`decision`, `manual`, `script`, `especificacion`, `conclusion`, `release`). Este README enlaza los 4 primeros; `release` queda implícito en este mismo dossier; `script` queda implícito en los archivos `0X-*.sql` del root.
245
-
246
- ---
247
-
248
- ## 9. Checklist final de producción
249
-
250
- Lista única consolidada. Todos los ítems deben marcarse antes del "go":
251
-
252
- - [ ] **BD:** respaldo completo del esquema afectado tomado y verificado
253
- - [ ] **BD:** scripts ejecutados en orden (`01-DDL-TABLES.sql` → `02-DDL-FUNCTIONS.sql` → `03-DML.sql` → `04-INSERTS.sql`)
254
- - [ ] **BD:** `00-ROLLBACK.sql` probado en staging/certificación
255
- - [ ] **Infra:** variables de entorno actualizadas (ver §3)
256
- - [ ] **Infra:** API keys de producción solicitadas y configuradas
257
- - [ ] **Código:** hallazgos de severidad alta resueltos (§6.1)
258
- - [ ] **Git:** rama mergeada a `certificacion` (o PR aprobado)
259
- - [ ] **Git:** tag/release creado en el repositorio
260
- - [ ] **Stakeholders:** notificación enviada antes y después del despliegue
261
- - [ ] **Acciones manuales:** todos los ACT-XXX de §3 completados
262
-
263
- ### 9.1 Advertencias
42
+ ## Notas para el AI generador
264
43
 
265
- Cosas que el skill detectó pero no pudo validar automáticamente. Leer antes de marcar el checklist como completo.
266
-
267
- Si no hay advertencias: incluir un placeholder con "Sin advertencias pendientes." (frase única).
268
-
269
- ---
270
-
271
- ## 10. Metadata
272
-
273
- - **Generado:** YYYY-MM-DD HH:MM
274
- - **Versión del skill:** export-scripts v4.0.0 (layout plano cross-session)
275
- - **Sub-skill rollback:** sql-rollback-generator v2.0.0
276
- - **Argumentos usados:** `[sin argumentos | --sessions NNN[,NNN] | --since sessionNNN | --themes slug1,slug2 | --dry-run | --skip-code-scan]`
277
- - **Comando original:** `/agent-workflow:export-scripts [args]`
278
- - **Reemplaza:** `/agent-workflow:release` v2.0.0 + `/agent-workflow:release-scripts` v2.0.0 (ambos en deprecation Fase 1 desde plugin v2.8.0)
279
-
280
- ## Re-generación
281
-
282
- Para regenerar este bundle:
283
-
284
- ```
285
- /agent-workflow:export-scripts [--sessions NNN[,NNN]] [--since sessionNNN] [--themes slug1,slug2]
286
- ```
287
-
288
- Cada invocación toma siguiente NNN. NO sobrescribe bundles previos. Bundles generados con export-scripts v3.x (layout `por-sesion/` + `manifest.md` + `ORDER.md` + `rollback-global.sql`) quedan como histórico y no se migran.
289
- ```
44
+ - **No agregar** secciones más allá de `## Archivos`, `## Aplicar`, `## Revertir`.
45
+ - **No incluir** resumen ejecutivo, sesiones origen, commits, ramas, code-scan, plantillas de correo, ACT-NNN, ni checklist de producción.
46
+ - **Tabla de archivos**: una fila por archivo presente. Categorías vacías no aparecen.
47
+ - **Cómo aplicar**: un `psql -f` por archivo presente, en orden ascendente.
48
+ - **Cómo revertir**: una sola línea `psql -f 00-ROLLBACK.sql` + nota opcional si hay `Fase 5`.
49
+ - Si el bundle es trivial (sólo 1 forward + rollback), basta con la tabla y los dos bloques `bash`. Cualquier prosa adicional es ruido.
@@ -1,290 +1,69 @@
1
- # Validations — V1-V6 para `/agent-workflow:export-scripts` (v4.0.0)
1
+ # Validations — export-scripts
2
2
 
3
- Checks post-render que se aplican antes de escribir el bundle al filesystem. Adaptados del canon de la familia export-* (export-arq + export-report) con foco en bundle SQL + informe único.
3
+ Checks mínimos antes de escribir el bundle. Solo lo esencial: estructura básica y ausencia de placeholders.
4
4
 
5
- Niveles de severidad:
6
- - **Hard-fail**: aborta la escritura, devuelve `ok: false` con error report. No se crea el directorio.
7
- - **Warning**: emite mensaje, pide confirmación del usuario para continuar.
5
+ ## V1 — Estructura del bundle
8
6
 
9
- ## V1 — Estructura del bundle (layout plano cross-session)
7
+ **Severidad**: hard-fail.
10
8
 
11
- **Severidad**: hard-fail si falta archivo obligatorio O aparece archivo/sub-dir vetado.
9
+ Requeridos al root del bundle:
12
10
 
13
- ### Archivos obligatorios siempre
11
+ - `README.md`.
12
+ - `00-ROLLBACK.sql` (si hay al menos un forward).
13
+ - Al menos un `NN-*.sql` con `NN >= 01`.
14
14
 
15
- - `README.md` único informe + índice + how-to-execute.
16
- - `00-ROLLBACK.sql` — sólo si al menos una categoría 01-04 tiene contenido (si todo el corpus está vacío, no se escribe el bundle).
15
+ Numeración continua tras `00-ROLLBACK.sql`: el primer forward presente es `01-…`, el segundo `02-…`, etc. No hay gaps por categorías vacías.
17
16
 
18
- ### Archivos por categoría (skip silencioso si vacío)
17
+ Vetados (presencia hard-fail):
19
18
 
20
- - `01-DDL-TABLES.sql` — sólo si hay sentencias `@category: 01` en el corpus.
21
- - `02-DDL-FUNCTIONS.sql` sólo si hay sentencias `@category: 02`.
22
- - `03-DML.sql` — sólo si hay sentencias `@category: 03`.
23
- - `04-INSERTS.sql` — sólo si hay sentencias `@category: 04`.
19
+ - `manifest.md`, `ORDER.md`, `rollback-global.sql`, `por-sesion/`, `<file>.rollback.sql` (layout v3.x deprecado).
20
+ - Archivos `NN-*.sql` con saltos en la numeración (`01-…`, `03-…` sin `02-…`).
24
21
 
25
- ### Archivos condicionales
22
+ ## V2 — Sin placeholders
26
23
 
27
- - `_queries/<sessionXXX>/` — sólo si la sesión origen tenía `queries/`.
28
- - `por-tema/<slug>/` — sólo si `--themes` activado, `## Temas` declarado, o `--themes infer`.
24
+ **Severidad**: hard-fail.
29
25
 
30
- ### Archivos VETADOS (presencia hard-fail)
26
+ El `README.md` y los `.sql` no deben contener:
31
27
 
32
- Layout v3.x eliminado desde v4.0.0:
33
- - `manifest.md` (absorbido por `README.md`).
34
- - `ORDER.md` (absorbido por §4 del `README.md`).
35
- - `rollback-global.sql` separado (reemplazado por `00-ROLLBACK.sql`).
36
- - `por-sesion/` y todo su contenido (consolidación es cross-session al root).
37
- - `<file>.rollback.sql` companions por sentencia (eliminado en sql-rollback-generator v2.0.0).
38
- - `<session>/rollback/` sub-carpetas per-sesión (eliminado en sql-rollback-generator v2.0.0).
39
-
40
- **Cómo validar**: listar el output dir antes de escribir el bundle final; verificar que (a) archivos obligatorios están presentes y (b) no aparece nada del set vetado.
41
-
42
- **Error report (hard-fail)**:
43
- ```
44
- V1 FAILED: estructura del bundle incompatible con v4.0.0
45
- esperado al root: README.md + 0X-*.sql (categorías con contenido)
46
- encontrado vetado: por-sesion/ (4 sub-carpetas), manifest.md, rollback-global.sql
47
- acción: el generador está produciendo layout v3.x — revisar export-scripts v4.0.0 + sql-rollback-generator v2.0.0
48
- ```
49
-
50
- ## V2 — Noise vetado + anti-redundancia v4.0.0
51
-
52
- **Severidad**: hard-fail si hay ≥1 ocurrencia.
53
-
54
- **Scope**: body-only del `README.md` — líneas después de `# Bundle export-scripts NNN` (h1 inicial) y antes de `## 10. Metadata`.
55
-
56
- **Patrones vetados** (catálogo en `references/lexico-tecnico.md` + reglas anti-redundancia v4.0.0):
57
-
58
- 1. Placeholders sin reemplazar: `NNN`, `YYYY-MM-DD`, `[entre corchetes]`, `<placeholder>`.
59
- 2. Paths absolutos del developer: `/Users/`, `/home/`, `C:\\`.
60
- 3. Referencias residuales al layout v3.x dentro de prosa generada (no en bloques deprecation explicit):
61
- - `por-sesion/` en `## 4. Secuencia de ejecución` o `## 5. Rollback` (esos paths fueron eliminados).
62
- - `manifest.md` como recurso vigente del bundle (sólo válido si se cita el template DEPRECATED).
63
- - `ORDER.md` como archivo del bundle (eliminado).
64
- - `rollback-global.sql` como path activo (renombrado a `00-ROLLBACK.sql`).
65
- - `<file>.rollback.sql` companions.
66
-
67
- **Cómo validar**:
68
- ```bash
69
- awk '
70
- BEGIN { body=0 }
71
- /^## 10\. Metadata/ { body=0 }
72
- body { print }
73
- /^# / && !/Metadata/ { body=1 }
74
- ' README.md > /tmp/body.md
75
- grep -n -F -f references/lexico-tecnico.md /tmp/body.md
76
- # Plus anti-redundancia v4.0.0:
77
- grep -nE 'por-sesion/|rollback-global\.sql|\.rollback\.sql|ORDER\.md|manifest\.md' /tmp/body.md
78
- ```
79
-
80
- **Error report (hard-fail)**:
81
- ```
82
- V2 FAILED: noise vetado / redundancia v3.x detectados en README.md
83
- ocurrencias:
84
- línea 12: "NNN-export-scripts-YYYY-MM-DD" → placeholder sin reemplazar
85
- línea 28: "/Users/tacuchi/" → path absoluto del developer
86
- línea 65: "por-sesion/session001-*/" → layout v3.x deprecated
87
- total: 3 ocurrencias
88
- acción: completar render con paths v4.0.0 y stripear referencias legacy
89
- ```
90
-
91
- ## V3 — Secciones obligatorias del README único
92
-
93
- **Severidad**: hard-fail si falta una sección obligatoria.
94
-
95
- **Secciones obligatorias** (todas siempre presentes en `README.md`):
96
-
97
- 1. `## 1. Resumen ejecutivo`
98
- 2. `## 2. Sesiones incluidas`
99
- 3. `## 3. Acciones manuales previas a producción`
100
- 4. `## 4. Secuencia de ejecución (01 → 04)`
101
- 5. `## 5. Rollback (\`00-ROLLBACK.sql\`)`
102
- 6. `## 6. Código fuente — hallazgos del escaneo`
103
- 7. `## 7. Git y ramas`
104
- 8. `## 8. Documentación graduada`
105
- 9. `## 9. Checklist final de producción`
106
- 10. `## 10. Metadata`
28
+ - `NNN`, `YYYY-MM-DD`, `[entre corchetes]`, `<placeholder>`, `[CATEGORIA]`.
29
+ - Paths absolutos del developer (`/Users/`, `/home/`, `C:\\`).
30
+ - Referencias al layout v3.x deprecado (`por-sesion/`, `manifest.md`, `ORDER.md`, `rollback-global.sql`, `.rollback.sql` companions) — excepto en bloques explícitos de "deprecated"/"histórico".
107
31
 
108
32
  **Cómo validar**:
109
- ```bash
110
- grep -c '^## [0-9]\+\. ' README.md # debe dar exactamente 10
111
- ```
112
-
113
- **Error report (hard-fail)**:
114
- ```
115
- V3 FAILED: secciones obligatorias faltantes
116
- esperadas: 10
117
- encontradas: 8
118
- faltantes: "## 5. Rollback (`00-ROLLBACK.sql`)", "## 9. Checklist final de producción"
119
- acción: regenerar README con secciones completas
120
- ```
121
-
122
- ## V4 — Secciones condicionales honored
123
-
124
- **Severidad**: hard-fail si una sub-sección condicional aparece sin justificación o falta cuando debería estar.
125
-
126
- ### V4.a — Mapping por tema (`## 4.1 Mapping sesión ↔ tema ↔ scripts`)
127
-
128
- - **Patrón A — `--themes` activado**: sub-sección `## 4.1 Mapping sesión ↔ tema ↔ scripts` presente con tabla de mapping.
129
- - **Patrón B — sin temas**: sub-sección `## 4.1` **ausente** (no aparece header ni placeholder).
130
-
131
- **Error report (Patrón B esperado pero sección presente sin contenido)**:
132
- ```
133
- V4.a FAILED: sin temas declarados pero sección "## 4.1 Mapping" presente
134
- themes: []
135
- acción: omitir sección cuando no hay temas (no dejar placeholder)
136
- ```
137
33
 
138
- ### V4.b — Code scan skip (`## 6`)
139
-
140
- - **Patrón A — escaneo ejecutado**: sección 6 contiene resumen con counts (`X críticos · Y medios · Z bajos`).
141
- - **Patrón B — `--skip-code-scan`**: sección 6 contiene **nota inline explícita** `_(Escaneo omitido por --skip-code-scan)_` y no hay tabla de hallazgos.
142
-
143
- **Error report (Patrón B esperado pero tabla presente)**:
144
- ```
145
- V4.b FAILED: --skip-code-scan declarado pero sección 6 tiene tabla de hallazgos
146
- args: --skip-code-scan
147
- acción: reemplazar tabla por nota inline
148
- ```
149
-
150
- ### V4.c — Sesiones abiertas
151
-
152
- - **Patrón A — sesiones cerradas**: tabla "## 2. Sesiones incluidas" sin warnings ⚠.
153
- - **Patrón B — sesiones activas incluidas**: cada sesión activa marcada con ⚠ + motivo de apertura en la columna "Resumen".
154
-
155
- **Error report (Patrón B sin ⚠)**:
156
- ```
157
- V4.c FAILED: sesiones activas detectadas pero no marcadas con ⚠
158
- sesiones activas: session061
159
- acción: marcar con ⚠ en tabla y documentar motivo en columna Resumen
160
- ```
161
-
162
- ### V4.d — Categorías SQL vacías
163
-
164
- - **Patrón A — categoría con contenido**: archivo `0X-*.sql` presente al root + referencia en §4 del README.
165
- - **Patrón B — categoría vacía**: archivo `0X-*.sql` **ausente** + comando psql correspondiente **omitido** del bloque de §4 (no aparece línea con archivo inexistente).
166
-
167
- **Error report (Patrón B con referencia)**:
168
- ```
169
- V4.d FAILED: categoría 03-DML vacía pero referenciada en §4
170
- corpus_dml_count: 0
171
- archivo presente: false
172
- referencia README: línea 88 → "psql ... -f 03-DML.sql"
173
- acción: omitir comando psql cuando la categoría está vacía
174
- ```
175
-
176
- ## V5 — Header del README bien formado
177
-
178
- **Severidad**: warning.
179
-
180
- **Checks** (líneas 1-7 del `README.md`):
181
-
182
- - Línea 1: `# Bundle export-scripts NNN — <YYYY-MM-DD>` con NNN reemplazado.
183
- - Línea 3: `- **Rama actual:** \`<nombre-rama>\``
184
- - Línea 4: `- **Rama destino:** \`certificacion\``
185
- - Línea 5: `- **Sesiones incluidas:** <N>`
186
- - Línea 6: `- **Readiness:** 🟢 verde | 🟡 amarillo | 🔴 rojo` (una sola opción seleccionada).
187
- - Línea 7: `- **Generado por:** agent-workflow · skill \`export-scripts\` v4.0.0`
188
-
189
- **Error report (warning)**:
190
- ```
191
- V5 WARNING: header incompleto o malformado
192
- línea 1: OK
193
- línea 3: "- **Rama actual:** `<nombre-rama>`" → placeholder sin reemplazar
194
- acción: re-renderizar header con valores reales
195
- ¿continuar de todas formas? (s/n)
196
- ```
197
-
198
- ## V6 — Referencias resolubles
199
-
200
- **Severidad**: warning.
201
-
202
- **Checks**: cada link en cualquier sección del README apunta a un path existente en filesystem al momento de generar.
203
-
204
- **Cómo validar**:
205
34
  ```bash
206
- grep -Eo '`[^`]+\.(md|sql)`|\[.+?\]\([^)]+\)' README.md | \
207
- sed -E 's/^`(.+)`$/\1/; s/^\[.+?\]\((.+)\)$/\1/' | \
208
- while read p; do
209
- if [ ! -e "$p" ] && [ ! -e "<output_dir>/$p" ]; then echo "MISSING: $p"; fi
210
- done
35
+ grep -nE 'NNN|YYYY-MM-DD|\[entre corchetes\]|<placeholder>|\[CATEGORIA\]|/Users/|/home/|C:\\' README.md *.sql
36
+ grep -nE 'por-sesion/|manifest\.md|ORDER\.md|rollback-global\.sql|\.rollback\.sql' README.md
211
37
  ```
212
38
 
213
- **Excepción**: links a `docs/decisiones/`, `docs/manuales/`, etc. **fuera** del output dir son válidos si existen en el workspace; si no, warning suave (no aborta).
214
-
215
- **Error report (warning)**:
216
- ```
217
- V6 WARNING: 2 referencias apuntan a paths inexistentes
218
- - docs/decisiones/005-tipos-cobranza.md → no existe en workspace
219
- - 03-DML.sql → no existe en output dir (categoría vacía)
220
- acción sugerida: corregir paths u omitir referencias a categorías vacías
221
- ¿continuar de todas formas? (s/n)
222
- ```
39
+ Ambos deben devolver vacío.
223
40
 
224
41
  ## Orden de aplicación
225
42
 
226
- 1. V1 (estructura del bundle, anti-redundancia layout) — primero, barato.
227
- 2. V3 (secciones del README) — segundo, barato.
228
- 3. V2 (noise vetado + redundancia v3.x en prosa) — tercero, requiere lectura del body.
229
- 4. V4 (condicionales) — cuarto, requiere reconstruir contexto de flags + corpus.
230
- 5. V5 (header) — quinto.
231
- 6. V6 (referencias resolubles) — último.
232
-
233
- Si V1, V3 o V4 fallan → abortar inmediatamente.
234
- Si V2 falla → abortar (no warning, igual que en export-arq y export-report).
235
- Si V5 o V6 emiten warning → pedir confirmación al usuario.
43
+ 1. V1 (estructura + numeración continua).
44
+ 2. V2 (placeholders + redundancia v3.x).
236
45
 
237
- ## Reporte consolidado
46
+ Ambas hard-fail. Si fallan, abortar antes de escribir.
238
47
 
239
- Al final del flujo, el skill devuelve:
48
+ ## Reporte final
240
49
 
241
50
  ```json
242
51
  {
243
52
  "ok": true,
244
53
  "output_dir": "docs/scripts/NNN-export-scripts-YYYY-MM-DD/",
245
- "files_written": [
246
- "README.md",
247
- "00-ROLLBACK.sql",
248
- "01-DDL-TABLES.sql",
249
- "02-DDL-FUNCTIONS.sql",
250
- "04-INSERTS.sql",
251
- "por-tema/tema-rbac/01-DDL-TABLES.sql",
252
- "..."
253
- ],
254
- "categories_empty": ["03-DML"],
255
- "themes_resolved": ["rbac", "lista-negra-blanca"],
256
- "sessions_included": ["057", "058", "059", "060"],
257
- "validations": {
258
- "V1": { "status": "pass", "forbidden_artifacts": 0 },
259
- "V2": { "status": "pass", "noise_hits": 0, "v3_legacy_refs": 0 },
260
- "V3": { "status": "pass", "sections_found": 10 },
261
- "V4": { "status": "pass", "conditionals": { "mapping_tema": "presente (2 temas)", "code_scan": "ejecutado", "sesiones_abiertas": "0", "categorias_vacias": "1 (03-DML)" } },
262
- "V5": { "status": "pass" },
263
- "V6": { "status": "warning", "missing_refs": ["docs/decisiones/005-...md"] }
264
- },
265
- "summary": "Bundle escrito (layout v4.0.0). 1 warning (V6) aceptado."
54
+ "files_written": ["README.md", "00-ROLLBACK.sql", "01-DML.sql", "02-INSERTS.sql"],
55
+ "validations": { "V1": "pass", "V2": "pass" }
266
56
  }
267
57
  ```
268
58
 
269
- Si hard-fail:
59
+ Hard-fail:
270
60
 
271
61
  ```json
272
62
  {
273
63
  "ok": false,
274
64
  "stage": "validation",
275
65
  "failed_at": "V1",
276
- "details": "estructura v3.x detectada: por-sesion/ presente. El generador no debería emitir ese sub-dir desde v4.0.0.",
66
+ "details": "numeración con gaps: 01-DML.sql + 03-INSERTS.sql sin 02",
277
67
  "no_files_written": true
278
68
  }
279
69
  ```
280
-
281
- ## Diferencias con `export-arq/references/validations.md`
282
-
283
- | Validación | export-arq | export-scripts |
284
- |---|---|---|
285
- | V1 | estructura de secciones por `--scope` | estructura del bundle (archivos al root + sub-dirs opt-in) + anti-redundancia v4.0.0 |
286
- | V2 | noise interno (~25 términos) | noise + placeholders + referencias residuales al layout v3.x |
287
- | V3 | secciones por scope | 10 secciones fijas del README único |
288
- | V4 | Modelo de datos + Decisiones condicionales | Mapping tema + code-scan skip + sesiones abiertas + categorías vacías |
289
- | V5 | header con snapshot + fuentes + diagrams engine | header con rama + readiness + counts + versión skill |
290
- | V6 | referencias resolubles | referencias resolubles (incl. archivos de categoría skipped) |