@tacuchi/agent-workflow-cli 6.1.0 → 7.0.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/README.md +65 -12
- package/dist/application/profile/profile-service.d.ts +53 -0
- package/dist/application/profile/profile-service.d.ts.map +1 -0
- package/dist/application/profile/profile-service.js +210 -0
- package/dist/application/profile/profile-service.js.map +1 -0
- package/dist/application/render/history-row.d.ts.map +1 -1
- package/dist/application/render/history-row.js +5 -0
- package/dist/application/render/history-row.js.map +1 -1
- package/dist/application/self/bootstrap.js +2 -1
- package/dist/application/self/bootstrap.js.map +1 -1
- package/dist/application/self/detect-hosts.d.ts +18 -0
- package/dist/application/self/detect-hosts.d.ts.map +1 -0
- package/dist/application/self/detect-hosts.js +37 -0
- package/dist/application/self/detect-hosts.js.map +1 -0
- package/dist/application/self/install-hooks.d.ts +30 -0
- package/dist/application/self/install-hooks.d.ts.map +1 -0
- package/dist/application/self/install-hooks.js +253 -0
- package/dist/application/self/install-hooks.js.map +1 -0
- package/dist/application/self/install-skill.d.ts +2 -0
- package/dist/application/self/install-skill.d.ts.map +1 -1
- package/dist/application/self/install-skill.js +69 -3
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/session-close-service.d.ts +10 -0
- package/dist/application/session-close-service.d.ts.map +1 -1
- package/dist/application/session-close-service.js +87 -10
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/cli/commands/self.d.ts.map +1 -1
- package/dist/cli/commands/self.js +9 -1
- package/dist/cli/commands/self.js.map +1 -1
- package/dist/cli/commands/session-close.d.ts.map +1 -1
- package/dist/cli/commands/session-close.js +11 -0
- package/dist/cli/commands/session-close.js.map +1 -1
- package/dist/cli/tui/tabs/skills-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/skills-tab.js +100 -24
- package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
- package/package.json +2 -2
- package/skills/agent-workflow/commands/README.md +24 -0
- package/skills/agent-workflow/commands/agent-workflow-compact.md +24 -0
- package/skills/agent-workflow/commands/agent-workflow-doctor.md +100 -0
- package/skills/agent-workflow/commands/agent-workflow-export-arq.md +77 -0
- package/skills/agent-workflow/commands/agent-workflow-export-conclusions.md +78 -0
- package/skills/agent-workflow/commands/agent-workflow-export-plan.md +74 -0
- package/skills/agent-workflow/commands/agent-workflow-export-qa-note.md +30 -0
- package/skills/agent-workflow/commands/agent-workflow-export-report.md +78 -0
- package/skills/agent-workflow/commands/agent-workflow-export-requirement.md +30 -0
- package/skills/agent-workflow/commands/agent-workflow-export-scripts.md +92 -0
- package/skills/agent-workflow/commands/agent-workflow-export-tech-manuals.md +75 -0
- package/skills/agent-workflow/commands/agent-workflow-export-tech-note.md +30 -0
- package/skills/agent-workflow/commands/agent-workflow-hub-init.md +82 -0
- package/skills/agent-workflow/commands/agent-workflow-migrate.md +56 -0
- package/skills/agent-workflow/commands/agent-workflow-project-init.md +60 -0
- package/skills/agent-workflow/commands/agent-workflow-resume.md +22 -0
- package/skills/agent-workflow/commands/agent-workflow-rules.md +40 -0
- package/skills/agent-workflow/commands/agent-workflow-session.md +35 -0
- package/skills/agent-workflow/doctrine/README.md +15 -0
- package/skills/agent-workflow/doctrine/compact/SKILL.md +145 -0
- package/skills/agent-workflow/doctrine/doctor/SKILL.md +86 -0
- package/skills/agent-workflow/doctrine/doctor/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/doctrine/hub-init/SKILL.md +157 -0
- package/skills/agent-workflow/doctrine/hub-init/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/doctrine/hub-init/references/multiroot-manual.md +51 -0
- package/skills/agent-workflow/doctrine/implement/SKILL.md +290 -0
- package/skills/agent-workflow/doctrine/implement/references/branch-verification.md +16 -0
- package/skills/agent-workflow/doctrine/implement/references/design-md-template.md +108 -0
- package/skills/agent-workflow/doctrine/implement/references/rollback-guide.md +81 -0
- package/skills/agent-workflow/doctrine/migrate/SKILL.md +281 -0
- package/skills/agent-workflow/doctrine/migrate/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/doctrine/project-init/SKILL.md +100 -0
- package/skills/agent-workflow/doctrine/project-init/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/doctrine/refactor/SKILL.md +208 -0
- package/skills/agent-workflow/doctrine/refactor/references/refactor-md-template.md +108 -0
- package/skills/agent-workflow/doctrine/refactor/references/strangler-checklist.md +116 -0
- package/skills/agent-workflow/doctrine/resume/SKILL.md +199 -0
- package/skills/agent-workflow/doctrine/rules/SKILL.md +224 -0
- package/skills/agent-workflow/doctrine/rules/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/doctrine/session/SKILL.md +383 -0
- package/skills/agent-workflow/doctrine/session/references/auto-plan-rules.md +63 -0
- package/skills/agent-workflow/doctrine/session/references/backlog-template.md +95 -0
- package/skills/agent-workflow/doctrine/session/references/branch-verification.md +198 -0
- package/skills/agent-workflow/doctrine/session/references/commits-policy.md +111 -0
- package/skills/agent-workflow/doctrine/session/references/communication-style.md +50 -0
- package/skills/agent-workflow/doctrine/session/references/graduacion-routing.md +88 -0
- package/skills/agent-workflow/doctrine/session/references/lifecycle-deep.md +160 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/C1-specialty-selection.md +11 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/C2-cost-guard.md +14 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M1-closure-commit-prompt.md +104 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M10-next-step.md +17 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M11-context.md +16 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M2-branch-caso-A.md +14 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M3-branch-caso-C.md +33 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M4-cross-source-hard-gate.md +33 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M5-modality-analyze.md +15 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M6-phase-gate.md +31 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M7-refactor-legacy-detected.md +28 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M8-refactor-cleanup.md +16 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M9-contract-review.md +39 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S1-type-design.md +15 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S2-topic-change-detection.md +14 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S3-flow-detection.md +28 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S4-resume.md +27 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S5-post-compact.md +17 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S6-scope.md +16 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S7-design-review.md +37 -0
- package/skills/agent-workflow/doctrine/session/references/prompts-catalog.md +210 -0
- package/skills/agent-workflow/doctrine/session/references/sandbox-readonly-rules.md +82 -0
- package/skills/agent-workflow/doctrine/session/references/specialty-decision-tree.md +56 -0
- package/skills/agent-workflow/doctrine/session/references/topic-change-rules.md +67 -0
- package/skills/agent-workflow/exports/README.md +15 -0
- package/skills/agent-workflow/exports/export-arq/SKILL.md +229 -0
- package/skills/agent-workflow/exports/export-arq/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/exports/export-arq/references/lexico-tecnico.md +94 -0
- package/skills/agent-workflow/exports/export-arq/references/template-c4.md +293 -0
- package/skills/agent-workflow/exports/export-arq/references/template-plantuml.puml +77 -0
- package/skills/agent-workflow/exports/export-arq/references/template-structurizr.dsl +72 -0
- package/skills/agent-workflow/exports/export-arq/references/validations.md +231 -0
- package/skills/agent-workflow/exports/export-conclusions/SKILL.md +169 -0
- package/skills/agent-workflow/exports/export-conclusions/references/dedup-rules.md +154 -0
- package/skills/agent-workflow/exports/export-conclusions/references/template-conclusions.md +158 -0
- package/skills/agent-workflow/exports/export-plan/SKILL.md +225 -0
- package/skills/agent-workflow/exports/export-plan/references/state-transitions.md +141 -0
- package/skills/agent-workflow/exports/export-plan/references/template-plan.md +132 -0
- package/skills/agent-workflow/exports/export-qa-note/SKILL.md +31 -0
- package/skills/agent-workflow/exports/export-report/SKILL.md +262 -0
- package/skills/agent-workflow/exports/export-report/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/exports/export-report/references/lexico.md +174 -0
- package/skills/agent-workflow/exports/export-report/references/template-a.md +95 -0
- package/skills/agent-workflow/exports/export-report/references/template-b.md +221 -0
- package/skills/agent-workflow/exports/export-report/references/template-c.md +180 -0
- package/skills/agent-workflow/exports/export-report/references/validations.md +255 -0
- package/skills/agent-workflow/exports/export-requirement/SKILL.md +31 -0
- package/skills/agent-workflow/exports/export-scripts/SKILL.md +324 -0
- package/skills/agent-workflow/exports/export-scripts/references/code-scan-recommendations.md +83 -0
- package/skills/agent-workflow/exports/export-scripts/references/deprecation-plan.md +80 -0
- package/skills/agent-workflow/exports/export-scripts/references/lexico-tecnico.md +80 -0
- package/skills/agent-workflow/exports/export-scripts/references/manifest-template.md +253 -0
- package/skills/agent-workflow/exports/export-scripts/references/readme-template.md +79 -0
- package/skills/agent-workflow/exports/export-scripts/references/theme-handling.md +168 -0
- package/skills/agent-workflow/exports/export-scripts/references/validations.md +242 -0
- package/skills/agent-workflow/exports/export-tech-manuals/SKILL.md +214 -0
- package/skills/agent-workflow/exports/export-tech-manuals/references/lexico-tecnico.md +97 -0
- package/skills/agent-workflow/exports/export-tech-manuals/references/template-index.md +123 -0
- package/skills/agent-workflow/exports/export-tech-manuals/references/template-manual.md +143 -0
- package/skills/agent-workflow/exports/export-tech-manuals/references/validations.md +211 -0
- package/skills/agent-workflow/exports/export-tech-note/SKILL.md +31 -0
- package/skills/agent-workflow/hooks/README.md +15 -0
- package/skills/agent-workflow/hooks/hooks.template.json +90 -0
- package/skills/agent-workflow/references/README.md +12 -0
- package/skills/agent-workflow/references/legacy-anchors.md +50 -0
- package/skills/agent-workflow/references/profile-parametrization.md +88 -0
- package/skills/agent-workflow/specialties/README.md +14 -0
- package/skills/agent-workflow/specialties/analyze-conclude/SKILL.md +175 -0
- package/skills/agent-workflow/specialties/analyze-conclude/references/incident-classification.md +61 -0
- package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md +148 -0
- package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/specialties/analyze-investigate/references/cost-guard.md +85 -0
- package/skills/agent-workflow/specialties/analyze-synthesize/SKILL.md +127 -0
- package/skills/agent-workflow/specialties/design-brief/SKILL.md +90 -0
- package/skills/agent-workflow/specialties/design-deliver/SKILL.md +121 -0
- package/skills/agent-workflow/specialties/design-develop/SKILL.md +115 -0
- package/skills/agent-workflow/specialties/design-discover/SKILL.md +103 -0
- package/skills/agent-workflow/standards/README.md +12 -0
- package/skills/agent-workflow/standards/coding-standards/SKILL.md +102 -0
- package/skills/agent-workflow/standards/coding-standards/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/standards/coding-standards/references/angular-typescript.md +266 -0
- package/skills/agent-workflow/standards/coding-standards/references/database-conventions.md +170 -0
- package/skills/agent-workflow/standards/coding-standards/references/fe-be-integration.md +300 -0
- package/skills/agent-workflow/standards/coding-standards/references/frontend-structure.md +182 -0
- package/skills/agent-workflow/standards/coding-standards/references/java-spring.md +244 -0
- package/skills/agent-workflow/standards/coding-standards/references/project-structure.md +197 -0
- package/skills/agent-workflow/standards/frontend-design/SKILL.md +62 -0
- package/skills/agent-workflow/standards/frontend-design/references/feedback-toasts-patterns.md +249 -0
- package/skills/agent-workflow/standards/frontend-design/references/form-patterns.md +278 -0
- package/skills/agent-workflow/standards/frontend-design/references/list-patterns.md +256 -0
- package/skills/agent-workflow/standards/frontend-design/references/modal-patterns.md +220 -0
- package/skills/agent-workflow/standards/frontend-design/references/navigation-patterns.md +224 -0
- package/skills/agent-workflow/standards/redaccion-simple/SKILL.md +128 -0
- package/skills/agent-workflow/standards/sql-rollback-generator/SKILL.md +197 -0
- package/skills/agent-workflow/standards/sql-rollback-generator/references/irreversible-checklist.md +161 -0
- package/skills/agent-workflow/standards/sql-rollback-generator/references/release-rollback.md +131 -0
- package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md +255 -0
- package/skills/agent-workflow/standards/sql-script-organizer/SKILL.md +244 -0
- package/skills/agent-workflow/standards/sql-script-organizer/references/bundle-readme-template.md +82 -0
- package/skills/agent-workflow/standards/sql-script-organizer/references/categorization-rules.md +122 -0
- package/skills/agent-workflow/standards/sql-script-organizer/references/consolidation-cross-session.md +125 -0
- package/skills/agent-workflow/standards/sql-script-organizer/references/scripts-sql-format.md +140 -0
- package/skills/agent-workflow/standards/testing-strategy/SKILL.md +113 -0
- package/skills/agent-workflow/standards/testing-strategy/references/test-levels.md +255 -0
- package/skills/agent-workflow/workflows/README.md +12 -0
- package/skills/agent-workflow/workflows/analyze-workflow/SKILL.md +107 -0
- package/skills/agent-workflow/workflows/design-workflow/SKILL.md +100 -0
- package/skills/agent-workflow/workflows/dev-workflow/SKILL.md +195 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# SCRIPTS.sql — spec canónica del archivo
|
|
2
|
+
|
|
3
|
+
Spec del archivo único `SCRIPTS.sql` que vive en `.workflow/sessions/<folder>/` desde `sql-script-organizer` v1.0.0 (decisión F-D + G1 de session062).
|
|
4
|
+
|
|
5
|
+
## Path canónico
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
.workflow/sessions/sessionXXX-<flow>-<slug>/SCRIPTS.sql
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
- Filename: **SCRIPTS.sql** en mayúsculas (uppercase EN, igual que CHECKPOINT.md, TASKS.md, etc.).
|
|
12
|
+
- Encoding: UTF-8 sin BOM.
|
|
13
|
+
- Line endings: LF.
|
|
14
|
+
|
|
15
|
+
## Estructura del archivo
|
|
16
|
+
|
|
17
|
+
```sql
|
|
18
|
+
-- ============================================================================
|
|
19
|
+
-- SCRIPTS.sql — sessionXXX-<flow>-<slug>
|
|
20
|
+
-- ============================================================================
|
|
21
|
+
-- Consolida todas las sentencias SQL aplicadas durante esta sesión.
|
|
22
|
+
-- Markers @category y @stmt los lee /agent-workflow:export-scripts para separar el bundle.
|
|
23
|
+
-- ----------------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
BEGIN;
|
|
26
|
+
|
|
27
|
+
-- @category: 01-ddl-tablas
|
|
28
|
+
-- @stmt: 001-crear-tabla-usuarios
|
|
29
|
+
CREATE TABLE IF NOT EXISTS esq_credito.tb_usuarios (
|
|
30
|
+
id BIGSERIAL PRIMARY KEY,
|
|
31
|
+
cod_usuario VARCHAR(20) NOT NULL UNIQUE,
|
|
32
|
+
estado CHAR(1) NOT NULL DEFAULT 'A'
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
-- @category: 02-ddl-funciones
|
|
36
|
+
-- @stmt: 002-fn-obtener-usuario
|
|
37
|
+
CREATE OR REPLACE FUNCTION esq_credito.fn_obtener_usuario(p_cod VARCHAR)
|
|
38
|
+
RETURNS TABLE(...)
|
|
39
|
+
LANGUAGE plpgsql AS $$
|
|
40
|
+
BEGIN
|
|
41
|
+
...
|
|
42
|
+
END;
|
|
43
|
+
$$;
|
|
44
|
+
|
|
45
|
+
-- @category: 04-inserts
|
|
46
|
+
-- @stmt: 003-insert-usuarios-seed
|
|
47
|
+
INSERT INTO esq_credito.tb_usuarios (cod_usuario, estado)
|
|
48
|
+
VALUES ('admin', 'A'), ('soporte', 'A')
|
|
49
|
+
ON CONFLICT (cod_usuario) DO NOTHING;
|
|
50
|
+
|
|
51
|
+
COMMIT;
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Markers
|
|
55
|
+
|
|
56
|
+
### `@category` — obligatorio
|
|
57
|
+
|
|
58
|
+
Clasifica la sentencia para la separación post-hoc en el bundle export-scripts:
|
|
59
|
+
|
|
60
|
+
| Marker | Patrones de detección |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `01-ddl-tablas` | `CREATE TABLE`, `DROP TABLE`, `ALTER TABLE`, `CREATE INDEX`, `CREATE SEQUENCE` |
|
|
63
|
+
| `02-ddl-funciones` | `CREATE [OR REPLACE] FUNCTION`, `CREATE [OR REPLACE] PROCEDURE`, `DROP FUNCTION`, `DROP PROCEDURE` |
|
|
64
|
+
| `03-migracion` | `UPDATE`, `INSERT ... SELECT ...`, `DELETE` sobre datos existentes |
|
|
65
|
+
| `04-inserts` | `INSERT INTO ... VALUES`, seeds de catálogos, datos de configuración inicial |
|
|
66
|
+
|
|
67
|
+
Valor exacto, lowercase. Una categoría por marker (no listas).
|
|
68
|
+
|
|
69
|
+
### `@stmt` — obligatorio
|
|
70
|
+
|
|
71
|
+
Slug determinístico para que `export-scripts` derive el filename del archivo separado:
|
|
72
|
+
|
|
73
|
+
- Formato: `NNN-verbo-objetivo` (3 dígitos + kebab-case, ≤5 palabras útiles).
|
|
74
|
+
- Único dentro del SCRIPTS.sql.
|
|
75
|
+
- Orden cronológico recomendado pero NO requerido (export-scripts ordena por categoría al separar).
|
|
76
|
+
- Ejemplo: `001-crear-tabla-usuarios`, `015-poblar-catalogo-roles`.
|
|
77
|
+
|
|
78
|
+
### `@objeto` y `@alcance` — opcionales
|
|
79
|
+
|
|
80
|
+
Si la sentencia merece doc:
|
|
81
|
+
|
|
82
|
+
```sql
|
|
83
|
+
-- @category: 01-ddl-tablas
|
|
84
|
+
-- @stmt: 001-crear-tabla-usuarios
|
|
85
|
+
-- @objeto: Tabla central de identidades. UNIQUE en cod_usuario.
|
|
86
|
+
-- @alcance: solo esq_credito; trigger de auditoría en sesión separada.
|
|
87
|
+
CREATE TABLE ...
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`export-scripts` usa estos al generar el header canónico del archivo separado.
|
|
91
|
+
|
|
92
|
+
## Reglas de idempotencia
|
|
93
|
+
|
|
94
|
+
Cada sentencia debe ser idempotente:
|
|
95
|
+
|
|
96
|
+
- **DDL**: `CREATE TABLE IF NOT EXISTS`, `DROP ... IF EXISTS`, `CREATE OR REPLACE`.
|
|
97
|
+
- **Inserts**: `ON CONFLICT (...) DO NOTHING` o `ON CONFLICT DO UPDATE`.
|
|
98
|
+
- **Migraciones de datos**: backup en `esq_audit.tb_bkp_<x>_sNNN` antes de UPDATE/DELETE masivo; ver `sql-rollback-generator` para política.
|
|
99
|
+
- **Funciones**: `CREATE OR REPLACE FUNCTION` siempre.
|
|
100
|
+
|
|
101
|
+
Re-ejecutar el archivo completo no debe fallar.
|
|
102
|
+
|
|
103
|
+
## Transaccionalidad
|
|
104
|
+
|
|
105
|
+
`BEGIN;` al inicio del archivo, `COMMIT;` al final. **Una sola transacción** global por sesión.
|
|
106
|
+
|
|
107
|
+
Si una sentencia requiere transacción aparte (ej. `CREATE INDEX CONCURRENTLY`), comentar con `-- @transaction: none` y mover fuera del BEGIN/COMMIT global. Casos raros; documentar.
|
|
108
|
+
|
|
109
|
+
## Concatenación con sessions previas
|
|
110
|
+
|
|
111
|
+
`SCRIPTS.sql` representa **lo que esta sesión cambia**. NO incluye:
|
|
112
|
+
- Scripts heredados de sesiones previas (esos ya viven en sus propios SCRIPTS.sql).
|
|
113
|
+
- Scripts del baseline del workspace.
|
|
114
|
+
|
|
115
|
+
`export-scripts` con `--sessions NNN,MMM` combina varios SCRIPTS.sql en el bundle final.
|
|
116
|
+
|
|
117
|
+
## Edición durante la sesión
|
|
118
|
+
|
|
119
|
+
Permitido:
|
|
120
|
+
- Append de nuevas sentencias al final (antes del COMMIT).
|
|
121
|
+
- Editar sentencias existentes para corregir (preservar `@stmt` del statement; el slug es estable).
|
|
122
|
+
- Eliminar sentencias descartadas (no preservar history en backlog SQL; usar `BACKLOG.md` para anotar lo descartado).
|
|
123
|
+
|
|
124
|
+
No permitido:
|
|
125
|
+
- Reordenar sentencias por estética (orden = cronológico). Si el orden de ejecución importa, dejarlo al separador post-hoc.
|
|
126
|
+
- Mezclar 2 sentencias en un solo bloque marker (un `@stmt` = una sentencia).
|
|
127
|
+
|
|
128
|
+
## Verificación pre-cierre
|
|
129
|
+
|
|
130
|
+
Antes de cerrar la sesión:
|
|
131
|
+
1. `agent-workflow session-artifacts --code NNN` reporta `scripts_sql_present: true` (si esperabas SQL).
|
|
132
|
+
2. El archivo abre con `BEGIN;` y cierra con `COMMIT;`.
|
|
133
|
+
3. Cada sentencia tiene `@category` y `@stmt`.
|
|
134
|
+
4. Re-ejecutar el archivo en cert no falla (manual; el AI nunca ejecuta).
|
|
135
|
+
|
|
136
|
+
## Migración desde layout legacy
|
|
137
|
+
|
|
138
|
+
Si la sesión tiene `scripts/01-ddl-tablas/*.sql` etc. (layout pre-v1.0.0), invocar `/agent-workflow:migrate --upgrade-topology`. El skill `migrate` lee los archivos en orden 01→04, concatena en SCRIPTS.sql con markers `@category` derivado de la carpeta y `@stmt` del filename original. Idempotente: si ya existe SCRIPTS.sql, no sobreescribe.
|
|
139
|
+
|
|
140
|
+
Ver `agent-workflow/skills/migrate/SKILL.md` capability 11.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing-strategy
|
|
3
|
+
description: Skill de referencia para la estrategia de testing (selección de niveles unit/integración/e2e, comandos de ejecución por stack). Invocado internamente por el skill session durante la Fase 4 (validación). No se activa por lenguaje natural.
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Testing Strategy
|
|
8
|
+
|
|
9
|
+
Gestión de niveles de prueba flexibles dentro de sesiones de desarrollo. El usuario elige el nivel en cualquier momento y puede cambiarlo durante la sesión. Los niveles se adaptan al stack detectado del proyecto.
|
|
10
|
+
|
|
11
|
+
## Regla de ejecución
|
|
12
|
+
|
|
13
|
+
Por defecto, no ejecutar pruebas automáticamente. Primero preguntar si:
|
|
14
|
+
- el usuario quiere que el plugin las ejecute
|
|
15
|
+
- el usuario las correrá manualmente
|
|
16
|
+
- no hace falta correrlas en esta sesión
|
|
17
|
+
|
|
18
|
+
(Salvo `Validation mode: auto` en `~/.workflow/user-config.md`.)
|
|
19
|
+
|
|
20
|
+
## Niveles de prueba — Backend (Spring Boot / Java)
|
|
21
|
+
|
|
22
|
+
### Nivel a) Unitarios
|
|
23
|
+
- **Framework:** JUnit 5 + Mockito
|
|
24
|
+
- **Alcance:** Lógica de negocio aislada (services, utils, mappers)
|
|
25
|
+
- **Cuándo usarlo:** Fix rápido, cambio puntual, lógica sin dependencias externas
|
|
26
|
+
- **Comando:** `./mvnw test -Dtest=ClaseTest` (Windows: `mvnw.cmd test`)
|
|
27
|
+
|
|
28
|
+
### Nivel b) Unitarios + API
|
|
29
|
+
- **Framework:** JUnit 5 + Mockito + MockMvc
|
|
30
|
+
- **Alcance:** Nivel a) + Controllers (endpoints REST)
|
|
31
|
+
- **Cuándo usarlo:** Endpoint nuevo o modificado
|
|
32
|
+
- **Comando:** `./mvnw test`
|
|
33
|
+
|
|
34
|
+
### Nivel c) Completo
|
|
35
|
+
- **Framework:** JUnit 5 + Mockito + MockMvc + @SpringBootTest
|
|
36
|
+
- **Alcance:** Nivel b) + Tests de integración con contexto Spring completo
|
|
37
|
+
- **Cuándo usarlo:** Feature completa, flujo crítico, integración entre capas
|
|
38
|
+
- **Comando:** `./mvnw verify`
|
|
39
|
+
|
|
40
|
+
## Niveles de prueba — Frontend (Angular)
|
|
41
|
+
|
|
42
|
+
### Nivel a) Unitarios
|
|
43
|
+
- **Framework:** Jasmine + Karma (o Jest según config)
|
|
44
|
+
- **Alcance:** Services, pipes, utils aislados
|
|
45
|
+
- **Comando:** `ng test --watch=false`
|
|
46
|
+
|
|
47
|
+
### Nivel b) Unitarios + Componentes
|
|
48
|
+
- **Framework:** Jasmine + TestBed + ComponentFixture
|
|
49
|
+
- **Alcance:** Nivel a) + componentes con template rendering
|
|
50
|
+
- **Comando:** `ng test --watch=false`
|
|
51
|
+
|
|
52
|
+
### Nivel c) Completo
|
|
53
|
+
- **Framework:** Nivel b) + tests e2e (Cypress/Playwright si está configurado)
|
|
54
|
+
- **Alcance:** Flujos completos de usuario
|
|
55
|
+
- **Comando:** `npm run e2e` o según configuración del proyecto
|
|
56
|
+
|
|
57
|
+
## Selección de nivel
|
|
58
|
+
|
|
59
|
+
Preguntar al usuario solo cuando realmente se vaya a validar desde el plugin. Adaptar las opciones al stack:
|
|
60
|
+
|
|
61
|
+
**Backend:**
|
|
62
|
+
```
|
|
63
|
+
¿Qué nivel de pruebas aplicamos?
|
|
64
|
+
a) Unitarios — JUnit 5 + Mockito (rápido)
|
|
65
|
+
b) Unitarios + API — + MockMvc controllers
|
|
66
|
+
c) Completo — + @SpringBootTest integración
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Frontend:**
|
|
70
|
+
```
|
|
71
|
+
¿Qué nivel de pruebas aplicamos?
|
|
72
|
+
a) Unitarios — Services y pipes aislados
|
|
73
|
+
b) Unitarios + Componentes — + TestBed rendering
|
|
74
|
+
c) Completo — + e2e si está configurado
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
El usuario puede cambiar de nivel en cualquier momento o decidir no ejecutar pruebas desde el plugin.
|
|
78
|
+
|
|
79
|
+
## Convenciones de nomenclatura
|
|
80
|
+
|
|
81
|
+
**Java:** Clase `[Objetivo]Test.java`, método `[metodo]_[escenario]_[resultado]`. Estructura Arrange-Act-Assert.
|
|
82
|
+
**Angular:** Archivo `[nombre].spec.ts`, bloques `describe`/`it`. Usar TestBed para componentes.
|
|
83
|
+
|
|
84
|
+
Para ejemplos completos de código, consultar `references/test-levels.md`.
|
|
85
|
+
|
|
86
|
+
## Ejecución y registro
|
|
87
|
+
|
|
88
|
+
1. Confirmar primero que el usuario quiere ejecución desde el plugin
|
|
89
|
+
2. Ejecutar el comando según stack y nivel
|
|
90
|
+
3. Registrar en `TEST_LOG.md` solo si el usuario pidió registro formal o la ejecución se hizo desde el plugin
|
|
91
|
+
4. Si el usuario ya validó manualmente, no repetir por defecto; anotar una línea breve solo si aporta trazabilidad
|
|
92
|
+
5. Si hay fallos y el usuario quiere continuar, corregir y re-ejecutar
|
|
93
|
+
|
|
94
|
+
## Detección automática de comando
|
|
95
|
+
|
|
96
|
+
1. `mvnw`/`mvnw.cmd` → `./mvnw test` (nunca `mvn` directo)
|
|
97
|
+
2. `gradlew` → `./gradlew test`
|
|
98
|
+
3. `angular.json` → `ng test --watch=false`
|
|
99
|
+
4. `package.json` con script test → `npm test`
|
|
100
|
+
5. Si el bloque `AW-PROJECT → Stack` declara un override de build o wrapper distinto, usarlo.
|
|
101
|
+
|
|
102
|
+
## Sandbox read-only
|
|
103
|
+
|
|
104
|
+
Canon universal en `../session/references/sandbox-readonly-rules.md`. Esta skill es read-only por diseño — selecciona niveles de test y resuelve comandos por stack, no ejecuta tests ni edita código fuente.
|
|
105
|
+
|
|
106
|
+
En plan mode: describir en el plan file qué niveles aplicarían (unit / integración / e2e), el comando resuelto (`./mvnw test`, `ng test --watch=false`, `npm test`, etc.) y los refs de ejemplos por stack. NO ejecuta `Bash` con el test runner, NO escribe TEST_LOG.md ni código de tests por sí misma.
|
|
107
|
+
|
|
108
|
+
Compatible con plan mode sin restricciones adicionales.
|
|
109
|
+
|
|
110
|
+
## Recursos adicionales
|
|
111
|
+
|
|
112
|
+
### Archivos de referencia
|
|
113
|
+
- **`references/test-levels.md`** — Ejemplos completos de código por stack y nivel, patrones TestBuilder, resumen de comandos
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Niveles de test — Referencia completa
|
|
2
|
+
|
|
3
|
+
## Backend (Spring Boot / Java)
|
|
4
|
+
|
|
5
|
+
### Nivel a) Unitarios — Ejemplo completo
|
|
6
|
+
|
|
7
|
+
```java
|
|
8
|
+
@ExtendWith(MockitoExtension.class)
|
|
9
|
+
class NotificacionServiceTest {
|
|
10
|
+
|
|
11
|
+
@Mock
|
|
12
|
+
private EmailProvider emailProvider;
|
|
13
|
+
|
|
14
|
+
@Mock
|
|
15
|
+
private NotificacionRepository repository;
|
|
16
|
+
|
|
17
|
+
private NotificacionService service;
|
|
18
|
+
|
|
19
|
+
@BeforeEach
|
|
20
|
+
void setUp() {
|
|
21
|
+
// Constructor Injection (mismo patrón que producción)
|
|
22
|
+
service = new NotificacionService(emailProvider, repository);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@Test
|
|
26
|
+
void enviar_conEmailValido_retornaExito() {
|
|
27
|
+
// Arrange — record como DTO
|
|
28
|
+
var request = new NotificacionRequest("user@example.com", "Aprobación", "aprobacion", Map.of());
|
|
29
|
+
when(emailProvider.send(any())).thenReturn(true);
|
|
30
|
+
|
|
31
|
+
// Act
|
|
32
|
+
var resultado = service.enviar(request);
|
|
33
|
+
|
|
34
|
+
// Assert
|
|
35
|
+
assertThat(resultado).isTrue();
|
|
36
|
+
verify(emailProvider).send(any());
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@Test
|
|
40
|
+
void enviar_sinDestinatario_lanzaBadRequest() {
|
|
41
|
+
var request = new NotificacionRequest(null, "Asunto", "template", Map.of());
|
|
42
|
+
|
|
43
|
+
assertThatThrownBy(() -> service.enviar(request))
|
|
44
|
+
.isInstanceOf(BadRequestException.class)
|
|
45
|
+
.hasMessageContaining("destinatario");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@Test
|
|
49
|
+
void enviar_proveedorFalla_registraError() {
|
|
50
|
+
var request = new NotificacionRequest("user@example.com", "Asunto", "template", Map.of());
|
|
51
|
+
when(emailProvider.send(any())).thenThrow(new RuntimeException("SMTP error"));
|
|
52
|
+
|
|
53
|
+
var resultado = service.enviar(request);
|
|
54
|
+
|
|
55
|
+
assertThat(resultado).isFalse();
|
|
56
|
+
verify(repository).guardarLog(any());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Ejecutar con: `./mvnw test -Dtest=NotificacionServiceTest` (Windows: `mvnw.cmd test`)
|
|
62
|
+
|
|
63
|
+
### Nivel b) Unitarios + API — Ejemplo MockMvc
|
|
64
|
+
|
|
65
|
+
```java
|
|
66
|
+
@WebMvcTest(NotificacionController.class)
|
|
67
|
+
class NotificacionControllerTest {
|
|
68
|
+
|
|
69
|
+
@Autowired
|
|
70
|
+
private MockMvc mockMvc;
|
|
71
|
+
|
|
72
|
+
@MockBean
|
|
73
|
+
private NotificacionService service;
|
|
74
|
+
|
|
75
|
+
@Test
|
|
76
|
+
void enviar_conDatosValidos_retorna200() throws Exception {
|
|
77
|
+
when(service.enviar(any())).thenReturn(true);
|
|
78
|
+
|
|
79
|
+
// Request body usa record NotificacionRequest
|
|
80
|
+
mockMvc.perform(post("/api/v1/notificaciones/enviar")
|
|
81
|
+
.contentType(MediaType.APPLICATION_JSON)
|
|
82
|
+
.content("{\"destinatario\":\"user@example.com\",\"asunto\":\"Test\",\"templateId\":\"aprobacion\"}"))
|
|
83
|
+
.andExpect(status().isOk());
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@Test
|
|
87
|
+
void enviar_sinBody_retorna400() throws Exception {
|
|
88
|
+
mockMvc.perform(post("/api/v1/notificaciones/enviar")
|
|
89
|
+
.contentType(MediaType.APPLICATION_JSON))
|
|
90
|
+
.andExpect(status().isBadRequest());
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Ejecutar con: `./mvnw test`
|
|
96
|
+
|
|
97
|
+
### Nivel c) Completo — Ejemplo @SpringBootTest
|
|
98
|
+
|
|
99
|
+
```java
|
|
100
|
+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
|
101
|
+
@AutoConfigureMockMvc
|
|
102
|
+
@Transactional
|
|
103
|
+
class NotificacionIntegrationTest {
|
|
104
|
+
|
|
105
|
+
@Autowired
|
|
106
|
+
private MockMvc mockMvc;
|
|
107
|
+
|
|
108
|
+
@Autowired
|
|
109
|
+
private NotificacionRepository repository;
|
|
110
|
+
|
|
111
|
+
@Test
|
|
112
|
+
void flujoCompleto_enviarYRegistrar_persisteLog() throws Exception {
|
|
113
|
+
mockMvc.perform(post("/api/v1/notificaciones/enviar")
|
|
114
|
+
.contentType(MediaType.APPLICATION_JSON)
|
|
115
|
+
.content("{\"destinatario\":\"user@example.com\",\"asunto\":\"Test\"}"))
|
|
116
|
+
.andExpect(status().isOk());
|
|
117
|
+
|
|
118
|
+
var logs = repository.findByDestinatario("user@example.com");
|
|
119
|
+
assertThat(logs).isNotEmpty();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Ejecutar con: `./mvnw verify`
|
|
125
|
+
|
|
126
|
+
## Frontend (Angular)
|
|
127
|
+
|
|
128
|
+
### Nivel a) Unitarios — Service aislado
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
describe('AuthService', () => {
|
|
132
|
+
let service: AuthService;
|
|
133
|
+
let httpMock: HttpTestingController;
|
|
134
|
+
|
|
135
|
+
beforeEach(() => {
|
|
136
|
+
TestBed.configureTestingModule({
|
|
137
|
+
imports: [HttpClientTestingModule],
|
|
138
|
+
providers: [AuthService]
|
|
139
|
+
});
|
|
140
|
+
service = TestBed.inject(AuthService);
|
|
141
|
+
httpMock = TestBed.inject(HttpTestingController);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
afterEach(() => httpMock.verify());
|
|
145
|
+
|
|
146
|
+
it('should return token on login', () => {
|
|
147
|
+
service.login('admin', 'pass').subscribe(res => {
|
|
148
|
+
expect(res.token).toBeTruthy();
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
const req = httpMock.expectOne('/api/auth/login');
|
|
152
|
+
req.flush({ token: 'abc123' });
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
it('should handle login error', () => {
|
|
156
|
+
service.login('bad', 'creds').subscribe({
|
|
157
|
+
error: err => expect(err.status).toBe(401)
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
const req = httpMock.expectOne('/api/auth/login');
|
|
161
|
+
req.flush('Unauthorized', { status: 401, statusText: 'Unauthorized' });
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Ejecutar con: `ng test --watch=false`
|
|
167
|
+
|
|
168
|
+
### Nivel b) Unitarios + Componentes — TestBed
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
describe('FiltrosComponent', () => {
|
|
172
|
+
let component: FiltrosComponent;
|
|
173
|
+
let fixture: ComponentFixture<FiltrosComponent>;
|
|
174
|
+
|
|
175
|
+
beforeEach(async () => {
|
|
176
|
+
await TestBed.configureTestingModule({
|
|
177
|
+
imports: [FiltrosComponent, NoopAnimationsModule]
|
|
178
|
+
}).compileComponents();
|
|
179
|
+
fixture = TestBed.createComponent(FiltrosComponent);
|
|
180
|
+
component = fixture.componentInstance;
|
|
181
|
+
fixture.detectChanges();
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('should create', () => {
|
|
185
|
+
expect(component).toBeTruthy();
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it('should render date inputs', () => {
|
|
189
|
+
const compiled = fixture.nativeElement;
|
|
190
|
+
expect(compiled.querySelector('input[type="date"]')).toBeTruthy();
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it('should emit on filter apply', () => {
|
|
194
|
+
spyOn(component.filtroChanged, 'emit');
|
|
195
|
+
component.filtroForm.patchValue({ estado: 'ACTIVO' });
|
|
196
|
+
component.aplicarFiltro();
|
|
197
|
+
expect(component.filtroChanged.emit).toHaveBeenCalledWith(
|
|
198
|
+
jasmine.objectContaining({ estado: 'ACTIVO' })
|
|
199
|
+
);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## TestBuilder — Patrón (Java)
|
|
205
|
+
|
|
206
|
+
```java
|
|
207
|
+
public class NotificacionTestBuilder {
|
|
208
|
+
private Long id = 1L;
|
|
209
|
+
private String destinatario = "test@example.com";
|
|
210
|
+
private String asunto = "Test";
|
|
211
|
+
private String estado = "PENDIENTE";
|
|
212
|
+
private LocalDateTime fechaCreacion = LocalDateTime.now();
|
|
213
|
+
|
|
214
|
+
public static NotificacionTestBuilder builder() {
|
|
215
|
+
return new NotificacionTestBuilder();
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
public NotificacionTestBuilder destinatario(String val) {
|
|
219
|
+
this.destinatario = val;
|
|
220
|
+
return this;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
public NotificacionTestBuilder estado(String val) {
|
|
224
|
+
this.estado = val;
|
|
225
|
+
return this;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
public Notificacion build() {
|
|
229
|
+
var entity = new Notificacion();
|
|
230
|
+
entity.setId(id);
|
|
231
|
+
entity.setDestinatario(destinatario);
|
|
232
|
+
entity.setAsunto(asunto);
|
|
233
|
+
entity.setEstado(estado);
|
|
234
|
+
entity.setFechaCreacion(fechaCreacion);
|
|
235
|
+
return entity;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Resumen de comandos por stack
|
|
241
|
+
|
|
242
|
+
### Spring Boot (Maven wrapper)
|
|
243
|
+
- Nivel a: `./mvnw test -Dtest=ClaseTest`
|
|
244
|
+
- Nivel b: `./mvnw test`
|
|
245
|
+
- Nivel c: `./mvnw verify`
|
|
246
|
+
- Windows: usar `mvnw.cmd` en lugar de `./mvnw`
|
|
247
|
+
|
|
248
|
+
### Angular
|
|
249
|
+
- Nivel a/b: `ng test --watch=false`
|
|
250
|
+
- Nivel c: `npm run e2e` (si configurado)
|
|
251
|
+
|
|
252
|
+
### Gradle
|
|
253
|
+
- Nivel a: `./gradlew test --tests ClaseTest`
|
|
254
|
+
- Nivel b: `./gradlew test`
|
|
255
|
+
- Nivel c: `./gradlew integrationTest` (o `check`)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# workflows/
|
|
2
|
+
|
|
3
|
+
Flows del lifecycle: cómo se mueve una sesión por sus fases.
|
|
4
|
+
|
|
5
|
+
Contenido esperado (T2 PR2):
|
|
6
|
+
|
|
7
|
+
- `dev-workflow.md` — planning → execution → validation → closure; M1 ask antes de commit; gates por fase.
|
|
8
|
+
- `design-workflow.md` — discovery → design → spec → closure; produce DELIVERY.md graduable.
|
|
9
|
+
- `analyze-workflow.md` — discovery → evidence → findings → conclusions; produce CONCLUSIONS.md.
|
|
10
|
+
- `core-workflow.md` — sub-flow agnóstico embebido en los 3 anteriores (artefactos comunes).
|
|
11
|
+
|
|
12
|
+
Cada workflow declara: phases, artefactos requeridos, prompts (M1/M10/S2/S3/S6/S7) y transitions válidas.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: analyze-workflow
|
|
3
|
+
description: Workflow especializado analyze (especialidad investigación read-only), antes en qtc-analyze. Consumido por /agent-workflow:session cuando flow=analyze para orquestar el lifecycle universal con composición analyze-específica según modalidad.
|
|
4
|
+
version: 2.1.0
|
|
5
|
+
flow: analyze
|
|
6
|
+
workflow_schema: 1.0
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Analyze Workflow
|
|
10
|
+
|
|
11
|
+
Workflow declarativo del flow=analyze. Define dos modos:
|
|
12
|
+
|
|
13
|
+
- **Standalone** (`/agent-workflow:use`): investigación puntual sin sesión.
|
|
14
|
+
- **Orchestrated** (consumido por `/agent-workflow:session` con flow=analyze): orquesta investigación + síntesis + recomendación según modalidad.
|
|
15
|
+
|
|
16
|
+
## Brief
|
|
17
|
+
|
|
18
|
+
**flow=analyze** es la especialidad de investigación **read-only** del plugin qtc. No edita código ni muta BD. Produce `CONCLUSIONS.md` consumible por flow=dev vía handoff.
|
|
19
|
+
|
|
20
|
+
**Política de commits**: ver `agent-workflow:commits-policy` (canónico). El flow=analyze es read-only por construcción; cuando el usuario solicita un commit (típicamente al cierre, pero puede ser en otra fase si edita artefactos), aplica Regla 3 propose-then-execute universal con M1.
|
|
21
|
+
|
|
22
|
+
**Política sin fallback al CLI (transversal al flow=analyze)**: si `agent-workflow <subcmd>` falla (no está en PATH, comando no reconocido, exit code != 0), **cortá la acción y reportá al usuario**: pedile que verifique `npm install -g @tacuchi/agent-workflow-cli`. No hay flujo alternativo Python.
|
|
23
|
+
|
|
24
|
+
### Rama base (canon v3.5+)
|
|
25
|
+
|
|
26
|
+
Las sesiones `flow=analyze` resuelven la rama esperada de cada fuente como `main_branch` (default `certificacion`) cuando NO se declaran branches en la sesión. Razón: el análisis necesita reflejar producción, no una rama de feature.
|
|
27
|
+
|
|
28
|
+
- Si el repo de la fuente está en otra rama, el lifecycle dispara el flujo proactivo de verificación (Caso A o B según `dirty`) y bloquea avance hasta resolver.
|
|
29
|
+
- Si durante la investigación el usuario decide **editar** código, se aplica **Caso C** (`agent-workflow/skills/session/references/branch-verification.md`): preguntar nombre de la rama de trabajo, ofrecer `checkout` (existe) o `checkout -b` desde `main_branch` (no existe), y registrar en AW-PROJECT.Status. El skill `analyze-workflow` no edita por sí mismo; la decisión de editar implica un handoff o cambio de flow.
|
|
30
|
+
- Override explícito al crear la sesión: `--branches alias:rama` declarado gana sobre el default `main_branch`. Útil cuando se quiere analizar contra una rama puntual (ej. una feature en validación).
|
|
31
|
+
|
|
32
|
+
Skills disponibles:
|
|
33
|
+
- **analyze-synthesize**: estructura información en plan/hallazgos (exportada cross-flow, **clave** invocada por agent-workflow:session en planning).
|
|
34
|
+
- **analyze-investigate**: recolección de evidencia divergente con cost guard (exportada).
|
|
35
|
+
- **analyze-conclude**: cierre del análisis con `CONCLUSIONS.md` modulado por `## Modality` (technical/incident/data). Una sola skill, una sola estructura.
|
|
36
|
+
|
|
37
|
+
Diferencia clave de **modalidad** (embebida como `## Modality` en CONCLUSIONS.md):
|
|
38
|
+
- `technical` (legacy: `tecnica`): pregunta arquitectónica/diseño → cuerpo modulado como propuesta (opciones consideradas + decisión recomendada).
|
|
39
|
+
- `data` (legacy: `datos`): análisis cuantitativo → cuerpo modulado como informe (hallazgos numéricos + interpretación + acciones sugeridas).
|
|
40
|
+
- `incident` (legacy: `incidente`): post-mortem retrospectivo → cuerpo modulado con timeline + causa raíz + impacto + acciones preventivas.
|
|
41
|
+
|
|
42
|
+
CONCLUSIONS.md vive en la sesión por default. Gradúa opt-in con `kind=conclusion` a `docs/conclusiones/`.
|
|
43
|
+
|
|
44
|
+
## Standalone (use)
|
|
45
|
+
|
|
46
|
+
Cuando el usuario invoca `/agent-workflow:use`:
|
|
47
|
+
|
|
48
|
+
1. **Presentarse**: mostrar este Brief + warning read-only.
|
|
49
|
+
2. **Preguntar modalidad** vía `AskUserQuestion`. Spec literal (header `modality`, 3 opciones technical/data/incident con descripción) → `agent-workflow:prompts-catalog#M5`. La modalidad determina la modulación del cuerpo del CONCLUSIONS.md (estructura única, contenido modulado):
|
|
50
|
+
- **Technical** → cuerpo modulado como propuesta.
|
|
51
|
+
- **Data** → cuerpo modulado como informe de análisis.
|
|
52
|
+
- **Incident** → cuerpo modulado como post-mortem.
|
|
53
|
+
3. **Preguntar scope**:
|
|
54
|
+
- "¿Sobre qué código/sistema/datos investigar?"
|
|
55
|
+
- "¿Hay un incidente concreto a clasificar?"
|
|
56
|
+
- "¿Hay datos previos o BD a consultar?"
|
|
57
|
+
4. **Detectar contexto**:
|
|
58
|
+
- AW-PROJECT con fuentes (read-only sobre los repos declarados).
|
|
59
|
+
- MCP servers `<mcp-cert>`/`<mcp-prod>` disponibles para consultas BD (read-only).
|
|
60
|
+
- Cost guard activo para consultas pesadas.
|
|
61
|
+
5. **Path del artefacto**: `.workflow/sessions/<folder>/CONCLUSIONS.md`. Si el usuario decide graduar al cierre, destino = `docs/conclusiones/NNN-<slug>.md` (kind=`conclusion`, opt-in).
|
|
62
|
+
6. **Cargar skill `analyze-conclude`** independientemente de la modalidad (el skill es único y modula por contenido).
|
|
63
|
+
|
|
64
|
+
**Reglas standalone**:
|
|
65
|
+
- **Read-only estricto**: no editar código del repo, no mutar BD, no escribir scripts SQL.
|
|
66
|
+
- **NO crear sesión** ni escribir en `.workflow/sessions/`.
|
|
67
|
+
- **NO requiere AW-PROJECT** (si existe, enriquece con fuentes para investigar).
|
|
68
|
+
- **Cost guard**: si el usuario quiere queries pesadas o investigación cross-repo extensa, advertir antes de proceder.
|
|
69
|
+
- **Sugerir sesión** si la investigación es multi-fase (investigate + synthesize + recomendar) — más coherente como sesión.
|
|
70
|
+
|
|
71
|
+
## Session integration
|
|
72
|
+
|
|
73
|
+
Cuando agent-workflow:session consume este workflow durante `/agent-workflow:session create` con flow=analyze:
|
|
74
|
+
|
|
75
|
+
### Args al crear sesión
|
|
76
|
+
|
|
77
|
+
- modality: technical|data|incident (obligatorio; determina graduación + template). Legacy ES `tecnica|datos|incidente` se acepta y normaliza.
|
|
78
|
+
|
|
79
|
+
### Artefactos por fase
|
|
80
|
+
|
|
81
|
+
- planning: OBJECTIVE.md, TASKS.md
|
|
82
|
+
- execution: EVIDENCE.md, FINDINGS.md, queries/, CONCLUSIONS.md
|
|
83
|
+
- validation: review de CONCLUSIONS
|
|
84
|
+
- closure: opt-in graduación de CONCLUSIONS.md a `docs/conclusiones/` (default: queda en sesión)
|
|
85
|
+
|
|
86
|
+
### Skills por fase
|
|
87
|
+
|
|
88
|
+
- planning: analyze-synthesize (estructurar plan)
|
|
89
|
+
- execution: analyze-investigate (recolectar evidencia), analyze-synthesize (sintetizar findings)
|
|
90
|
+
- closure: analyze-conclude (produce CONCLUSIONS.md modulado por modalidad)
|
|
91
|
+
|
|
92
|
+
### Refs HISTORY
|
|
93
|
+
|
|
94
|
+
- conclusion: docs/conclusiones/{val}.md (cuando se gradúa opt-in)
|
|
95
|
+
|
|
96
|
+
### Conteos resume
|
|
97
|
+
|
|
98
|
+
- evidence: EVIDENCE.md presente
|
|
99
|
+
- findings: FINDINGS.md presente
|
|
100
|
+
- conclusions: CONCLUSIONS.md presente
|
|
101
|
+
- queries: queries/*.sql count
|
|
102
|
+
|
|
103
|
+
## Sandbox read-only
|
|
104
|
+
|
|
105
|
+
Standalone: en plan mode describir modalidad, scope, paths sugeridos. No ejecutar queries ni leer BD.
|
|
106
|
+
|
|
107
|
+
Orchestrated: ver `agent-workflow:session` plan mode rules.
|