@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,108 @@
|
|
|
1
|
+
# Template REFACTOR.md — agent-workflow:refactor
|
|
2
|
+
|
|
3
|
+
Artefacto canónico del skill `refactor`. Vive en `.workflow/sessions/sessionNNN-dev-refactor-<slug>/REFACTOR.md` durante la sesión.
|
|
4
|
+
|
|
5
|
+
> **Modelo de artefactos (DEC-003)**: REFACTOR.md **no se gradúa con kind dedicado**. Vive en la sesión y se consulta desde ahí. Si el documento amerita preservarse, el usuario lo cura manualmente como `manual` (cómo se reorganiza el módulo) o `especificacion` (contrato del módulo nuevo). El destino al graduar respeta `workspace_mode` (DEC-002): hub mode → `<hub>/docs/<categoria>/`; project mode → `<cwd>/docs/<categoria>/`.
|
|
6
|
+
|
|
7
|
+
## Estructura mínima
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
# Refactor — <feature-name>
|
|
11
|
+
|
|
12
|
+
## Análisis legacy
|
|
13
|
+
|
|
14
|
+
### Paths involucrados
|
|
15
|
+
- FE: `<repo>/src/<path>`
|
|
16
|
+
- BE: `<repo>/<package-path>`
|
|
17
|
+
- DB: `<schema>.<tabla>`, funciones `fn_*`, SP `sp_*`
|
|
18
|
+
|
|
19
|
+
### Endpoints actuales
|
|
20
|
+
| Verbo | Path | Acción | DTO request | DTO response |
|
|
21
|
+
|---|---|---|---|---|
|
|
22
|
+
| GET | `/api/<feature>` | listar | — | `<Feature>Response[]` |
|
|
23
|
+
| POST | `/api/<feature>` | crear | `<Feature>CreateRequest` | `<Feature>Response` |
|
|
24
|
+
| PUT | `/api/<feature>/{id}` | editar (full) | `<Feature>UpdateRequest` | `<Feature>Response` |
|
|
25
|
+
| DELETE | `/api/<feature>/{id}` | eliminar | — | 204 |
|
|
26
|
+
|
|
27
|
+
### DTOs actuales
|
|
28
|
+
- `<Feature>CreateRequest`: <count> campos, todos required
|
|
29
|
+
- `<Feature>UpdateRequest`: <count> campos, casi idénticos a Create
|
|
30
|
+
- `<Feature>Response`: mapeo entidad
|
|
31
|
+
|
|
32
|
+
### Validaciones / reglas de negocio
|
|
33
|
+
- Regla 1: …
|
|
34
|
+
- Regla 2: …
|
|
35
|
+
|
|
36
|
+
### Accesos / roles
|
|
37
|
+
- Permite roles: `admin.x`, `comercial.y`
|
|
38
|
+
- Bypass super-admin: sí/no
|
|
39
|
+
|
|
40
|
+
### Smells detectados (motivación del refactor)
|
|
41
|
+
- DTOs Create/Update duplicados (fix: Sparse DTO unificado)
|
|
42
|
+
- PUT envía toda la entidad (fix: PATCH sparse)
|
|
43
|
+
- `try/catch` que silencia errores (fix: fail-fast)
|
|
44
|
+
- Otros: …
|
|
45
|
+
|
|
46
|
+
## Diseño nuevo
|
|
47
|
+
|
|
48
|
+
### Paths nuevos
|
|
49
|
+
- FE: `<repo>/src/<path>` (mismo nombre, después de rename del legacy)
|
|
50
|
+
- BE: `<repo>/<package-path>` (mismo nombre, después de rename del legacy)
|
|
51
|
+
|
|
52
|
+
### Endpoints nuevos
|
|
53
|
+
| Verbo | Path | Acción | DTO | Cambio vs legacy |
|
|
54
|
+
|---|---|---|---|---|
|
|
55
|
+
| GET | `/api/<feature>` | listar | — / `<Feature>Response[]` | igual |
|
|
56
|
+
| POST | `/api/<feature>` | crear | `<Feature>SaveRequest` | DTO unificado |
|
|
57
|
+
| PATCH | `/api/<feature>/{id}` | editar sparse | `<Feature>SaveRequest` | PUT → PATCH; sparse |
|
|
58
|
+
| DELETE | `/api/<feature>/{id}` | eliminar | — | igual |
|
|
59
|
+
|
|
60
|
+
### DTOs nuevos (Sparse DTO unificado)
|
|
61
|
+
- `<Feature>SaveRequest`: campos nullable, sirve para create + edit. En edit, null = no tocar.
|
|
62
|
+
- `<Feature>Response`: ajustado si aplica.
|
|
63
|
+
|
|
64
|
+
### Reglas FE-BE aplicadas (checklist)
|
|
65
|
+
- [ ] Mismo DTO Create/Edit (Sparse).
|
|
66
|
+
- [ ] PATCH para edit, sparse object.
|
|
67
|
+
- [ ] BE no usa fallbacks que oculten errores; valida con Bean Validation y devuelve 400 estructurado.
|
|
68
|
+
- [ ] FE propaga errores HTTP via toast/mensaje (sin `catchError(() => of([]))`).
|
|
69
|
+
- [ ] DB: funciones nuevas arrancan en Phase 0 como stub (devuelven mock); implementación real en Phase 1/2.
|
|
70
|
+
|
|
71
|
+
## Plan de migración (12 pasos Strangler)
|
|
72
|
+
|
|
73
|
+
1. [ ] Análisis completo (esta sección + sigs.).
|
|
74
|
+
2. [ ] M7 confirma estrategia de rename (auto/manual/solo-análisis).
|
|
75
|
+
3. [ ] `git mv` FE: `src/.../<feature>/` → `src/.../<feature>-legacy/`.
|
|
76
|
+
4. [ ] `git mv` BE: paquete `<feature>` → `<feature>_legacy` (si aplica al stack).
|
|
77
|
+
5. [ ] Crear nuevo `<feature>/` en FE + BE desde cero (vacío para Phase 0).
|
|
78
|
+
6. [ ] Phase 0 — Contrato: interfaces FE + DTOs BE + endpoints stub + funciones BD mock.
|
|
79
|
+
7. [ ] M6 — phase-gate (Phase 0 → 1). [Nota: S7 design-review ya fue disparado antes de Phase 0 desde planning closure, v2.8+ — reemplazó a M9.]
|
|
80
|
+
8. [ ] Phase 1 — Lecturas: GET, listados, filtros, combos.
|
|
81
|
+
9. [ ] M6 — phase-gate (Phase 1 → 2).
|
|
82
|
+
10. [ ] Phase 2 — Mutaciones: POST + PATCH (sparse) + DELETE + scripts BD reales.
|
|
83
|
+
11. [ ] Validación e2e por usuario.
|
|
84
|
+
12. [ ] M8 — refactor-cleanup: `git rm -r <feature>-legacy/` + REFACTOR.md `legacy_purged: true`.
|
|
85
|
+
|
|
86
|
+
## Estado
|
|
87
|
+
|
|
88
|
+
```yaml
|
|
89
|
+
status: discovery | legacy-marked | implementing | validating | completed
|
|
90
|
+
phase: 0 | 1 | 2 | done
|
|
91
|
+
legacy_purged: false | true
|
|
92
|
+
created: 2026-MM-DD
|
|
93
|
+
last_update: 2026-MM-DD
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Refs
|
|
97
|
+
|
|
98
|
+
- Sesión origen: `.workflow/sessions/sessionNNN-dev-refactor-<slug>/`
|
|
99
|
+
- DECISIONS.md de la sesión: decisiones load-bearing del refactor.
|
|
100
|
+
- `agent-workflow:prompts-catalog` M7/M8.
|
|
101
|
+
- `agent-workflow:coding-standards/references/fe-be-integration.md`.
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Notas de uso
|
|
105
|
+
|
|
106
|
+
- **Tamaño esperado**: 200-400 líneas para un mantenimiento CRUD típico. Si crece más, dividir en sub-features (cada uno con su propia sesión `## Type: refactor`).
|
|
107
|
+
- **No prescribir lenguaje natural redundante**: las tablas son densas a propósito. REFACTOR.md vive en la sesión y, si amerita preservarse, se cura manualmente como `manual` o `especificacion` (DEC-003).
|
|
108
|
+
- **Cuando standalone (sin sesión)**: el archivo se nombra `REFACTOR-<slug>.md` en el CWD; status queda en `discovery` y no avanza.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Strangler Fig — checklist de 12 pasos para refactor
|
|
2
|
+
|
|
3
|
+
Pasos canónicos del skill `agent-workflow:refactor`. Reflejan Strangler Fig (Fowler) adaptado al stack qtc-* con flujo phased y prompts M7/M8/M6 + S7 (pre-Phase 0). M9 retirado en v2.8+ por DEC-002 de session049 — reemplazado por S7 desde planning closure.
|
|
4
|
+
|
|
5
|
+
## Discovery (paso 1-2)
|
|
6
|
+
|
|
7
|
+
### 1. Análisis legacy
|
|
8
|
+
|
|
9
|
+
Compone con `agent-workflow:analyze-investigate`. Outputs en REFACTOR.md sección "Análisis legacy":
|
|
10
|
+
|
|
11
|
+
- Paths FE / BE / DB.
|
|
12
|
+
- Endpoints actuales (verbo, path, DTOs).
|
|
13
|
+
- DTOs (counts, redundancias).
|
|
14
|
+
- Validaciones y reglas de negocio detectadas en el código.
|
|
15
|
+
- Accesos / roles.
|
|
16
|
+
- Smells (DTOs duplicados, fallbacks que ocultan errores, PUT en lugar de PATCH, etc.).
|
|
17
|
+
|
|
18
|
+
### 2. REFACTOR.md draft
|
|
19
|
+
|
|
20
|
+
AI redacta sección "Análisis legacy" + "Diseño nuevo" + "Plan de migración" (1-12) + "Estado" inicial (`status: discovery`).
|
|
21
|
+
|
|
22
|
+
Usuario revisa el draft. Si aprueba → paso 3. Si pide cambios, AI itera.
|
|
23
|
+
|
|
24
|
+
## Marcar legacy (paso 3-5)
|
|
25
|
+
|
|
26
|
+
### 3. M7 — refactor-legacy-detected
|
|
27
|
+
|
|
28
|
+
Prompt al usuario con 3 opciones (rename + AI imports / rename + IDE imports / solo análisis). Spec literal en `agent-workflow:prompts-catalog#M7`.
|
|
29
|
+
|
|
30
|
+
### 4. Rename Strangler
|
|
31
|
+
|
|
32
|
+
- FE: `git mv <repo>/src/.../<feature>/ <repo>/src/.../<feature>-legacy/`.
|
|
33
|
+
- BE (Spring/Java): renombrar paquete `<feature>` → `<feature>_legacy`, actualizar imports si la opción A fue elegida.
|
|
34
|
+
- BD: **NO** se renombran funciones/SP — la BD es estado, no código. Las funciones nuevas se crean en paralelo durante Phase 0/1/2 con nombres canónicos.
|
|
35
|
+
|
|
36
|
+
### 5. Crear `<feature>/` vacía
|
|
37
|
+
|
|
38
|
+
- FE: crear `src/.../<feature>/` con módulo skeleton (NgModule vacío + service stub).
|
|
39
|
+
- BE: crear paquete `<feature>` con controller stub + DTOs vacíos (Sparse DTO).
|
|
40
|
+
|
|
41
|
+
REFACTOR.md → `status: legacy-marked`.
|
|
42
|
+
|
|
43
|
+
## Generar TASKS.md phased (paso 6)
|
|
44
|
+
|
|
45
|
+
### 6. Hand off a `implement`
|
|
46
|
+
|
|
47
|
+
`refactor` genera TASKS.md con secciones canónicas:
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
## Phase 0 — Contrato
|
|
51
|
+
- [ ] Interfaces FE: `<Feature>Service` con métodos `list/save/delete` que arrojan "not impl"
|
|
52
|
+
- [ ] DTOs BE: record `<Feature>SaveRequest` (Sparse, campos nullable)
|
|
53
|
+
- [ ] Endpoints BE: `@PatchMapping` que devuelven 501
|
|
54
|
+
- [ ] Funciones BD: `fn_<feature>_listar` que devuelve mock `[]::jsonb`
|
|
55
|
+
- [ ] Cableado: FE llama BE → 501 capturado por handler → toast informativo
|
|
56
|
+
|
|
57
|
+
## Phase 1 — Lecturas
|
|
58
|
+
- [ ] GET /api/<feature> con paginación + filtros
|
|
59
|
+
- [ ] FE listado con grilla, combos, search
|
|
60
|
+
- [ ] Funciones BD reales para SELECT
|
|
61
|
+
- [ ] Tests unitarios de queries (si aplica)
|
|
62
|
+
|
|
63
|
+
## Phase 2 — Mutaciones
|
|
64
|
+
- [ ] POST /api/<feature> (create con Sparse DTO)
|
|
65
|
+
- [ ] PATCH /api/<feature>/{id} (edit sparse, null = no tocar)
|
|
66
|
+
- [ ] DELETE /api/<feature>/{id}
|
|
67
|
+
- [ ] FE formularios con validación
|
|
68
|
+
- [ ] Scripts SQL: DDL/DML reales bajo `docs/scripts/`
|
|
69
|
+
- [ ] Tests e2e si aplica
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`implement` toma TASKS.md y ejecuta el loop con M6 (phase-gate Phase 1→2). S7 (design-review) fue disparado antes de Phase 0 desde planning closure de `skills/session/SKILL.md` (v2.8+ — reemplazó a M9 que disparaba post-stub).
|
|
73
|
+
|
|
74
|
+
REFACTOR.md → `status: implementing`, `phase: 0`.
|
|
75
|
+
|
|
76
|
+
## Validación (paso 7-8)
|
|
77
|
+
|
|
78
|
+
### 7. Validación e2e
|
|
79
|
+
|
|
80
|
+
Cuando `implement` cierra Phase 2, REFACTOR.md → `status: validating`.
|
|
81
|
+
|
|
82
|
+
El usuario:
|
|
83
|
+
- Levanta FE + BE en local.
|
|
84
|
+
- Ejecuta scripts SQL contra cert.
|
|
85
|
+
- Prueba flujos: create, list, filter, edit (sparse), delete.
|
|
86
|
+
- Compara contra el comportamiento legacy si está disponible.
|
|
87
|
+
|
|
88
|
+
Confirma con la AI: "validado, todo funciona".
|
|
89
|
+
|
|
90
|
+
REFACTOR.md → `status: completed` (pero `legacy_purged: false` aún).
|
|
91
|
+
|
|
92
|
+
### 8. M8 — refactor-cleanup
|
|
93
|
+
|
|
94
|
+
Prompt al usuario con 3 opciones (eliminar / mantener / cancelar). Spec literal en `agent-workflow:prompts-catalog#M8`.
|
|
95
|
+
|
|
96
|
+
Si elige eliminar:
|
|
97
|
+
- `git rm -r <repo>/src/.../<feature>-legacy/` (FE).
|
|
98
|
+
- `git rm -r <package>_legacy/` (BE) si aplica.
|
|
99
|
+
- BD: si hay funciones legacy paralelas que deben removerse, generar script SQL bajo `.workflow/sessions/<sessionNNN>/scripts/cleanup-<feature>.sql` con `DROP FUNCTION IF EXISTS ...`. El bundle final se arma vía `/agent-workflow:release` (kind=`script`). **El AI NO ejecuta el script** — el usuario lo aplica.
|
|
100
|
+
|
|
101
|
+
REFACTOR.md → `legacy_purged: true`.
|
|
102
|
+
|
|
103
|
+
## Closure
|
|
104
|
+
|
|
105
|
+
REFACTOR.md vive en la sesión (`.workflow/sessions/<folder>/REFACTOR.md`) y **no se gradúa con kind dedicado** (DEC-003). Si el documento amerita preservarse fuera de la sesión, el usuario lo cura como `manual` o `especificacion`. La sesión cierra siguiendo el flujo estándar (commits via M1, compact, session-close).
|
|
106
|
+
|
|
107
|
+
## Errores y rollback
|
|
108
|
+
|
|
109
|
+
| Situación | Acción |
|
|
110
|
+
|---|---|
|
|
111
|
+
| Phase 1 falla, lecturas no funcionan | Re-iterar Phase 1 (M6 opción 3) sin tocar legacy. Legacy sigue funcionando como referencia. |
|
|
112
|
+
| Phase 2 falla, mutaciones rompen | Re-iterar Phase 2 con DECISION nueva en DECISIONS.md. Legacy sigue intacto. |
|
|
113
|
+
| Validación e2e descubre regresión grave | Pausar refactor, abrir DECISIÓN documentando, decidir si seguir o rollback. NO disparar M8 cleanup. |
|
|
114
|
+
| Usuario abandona el refactor a mitad de camino | REFACTOR.md mantiene `status: implementing` o `validating`; legacy sigue intacto. La sesión se puede retomar más tarde. |
|
|
115
|
+
|
|
116
|
+
**Nunca** se borra el legacy hasta que M8 se confirme con `## Estado: completed` + validación e2e explícita del usuario. Esto garantiza que el rollback siempre es posible (Strangler Fig: "transform → coexist → eliminate").
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: resume
|
|
3
|
+
description: Lee CHECKPOINT.md de la sesión activa, sintetiza placeholders si hace falta y presenta resumen de dónde quedó el trabajo. Invocado vía /agent-workflow:resume, NL como retomar/donde quedamos/continuar, o automáticamente desde el PostCompact hook tras /compact. Fallback a session-resume base si no hay checkpoint.
|
|
4
|
+
version: 2.4.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Resume — qtc v2.1
|
|
8
|
+
|
|
9
|
+
Recupera el estado de la sesión activa después de un compact (o al volver al proyecto). Lee `.workflow/sessions/<folder>/CHECKPOINT.md` y lo presenta al usuario.
|
|
10
|
+
|
|
11
|
+
## Triggers
|
|
12
|
+
|
|
13
|
+
- **Slash explícito**: `/agent-workflow:resume`.
|
|
14
|
+
- **NL del usuario**: "retomar", "retomemos", "donde quedamos", "continuar", "seguir con la sesión".
|
|
15
|
+
- **Automático en PostCompact hook**: tras un `/compact` el hook lee el resumen y se lo pasa al AI para presentarlo.
|
|
16
|
+
|
|
17
|
+
## Acción
|
|
18
|
+
|
|
19
|
+
### 1. Detectar sesión(es) activa(s)
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
agent-workflow resume-summary
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Output:
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"active_sessions": ["session046-dev-jobs-async"],
|
|
29
|
+
"primary_session": "session046-dev-jobs-async",
|
|
30
|
+
"phase_from_qtc_project": "execution",
|
|
31
|
+
"branches_from_qtc_project": ["mscore-solicitud-spring=feature/session046"],
|
|
32
|
+
"checkpoint_present": true,
|
|
33
|
+
"checkpoint": {
|
|
34
|
+
"actualizado": "2026-04-25 20:14",
|
|
35
|
+
"fase": "execution (2/4)",
|
|
36
|
+
"avance": "60% (3 de 5 tareas en TASKS.md completas)",
|
|
37
|
+
"proximo": ["Implementar el consumer de la cola DLQ"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Si `active_sessions` está vacío → "No hay sesiones activas para retomar." y stop.
|
|
43
|
+
|
|
44
|
+
### 2. Síntesis post-compact (fill placeholders)
|
|
45
|
+
|
|
46
|
+
Si la sesión activa tiene `checkpoint_status` en `missing`, `draft` o `stale`, ejecutar antes de presentar:
|
|
47
|
+
|
|
48
|
+
1. Si `checkpoint_status: missing`: ejecutar `agent-workflow checkpoint-write --code <primary_session_code>` para regenerar el draft. Continuar con el draft recién generado.
|
|
49
|
+
2. Si `checkpoint_status: draft` o `stale` (o el draft recién se regeneró): leer `checkpoint_path` y rellenar cada placeholder `_[AI: ...]_` con la mejor información disponible. Mapeo de campos:
|
|
50
|
+
- `ultimo` → 1-3 oraciones del último avance, basado en `decisiones recientes` y archivos tocados.
|
|
51
|
+
- `proximo` → 1-2 oraciones leyendo el primer ítem abierto de TASKS.md de la sesión.
|
|
52
|
+
- `archivos_proposito` → 1 línea por archivo en la lista.
|
|
53
|
+
- `contexto` → 2-3 párrafos con info mínima para retomar.
|
|
54
|
+
- `skills` → lista de skills invocadas (en post-compact suele ser solo `compact`/`resume`).
|
|
55
|
+
3. Si para algún campo no hay información suficiente: escribir `_(sin info — completar al retomar)_` en lugar de inventar. Editar el archivo con la herramienta Edit.
|
|
56
|
+
|
|
57
|
+
Si `checkpoint_status: complete` (o `needs_ai_action: false`): saltar este paso. Pasar directo a la presentación.
|
|
58
|
+
|
|
59
|
+
Esta lógica vivía antes en el hook PostCompact (entry prompt). Quedó acá porque (a) es lógica de skill no de hook (boundary clean), y (b) Codex no soporta prompt-type en hooks → en CC se auto-dispara via /agent-workflow:resume; en Codex el usuario lo invoca manualmente.
|
|
60
|
+
|
|
61
|
+
### 3. Si hay CHECKPOINT.md
|
|
62
|
+
|
|
63
|
+
Leer el archivo completo:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
agent-workflow checkpoint-read --code <CODE>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Presentar al usuario un resumen estructurado:
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
**Sesión activa**: session046-dev-jobs-async
|
|
73
|
+
**Fase**: execution (2/4) · 60% completa (3/5 tareas)
|
|
74
|
+
**Última actualización**: 2026-04-25 20:14
|
|
75
|
+
|
|
76
|
+
**Lo último que hicimos**: <campo del checkpoint>
|
|
77
|
+
|
|
78
|
+
**Próximo paso**: <campo del checkpoint>
|
|
79
|
+
|
|
80
|
+
**Decisiones recientes**:
|
|
81
|
+
<lista>
|
|
82
|
+
|
|
83
|
+
**Archivos tocados sin commit**:
|
|
84
|
+
<lista corta>
|
|
85
|
+
|
|
86
|
+
**Contexto crítico**:
|
|
87
|
+
<párrafos del checkpoint>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Y disparar `AskUserQuestion` con spec de S5 (`../session/references/prompts-catalog.md#S5`). Header `post-compact`, 3 opciones (Retomar misma sesión / Abrir nueva sesión / Solo recapitular, después decido). **Recomendación dinámica**: el AI marca `(Recomendado)` en opción 1 si CHECKPOINT.md indica `tasks_open ≥ 1`; caso contrario marca opción 2. NO narrar la pregunta en texto plano.
|
|
91
|
+
|
|
92
|
+
Resolución por opción:
|
|
93
|
+
|
|
94
|
+
- **Retomar misma sesión** → cargar OBJECTIVE.md, TASKS.md, DECISIONS.md como contexto activo; verificar ramas (`agent-workflow sources`); reanudar en la fase indicada.
|
|
95
|
+
- **Abrir nueva sesión** → cerrar la actual como `paused` (graduación postergada) y delegar al skill `session` con prompt de OBJECTIVE.
|
|
96
|
+
- **Solo recapitular** → mantener el resumen presentado; pausar el loop y dejar que el usuario decida en próximo turno.
|
|
97
|
+
- **Other auto** → instrucción custom (ej. "retomá pero salteá a la T5") — interpretar y aplicar; si ambiguo, fallback a "Solo recapitular".
|
|
98
|
+
|
|
99
|
+
**Si CHECKPOINT.md ausente o ilegible**: skip S5 y fallback a `session-resume` base con soft prompt "¿Continuamos desde acá?".
|
|
100
|
+
|
|
101
|
+
### 4. Si NO hay CHECKPOINT.md
|
|
102
|
+
|
|
103
|
+
Fallback a:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
agent-workflow session-resume --code <CODE>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Devuelve campos base (objetivo, fase, ramas, tasks counts). Presentar como resumen y preguntar si continúa.
|
|
110
|
+
|
|
111
|
+
### 5. Si hay múltiples sesiones activas
|
|
112
|
+
|
|
113
|
+
Listar todas con resumen 1-línea cada una y pedir al usuario seleccionar cuál retomar.
|
|
114
|
+
|
|
115
|
+
### 6. Si NO hay sesiones activas — detectar cerradas con artefactos (F-E.2)
|
|
116
|
+
|
|
117
|
+
Cuando `resume-summary` retorna `active_sessions: []`, re-invocar con `--include-recent-closed` para detectar sesiones cerradas en los últimos 7 días que tengan artefactos "completos":
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
agent-workflow resume-summary --include-recent-closed
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Heurística "completos" por flow (definida en G5 de session062):
|
|
124
|
+
|
|
125
|
+
| Flow | Criterio |
|
|
126
|
+
|---|---|
|
|
127
|
+
| `analyze` | `EVIDENCE.md` + `FINDINGS.md` + `CONCLUSIONS.md` presentes |
|
|
128
|
+
| `dev` | `TASKS.md` con ≥50% closed Y `DECISIONS.md` presente |
|
|
129
|
+
| `design` | `DELIVERY.md` presente |
|
|
130
|
+
|
|
131
|
+
Si `recent_closed_with_artifacts.length > 0`, disparar `AskUserQuestion` con spec del S-prompt `closed-with-artifacts` (`../session/references/prompts-catalog.md#closed-with-artifacts`):
|
|
132
|
+
|
|
133
|
+
- Header: `closed-with-artifacts`.
|
|
134
|
+
- 4 opciones:
|
|
135
|
+
1. **Export plan** — invocar `/agent-workflow:export-plan --sessions <NNN>` con la sesión elegida.
|
|
136
|
+
2. **Export conclusions** — invocar `/agent-workflow:export-conclusions --sessions <NNN>` (solo si la sesión es analyze con CONCLUSIONS).
|
|
137
|
+
3. **Abrir nueva sesión** — delegar a `/agent-workflow:session` con prompt OBJECTIVE.
|
|
138
|
+
4. **Solo recapitular** — leer artefactos y presentar resumen, sin acción derivada.
|
|
139
|
+
|
|
140
|
+
**Recomendación dinámica**: si hay 1 sola sesión analyze cerrada → opción 2 marcada `(Recomendado)`. Si hay ≥2 sesiones del mismo dominio → opción 1 marcada `(Recomendado)`. Sin ambigüedad: el AI explica brevemente la heurística antes del prompt.
|
|
141
|
+
|
|
142
|
+
**Other auto** = "Otra acción" → registrar como nota informal y consultar.
|
|
143
|
+
|
|
144
|
+
Si `recent_closed_with_artifacts.length == 0`: "No hay sesiones activas para retomar." y stop (comportamiento previo).
|
|
145
|
+
|
|
146
|
+
## Ejemplo
|
|
147
|
+
|
|
148
|
+
Usuario abre Claude Code después de un compact previo.
|
|
149
|
+
|
|
150
|
+
PostCompact hook dispara → AI ejecuta `agent-workflow resume-summary` → recibe el JSON.
|
|
151
|
+
|
|
152
|
+
AI presenta:
|
|
153
|
+
```
|
|
154
|
+
Sesión activa: session046-dev-jobs-async (execution 2/4, 60%).
|
|
155
|
+
|
|
156
|
+
Última actualización: 2026-04-25 20:14.
|
|
157
|
+
|
|
158
|
+
**Lo último**: Implementé el publisher de jobs con RabbitMQ — flujo end-to-end de
|
|
159
|
+
encolado funciona, mensajes llegan a `qtc.jobs.priority`.
|
|
160
|
+
|
|
161
|
+
**Próximo paso**: Implementar el consumer de la cola DLQ con retry exponencial.
|
|
162
|
+
|
|
163
|
+
**Decisiones recientes**: DEC-003 — Usar RabbitMQ exchange `topic` (no `direct`)
|
|
164
|
+
para soportar wildcards en routing keys.
|
|
165
|
+
|
|
166
|
+
**Contexto crítico**: La cola principal usa publisher confirms; el consumer DLQ
|
|
167
|
+
debe replicar el patrón. El test de integración corre en `mscore-jobs-test`.
|
|
168
|
+
|
|
169
|
+
¿Continuamos desde el consumer DLQ?
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Usuario: "sí" → AI carga TASKS.md, busca el item del consumer, arranca implementación.
|
|
173
|
+
|
|
174
|
+
## Sandbox read-only
|
|
175
|
+
|
|
176
|
+
Reglas universales en `../session/references/sandbox-readonly-rules.md` (canon agent-workflow).
|
|
177
|
+
|
|
178
|
+
`resume` es read-only por diseño — los sub-comandos que invoca (`resume-summary`, `checkpoint-read`, `session-resume`) están todos en la lista plan-mode-safe. Igual, en plan mode esta skill describe en el plan file:
|
|
179
|
+
|
|
180
|
+
- Qué sesión activa se detectó (output de `resume-summary`) — lectura ya ejecutada o a ejecutar.
|
|
181
|
+
- Qué presentaría al usuario (resumen estructurado: fase, avance, lo último, próximo paso, decisiones, archivos sin commit, contexto crítico).
|
|
182
|
+
- Qué **NO** hace: cargar OBJECTIVE.md (legacy: OBJETIVO.md) / TASKS.md / DECISIONS.md (legacy: DECISIONES.md) como contexto activo (eso es para post-aprobación del plan), ni invocar `agent-workflow sources` que también es read-only pero forma parte del "flujo activo" post-plan.
|
|
183
|
+
|
|
184
|
+
## Reglas
|
|
185
|
+
|
|
186
|
+
- **Una sola sesión por turno**: si hay varias activas, presentar todas pero retomar una a la vez.
|
|
187
|
+
- **No asumir continuación**: siempre preguntar antes de cargar contexto profundo.
|
|
188
|
+
- **CHECKPOINT.md > session-resume base**: si existe checkpoint, es la fuente de verdad. Si no, base.
|
|
189
|
+
- **Branches verification**: antes de editar, correr `agent-workflow sources`.
|
|
190
|
+
|
|
191
|
+
## Política — sin fallback al CLI
|
|
192
|
+
|
|
193
|
+
Si `agent-workflow resume-summary`, `checkpoint-read` o `sources` 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.
|
|
194
|
+
|
|
195
|
+
## Recursos
|
|
196
|
+
|
|
197
|
+
- `agent-workflow checkpoint-read` — lectura programática del último CHECKPOINT.md.
|
|
198
|
+
- shared-contract.md §17 — formato CHECKPOINT.md.
|
|
199
|
+
- **`agent-workflow:redaccion-simple`** — guía de redacción para el resumen que se presenta al retomar. Frases cortas, una idea por línea.
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rules
|
|
3
|
+
description: "Bundle invokable de reglas transversales qtc-* — carga los 7 anchors canónicos (commits, sandbox plan-mode, MCP read-only, redacción, coding-standards, graduación, branch verification) en un solo lugar. Invocar antes de un commit ad-hoc fuera de `/agent-workflow:session`, antes de editar código sin sesión activa, durante onboarding de usuario nuevo a qtc-*, o cuando se quiera refrescar el contrato qtc-* en una conversación larga. No requiere sesión activa. v0.2.0: el anchor `agent-workflow:commits-policy` ahora documenta el propose-then-execute universal con AskUserQuestion M1 (cualquier solicitud o mención de commit, en/fuera de sesión, hub/project) + el bypass por mensaje literal."
|
|
4
|
+
version: 0.2.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
> **Profile parametrization**: lee `custom_anchors[]` de `profile.json` (resuelto vía cascade 5 capas). Ver [`references/profile-parametrization.md`](../../references/profile-parametrization.md) para el contrato completo y comportamiento por defecto cuando el profile está vacío.
|
|
8
|
+
|
|
9
|
+
# Rules — Bundle invokable de reglas transversales qtc-*
|
|
10
|
+
|
|
11
|
+
Skill agregadora que **carga las reglas transversales del runtime qtc-*** en un solo entry point. No reemplaza al AGENTS.md/CLAUDE.md por fuente (anchor passive de system-prompt); complementa con activación on-demand cuando se necesita refrescar el contrato.
|
|
12
|
+
|
|
13
|
+
Cada sección abajo cita el canon de su anchor — el AI lee el archivo completo cuando la regla requiere precisión (parámetros, casos edge). Acá quedan los headers, las reglas operativas y "cómo aplicar fuera de sesión".
|
|
14
|
+
|
|
15
|
+
## Cuándo invocar
|
|
16
|
+
|
|
17
|
+
- **Antes de un commit ad-hoc fuera de `/agent-workflow:session close`** — para refrescar la política de commits (formato, tag, prohibiciones) si el usuario te pide commitear.
|
|
18
|
+
- **Antes de editar código en una fuente qtc-* sin sesión activa** — para cargar coding-standards y la sandbox plan-mode.
|
|
19
|
+
- **Antes de ejecutar una query vía MCP `<mcp-cert>`/`<mcp-prod>`** — para refrescar el contrato read-only y reconocer cuándo proponer script SQL en lugar de mutación.
|
|
20
|
+
- **Durante onboarding** de un usuario nuevo a qtc-* — bundle único que reemplaza leer 7 archivos sueltos.
|
|
21
|
+
- **En conversaciones largas** donde el contexto qtc se diluyó — refresh rápido.
|
|
22
|
+
- Explícitamente con `Skill(agent-workflow:rules)` o por NL ("qué reglas qtc tengo", "antes de commitear", "refrescá el contrato qtc").
|
|
23
|
+
|
|
24
|
+
## Anchors canónicos
|
|
25
|
+
|
|
26
|
+
### 1. Commits — `agent-workflow:commits-policy`
|
|
27
|
+
|
|
28
|
+
**Canon**: `agent-workflow/skills/session/references/commits-policy.md` (5 reglas, anchor `agent-workflow:commits-policy`).
|
|
29
|
+
|
|
30
|
+
Resumen:
|
|
31
|
+
- El AI **nunca commitea por iniciativa propia**. Lista cerrada de operaciones git prohibidas sin solicitud explícita: `commit`, `commit --amend`, `push/--force`, `merge`, `rebase`, `cherry-pick`, `tag`, `reset --hard`, `restore .`, `checkout -- .`, `clean`.
|
|
32
|
+
- Cuando el usuario pide commit en sesión activa: 1 línea ≤72 chars, descriptiva, **incluye tag `session<NNN>`**, sin `Co-Authored-By`, sin firmas de modelo, sin `--no-verify`.
|
|
33
|
+
- **Propose-then-execute universal** (Regla 3): ante cualquier solicitud o mención de commit como acción a ejecutar, el AI invoca el prompt M1 (`prompts-catalog.md#M1`) con N questions tab-por-fuente. Aplica en closure (auto), en planning/execution con sesión activa, y sin sesión activa. Hub mode = N tabs; project mode = 1 question.
|
|
34
|
+
- **Bypass por mensaje literal** (Regla 5): si el usuario aporta el mensaje exacto del commit en la solicitud (`"commit con mensaje 'X'"`, `"-m 'X'"`), el AI ejecuta directo sin invocar M1.
|
|
35
|
+
- `release`, `release-scripts`, `graduate` nunca commitean.
|
|
36
|
+
|
|
37
|
+
Reglas operativas:
|
|
38
|
+
- Conventional Commits opcional (`feat:`, `fix:`, `chore:`, etc.), no obligatorio.
|
|
39
|
+
- Si la fuente tiene `match=false` (rama inesperada): no commitear; alinear primero vía branch-verification.
|
|
40
|
+
|
|
41
|
+
**Cómo aplicar fuera de sesión**:
|
|
42
|
+
- El tag `session<NNN>` **no aplica** (no hay sesión); el mensaje sugerido lo omite.
|
|
43
|
+
- Mensaje sigue siendo 1 línea, descriptivo, sin co-author/firma/`--no-verify`.
|
|
44
|
+
- **Sí hay propose-then-execute automático**: el AI llama `agent-workflow sources` (sin `--session`) y dispara M1 igual que en closure. Es el mismo prompt, con tag omitido del mensaje sugerido.
|
|
45
|
+
- Workspace no qtc-* (sin `AW-PROJECT`): no hay `sources` disponible. El AI sugiere 1-line msg en chat, espera confirmación, ejecuta. M1 no se invoca en ese contexto.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### 2. Sandbox plan-mode — `agent-workflow:sandbox-readonly`
|
|
50
|
+
|
|
51
|
+
**Canon**: `agent-workflow/skills/session/references/sandbox-readonly-rules.md`.
|
|
52
|
+
|
|
53
|
+
Resumen:
|
|
54
|
+
- Canon universal qtc-*. Cubre Claude Code (plan mode), Codex (sandbox read-only), Copilot (read-only), Warp y cualquier harness equivalente.
|
|
55
|
+
- Se activa por system-reminder del host (`Plan mode is active`, `EnterPlanMode`, sandbox read-only flag, etc.).
|
|
56
|
+
- En plan mode: el AI **describe en el plan file** qué haría en lugar de ejecutarlo. No crea/edita archivos, no ejecuta git/npm/SQL mutante.
|
|
57
|
+
|
|
58
|
+
Reglas operativas:
|
|
59
|
+
- Bloquea: `Edit`/`Write`/`MultiEdit`/`NotebookEdit`, `Bash` con efectos colaterales, `git push`, `gh pr create`, `npm publish`, SQL no idempotente.
|
|
60
|
+
- Permite: `Read`, `Grep`, queries CLI read-only (`sessions`, `*-data`, `checkpoint-read`).
|
|
61
|
+
- Matriz por subcomando CLI: ver §"Plan-mode-safe vs NO seguros" en el canon.
|
|
62
|
+
|
|
63
|
+
**Cómo aplicar fuera de sesión**:
|
|
64
|
+
- Aplica igual — el disparador es el system-reminder del host, no el lifecycle qtc-*.
|
|
65
|
+
- Si la skill se carga fuera de sesión y el host está en plan mode, **describir el output en el plan file** sin ejecutar.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### 3. MCP `<mcp-cert>` / `<mcp-prod>` read-only — `agent-workflow:mcp-readonly`
|
|
70
|
+
|
|
71
|
+
**Canon**: `agent-workflow/docs/shared-contract/plugins.md` §30 (Política BD universal v5.5+).
|
|
72
|
+
|
|
73
|
+
Resumen:
|
|
74
|
+
- MCPs `<mcp-cert>` y `<mcp-prod>` son **read-only por contrato**. Permitido: `SELECT`, `EXPLAIN`, `\d`, `\df`, `\dt`. Prohibido: `INSERT`/`UPDATE`/`DELETE`/`TRUNCATE`/`MERGE`/`CREATE`/`ALTER`/`DROP`/`GRANT`/`REVOKE`/`COPY`.
|
|
75
|
+
- Mutaciones se materializan como script SQL versionado en `docs/scripts/<bundle>/` o staging de sesión. El usuario ejecuta el script manualmente; el AI nunca lo aplica.
|
|
76
|
+
- Excepción única: usuario explícitamente delega ejecución por bloque ("ejecutalo vos contra cert"). Confirmación por cada bloque, limitar al destino mencionado, re-aplicar regla por default en la siguiente tarea.
|
|
77
|
+
|
|
78
|
+
Reglas operativas (defensa en profundidad):
|
|
79
|
+
- **Capa 1 (server-side)**: el CLI inyecta `READONLY=true` en `.mcp.json` (`agent-workflow-cli/src/domain/mcp-entry.ts:99`). El servidor `dbhub` rechaza DML/DDL a nivel TCP.
|
|
80
|
+
- **Capa 2 (PreToolUse hook)**: `agent-workflow hook sql-mutation-guard` registrado en `hooks/hooks.json` con matcher `mcp__.*__execute_sql` — bloquea con exit 2 + mensaje si detecta keywords mutantes.
|
|
81
|
+
- **Capa 3 (convención)**: 22 skills repiten la regla en lenguaje natural; memoria del usuario refuerza.
|
|
82
|
+
- Bypass: `AW_SQL_GUARD=off` (desactiva guard), `AW_SQL_GUARD_ALLOW=cert` (permite sólo cert, no prod).
|
|
83
|
+
|
|
84
|
+
**Cómo aplicar fuera de sesión**:
|
|
85
|
+
- Capas 1 y 2 siguen activas (server READONLY + hook PreToolUse wired) aunque no haya sesión.
|
|
86
|
+
- Si el AI necesita mutar BD: producir script en `docs/scripts/` (o staging temporal) y pedir al usuario que lo aplique — nunca ejecutar mutación vía MCP.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### 4. Redacción simple — `agent-workflow:redaccion-simple`
|
|
91
|
+
|
|
92
|
+
**Canon**: `agent-workflow/skills/redaccion-simple/SKILL.md`.
|
|
93
|
+
|
|
94
|
+
Resumen:
|
|
95
|
+
- Guía universal de estilo para toda prosa que produzca el AI en contexto qtc-*: artefactos `.md` de sesión, commit messages, descripciones de PR, READMEs ad-hoc, respuestas en chat sobre runtime/skills qtc-*.
|
|
96
|
+
- 6 reglas: frases cortas (≤15 palabras), listas sobre prosa, una idea por línea, "qué + por qué" en una línea, sin jerga inventada, sin relleno ("es importante notar…", "cabe destacar…").
|
|
97
|
+
|
|
98
|
+
Reglas operativas por artefacto:
|
|
99
|
+
- **OBJECTIVE**: `## Context` arranca con "Lo que NO está en la pregunta".
|
|
100
|
+
- **TASKS**: prohibido código inline.
|
|
101
|
+
- **DECISIONS**: si una DEC es obvia, no se registra.
|
|
102
|
+
- **EVIDENCE**: cada hallazgo 4-8 líneas.
|
|
103
|
+
- **CONCLUSIONS**: cada `**CN**` con link a evidencia; cada `**RN**` con responsable + cuándo.
|
|
104
|
+
|
|
105
|
+
**Cómo aplicar fuera de sesión**:
|
|
106
|
+
- Aplica igual a commit messages, descripciones de PR, READMEs, respuestas en chat. No requiere sesión activa.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### 5. Coding standards — `agent-workflow:coding-standards`
|
|
111
|
+
|
|
112
|
+
**Canon**: `agent-workflow/skills/coding-standards/SKILL.md`.
|
|
113
|
+
|
|
114
|
+
Resumen:
|
|
115
|
+
- Estándares de código por stack (Java/Spring, Angular/TypeScript, Node). Principios: SOLID, fail-fast, naming descriptivo, DRY contra `shared/`/`common/`.
|
|
116
|
+
- Seguridad: sin secrets en código, sin logear datos sensibles, SQL parametrizado, MCP `<mcp-cert>`/`<mcp-prod>` READONLY.
|
|
117
|
+
- FE-BE R1-R6: Sparse DTO unificado, PATCH semantics para edit, FE envía sólo cambios, sin fallbacks ocultos, Bean Validation con groups, DB stub-first.
|
|
118
|
+
|
|
119
|
+
Reglas operativas:
|
|
120
|
+
- Java/Spring: Constructor Injection, `@Transactional(readOnly=true)` por default, records + Jakarta Validation.
|
|
121
|
+
- Angular: Constructor injection, NgModules, async pipe, sin `any`.
|
|
122
|
+
- HTTP: prohibido `catchError(() => of([]))` — propagar el error.
|
|
123
|
+
- Logging por nivel: ERROR (rompe flujo) / WARN (degrada) / INFO (transacción) / DEBUG (interno).
|
|
124
|
+
- Ramas: `feature/` `fix/` `hotfix/` + kebab.
|
|
125
|
+
|
|
126
|
+
**Cómo aplicar fuera de sesión**:
|
|
127
|
+
- Aplican igual a cualquier edit de código qtc-* o consumer. Sin sesión, la composición desde `dev-workflow`/`implement` no ocurre — depende de que el harness host enganche `coding-standards` por description engaging o de que `agent-workflow:rules` se invoque.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
### 6. Graduación 6-kinds — `agent-workflow:graduacion-routing`
|
|
132
|
+
|
|
133
|
+
**Canon**: `agent-workflow/skills/session/references/graduacion-routing.md` (DEC-002, DEC-003).
|
|
134
|
+
|
|
135
|
+
Resumen:
|
|
136
|
+
- Sólo **6 kinds** graduan al cerrar sesión: `decision`, `manual`, `script`, `especificacion`, `conclusion`, `release`. El resto vive en la sesión.
|
|
137
|
+
- Routing absoluto sin prompt por sesión:
|
|
138
|
+
- `workspace_mode=hub` → `<hub>/docs/<categoria>/`.
|
|
139
|
+
- `workspace_mode=project` → `<project>/docs/<categoria>/`.
|
|
140
|
+
- Comando CLI: `agent-workflow graduate --kind <K> --session <CODE> --slug <kebab>`. `script` y `release` se manejan vía `/agent-workflow:release` exclusivamente.
|
|
141
|
+
|
|
142
|
+
Reglas operativas:
|
|
143
|
+
- `decision` → `docs/decisiones/NNN-<slug>.md`.
|
|
144
|
+
- `manual` → `docs/manuales/NNN-<slug>.md`.
|
|
145
|
+
- `especificacion` → `docs/especificaciones/NNN-<slug>/`.
|
|
146
|
+
- `conclusion` → `docs/conclusiones/NNN-<slug>.md` (opt-in; default = no graduar).
|
|
147
|
+
- `release` → `docs/release/NNN-informe-release.md` (vía `/agent-workflow:release`).
|
|
148
|
+
- `script` → `docs/scripts/NNN-sessionXXX-<slug>/` (vía `/agent-workflow:release`).
|
|
149
|
+
|
|
150
|
+
**Cómo aplicar fuera de sesión**:
|
|
151
|
+
- El CLI **rechaza** la invocación sin `--session` y `--slug`. Un artefacto graduable producido fuera de sesión queda huérfano.
|
|
152
|
+
- Workaround: crear sesión retroactiva o mover archivos manualmente — no documentado como flujo canónico.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
### 7. Branch verification — `agent-workflow:branch-verification`
|
|
157
|
+
|
|
158
|
+
**Canon**: `agent-workflow/skills/session/references/branch-verification.md`.
|
|
159
|
+
|
|
160
|
+
Resumen:
|
|
161
|
+
- Gate de avance del lifecycle: en crear sesión, retomar y entrada a execution se valida `current_branch == expected_work_branch` por fuente.
|
|
162
|
+
- 3 casos:
|
|
163
|
+
- **Caso A** (`match=false`, `dirty=false`): `AskUserQuestion` → checkout esperado / mantener current y actualizar sesión / cancelar.
|
|
164
|
+
- **Caso B** (`match=false`, `dirty=true`): pausar y esperar resolución manual. Listar archivos modificados. **NO ofrecer checkout**.
|
|
165
|
+
- **Caso C** (analyze session editando código): preguntar nombre de rama, ofrecer `checkout` o `checkout -b` desde `main_branch`, registrar vía `project-md-upsert --update-phase`.
|
|
166
|
+
- Hard gate cross-fuente: si `cross_source_consistent=false` (hub mode con divergencia), bloquear hasta alinear o declarar divergencia explícita.
|
|
167
|
+
|
|
168
|
+
Reglas operativas:
|
|
169
|
+
- Hook PreToolUse `agent-workflow hook branch-check` registrado en `hooks/hooks.json` con matcher `Edit|Write|MultiEdit|NotebookEdit`.
|
|
170
|
+
- Sin sesión activa pero con `working_branches` en AW-PROJECT.Status: el hook resuelve `expected_work_branch` desde working_branches y sí dispara.
|
|
171
|
+
- Sin sesión y sin `working_branches`: degrada a no-op silencioso.
|
|
172
|
+
|
|
173
|
+
**Cómo aplicar fuera de sesión**:
|
|
174
|
+
- En hubs con `working_branches` declaradas (como `agent-workflow-last`): hook activo, gate funciona.
|
|
175
|
+
- En workspaces project sin sesión: gate inactivo. El AI debe verificar rama manualmente con `agent-workflow sources` si el contexto lo amerita.
|
|
176
|
+
- Nunca ejecutar `git stash`, `git reset --hard`, `git restore .`, `git clean` sin confirmación explícita del usuario para esa fuente.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Relación con AGENTS.md/CLAUDE.md por fuente
|
|
181
|
+
|
|
182
|
+
Esta skill es la capa **active (on-demand)** del modelo de aplicación de reglas. Coexiste con la capa **passive (system-prompt)**:
|
|
183
|
+
|
|
184
|
+
| Capa | Mecanismo | Cuándo carga | Cubre |
|
|
185
|
+
|---|---|---|---|
|
|
186
|
+
| Passive | `AGENTS.md`/`CLAUDE.md` por fuente + bloque transversal en hub | system-prompt automático en cada conversación sobre el repo | "el AI ve los anchors siempre que abre el repo" |
|
|
187
|
+
| Active | `Skill(agent-workflow:rules)` invokable + description engaging | on-demand vía invocación explícita o NL match | "el AI carga los anchors completos cuando los necesita" |
|
|
188
|
+
|
|
189
|
+
Las 2 capas no se solapan:
|
|
190
|
+
- El AGENTS.md tiene punteros breves a anchors (1 línea por anchor) — load automático.
|
|
191
|
+
- `agent-workflow:rules` expande los anchors completos (5-7 líneas + reglas operativas + cómo aplicar fuera de sesión) — carga on-demand.
|
|
192
|
+
|
|
193
|
+
Si el AGENTS.md ya está cargado, `agent-workflow:rules` actúa como **refresh verbose** del contrato.
|
|
194
|
+
|
|
195
|
+
## Cómo aplicar fuera de sesión (resumen cross-anchor)
|
|
196
|
+
|
|
197
|
+
Tabla rápida para situaciones comunes sin sesión activa:
|
|
198
|
+
|
|
199
|
+
| Situación | Regla aplicable | Acción |
|
|
200
|
+
|---|---|---|
|
|
201
|
+
| Pedís un commit ad-hoc | commits-policy regla 2 + regla 3 universal | M1 propose-then-execute con `agent-workflow sources` (sin `--session`). Mensaje sugerido sin tag `session<NNN>`, sin co-author, sin `--no-verify`. |
|
|
202
|
+
| Pedís commit con mensaje literal en la solicitud | commits-policy regla 5 | Bypass de M1; el AI ejecuta `git commit -m "<literal>"` directo (validando rama, hooks, Regla 2). |
|
|
203
|
+
| Editás código de fuente qtc-* | coding-standards + branch-verification | Verificar rama (`agent-workflow sources`); aplicar reglas de stack. |
|
|
204
|
+
| Ejecutás query MCP cert/prod | mcp-readonly | Sólo SELECT/EXPLAIN. Mutación → script en `docs/scripts/`. |
|
|
205
|
+
| Escribís prosa qtc-* (PR description, README) | redaccion-simple | 6 reglas (frases cortas, listas, sin jerga). |
|
|
206
|
+
| Producís artefacto curable (decisión, manual) | graduacion-routing | Crear sesión retroactiva o documentar como fuera de scope graduable. |
|
|
207
|
+
| Host en plan mode | sandbox-readonly | Describir en plan file, no ejecutar mutaciones. |
|
|
208
|
+
|
|
209
|
+
## Sandbox read-only
|
|
210
|
+
|
|
211
|
+
Canon universal en `../session/references/sandbox-readonly-rules.md`. Esta skill es read-only por diseño — carga reglas, no ejecuta ni edita nada.
|
|
212
|
+
|
|
213
|
+
En plan mode: describir en el plan file qué anchors se cargarían y para qué se invoca la skill (situación concreta). NO ejecuta `Write`, `Edit`, `MultiEdit`, `Bash` con efectos colaterales ni queries MCP mutantes.
|
|
214
|
+
|
|
215
|
+
Compatible con plan mode sin restricciones adicionales.
|
|
216
|
+
|
|
217
|
+
## Referencias
|
|
218
|
+
|
|
219
|
+
- **session SKILL** (`../session/SKILL.md`) — lifecycle universal donde estas reglas se invocan por composición durante las 4 fases.
|
|
220
|
+
- **shared-contract** (`../../docs/shared-contract.md`) — contrato cross-plugin de la familia qtc-*.
|
|
221
|
+
- **Recomendación de uso conjunto con AGENTS.md/CLAUDE.md**:
|
|
222
|
+
- El AGENTS.md/CLAUDE.md por fuente (o el bloque transversal en hub) lista 1 línea por anchor con su path canon. Sirve como "tabla de contenidos" siempre cargada.
|
|
223
|
+
- Esta skill `agent-workflow:rules` carga los 7 anchors expandidos. Sirve cuando se necesita refrescar el contrato o cuando el AGENTS.md no está disponible.
|
|
224
|
+
- **Origen**: session051-analyze-reglas-transversales-fuera-sesion → CONCLUSIONS C7/R7/QW6. Graduado a `docs/conclusiones/006-reglas-transversales-fuera-sesion.md`.
|
|
File without changes
|