@tacuchi/agent-workflow-cli 9.3.0 → 10.1.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/dist/application/auto-plan.d.ts +15 -2
- package/dist/application/auto-plan.d.ts.map +1 -1
- package/dist/application/auto-plan.js +70 -9
- package/dist/application/auto-plan.js.map +1 -1
- package/dist/application/host-doctor-service.d.ts +21 -0
- package/dist/application/host-doctor-service.d.ts.map +1 -0
- package/dist/application/host-doctor-service.js +101 -0
- package/dist/application/host-doctor-service.js.map +1 -0
- package/dist/application/project-tab-data.d.ts +4 -13
- package/dist/application/project-tab-data.d.ts.map +1 -1
- package/dist/application/project-tab-data.js +8 -64
- package/dist/application/project-tab-data.js.map +1 -1
- package/dist/application/release-data/sessions.d.ts +2 -0
- package/dist/application/release-data/sessions.d.ts.map +1 -1
- package/dist/application/release-data/sessions.js +4 -1
- package/dist/application/release-data/sessions.js.map +1 -1
- package/dist/application/render/history-row.d.ts.map +1 -1
- package/dist/application/render/history-row.js +3 -0
- package/dist/application/render/history-row.js.map +1 -1
- package/dist/application/session-create-service.d.ts +2 -0
- package/dist/application/session-create-service.d.ts.map +1 -1
- package/dist/application/session-create-service.js +21 -1
- package/dist/application/session-create-service.js.map +1 -1
- package/dist/application/session-resolver.d.ts +8 -0
- package/dist/application/session-resolver.d.ts.map +1 -1
- package/dist/application/session-resolver.js +29 -0
- package/dist/application/session-resolver.js.map +1 -1
- package/dist/application/templates/objetivo.d.ts +1 -1
- package/dist/application/templates/objetivo.d.ts.map +1 -1
- package/dist/application/templates/objetivo.js +13 -1
- package/dist/application/templates/objetivo.js.map +1 -1
- package/dist/cli/commands/auto-plan-decide.d.ts.map +1 -1
- package/dist/cli/commands/auto-plan-decide.js +56 -3
- package/dist/cli/commands/auto-plan-decide.js.map +1 -1
- package/dist/cli/commands/host-doctor.d.ts +3 -0
- package/dist/cli/commands/host-doctor.d.ts.map +1 -0
- package/dist/cli/commands/host-doctor.js +10 -0
- package/dist/cli/commands/host-doctor.js.map +1 -0
- package/dist/cli/commands/session-create.d.ts.map +1 -1
- package/dist/cli/commands/session-create.js +2 -0
- package/dist/cli/commands/session-create.js.map +1 -1
- package/dist/cli/main.js +2 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/tui/app.js +25 -13
- package/dist/cli/tui/app.js.map +1 -1
- package/dist/cli/tui/components/home-footer.d.ts.map +1 -1
- package/dist/cli/tui/components/home-footer.js +1 -0
- package/dist/cli/tui/components/home-footer.js.map +1 -1
- package/dist/cli/tui/data/activity.d.ts +4 -11
- package/dist/cli/tui/data/activity.d.ts.map +1 -1
- package/dist/cli/tui/data/activity.js +21 -70
- package/dist/cli/tui/data/activity.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +32 -34
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/dist/cli/tui/tabs/status-tab.js +1 -1
- package/dist/cli/tui/tabs/status-tab.js.map +1 -1
- package/package.json +3 -3
- package/skills/agent-workflow/commands/export-scripts.md +36 -19
- package/skills/agent-workflow/commands/patch.md +49 -0
- package/skills/agent-workflow/doctrine/implement/references/rollback-guide.md +5 -3
- package/skills/agent-workflow/doctrine/session/SKILL.md +47 -0
- package/skills/agent-workflow/exports/export-scripts/SKILL.md +97 -76
- package/skills/agent-workflow/exports/export-scripts/references/lexico-tecnico.md +20 -6
- package/skills/agent-workflow/exports/export-scripts/references/manifest-template.md +13 -1
- package/skills/agent-workflow/exports/export-scripts/references/readme-template.md +252 -42
- package/skills/agent-workflow/exports/export-scripts/references/theme-handling.md +45 -72
- package/skills/agent-workflow/exports/export-scripts/references/validations.md +119 -71
- package/skills/agent-workflow/standards/sql-rollback-generator/SKILL.md +77 -62
- package/skills/agent-workflow/standards/sql-rollback-generator/references/release-rollback.md +4 -2
- package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md +5 -3
- package/skills/agent-workflow/standards/sql-script-organizer/SKILL.md +16 -16
- package/skills/agent-workflow/workflows/analyze-workflow/SKILL.md +3 -26
- package/skills/agent-workflow/workflows/design-workflow/SKILL.md +3 -24
- package/skills/agent-workflow/workflows/dev-workflow/SKILL.md +3 -26
|
@@ -1,41 +1,68 @@
|
|
|
1
|
-
# Validations — V1-V6 para `/agent-workflow:export-scripts`
|
|
1
|
+
# Validations — V1-V6 para `/agent-workflow:export-scripts` (v4.0.0)
|
|
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.
|
|
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.
|
|
4
4
|
|
|
5
5
|
Niveles de severidad:
|
|
6
6
|
- **Hard-fail**: aborta la escritura, devuelve `ok: false` con error report. No se crea el directorio.
|
|
7
7
|
- **Warning**: emite mensaje, pide confirmación del usuario para continuar.
|
|
8
8
|
|
|
9
|
-
## V1 — Estructura del bundle
|
|
9
|
+
## V1 — Estructura del bundle (layout plano cross-session)
|
|
10
10
|
|
|
11
|
-
**Severidad**: hard-fail si falta archivo obligatorio
|
|
11
|
+
**Severidad**: hard-fail si falta archivo obligatorio O aparece archivo/sub-dir vetado.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
- `manifest.md`
|
|
15
|
-
- `README.md`
|
|
16
|
-
- `ORDER.md`
|
|
17
|
-
- `rollback-global.sql`
|
|
18
|
-
- `por-sesion/` con ≥1 sesión
|
|
13
|
+
### Archivos obligatorios siempre
|
|
19
14
|
|
|
20
|
-
|
|
21
|
-
- `
|
|
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).
|
|
22
17
|
|
|
23
|
-
|
|
18
|
+
### Archivos por categoría (skip silencioso si vacío)
|
|
19
|
+
|
|
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`.
|
|
24
|
+
|
|
25
|
+
### Archivos condicionales
|
|
26
|
+
|
|
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`.
|
|
29
|
+
|
|
30
|
+
### Archivos VETADOS (presencia → hard-fail)
|
|
31
|
+
|
|
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.
|
|
24
41
|
|
|
25
42
|
**Error report (hard-fail)**:
|
|
26
43
|
```
|
|
27
|
-
V1 FAILED: bundle
|
|
28
|
-
esperado:
|
|
29
|
-
encontrado:
|
|
30
|
-
|
|
31
|
-
acción: regenerar pasos 7 y 9
|
|
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
|
|
32
48
|
```
|
|
33
49
|
|
|
34
|
-
## V2 — Noise vetado
|
|
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`.
|
|
35
55
|
|
|
36
|
-
**
|
|
56
|
+
**Patrones vetados** (catálogo en `references/lexico-tecnico.md` + reglas anti-redundancia v4.0.0):
|
|
37
57
|
|
|
38
|
-
|
|
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.
|
|
39
66
|
|
|
40
67
|
**Cómo validar**:
|
|
41
68
|
```bash
|
|
@@ -44,40 +71,43 @@ awk '
|
|
|
44
71
|
/^## 10\. Metadata/ { body=0 }
|
|
45
72
|
body { print }
|
|
46
73
|
/^# / && !/Metadata/ { body=1 }
|
|
47
|
-
'
|
|
74
|
+
' README.md > /tmp/body.md
|
|
48
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
|
|
49
78
|
```
|
|
50
79
|
|
|
51
80
|
**Error report (hard-fail)**:
|
|
52
81
|
```
|
|
53
|
-
V2 FAILED: noise vetado
|
|
82
|
+
V2 FAILED: noise vetado / redundancia v3.x detectados en README.md
|
|
54
83
|
ocurrencias:
|
|
55
84
|
línea 12: "NNN-export-scripts-YYYY-MM-DD" → placeholder sin reemplazar
|
|
56
85
|
línea 28: "/Users/tacuchi/" → path absoluto del developer
|
|
57
|
-
línea
|
|
86
|
+
línea 65: "por-sesion/session001-*/" → layout v3.x deprecated
|
|
58
87
|
total: 3 ocurrencias
|
|
59
|
-
acción: completar render y stripear
|
|
88
|
+
acción: completar render con paths v4.0.0 y stripear referencias legacy
|
|
60
89
|
```
|
|
61
90
|
|
|
62
|
-
## V3 — Secciones obligatorias del
|
|
91
|
+
## V3 — Secciones obligatorias del README único
|
|
63
92
|
|
|
64
93
|
**Severidad**: hard-fail si falta una sección obligatoria.
|
|
65
94
|
|
|
66
|
-
**Secciones obligatorias** (todas siempre presentes en `
|
|
95
|
+
**Secciones obligatorias** (todas siempre presentes en `README.md`):
|
|
96
|
+
|
|
67
97
|
1. `## 1. Resumen ejecutivo`
|
|
68
98
|
2. `## 2. Sesiones incluidas`
|
|
69
99
|
3. `## 3. Acciones manuales previas a producción`
|
|
70
|
-
4. `## 4.
|
|
71
|
-
5. `## 5.
|
|
72
|
-
6. `## 6.
|
|
73
|
-
7. `## 7.
|
|
74
|
-
8. `## 8.
|
|
75
|
-
9. `## 9.
|
|
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`
|
|
76
106
|
10. `## 10. Metadata`
|
|
77
107
|
|
|
78
108
|
**Cómo validar**:
|
|
79
109
|
```bash
|
|
80
|
-
grep -c '^## [0-9]\+\. '
|
|
110
|
+
grep -c '^## [0-9]\+\. ' README.md # debe dar exactamente 10
|
|
81
111
|
```
|
|
82
112
|
|
|
83
113
|
**Error report (hard-fail)**:
|
|
@@ -85,34 +115,34 @@ grep -c '^## [0-9]\+\. ' manifest.md # debe dar exactamente 10
|
|
|
85
115
|
V3 FAILED: secciones obligatorias faltantes
|
|
86
116
|
esperadas: 10
|
|
87
117
|
encontradas: 8
|
|
88
|
-
faltantes: "## 5.
|
|
89
|
-
acción: regenerar
|
|
118
|
+
faltantes: "## 5. Rollback (`00-ROLLBACK.sql`)", "## 9. Checklist final de producción"
|
|
119
|
+
acción: regenerar README con secciones completas
|
|
90
120
|
```
|
|
91
121
|
|
|
92
122
|
## V4 — Secciones condicionales honored
|
|
93
123
|
|
|
94
124
|
**Severidad**: hard-fail si una sub-sección condicional aparece sin justificación o falta cuando debería estar.
|
|
95
125
|
|
|
96
|
-
### V4.a —
|
|
126
|
+
### V4.a — Mapping por tema (`## 4.1 Mapping sesión ↔ tema ↔ scripts`)
|
|
97
127
|
|
|
98
|
-
- **Patrón A —
|
|
99
|
-
- **Patrón B —
|
|
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).
|
|
100
130
|
|
|
101
131
|
**Error report (Patrón B esperado pero sección presente sin contenido)**:
|
|
102
132
|
```
|
|
103
|
-
V4.a FAILED: sin temas declarados pero sección "## 4.
|
|
133
|
+
V4.a FAILED: sin temas declarados pero sección "## 4.1 Mapping" presente
|
|
104
134
|
themes: []
|
|
105
135
|
acción: omitir sección cuando no hay temas (no dejar placeholder)
|
|
106
136
|
```
|
|
107
137
|
|
|
108
|
-
### V4.b — Code scan skip (`##
|
|
138
|
+
### V4.b — Code scan skip (`## 6`)
|
|
109
139
|
|
|
110
|
-
- **Patrón A — escaneo ejecutado**: sección
|
|
111
|
-
- **Patrón B — `--skip-code-scan`**: sección
|
|
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.
|
|
112
142
|
|
|
113
143
|
**Error report (Patrón B esperado pero tabla presente)**:
|
|
114
144
|
```
|
|
115
|
-
V4.b FAILED: --skip-code-scan declarado pero sección
|
|
145
|
+
V4.b FAILED: --skip-code-scan declarado pero sección 6 tiene tabla de hallazgos
|
|
116
146
|
args: --skip-code-scan
|
|
117
147
|
acción: reemplazar tabla por nota inline
|
|
118
148
|
```
|
|
@@ -129,17 +159,32 @@ V4.c FAILED: sesiones activas detectadas pero no marcadas con ⚠
|
|
|
129
159
|
acción: marcar con ⚠ en tabla y documentar motivo en columna Resumen
|
|
130
160
|
```
|
|
131
161
|
|
|
132
|
-
|
|
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
|
|
133
177
|
|
|
134
178
|
**Severidad**: warning.
|
|
135
179
|
|
|
136
|
-
**Checks** (líneas 1-
|
|
137
|
-
|
|
180
|
+
**Checks** (líneas 1-7 del `README.md`):
|
|
181
|
+
|
|
182
|
+
- Línea 1: `# Bundle export-scripts NNN — <YYYY-MM-DD>` con NNN reemplazado.
|
|
138
183
|
- Línea 3: `- **Rama actual:** \`<nombre-rama>\``
|
|
139
184
|
- Línea 4: `- **Rama destino:** \`certificacion\``
|
|
140
185
|
- Línea 5: `- **Sesiones incluidas:** <N>`
|
|
141
186
|
- Línea 6: `- **Readiness:** 🟢 verde | 🟡 amarillo | 🔴 rojo` (una sola opción seleccionada).
|
|
142
|
-
- Línea 7: `- **Generado por:** agent-workflow · skill \`export-scripts
|
|
187
|
+
- Línea 7: `- **Generado por:** agent-workflow · skill \`export-scripts\` v4.0.0`
|
|
143
188
|
|
|
144
189
|
**Error report (warning)**:
|
|
145
190
|
```
|
|
@@ -154,11 +199,11 @@ V5 WARNING: header incompleto o malformado
|
|
|
154
199
|
|
|
155
200
|
**Severidad**: warning.
|
|
156
201
|
|
|
157
|
-
**Checks**: cada link en cualquier sección del
|
|
202
|
+
**Checks**: cada link en cualquier sección del README apunta a un path existente en filesystem al momento de generar.
|
|
158
203
|
|
|
159
204
|
**Cómo validar**:
|
|
160
205
|
```bash
|
|
161
|
-
grep -Eo '`[^`]+\.(md|sql)`|\[.+?\]\([^)]+\)'
|
|
206
|
+
grep -Eo '`[^`]+\.(md|sql)`|\[.+?\]\([^)]+\)' README.md | \
|
|
162
207
|
sed -E 's/^`(.+)`$/\1/; s/^\[.+?\]\((.+)\)$/\1/' | \
|
|
163
208
|
while read p; do
|
|
164
209
|
if [ ! -e "$p" ] && [ ! -e "<output_dir>/$p" ]; then echo "MISSING: $p"; fi
|
|
@@ -171,16 +216,16 @@ grep -Eo '`[^`]+\.(md|sql)`|\[.+?\]\([^)]+\)' manifest.md | \
|
|
|
171
216
|
```
|
|
172
217
|
V6 WARNING: 2 referencias apuntan a paths inexistentes
|
|
173
218
|
- docs/decisiones/005-tipos-cobranza.md → no existe en workspace
|
|
174
|
-
-
|
|
175
|
-
acción sugerida: corregir paths
|
|
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
|
|
176
221
|
¿continuar de todas formas? (s/n)
|
|
177
222
|
```
|
|
178
223
|
|
|
179
224
|
## Orden de aplicación
|
|
180
225
|
|
|
181
|
-
1. V1 (estructura del bundle) — primero, barato.
|
|
182
|
-
2. V3 (secciones del
|
|
183
|
-
3. V2 (noise vetado) — tercero, requiere lectura del body.
|
|
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.
|
|
184
229
|
4. V4 (condicionales) — cuarto, requiere reconstruir contexto de flags + corpus.
|
|
185
230
|
5. V5 (header) — quinto.
|
|
186
231
|
6. V6 (referencias resolubles) — último.
|
|
@@ -198,23 +243,26 @@ Al final del flujo, el skill devuelve:
|
|
|
198
243
|
"ok": true,
|
|
199
244
|
"output_dir": "docs/scripts/NNN-export-scripts-YYYY-MM-DD/",
|
|
200
245
|
"files_written": [
|
|
201
|
-
"
|
|
202
|
-
"
|
|
203
|
-
"
|
|
204
|
-
"
|
|
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",
|
|
205
252
|
"..."
|
|
206
253
|
],
|
|
254
|
+
"categories_empty": ["03-DML"],
|
|
207
255
|
"themes_resolved": ["rbac", "lista-negra-blanca"],
|
|
208
256
|
"sessions_included": ["057", "058", "059", "060"],
|
|
209
257
|
"validations": {
|
|
210
|
-
"V1": { "status": "pass" },
|
|
211
|
-
"V2": { "status": "pass", "noise_hits": 0 },
|
|
258
|
+
"V1": { "status": "pass", "forbidden_artifacts": 0 },
|
|
259
|
+
"V2": { "status": "pass", "noise_hits": 0, "v3_legacy_refs": 0 },
|
|
212
260
|
"V3": { "status": "pass", "sections_found": 10 },
|
|
213
|
-
"V4": { "status": "pass", "conditionals": { "
|
|
261
|
+
"V4": { "status": "pass", "conditionals": { "mapping_tema": "presente (2 temas)", "code_scan": "ejecutado", "sesiones_abiertas": "0", "categorias_vacias": "1 (03-DML)" } },
|
|
214
262
|
"V5": { "status": "pass" },
|
|
215
263
|
"V6": { "status": "warning", "missing_refs": ["docs/decisiones/005-...md"] }
|
|
216
264
|
},
|
|
217
|
-
"summary": "Bundle escrito. 1 warning (V6) aceptado."
|
|
265
|
+
"summary": "Bundle escrito (layout v4.0.0). 1 warning (V6) aceptado."
|
|
218
266
|
}
|
|
219
267
|
```
|
|
220
268
|
|
|
@@ -224,8 +272,8 @@ Si hard-fail:
|
|
|
224
272
|
{
|
|
225
273
|
"ok": false,
|
|
226
274
|
"stage": "validation",
|
|
227
|
-
"failed_at": "
|
|
228
|
-
"details": "
|
|
275
|
+
"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.",
|
|
229
277
|
"no_files_written": true
|
|
230
278
|
}
|
|
231
279
|
```
|
|
@@ -234,9 +282,9 @@ Si hard-fail:
|
|
|
234
282
|
|
|
235
283
|
| Validación | export-arq | export-scripts |
|
|
236
284
|
|---|---|---|
|
|
237
|
-
| V1 | estructura de secciones por `--scope` | estructura del bundle (archivos + sub-dirs) |
|
|
238
|
-
| V2 | noise interno (~25 términos) | noise + placeholders
|
|
239
|
-
| V3 | secciones por scope | 10 secciones fijas del
|
|
240
|
-
| V4 | Modelo de datos + Decisiones condicionales |
|
|
241
|
-
| V5 | header con snapshot + fuentes + diagrams engine | header con rama + readiness + counts |
|
|
242
|
-
| V6 | referencias resolubles | referencias resolubles |
|
|
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) |
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sql-rollback-generator
|
|
3
|
-
description: "Genera rollback **post-hoc** desde SCRIPTS.sql consolidado (
|
|
4
|
-
version:
|
|
3
|
+
description: "Genera rollback **post-hoc** desde SCRIPTS.sql consolidado (v2.0.0 BREAKING — session093): cuando /agent-workflow:export-scripts produce el bundle, este skill emite un único archivo `00-ROLLBACK.sql` al root del bundle, encadenado cross-session en orden inverso (última sesión → primera, 04→03→02→01 dentro de cada una). NO genera `.rollback.sql` companions por sentencia ni `<session>/rollback/` per-sesión (ambos eliminados desde v2.0.0). Cubre DDL (DROP IF EXISTS), migraciones con backup en esq_audit, e inserts. Marca operaciones irreversibles (DROP COLUMN, TRUNCATE, DROP CASCADE) con header WARNING en bloque separado al final del archivo, después del `COMMIT;`."
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# SQL Rollback Generator (
|
|
7
|
+
# SQL Rollback Generator (v2.0.0 — `00-ROLLBACK.sql` único cross-session)
|
|
8
8
|
|
|
9
|
-
Generación de
|
|
9
|
+
Generación de rollback **post-hoc** desde los archivos `SCRIPTS.sql` de las sesiones incluidas en el bundle de export. Disparado por `/agent-workflow:export-scripts` v4.0.0+ al consolidar el bundle.
|
|
10
10
|
|
|
11
|
-
> **BREAKING desde
|
|
11
|
+
> **BREAKING desde v2.0.0**: este skill ya NO produce companions `.rollback.sql` por sentencia ni sub-carpetas `<session>/rollback/` per-sesión (comportamiento v1.0.0 eliminado). El output canónico es un único `00-ROLLBACK.sql` al root del bundle. Razón: el bundle se ejecuta atomic (todo o nada) — múltiples archivos rollback agregaban ruido sin valor operacional. Layouts v1.0.0 quedan como histórico; bundles generados con export-scripts v3.x no se reescriben.
|
|
12
12
|
|
|
13
13
|
## When to use
|
|
14
14
|
|
|
@@ -20,45 +20,66 @@ Generación de rollbacks **post-hoc** desde el archivo único `SCRIPTS.sql` de c
|
|
|
20
20
|
|
|
21
21
|
Reglas en `../session/references/sandbox-readonly-rules.md`. En plan mode describir estrategia por sentencia forward (sin crear `.rollback.sql`); irreversibles se anotan para revisión.
|
|
22
22
|
|
|
23
|
-
## Principios (
|
|
23
|
+
## Principios (v2.0.0)
|
|
24
24
|
|
|
25
25
|
- **Input**: `SCRIPTS.sql` de cada sesión incluida en el corpus de export, parseado vía markers `@category`/`@stmt` (ver `sql-script-organizer/references/scripts-sql-format.md`).
|
|
26
|
-
- **Output**:
|
|
27
|
-
- **
|
|
26
|
+
- **Output único**: `<bundle-root>/00-ROLLBACK.sql` — un solo archivo cross-session al root del bundle.
|
|
27
|
+
- **NO se generan** companions `.rollback.sql` por sentencia (eliminado en v2.0.0).
|
|
28
|
+
- **NO se genera** sub-carpeta `<session>/rollback/` per-sesión (eliminado en v2.0.0).
|
|
29
|
+
- **NO se genera** `rollback-global.sql` separado del root (eliminado en v2.0.0).
|
|
30
|
+
- **Orden interno**: encadenado en orden inverso global — última sesión → primera; dentro de cada sesión 04 → 03 → 02 → 01.
|
|
31
|
+
- **Estructura del archivo**:
|
|
32
|
+
- Header del archivo: corpus + fecha + sesiones cubiertas + versión del CLI.
|
|
33
|
+
- Bloque transaccional único `BEGIN; ... COMMIT;` con sub-bloques por sesión.
|
|
34
|
+
- Cada sub-bloque preserva header canónico del rollback de su sentencia (Script / Sesion / Objeto / Alcance) como comentario.
|
|
35
|
+
- Bloque final **fuera de la transacción**: "Fase 5 — Cleanup irreversible" con header `-- WARNING: IRREVERSIBLE` listando operaciones que no son revertibles automáticamente (decisión manual del operador).
|
|
28
36
|
- **Idempotencia obligatoria**: `DROP ... IF EXISTS`, `CREATE OR REPLACE`, `ON CONFLICT DO NOTHING`.
|
|
29
|
-
- **
|
|
30
|
-
- **Header del rollback** reusa el del forward (4 líneas Script/Sesion/Objeto/Alcance) con `Objeto:` describiendo la reversa.
|
|
31
|
-
- **Irreversibles** (DROP COLUMN, TRUNCATE, DROP CASCADE, datos sin backup) marcados con `-- WARNING: IRREVERSIBLE` debajo del header.
|
|
32
|
-
- **Datos**: si el forward es UPDATE/DELETE masivo sin backup, generar un `000-backup-*.sql` previo en el bundle (Categoría 03-migracion) + rollback que restaure desde `esq_audit.tb_bkp_<x>_sNNN`.
|
|
37
|
+
- **Datos**: si el forward es UPDATE/DELETE masivo sin backup, generar un `000-backup-*.sql` previo en `03-DML.sql` del bundle + el rollback que restaura desde `esq_audit.tb_bkp_<x>_sNNN` vive dentro de `00-ROLLBACK.sql`.
|
|
33
38
|
|
|
34
|
-
##
|
|
39
|
+
## Estructura del `00-ROLLBACK.sql`
|
|
35
40
|
|
|
36
|
-
|
|
41
|
+
Header global del archivo:
|
|
37
42
|
|
|
38
43
|
```sql
|
|
39
44
|
-- ============================================================================
|
|
40
|
-
-- Script:
|
|
41
|
-
--
|
|
42
|
-
--
|
|
43
|
-
--
|
|
45
|
+
-- Script: 00-ROLLBACK.sql
|
|
46
|
+
-- Bundle: NNN-export-scripts-YYYY-MM-DD
|
|
47
|
+
-- Sesiones: sNNN, sNNN, ...
|
|
48
|
+
-- Objeto: Revierte el bundle completo en orden inverso (última sesión → primera, 04→01).
|
|
49
|
+
-- Alcance: <enumeración cross-session>
|
|
44
50
|
-- ============================================================================
|
|
45
51
|
```
|
|
46
52
|
|
|
47
|
-
-
|
|
48
|
-
|
|
49
|
-
|
|
53
|
+
Sub-bloque por sentencia (dentro del `BEGIN; ... COMMIT;` único):
|
|
54
|
+
|
|
55
|
+
```sql
|
|
56
|
+
-- ----------------------------------------------------------------------------
|
|
57
|
+
-- Rollback de sesion sNNN — <categoria>: NNN-tipo-objetivo
|
|
58
|
+
-- Objeto: <resumen de la reversa>
|
|
59
|
+
-- Alcance: <mismo alcance que el forward>
|
|
60
|
+
-- ----------------------------------------------------------------------------
|
|
61
|
+
DROP TABLE IF EXISTS esq_.tb_x;
|
|
62
|
+
-- ...
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- `Objeto:` del sub-bloque describe la reversa (ej. "Repone tb_x.cod_usuario al valor de esq_audit.tb_bkp_x_sNNN").
|
|
66
|
+
- `Alcance:` repite literal el del forward.
|
|
67
|
+
|
|
68
|
+
Bloque irreversibles al final del archivo (después del `COMMIT;`, **fuera de la transacción**):
|
|
69
|
+
|
|
70
|
+
```sql
|
|
71
|
+
COMMIT;
|
|
50
72
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
```
|
|
73
|
+
-- ============================================================================
|
|
74
|
+
-- Fase 5 — Cleanup irreversible (manual)
|
|
75
|
+
-- WARNING: IRREVERSIBLE — best-effort. Ver DECISIONS.md de la sesión origen.
|
|
76
|
+
-- ============================================================================
|
|
77
|
+
-- sesion sNNN — DROP COLUMN esq_.tb_x.col_y (no hay backup automático)
|
|
78
|
+
-- sesion sMMM — TRUNCATE esq_.tb_z
|
|
79
|
+
-- ...
|
|
80
|
+
```
|
|
60
81
|
|
|
61
|
-
|
|
82
|
+
El bloque WARNING explica qué no se puede recuperar y referencia la decisión de la sesión donde se introdujo.
|
|
62
83
|
|
|
63
84
|
## Estrategias por tipo de operación
|
|
64
85
|
|
|
@@ -129,39 +150,33 @@ Protocolo:
|
|
|
129
150
|
|
|
130
151
|
Lista completa en `references/irreversible-checklist.md`.
|
|
131
152
|
|
|
132
|
-
## Layout (post-export-scripts
|
|
133
|
-
|
|
134
|
-
### Par acoplado
|
|
153
|
+
## Layout (post-export-scripts v4.0.0)
|
|
135
154
|
|
|
136
|
-
|
|
155
|
+
Output canónico — un solo archivo al root del bundle:
|
|
137
156
|
|
|
138
157
|
```
|
|
139
|
-
<docs>/scripts/NNN-export-scripts-YYYY-MM-DD/
|
|
140
|
-
|
|
141
|
-
└── 001-crea-tb-x.rollback.sql (rollback, generado por este skill)
|
|
158
|
+
<docs>/scripts/NNN-export-scripts-YYYY-MM-DD/
|
|
159
|
+
└── 00-ROLLBACK.sql # único rollback cross-session (este skill lo genera)
|
|
142
160
|
```
|
|
143
161
|
|
|
144
|
-
|
|
162
|
+
Para context: el bundle plano del export incluye además `01-DDL-TABLES.sql`, `02-DDL-FUNCTIONS.sql`, `03-DML.sql`, `04-INSERTS.sql`, `README.md` — todos al root, generados por `export-scripts` (no por este skill).
|
|
145
163
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
├── 02-ddl-funciones-rollback.sql
|
|
152
|
-
└── 01-ddl-tablas-rollback.sql
|
|
153
|
-
```
|
|
164
|
+
**No se generan** (eliminados desde v2.0.0):
|
|
165
|
+
- Companions `.rollback.sql` por sentencia.
|
|
166
|
+
- Sub-carpeta `<session>/rollback/` per-sesión.
|
|
167
|
+
- Archivo `rollback-global.sql` separado.
|
|
168
|
+
- Archivos `04-inserts-rollback.sql`, `03-migracion-rollback.sql`, etc. (categorías por separado).
|
|
154
169
|
|
|
155
|
-
|
|
170
|
+
Layouts v1.0.0 quedan como histórico en bundles ya generados (`docs/scripts/00X-export-scripts-*` previos). No se migran retroactivamente. Layouts legacy v0.x se migran con `/agent-workflow:migrate --upgrade-topology`.
|
|
156
171
|
|
|
157
|
-
## Proceso
|
|
172
|
+
## Proceso (v2.0.0)
|
|
158
173
|
|
|
159
|
-
1.
|
|
160
|
-
2.
|
|
161
|
-
3. Generar rollback
|
|
162
|
-
4.
|
|
163
|
-
5.
|
|
164
|
-
6.
|
|
174
|
+
1. Parsear todos los `SCRIPTS.sql` del corpus de export (markers `@category`/`@stmt`).
|
|
175
|
+
2. Para cada sentencia forward, clasificar el tipo y seleccionar estrategia (DDL / migración / inserts / irreversible).
|
|
176
|
+
3. Generar el bloque rollback correspondiente — sin escribir todavía a disco.
|
|
177
|
+
4. Identificar irreversibles → moverlos al bloque "Fase 5" final.
|
|
178
|
+
5. Componer el `00-ROLLBACK.sql` único con orden inverso global (última sesión → primera, 04→01) + bloque "Fase 5" al final.
|
|
179
|
+
6. Escribir el archivo único al root del bundle.
|
|
165
180
|
|
|
166
181
|
## Notas de portabilidad (PostgreSQL como motor primario)
|
|
167
182
|
|
|
@@ -176,19 +191,19 @@ Si el destino no es Postgres, indicarlo en `Objeto:` o como nota libre debajo de
|
|
|
176
191
|
|
|
177
192
|
## Graduación al cierre
|
|
178
193
|
|
|
179
|
-
|
|
194
|
+
Este skill **NO se invoca al cerrar una sesión**. La graduación de scripts de una sesión individual produce `docs/scripts/NNN-sessionXXX-nombre/` con el `SCRIPTS.sql` curado; el rollback consolidado vive **exclusivamente en el bundle de export** (`docs/scripts/NNN-export-scripts-YYYY-MM-DD/00-ROLLBACK.sql`).
|
|
180
195
|
|
|
181
|
-
## Modo release (
|
|
196
|
+
## Modo release (LEGACY — deprecation Fase 1)
|
|
182
197
|
|
|
183
|
-
`release` y `release-scripts`
|
|
198
|
+
`release` y `release-scripts` (legacy en deprecation Fase 1) consumían el algoritmo v1.0.0 (companions `.rollback.sql` + per-sesión rollback + global). Ese código y output **no se actualizan a v2.0.0**: se conserva como histórico en `references/release-rollback.md` mientras los workspaces dejan de invocarlos. El reemplazo canónico es `/agent-workflow:export-scripts` v4.0.0+ que invoca este skill en v2.0.0.
|
|
184
199
|
|
|
185
200
|
## Integración con otros skills
|
|
186
201
|
|
|
187
|
-
- **`sql-script-organizer`** — companion: organiza el
|
|
188
|
-
- **`
|
|
189
|
-
- **`release-scripts`** —
|
|
202
|
+
- **`sql-script-organizer`** — companion: organiza el `SCRIPTS.sql` por sesión que este skill consume al exportar.
|
|
203
|
+
- **`export-scripts`** v4.0.0+ — único invocador activo de este skill (genera `00-ROLLBACK.sql` único).
|
|
204
|
+
- **`release`** / **`release-scripts`** — legacy en deprecation Fase 1; consumen `references/release-rollback.md` (no se actualiza).
|
|
190
205
|
- **`coding-standards`** — reglas de estilo SQL en `database-conventions.md#estilo-de-scripts-sql`.
|
|
191
|
-
- **`session`** —
|
|
206
|
+
- **`session`** — este skill NO se invoca al cerrar una sesión individual; sólo desde export-scripts.
|
|
192
207
|
|
|
193
208
|
## Recursos adicionales
|
|
194
209
|
|
package/skills/agent-workflow/standards/sql-rollback-generator/references/release-rollback.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
# Rollback global de release y por tema
|
|
1
|
+
# Rollback global de release y por tema (LEGACY — deprecation Fase 1)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **Estado**: legacy. Aplica solo a `release` / `release-scripts` legacy (deprecation Fase 1). El reemplazo canónico es `/agent-workflow:export-scripts` v4.0.0+, que produce un único `00-ROLLBACK.sql` cross-session al root del bundle (algoritmo en `SKILL.md` v2.0.0).
|
|
4
|
+
|
|
5
|
+
Algoritmos detallados para rollbacks consolidados en modo release legacy. El SKILL.md tiene el resumen; este archivo tiene el procedimiento completo paso a paso.
|
|
4
6
|
|
|
5
7
|
## Rollback global de release (cross-session)
|
|
6
8
|
|
package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md
CHANGED
|
@@ -210,11 +210,13 @@ COMMIT;
|
|
|
210
210
|
|
|
211
211
|
---
|
|
212
212
|
|
|
213
|
-
##
|
|
213
|
+
## Bloque rollback de una sesión dentro de `00-ROLLBACK.sql`
|
|
214
214
|
|
|
215
215
|
```sql
|
|
216
|
-
--
|
|
217
|
-
--
|
|
216
|
+
-- ----------------------------------------------------------------------------
|
|
217
|
+
-- ROLLBACK de sessionXXX-[nombre] — revierte los cambios en orden inverso.
|
|
218
|
+
-- Forma parte del 00-ROLLBACK.sql cross-session del bundle.
|
|
219
|
+
-- ----------------------------------------------------------------------------
|
|
218
220
|
BEGIN;
|
|
219
221
|
|
|
220
222
|
-- Paso 4 invertido: deshacer inserts
|
|
@@ -143,27 +143,27 @@ Cada sección del cuerpo se introduce con una línea de comentario corta envuelt
|
|
|
143
143
|
|
|
144
144
|
El usuario revisa el SCRIPTS.sql periódicamente; la separación 01-04 final y la verificación de dependencias cruzadas la hace `/agent-workflow:export-scripts` post-hoc.
|
|
145
145
|
|
|
146
|
-
## Layout del bundle (post-export-scripts
|
|
146
|
+
## Layout del bundle (post-export-scripts v4.0.0)
|
|
147
147
|
|
|
148
|
-
`/agent-workflow:export-scripts` produce el bundle al ejecutarse, no este skill:
|
|
148
|
+
`/agent-workflow:export-scripts` v4.0.0+ produce el bundle al ejecutarse, no este skill. Layout plano cross-session al root:
|
|
149
149
|
|
|
150
150
|
```
|
|
151
|
-
<docs>/scripts/NNN-export-scripts-YYYY-MM-DD/
|
|
152
|
-
├──
|
|
153
|
-
├── 01-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
├──
|
|
157
|
-
├──
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
├── 04-inserts/
|
|
161
|
-
└── rollback/
|
|
162
|
-
├── 00-rollback-global.sql (encadenado 04→03→02→01)
|
|
163
|
-
└── NNN-*.rollback.sql (1 por @stmt forward)
|
|
151
|
+
<docs>/scripts/NNN-export-scripts-YYYY-MM-DD/
|
|
152
|
+
├── 00-ROLLBACK.sql (único rollback cross-session — sql-rollback-generator v2.0.0)
|
|
153
|
+
├── 01-DDL-TABLES.sql (consolidado cross-session, skip si vacío)
|
|
154
|
+
├── 02-DDL-FUNCTIONS.sql (idem)
|
|
155
|
+
├── 03-DML.sql (UPDATE/DELETE/migración + backup en esq_audit cuando aplica)
|
|
156
|
+
├── 04-INSERTS.sql (idem)
|
|
157
|
+
├── README.md (único informe + índice + how-to-execute)
|
|
158
|
+
└── por-tema/ (opt-in — capa adicional encima del root)
|
|
159
|
+
└── tema-<slug>/01-04-*.sql
|
|
164
160
|
```
|
|
165
161
|
|
|
166
|
-
|
|
162
|
+
Sentencias individuales del `SCRIPTS.sql` per-sesión se consolidan **cross-session** al archivo de su categoría — no se crea sub-carpeta por sesión.
|
|
163
|
+
|
|
164
|
+
Layout **v3.x** (`por-sesion/<sessionXXX>/01-04/*.sql + .rollback.sql` companions + per-sesión `rollback/`) ya **no se genera** desde v4.0.0. Bundles ya escritos con v3.x quedan como histórico.
|
|
165
|
+
|
|
166
|
+
Layout **legacy** pre-SCRIPTS.sql (`scripts/01-04/*.sql + .rollback.sql` directo en sesión) tampoco se genera; sesiones nuevas usan SCRIPTS.sql. Layouts legacy en sesiones cerradas se migran con `/agent-workflow:migrate --upgrade-topology`.
|
|
167
167
|
|
|
168
168
|
## Graduación al cierre (vía `/agent-workflow:release`)
|
|
169
169
|
|