@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.
- package/package.json +1 -1
- package/skills/agent-workflow/commands/export-scripts.md +35 -62
- package/skills/agent-workflow/exports/export-scripts/SKILL.md +114 -248
- package/skills/agent-workflow/exports/export-scripts/references/lexico-tecnico.md +17 -64
- package/skills/agent-workflow/exports/export-scripts/references/readme-template.md +24 -264
- package/skills/agent-workflow/exports/export-scripts/references/validations.md +29 -250
- package/skills/agent-workflow/standards/sql-rollback-generator/SKILL.md +72 -126
- package/skills/agent-workflow/standards/sql-script-organizer/SKILL.md +12 -13
|
@@ -1,289 +1,49 @@
|
|
|
1
|
-
# Plantilla — README del bundle export-scripts
|
|
1
|
+
# Plantilla — README del bundle export-scripts
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
98
|
-
psql -h <host> -U <user> -d <db> -f
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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 —
|
|
1
|
+
# Validations — export-scripts
|
|
2
2
|
|
|
3
|
-
Checks
|
|
3
|
+
Checks mínimos antes de escribir el bundle. Solo lo esencial: estructura básica y ausencia de placeholders.
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
7
|
+
**Severidad**: hard-fail.
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
Requeridos al root del bundle:
|
|
12
10
|
|
|
13
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
+
Vetados (presencia → hard-fail):
|
|
19
18
|
|
|
20
|
-
- `
|
|
21
|
-
- `
|
|
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
|
-
|
|
22
|
+
## V2 — Sin placeholders
|
|
26
23
|
|
|
27
|
-
-
|
|
28
|
-
- `por-tema/<slug>/` — sólo si `--themes` activado, `## Temas` declarado, o `--themes infer`.
|
|
24
|
+
**Severidad**: hard-fail.
|
|
29
25
|
|
|
30
|
-
|
|
26
|
+
El `README.md` y los `.sql` no deben contener:
|
|
31
27
|
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
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 -
|
|
207
|
-
|
|
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
|
-
|
|
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
|
|
227
|
-
2.
|
|
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
|
-
|
|
46
|
+
Ambas hard-fail. Si fallan, abortar antes de escribir.
|
|
238
47
|
|
|
239
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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": "
|
|
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) |
|