@tacuchi/agent-workflow-cli 6.2.0 → 7.0.1
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/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/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/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 +26 -0
- package/skills/agent-workflow/commands/compact.md +24 -0
- package/skills/agent-workflow/commands/doctor.md +100 -0
- package/skills/agent-workflow/commands/export-arq.md +77 -0
- package/skills/agent-workflow/commands/export-conclusions.md +78 -0
- package/skills/agent-workflow/commands/export-plan.md +74 -0
- package/skills/agent-workflow/commands/export-qa-note.md +30 -0
- package/skills/agent-workflow/commands/export-report.md +78 -0
- package/skills/agent-workflow/commands/export-requirement.md +30 -0
- package/skills/agent-workflow/commands/export-scripts.md +92 -0
- package/skills/agent-workflow/commands/export-tech-manuals.md +75 -0
- package/skills/agent-workflow/commands/export-tech-note.md +30 -0
- package/skills/agent-workflow/commands/hub-init.md +82 -0
- package/skills/agent-workflow/commands/migrate.md +56 -0
- package/skills/agent-workflow/commands/project-init.md +60 -0
- package/skills/agent-workflow/commands/resume.md +22 -0
- package/skills/agent-workflow/commands/rules.md +40 -0
- package/skills/agent-workflow/commands/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,198 @@
|
|
|
1
|
+
# Verificación de rama de trabajo — Referencia canónica (agent-workflow)
|
|
2
|
+
|
|
3
|
+
> Documento canónico de la familia qtc-* para validación y orquestación de ramas. Referenciado por `skills/session/SKILL.md` y el hook PreToolUse (`agent-workflow hook branch-check`). Los flow plugins (qtc-dev, qtc-design, qtc-analyze) **no duplican** este flujo — apuntan acá.
|
|
4
|
+
|
|
5
|
+
## Contexto
|
|
6
|
+
|
|
7
|
+
Las **fuentes del workspace** (alias, path, rama principal) se declaran una sola vez en el bloque `AW-PROJECT` de `CLAUDE.md` y `AGENTS.md` (sección `Fuentes`). Cada sesión activa declara su **rama de trabajo por fuente** en `Status → Sesiones activas`. El sub-comando `agent-workflow sources` resuelve ambas, las contrasta con el git status real y devuelve un payload uniforme.
|
|
8
|
+
|
|
9
|
+
Campos relevantes por fuente:
|
|
10
|
+
- `alias` — nombre corto (ej: `core`, `dev`, `api`, `web`).
|
|
11
|
+
- `path` — ruta local al repo de esa fuente.
|
|
12
|
+
- `main_branch` — base de la cual sale y hacia la cual vuelve la rama de trabajo (default `certificacion`).
|
|
13
|
+
- `expected_work_branch` — rama esperada según resolución (sesión > working_branches > main_branch para analyze).
|
|
14
|
+
- `current_branch` — rama actual del repo (live).
|
|
15
|
+
- `match` — `current_branch == expected_work_branch`.
|
|
16
|
+
- `dirty` — hay archivos modificados sin commit (`git status --porcelain`).
|
|
17
|
+
|
|
18
|
+
**Regla fundamental**: la rama esperada **nunca se asume desde la rama actual**. El usuario puede haber cambiado de rama manualmente para revisar otras cosas; el agente verifica antes de cualquier acción.
|
|
19
|
+
|
|
20
|
+
## Cuándo se ejecuta el check
|
|
21
|
+
|
|
22
|
+
| Momento | Comando | Quién dispara |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| 1. Crear sesión | `agent-workflow sources [--session NNN] [--flow F]` | `agent-workflow/skills/session/SKILL.md` paso 6 |
|
|
25
|
+
| 2. Retomar sesión | igual | `skills/session/SKILL.md` paso retomar |
|
|
26
|
+
| 3. Entrar a fase execution | igual | `skills/session/SKILL.md` fase 2 |
|
|
27
|
+
| 4. PreToolUse Edit/Write/MultiEdit/NotebookEdit | `agent-workflow check-branch --file <path> --strict` | `agent-workflow hook branch-check` (hook) |
|
|
28
|
+
|
|
29
|
+
## Estructura del output de `agent-workflow sources`
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"workspace_mode": "hub",
|
|
34
|
+
"is_hub": true,
|
|
35
|
+
"session_code": "003",
|
|
36
|
+
"scope": null,
|
|
37
|
+
"sources": [
|
|
38
|
+
{
|
|
39
|
+
"alias": "core",
|
|
40
|
+
"path": "/Users/x/Git/agent-workflow",
|
|
41
|
+
"main_branch": "certificacion",
|
|
42
|
+
"expected_work_branch": "certificacion",
|
|
43
|
+
"current_branch": "certificacion",
|
|
44
|
+
"match": true,
|
|
45
|
+
"dirty": false,
|
|
46
|
+
"changed_files": [],
|
|
47
|
+
"is_repo": true,
|
|
48
|
+
"error": null
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"session_branches": ["core:certificacion", "dev:certificacion"],
|
|
52
|
+
"working_branches_from_status": {"core": "certificacion", "dev": "certificacion"},
|
|
53
|
+
"cross_source_consistent": true,
|
|
54
|
+
"divergent_sources": []
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Interpretación por fuente:
|
|
59
|
+
- `match: true` → todo OK.
|
|
60
|
+
- `match: false` + `dirty: false` → rama distinta, repo limpio. Aplicar **Caso A**.
|
|
61
|
+
- `match: false` + `dirty: true` → rama distinta y cambios sin commit. Aplicar **Caso B**.
|
|
62
|
+
- Para `flow=analyze` con cambios decididos a mitad de sesión → **Caso C** (no se manifiesta en el output; lo dispara el usuario al pedir editar).
|
|
63
|
+
|
|
64
|
+
Interpretación cross-fuente (hub mode):
|
|
65
|
+
- `cross_source_consistent: false` → hard gate (Cross-fuente abajo).
|
|
66
|
+
|
|
67
|
+
## Caso A — repo limpio, rama distinta (`match=false, dirty=false`)
|
|
68
|
+
|
|
69
|
+
El agente informa la divergencia y **pide confirmación** vía `AskUserQuestion`. Spec literal (header `branch:<alias>`, 3 opciones) → `prompts-catalog.md#M2`. Resumen:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
La fuente `core` (~/Git/agent-workflow) está en `main` pero la rama
|
|
73
|
+
de trabajo es `certificacion`. ¿Hago `git checkout certificacion`?
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Opciones:
|
|
77
|
+
- **Sí, hacer checkout** → ejecutar `git -C <path> checkout <expected>` y reintentar la acción original.
|
|
78
|
+
- **Mantener current y actualizar la sesión** → invocar `agent-workflow project-md-upsert --update-phase <folder> --branches <alias>:<current>` para registrar la nueva expectativa, luego avanzar.
|
|
79
|
+
- **Cancelar** → abortar la acción que disparó el check.
|
|
80
|
+
|
|
81
|
+
## Caso B — repo dirty, rama distinta (`match=false, dirty=true`)
|
|
82
|
+
|
|
83
|
+
El agente **pausa y espera resolución manual** del usuario. NO propone checkout porque podría perder trabajo:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
La fuente `core` está en `main` (esperada `certificacion`) con cambios sin
|
|
87
|
+
commit en:
|
|
88
|
+
- skills/session/SKILL.md
|
|
89
|
+
- hooks/hooks.json
|
|
90
|
+
No voy a cambiar de rama porque podrías perder trabajo.
|
|
91
|
+
Resolvé manualmente (commit / stash / discard) y avisame cuando continúo.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Cuando el usuario indica "listo" / "continúa" / equivalente:
|
|
95
|
+
1. Re-ejecutar `agent-workflow check-branch --source <alias>`.
|
|
96
|
+
2. Si ahora `dirty=false` → aplicar Caso A.
|
|
97
|
+
3. Si sigue `dirty=true` → informar y esperar de nuevo.
|
|
98
|
+
|
|
99
|
+
**Prohibido sin confirmación explícita del usuario** (bajo ningún atajo):
|
|
100
|
+
- `git stash`
|
|
101
|
+
- `git reset --hard`
|
|
102
|
+
- `git checkout -- .`
|
|
103
|
+
- `git restore .`
|
|
104
|
+
- `git clean -fd`
|
|
105
|
+
|
|
106
|
+
Estas operaciones son destructivas y no autorizadas por el lifecycle.
|
|
107
|
+
|
|
108
|
+
## Caso C — flow=analyze + edición decidida
|
|
109
|
+
|
|
110
|
+
Las sesiones `flow=analyze` resuelven `expected_work_branch = main_branch` (default `certificacion`) cuando no se declaran `--branches` explícitamente al crear la sesión. La intención: **leer producción**, no editarla.
|
|
111
|
+
|
|
112
|
+
Si durante la investigación el usuario decide hacer cambios en código, ejecutar **2 prompts encadenados**. Spec literal (headers `work-branch` → `checkout` o `branch-new`) → `prompts-catalog.md#M3`. Resumen:
|
|
113
|
+
|
|
114
|
+
1. El agente avisa: "vamos a salir de modo lectura → necesitamos la rama de trabajo".
|
|
115
|
+
2. **Prompt 1** — pedir nombre de rama de trabajo (sugerencia por defecto: `feature/sessionNNN-<slug>`); el `Other` auto cubre nombres alternativos.
|
|
116
|
+
3. **Prompt 2** — verifica con `git -C <path> rev-parse --verify <work_branch>`:
|
|
117
|
+
- **Si la rama existe** → `AskUserQuestion`: "¿Hago `git checkout <work_branch>`?" (header `checkout`).
|
|
118
|
+
- **Si no existe** → `AskUserQuestion`: "Crear `<work_branch>` desde `<main_branch>`? (`git checkout -b <work_branch> <main_branch>`)" (header `branch-new`).
|
|
119
|
+
4. Sólo con confirmación explícita, ejecutar el comando.
|
|
120
|
+
5. Registrar la nueva rama en AW-PROJECT.Status → la sesión vía `project-md-upsert --update-phase <folder> --branches <alias>:<work_branch>`.
|
|
121
|
+
6. Continuar con la edición.
|
|
122
|
+
|
|
123
|
+
El usuario también puede declarar `--branches alias:rama` al crear la sesión analyze; ese override gana sobre el default `main_branch`. Caso C sólo aplica cuando la sesión arrancó en modo lectura (sin branches declaradas).
|
|
124
|
+
|
|
125
|
+
## Cross-fuente (hub mode) — hard gate
|
|
126
|
+
|
|
127
|
+
En workspaces `Mode: hub`, la convención es que **todas las fuentes tocadas por una sesión comparten la misma rama de trabajo** (la "rama de la sesión"). Divergencias deben ser declaradas explícitamente al crear la sesión.
|
|
128
|
+
|
|
129
|
+
`cmd_sources` consolida y devuelve:
|
|
130
|
+
- `cross_source_consistent: bool` — true si todas las fuentes con `expected_work_branch` declarada apuntan a la misma rama.
|
|
131
|
+
- `divergent_sources: [{alias, current, expected}]` — fuentes que difieren del consenso.
|
|
132
|
+
|
|
133
|
+
**Si `cross_source_consistent=false`**, el agente bloquea avance con `AskUserQuestion`. Spec literal (header `cross-branch`, 3 opciones, preview ASCII opcional con la matriz divergente) → `prompts-catalog.md#M4`. Resumen:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
Las fuentes en este workspace apuntan a ramas distintas:
|
|
137
|
+
- core: actual=certificacion esperada=certificacion
|
|
138
|
+
- dev: actual=feature/foo esperada=certificacion
|
|
139
|
+
- analyze: actual=feature/foo esperada=certificacion
|
|
140
|
+
|
|
141
|
+
Esperaba que todas compartan rama. ¿Cómo resolvemos?
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Opciones:
|
|
145
|
+
- **Alinear todas a una misma rama** → dispara prompt anidado para elegir cuál rama (current consensus / expected / otra vía Other) y aplica Caso A por fuente divergente.
|
|
146
|
+
- **Declarar divergencia explícita** → re-crear la sesión con `--branches alias:rama` distintos; o actualizar la activa con `project-md-upsert --update-phase <folder> --branches "alias1:rama1,alias2:rama2"`.
|
|
147
|
+
- **Cancelar acción** → abortar y dejar al usuario decidir manualmente.
|
|
148
|
+
|
|
149
|
+
No avanzar a planning/execution hasta que `cross_source_consistent=true` o el usuario haya declarado explícitamente la divergencia.
|
|
150
|
+
|
|
151
|
+
## Casos especiales
|
|
152
|
+
|
|
153
|
+
| Situación | Estado | Acción |
|
|
154
|
+
|---|---|---|
|
|
155
|
+
| Fuente fuera de git | `is_repo: false` | Informar al usuario, no bloquear. No participa en cross-fuente. |
|
|
156
|
+
| HEAD detached | `current_branch == "HEAD"` | Tratar como mismatch limpio (Caso A) — proponer checkout a expected. |
|
|
157
|
+
| Path inexistente | `error` poblado | Alertar — fuente desactualizada en AW-PROJECT. Sugerir `agent-workflow:project-init` para corregir. |
|
|
158
|
+
| Archivo fuera de cualquier fuente | hook devuelve `reason: file_not_in_managed_source` | El hook no bloquea; el SKILL no incluye la fuente en validación. |
|
|
159
|
+
| Múltiples sesiones activas | `_resolve_session_branches` toma la primera | Pasar `--session CODE` explícito si se necesita otra. |
|
|
160
|
+
| Sesión sin `--branches` declarada (no-analyze) | `expected_work_branch` cae a `working_branches_from_status` | Si tampoco hay working_branches, `expected_work_branch=null` y no se valida. |
|
|
161
|
+
| Sesión analyze sin `--branches` | `expected_work_branch = main_branch` | Default Caso C-aware; el SKILL trata edición como Caso C. |
|
|
162
|
+
|
|
163
|
+
## Integración con el hook PreToolUse
|
|
164
|
+
|
|
165
|
+
`agent-workflow hook branch-check` (invocado desde `hooks/hooks.json` y `codex-hooks/hooks.json`):
|
|
166
|
+
|
|
167
|
+
1. Lee `tool_input.file_path` del stdin JSON (`Edit | Write | MultiEdit | NotebookEdit`).
|
|
168
|
+
2. Resuelve la fuente dueña validando el path contra `Fuentes` del bloque AW-PROJECT (hub-aware).
|
|
169
|
+
3. Resuelve flow desde la sesión activa.
|
|
170
|
+
4. Calcula `expected_work_branch` combinando session branches + working branches + main_branch.
|
|
171
|
+
5. Si match → exit 0 (allow).
|
|
172
|
+
6. Si mismatch → exit 2 (block) con stderr formateado por Caso A o B.
|
|
173
|
+
|
|
174
|
+
El stderr siempre apunta acá (`skills/session/references/branch-verification.md`) para que el AI sepa cómo proceder.
|
|
175
|
+
|
|
176
|
+
## Comandos útiles
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
# Visión global del workspace
|
|
180
|
+
agent-workflow sources
|
|
181
|
+
|
|
182
|
+
# Foco en una sesión y subset de fuentes
|
|
183
|
+
agent-workflow sources --session 003 --scope core,dev,analyze
|
|
184
|
+
|
|
185
|
+
# Override flow (ej: probar comportamiento analyze en una sesión dev)
|
|
186
|
+
agent-workflow sources --flow analyze
|
|
187
|
+
|
|
188
|
+
# Validación atómica de UNA fuente (uso del hook)
|
|
189
|
+
agent-workflow check-branch --source core --strict
|
|
190
|
+
agent-workflow check-branch --file /path/to/file.py --strict
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Referencias
|
|
194
|
+
|
|
195
|
+
- `agent-workflow/src/lib/sources.ts` — implementación (`checkSourceBranch`, `expectedWorkBranch`, `resolveSessionFlow`, `cmdSources`, `cmdCheckBranch`).
|
|
196
|
+
- `agent-workflow hook branch-check` — comando hook PreToolUse universal.
|
|
197
|
+
- `skills/session/SKILL.md` — orquestación del check en el lifecycle.
|
|
198
|
+
- `docs/shared-contract.md §27` — contrato de promoción del check al agent-workflow.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# commits-policy — política controlada de commits qtc-*
|
|
2
|
+
|
|
3
|
+
Anchor canónico: `agent-workflow:commits-policy`. Referenciable cross-plugin desde cualquier skill via path relativo o nombre.
|
|
4
|
+
|
|
5
|
+
## Regla 1 — el AI NUNCA commitea por iniciativa propia
|
|
6
|
+
|
|
7
|
+
Lista cerrada de operaciones git **prohibidas** sin solicitud explícita del usuario:
|
|
8
|
+
|
|
9
|
+
- `git commit` (incluye `--amend`)
|
|
10
|
+
- `git push` (incluye `--force`)
|
|
11
|
+
- `git merge` / `git rebase` / `git cherry-pick`
|
|
12
|
+
- `git tag` (creación o edición)
|
|
13
|
+
- `git reset --hard` / `git restore .` / `git checkout -- .` / `git clean`
|
|
14
|
+
|
|
15
|
+
El AI **sí puede** ejecutar git read-only sin pedir permiso: `status`, `log`, `diff`, `branch --show-current`, `rev-parse`, `show`.
|
|
16
|
+
|
|
17
|
+
Para `git checkout` (cambio de rama) ver `branch-verification.md` — requiere `AskUserQuestion` aunque no sea destructivo.
|
|
18
|
+
|
|
19
|
+
## Regla 2 — formato canónico cuando el usuario pide commit
|
|
20
|
+
|
|
21
|
+
Cuando el usuario solicita explícitamente un commit, el mensaje debe ser:
|
|
22
|
+
|
|
23
|
+
- **Una sola línea**.
|
|
24
|
+
- **Corto** (≤72 chars sugerido; cortar si excede).
|
|
25
|
+
- **Descriptivo y práctico** — qué cambia, no cómo.
|
|
26
|
+
- **Incluye el código de sesión** activa: `session<NNN>` como tag o dentro de un prefijo.
|
|
27
|
+
- Prefijo Conventional Commits **opcional** (`feat:`, `fix:`, `docs:`, `chore:`, `refactor:`, `test:`).
|
|
28
|
+
|
|
29
|
+
**Prohibido**:
|
|
30
|
+
- Trailers `Co-Authored-By: …`.
|
|
31
|
+
- Firmas de modelo (`🤖 Generated with …`, `Generated by Claude`, etc.).
|
|
32
|
+
- Líneas adicionales (multi-line body, footer).
|
|
33
|
+
- Emojis, salvo que el usuario los pida explícitamente.
|
|
34
|
+
- Flag `--no-verify` (respetar siempre los hooks pre-commit).
|
|
35
|
+
|
|
36
|
+
### Ejemplos válidos
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
session007: agrega politica de commits controlados
|
|
40
|
+
feat(session012): nuevo skill release-scripts
|
|
41
|
+
fix(session018): corrige drift en hooks.json del CLI
|
|
42
|
+
docs: actualiza shared-contract con anchor commits-policy
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Ejemplos inválidos
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
# multilinea (body extra prohibido)
|
|
49
|
+
feat: agrega politica
|
|
50
|
+
Esta política aplica a toda la familia qtc-*.
|
|
51
|
+
|
|
52
|
+
# co-author trailer (prohibido)
|
|
53
|
+
session007: agrega politica
|
|
54
|
+
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
55
|
+
|
|
56
|
+
# firma de modelo (prohibida)
|
|
57
|
+
session007: agrega politica
|
|
58
|
+
🤖 Generated with Claude Code
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Caso fuera de sesión activa
|
|
62
|
+
|
|
63
|
+
Si el usuario pide un commit fuera del contexto de sesión qtc-* (ej. workspace sin AW-PROJECT, o trabajo ad-hoc), el formato se relaja a "1 línea + sin co-author"; el tag `session<NNN>` no aplica. El propose-then-execute de Regla 3 sigue activo — la única diferencia es que el mensaje sugerido omite el tag.
|
|
64
|
+
|
|
65
|
+
## Regla 3 — propose-then-execute universal con AskUserQuestion
|
|
66
|
+
|
|
67
|
+
Ante **cualquier** solicitud o mención de commit como acción a ejecutar (closure auto-disparado, solicitud explícita en planning/execution con sesión activa, solicitud explícita sin sesión, workspace hub o project), el AI invoca el prompt M1 (`prompts-catalog.md#M1`) **antes** de ejecutar `git commit`. No es un patrón privado del closure: closure es una de sus aplicaciones.
|
|
68
|
+
|
|
69
|
+
Disparadores canónicos:
|
|
70
|
+
|
|
71
|
+
1. **Closure de `/agent-workflow:session`** (auto): antes de `session-close`, el skill `session` ejecuta el flujo M1 sobre las fuentes con `dirty=true`. Documentado en `skills/session/SKILL.md` §"Cerrar sesión — 2. Proponer commits".
|
|
72
|
+
2. **Solicitud explícita del usuario con sesión activa** ("commitea esto", "guardá los cambios", "subí los cambios" sin mensaje literal): el AI llama `agent-workflow sources --session <CODE>` y dispara M1 según el resultado.
|
|
73
|
+
3. **Solicitud explícita del usuario sin sesión activa** (workspace qtc-* hub/project sin sesiones registradas en `AW-PROJECT.Status`): el AI llama `agent-workflow sources` (sin `--session`) y dispara M1. El tag `session<NNN>` del mensaje sugerido se omite (Regla 2).
|
|
74
|
+
4. **Solicitud del usuario en workspace no qtc-*** (sin `AW-PROJECT`): no hay `sources` disponible. El AI cae al flujo simple — sugiere 1-line msg en chat y espera confirmación antes de ejecutar. No invoca `AskUserQuestion`.
|
|
75
|
+
|
|
76
|
+
Pasos del flujo M1:
|
|
77
|
+
|
|
78
|
+
1. Llamar a `agent-workflow sources [--session <CODE>?]`. Si la salida es inválida (workspace no qtc-*) → ver disparador 4 arriba.
|
|
79
|
+
2. Si hay 1+ fuentes con `dirty=true`, invocar **una sola** `AskUserQuestion` con N questions tab-por-fuente (N = #fuentes-dirty, máx 4 simultáneas). Spec literal → `prompts-catalog.md#M1`. Resumen:
|
|
80
|
+
- Header de cada tab: `<alias>` puro.
|
|
81
|
+
- 2 opciones explícitas: "Aprobar sugerido (Recomendado)" con el mensaje canónico / "Saltar esta fuente".
|
|
82
|
+
- `Other` auto-inyectado = mensaje de commit custom.
|
|
83
|
+
- Si N > 4: ejecutar en tandas; registrar parcial en `CHECKPOINT.md` (si hay sesión activa) o en chat al usuario (si no la hay).
|
|
84
|
+
3. Sólo ejecutar `git commit -m "<msg>"` en las fuentes donde el usuario aprobó o escribió Other, una a una (`git -C <path>`). Respetar hooks (sin `--no-verify`).
|
|
85
|
+
4. Si la fuente tiene `match=false` (rama distinta a la esperada), **omitirla del prompt y abortar el commit** en esa fuente; avisar al usuario para que alinee la rama primero.
|
|
86
|
+
5. Si todas las fuentes tienen `dirty=false`, **skip silencioso** — no invocar `AskUserQuestion`. Informar al usuario en chat que no hay nada que commitear.
|
|
87
|
+
|
|
88
|
+
Excepciones a recordar:
|
|
89
|
+
- Project mode con 1 fuente dirty → N=1 question. Sigue siendo el flujo M1.
|
|
90
|
+
- Hub mode con N>1 fuentes dirty → N questions tab-por-fuente.
|
|
91
|
+
- Workspace marketplace / hub donde el workspace mismo (no las fuentes declaradas) tiene cambios: el AI **no** los commitea por iniciativa; sólo opera sobre las fuentes declaradas en `AW-PROJECT.Fuentes`.
|
|
92
|
+
|
|
93
|
+
## Regla 4 — interacción con release / release-scripts / graduation
|
|
94
|
+
|
|
95
|
+
Los skills `release` y `release-scripts` (qtc-dev) son solo lectura/reporte: nunca commitean ni mergean. Lo mismo aplica a `graduate` (agent-workflow) — graduar artefactos crea/mueve archivos, pero el commit del cambio queda para el flujo M1 (Regla 3) o para la solicitud explícita del usuario.
|
|
96
|
+
|
|
97
|
+
## Regla 5 — bypass por mensaje literal
|
|
98
|
+
|
|
99
|
+
Si el usuario aporta el mensaje exacto del commit en la solicitud — por ejemplo `"commitea con mensaje 'session075: doc canon'"`, `"commit -m 'fix: X'"`, o `"--message <texto>"` — el AI ejecuta `git commit -m "<literal>"` directamente, sin invocar `AskUserQuestion`. La decisión ya está tomada; preguntar otra vez es redundante.
|
|
100
|
+
|
|
101
|
+
Reglas operativas:
|
|
102
|
+
|
|
103
|
+
- La señal que dispara el bypass es **el mensaje literal explícito** (comillas, `-m`/`--message`, o equivalente). Una solicitud genérica ("commitea esto") **no** califica — sigue el flujo M1 de Regla 3.
|
|
104
|
+
- El bypass aplica por fuente. Si el usuario aporta mensaje literal para una fuente concreta ("commitea `core` con mensaje 'X'"), el AI ejecuta solo ahí; las demás fuentes dirty siguen el flujo M1 (Regla 3) o esperan instrucción.
|
|
105
|
+
- El AI sigue validando rama (`match=true`), hooks pre-commit y formato canónico (Regla 2). El bypass no salta esas guardas — sólo evita el prompt interactivo.
|
|
106
|
+
- Si el mensaje literal aportado viola Regla 2 (multi-línea, co-author, etc.), el AI **avisa antes de ejecutar** y pide confirmación. No reescribe silenciosamente.
|
|
107
|
+
|
|
108
|
+
## Recursos relacionados
|
|
109
|
+
|
|
110
|
+
- `skills/session/references/branch-verification.md` — el commit prompt requiere ramas consistentes.
|
|
111
|
+
- `agent-workflow:redaccion-simple` — los mensajes de commit siguen las mismas reglas de redacción (frases cortas, sin jerga).
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Communication style — confirm before mutate
|
|
2
|
+
|
|
3
|
+
> Anchor `agent-workflow:communication-style`. Regla de interacción para skills que producen **artefactos consolidados** (release bundle SQL, release-scripts thematic bundle, project-init full overwrite).
|
|
4
|
+
|
|
5
|
+
## La regla
|
|
6
|
+
|
|
7
|
+
**Confirmar antes de mutar archivos consolidados.** Cuando una skill va a generar un artefacto que junta/sobrescribe el trabajo de N sesiones (no un edit puntual), pregunta al usuario antes de escribir.
|
|
8
|
+
|
|
9
|
+
## Cuándo aplica
|
|
10
|
+
|
|
11
|
+
| Skill | Artefacto a generar | Confirmar antes |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `release` | `docs/releases/NNN-<slug>/REPORT.md` + bundle SQL | Sí |
|
|
14
|
+
| `release-scripts` | `docs/releases/NNN-<slug>/scripts-by-theme/` | Sí |
|
|
15
|
+
| `project-init --force` | Sobrescribir bloque AW-PROJECT existente | Sí |
|
|
16
|
+
| `migrate --apply` | Renombrar `.claude/sessions/` → `.workflow/sessions/` | Sí |
|
|
17
|
+
| `hub-init --apply` | Cambiar `Mode: project` → `Mode: hub` | Sí |
|
|
18
|
+
|
|
19
|
+
## Cuándo NO aplica
|
|
20
|
+
|
|
21
|
+
- Edits puntuales a un archivo (skills `implement`, `refactor`, `design-deliver`, etc.).
|
|
22
|
+
- Read-only operations (`/agent-workflow:doctor`, `aw sessions`, `aw checkpoint-read`).
|
|
23
|
+
- `--dry-run` flags — la skill solo describe lo que haría, sin escribir.
|
|
24
|
+
|
|
25
|
+
## Forma del prompt
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Voy a generar:
|
|
29
|
+
- <artefacto 1>: <ruta>
|
|
30
|
+
- <artefacto 2>: <ruta>
|
|
31
|
+
|
|
32
|
+
Esto sobrescribe/crea N archivos. ¿Procedo?
|
|
33
|
+
- Sí, generar
|
|
34
|
+
- Solo dry-run (mostrá qué haría sin escribir)
|
|
35
|
+
- Cancelar
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Si el usuario declina
|
|
39
|
+
|
|
40
|
+
- **Solo dry-run**: la skill imprime el contenido que generaría y deja referencias a artefactos previos (no escribe).
|
|
41
|
+
- **Cancelar**: skill aborta, no produce side effects.
|
|
42
|
+
|
|
43
|
+
## Composición con sandbox-readonly
|
|
44
|
+
|
|
45
|
+
Cuando la skill se invoca en plan mode (sandbox read-only), este prompt no se dispara — el plan describe lo que escribiría y queda en read-only. La confirmación viene implícita al aprobar el plan.
|
|
46
|
+
|
|
47
|
+
## Refs
|
|
48
|
+
|
|
49
|
+
- `sandbox-readonly-rules.md` — reglas universales de plan mode.
|
|
50
|
+
- `prompts-catalog.md` (S5/M*) — otros prompts del lifecycle.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Graduación: regla hub vs project (DEC-002)
|
|
2
|
+
|
|
3
|
+
Regla canónica para decidir **dónde** se gradúa un artefacto al cerrar una sesión qtc-*. Reemplaza la regla anterior "hub-vs-fuente con prompt M12".
|
|
4
|
+
|
|
5
|
+
## Regla absoluta
|
|
6
|
+
|
|
7
|
+
| `workspace_mode` | Destino de la graduación |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `hub` | **Hub root** — `<hub>/.workflow/sessions/` y `<hub>/docs/<categoria>/`. **Nunca** se gradúa a fuente. |
|
|
10
|
+
| `project` | **CWD del proyecto** — `<cwd>/docs/<categoria>/` (raíz del proyecto único). |
|
|
11
|
+
|
|
12
|
+
**Sin prompt por sesión.** El destino se decide automáticamente leyendo `workspace_mode` del bloque AW-PROJECT en `CLAUDE.md` / `AGENTS.md`. Eliminado M12 (graduacion-destino).
|
|
13
|
+
|
|
14
|
+
## Definiciones operativas
|
|
15
|
+
|
|
16
|
+
- **`workspace_mode=hub`**: workspace con bloque `Mode: hub` en CLAUDE.md/AGENTS.md y `.workflow/` propio que coordina ≥2 fuentes (cada una con su propio repo + branch). Toda graduación va al hub.
|
|
17
|
+
- **`workspace_mode=project`**: workspace single-repo (sin `Mode: hub`). Toda graduación va al cwd.
|
|
18
|
+
|
|
19
|
+
## Kinds graduables (modelo nuevo, DEC-003)
|
|
20
|
+
|
|
21
|
+
Sólo 6 kinds graduan vía `agent-workflow graduate`. El resto vive en la sesión y no se gradúa.
|
|
22
|
+
|
|
23
|
+
| Kind | Destino | Disparado por |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| `decision` | `docs/decisiones/NNN-<slug>.md` | `agent-workflow graduate --kind decision` (al cerrar) |
|
|
26
|
+
| `manual` | `docs/manuales/NNN-<slug>.md` | `agent-workflow graduate --kind manual` (al cerrar) |
|
|
27
|
+
| `script` | `docs/scripts/NNN-sessionXXX-<slug>/` | **`/agent-workflow:release` exclusivamente** (no `graduate --kind script` directo) |
|
|
28
|
+
| `especificacion` | `docs/especificaciones/NNN-<slug>/` | `agent-workflow graduate --kind especificacion` (al cerrar) |
|
|
29
|
+
| `conclusion` | `docs/conclusiones/NNN-<slug>.md` | `agent-workflow graduate --kind conclusion` (al cerrar; opt-in — default es no graduar) |
|
|
30
|
+
| `release` | `docs/release/NNN-informe-release.md` | **`/agent-workflow:release` exclusivamente** |
|
|
31
|
+
|
|
32
|
+
Eliminados del modelo nuevo: `plan`, `refactor`, `design`, `design-system`, `propuesta`, `postmortem`, `analysis`. Estos artefactos:
|
|
33
|
+
- Se quedan en `.workflow/sessions/<folder>/` (no se gradúan).
|
|
34
|
+
- O se promueven manualmente a `manual` / `especificacion` si el usuario decide curarlos.
|
|
35
|
+
|
|
36
|
+
## Árbol de decisión
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
1. Leer workspace_mode del bloque AW-PROJECT (CLAUDE.md/AGENTS.md).
|
|
40
|
+
2. ¿workspace_mode == "hub"?
|
|
41
|
+
├─ SÍ → destino = <hub>/docs/<categoria>/. Stop.
|
|
42
|
+
└─ NO → destino = <cwd>/docs/<categoria>/. Stop.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Sin prompts. Sin override. Sin breadcrumbs entre hub y fuente.
|
|
46
|
+
|
|
47
|
+
## Por qué se eliminó M12 y la regla hub-vs-fuente
|
|
48
|
+
|
|
49
|
+
- **Antes (≤v3.x)**: defaults por kind + prompt M12 cuando ambiguo + breadcrumbs en `000-INDEX.md`. Mucha lógica para decidir destino.
|
|
50
|
+
- **Ahora (DEC-002)**: el `workspace_mode` ya declara la intención del usuario al abrir el workspace. Hub mode → hub es deliverable; el usuario armó el hub para coordinar. Project mode → todo va al proyecto.
|
|
51
|
+
- **Consecuencia**: si una fuente quiere documentación propia, el usuario abre un workspace project con esa fuente como cwd. Si quiere documentación cross-fuente, abre el hub.
|
|
52
|
+
|
|
53
|
+
## `docs/referencias/` — no se gradúa (DEC-004 v2)
|
|
54
|
+
|
|
55
|
+
Material de referencia del usuario vive en una única carpeta transversal: `<workspace-root>/docs/referencias/` (hub root en hub mode, cwd root en single-repo). Cualquier formato (md, pdf, xlsx, png, txt, etc.). Cualquier sesión activa puede leerla on-demand sin tener que subirla por-sesión.
|
|
56
|
+
|
|
57
|
+
Reglas:
|
|
58
|
+
- **Único path canónico**: `docs/referencias/`. La carpeta legacy `.workflow/sessions/<folder>/referencias/` (DEC-004 v1) no se lee; queda como histórico inerte en sesiones cerradas. El rescate de contenido pasa por `agent-workflow:migrate` opt-in.
|
|
59
|
+
- **Manual del usuario**: el usuario coloca archivos ahí; el AI sólo lee si existe.
|
|
60
|
+
- **El AI no escribe en `docs/referencias/` salvo solicitud explícita** ("guardá esto en referencias", "agregá este wireframe a referencias").
|
|
61
|
+
- **Lazy**: la carpeta no se crea automáticamente; aparece cuando el usuario la inicializa (puede sembrar `docs/referencias/README.md` describiendo el contrato).
|
|
62
|
+
- **No se gradúa**: queda en `docs/referencias/`, fuera del flujo de graduación de las 6 kinds. Persiste mientras viva el workspace.
|
|
63
|
+
|
|
64
|
+
## Comando
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
agent-workflow graduate --kind <kind> --session <CODE> --slug <kebab>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
El CLI internamente:
|
|
71
|
+
1. Lee `workspace_mode` desde el bloque AW-PROJECT.
|
|
72
|
+
2. Resuelve `docs_root`:
|
|
73
|
+
- hub mode → `<hub-cwd>/docs/`.
|
|
74
|
+
- project mode → `<cwd>/docs/`.
|
|
75
|
+
3. Numera con `next-number <docs_root>/<categoria>/`.
|
|
76
|
+
4. Mueve el artefacto desde `.workflow/sessions/<folder>/` al destino.
|
|
77
|
+
|
|
78
|
+
No requiere flags adicionales (`--destination`, `--source`, `--breadcrumb`). El destino es función pura de `workspace_mode + kind`.
|
|
79
|
+
|
|
80
|
+
## Validación posterior (doctor)
|
|
81
|
+
|
|
82
|
+
`agent-workflow doctor` puede verificar:
|
|
83
|
+
- En hub mode: que ningún `<fuente>/docs/<categoria>/` tenga artefactos graduados desde una sesión del hub (warn si los hay — son legacy).
|
|
84
|
+
- En project mode: que `<cwd>/docs/<categoria>/` tenga la numeración consistente.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
**Origen**: session006-dev-modelo-artefactos-lifecycle (DEC-002, 2026-05-07). Reemplaza la versión basada en routing hub-vs-fuente con prompt M12.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Lifecycle universal — detalles avanzados
|
|
2
|
+
|
|
3
|
+
Contenido detallado movido desde `SKILL.md` para optimización de tokens (lazy-load).
|
|
4
|
+
|
|
5
|
+
## Plan subagent nativo (v2.3+ — opcional)
|
|
6
|
+
|
|
7
|
+
Para descomposiciones `lite` o `full`, agent-workflow puede delegar la estructuración del plan al Plan subagent nativo del cliente (Claude Code expone `Task(subagent_type="Plan")`).
|
|
8
|
+
|
|
9
|
+
### Detección del harness
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
agent-workflow harness
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Output: `{harness: "claude-code"|"codex"|"unknown", supports_plan_subagent: bool, detected_via: "..."}`.
|
|
16
|
+
|
|
17
|
+
| Harness | supports_plan_subagent | Acción |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| `claude-code` | true | `Task(subagent_type="Plan")` con OBJECTIVE + Fuentes + decisión auto-plan. Output → TASKS.md. |
|
|
20
|
+
| `codex` | false | Fallback: redactar TASKS directamente con o sin sugerencias de `specialty-choose`. |
|
|
21
|
+
| `unknown` | false | Fallback igual que codex. No bloquear. |
|
|
22
|
+
|
|
23
|
+
### Prompt al Plan agent (CC)
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Estructurá un plan accionable (TASKS.md) para esta sesión qtc-*.
|
|
27
|
+
|
|
28
|
+
OBJECTIVE:
|
|
29
|
+
<contenido de .workflow/sessions/<folder>/OBJECTIVE.md>
|
|
30
|
+
|
|
31
|
+
Fuentes (de AW-PROJECT):
|
|
32
|
+
<tabla de Fuentes con paths y ramas>
|
|
33
|
+
|
|
34
|
+
Auto-plan decisión: <skip|lite|full> — <reason>
|
|
35
|
+
|
|
36
|
+
Restricciones:
|
|
37
|
+
- TASKS.md formato: items `- [ ]` con criterio de aceptación + dependencias.
|
|
38
|
+
- `lite` → 1-3 items; `full` → ≥3 items con descomposición explícita.
|
|
39
|
+
- Cada item debe ser ejecutable en una sola tarea (no compuesto).
|
|
40
|
+
- Sugerir orden por dependencias.
|
|
41
|
+
- NO incluir steps de validación (eso va a fase 3).
|
|
42
|
+
|
|
43
|
+
Devolvé el contenido completo de TASKS.md.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Trade-offs
|
|
47
|
+
|
|
48
|
+
- **Contexto aislado**: el Plan subagent no comparte el transcript actual. Recibe sólo el prompt construido.
|
|
49
|
+
- **OBJECTIVE.md sigue siendo la fuente de verdad** persistente — sobrevive `/compact`, accesible al retomar. Plan agent es soporte, no reemplazo.
|
|
50
|
+
- **Re-iteración**: si el plan resultante no satisface, editar TASKS.md directamente; no re-invocar el subagent.
|
|
51
|
+
- **Skip cuando obvio**: para `auto-plan = skip` o tareas atómicas, NO invocar el subagent (latencia sin valor).
|
|
52
|
+
|
|
53
|
+
### Persistencia del output
|
|
54
|
+
|
|
55
|
+
1. Capturar el contenido devuelto por Task(Plan).
|
|
56
|
+
2. Escribir a `.workflow/sessions/<folder>/TASKS.md` con `Write`.
|
|
57
|
+
3. Mostrar al usuario el TASKS.md resultante y pedir confirmación antes de avanzar a execution.
|
|
58
|
+
|
|
59
|
+
## Sub-agente per-flow (v2.4+ — opt-in)
|
|
60
|
+
|
|
61
|
+
### Detección del opt-in
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
agent-workflow profiles
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Si el output incluye `"delegate_to_subagent": true` y el harness es `claude-code`, **delegar**. Si false, unknown, o harness=Codex, **composición clásica**.
|
|
68
|
+
|
|
69
|
+
### Modo delegación (opt-in + CC)
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Task(
|
|
73
|
+
subagent_type="<flow>-agent",
|
|
74
|
+
prompt=<OBJECTIVE + Fuentes + TASKS.md + skills cross-plugin confirmadas + decisión auto-plan>
|
|
75
|
+
)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Donde `<flow>` se lee del campo `flow` de la sesión activa (metadata persistida por `agent-workflow session-create --flow <flow>`):
|
|
79
|
+
- `flow=dev` → `dev-agent` (NUNCA design-agent ni analyze-agent).
|
|
80
|
+
- `flow=design` → `design-agent`.
|
|
81
|
+
- `flow=analyze` → `analyze-agent`.
|
|
82
|
+
|
|
83
|
+
El comando entry point es único (`/agent-workflow:session`); el flow se resolvió en planning vía heurística + S3 fallback (ver `SKILL.md` paso "Detectar flow").
|
|
84
|
+
|
|
85
|
+
### Loop con sub-agente
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Task(<flow>-agent, prompt) → output JSON con next_action
|
|
89
|
+
│
|
|
90
|
+
▼
|
|
91
|
+
┌──────────┬──────────┴──────────┬─────────────┐
|
|
92
|
+
"continue" "needs_user_input" "validation" "ready_for_handoff"
|
|
93
|
+
│ │ │ │
|
|
94
|
+
Task(...) pasar pregunta avanzar phase sugerir handoff
|
|
95
|
+
de nuevo al usuario, esperar a validation `/agent-workflow:session --from <flow>:<code>`
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
El caller hace el bucle hasta que `next_action ∈ {validation, ready_for_handoff}` o el usuario detenga.
|
|
99
|
+
|
|
100
|
+
### Trade-offs
|
|
101
|
+
|
|
102
|
+
- **Aislamiento**: el sub-agente NO ve el transcript principal. Recibe sólo el prompt construido.
|
|
103
|
+
- **Latencia**: cada delegación es 1 round-trip extra. Compensa en sesiones largas.
|
|
104
|
+
- **Default off**: opt-in vía `~/.workflow/user-config.md` para no romper sesiones existentes.
|
|
105
|
+
|
|
106
|
+
Si delegás, **saltar la sección "Composición dinámica de especialidades"** del SKILL.md — el sub-agente la maneja internamente.
|
|
107
|
+
|
|
108
|
+
## Composición dinámica de especialidades
|
|
109
|
+
|
|
110
|
+
| Necesidad | Skill a invocar | Flow |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| Editar código (Java/TS/etc.) | `implement` + `coding-standards` | dev |
|
|
113
|
+
| Migración SQL / scripts BD | `sql-script-organizer` + `sql-rollback-generator` | dev |
|
|
114
|
+
| Producir spec UI | `design-deliver` + `frontend-design` | design |
|
|
115
|
+
| Investigación técnica | `analyze-investigate` | analyze |
|
|
116
|
+
| Cierre de análisis (propuesta / informe / post-mortem) | `analyze-conclude` (modulado por modalidad) | analyze |
|
|
117
|
+
| UI form / list / modal (referencia) | `frontend-design` | design |
|
|
118
|
+
| Test strategy | `testing-strategy` | dev |
|
|
119
|
+
|
|
120
|
+
> Todos los skills viven en `agent-workflow` (consolidación v2.0.0). La columna "Flow" indica el agrupamiento conceptual de la skill, no el plugin que la hospeda.
|
|
121
|
+
|
|
122
|
+
**Reglas de activación** (regla cero — v2.1+):
|
|
123
|
+
|
|
124
|
+
- Skills del **mismo flow**: el AI las invoca por contexto cuando aplican. Composición interna autorizada.
|
|
125
|
+
- Skills **cross-plugin**: el AI las **sugiere al usuario** y espera confirmación explícita. Invocación por namespace (`Skill(agent-workflow:frontend-design)` post-Fase C; legacy `Skill(qtc-design:frontend-design)` válido durante convivencia) o `@`-mención. Nunca auto-invocar por keyword.
|
|
126
|
+
|
|
127
|
+
## Hub mode (v4.5+)
|
|
128
|
+
|
|
129
|
+
Si el workspace declara `Mode: hub` (detectado vía `agent-workflow workspace-mode`):
|
|
130
|
+
|
|
131
|
+
- **Crear sesión**: pedir explícitamente las **ramas de trabajo por fuente** (al menos para las que la sesión va a tocar). Las pre-existentes en AW-PROJECT.Status pueden sugerirse como default.
|
|
132
|
+
- **Verificar rama**: `agent-workflow sources` itera todas las fuentes. Para subset: `--scope alias1,alias2`.
|
|
133
|
+
- **Auto-plan**: si la sesión menciona ≥2 fuentes en OBJECTIVE, peso adicional hacia `full`.
|
|
134
|
+
- **Topic-change**: divergencia entre fuentes-tocadas y fuentes-mencionadas-en-OBJECTIVE es señal adicional.
|
|
135
|
+
- **Composición cross-flow**: igual que en project mode — namespace explícito.
|
|
136
|
+
|
|
137
|
+
Para `Mode: project` (default), todas las heurísticas hub-aware quedan inactivas.
|
|
138
|
+
|
|
139
|
+
## Sandbox read-only
|
|
140
|
+
|
|
141
|
+
Reglas universales en `references/sandbox-readonly-rules.md`. El lifecycle entero queda **en pausa** durante plan mode.
|
|
142
|
+
|
|
143
|
+
| Fase | Qué describir (no ejecutar) |
|
|
144
|
+
|---|---|
|
|
145
|
+
| **Crear sesión** | Carpeta + archivos OBJECTIVE.md/TASKS.md + filas en HISTORY/AW-PROJECT. |
|
|
146
|
+
| **Phase 1 (planning)** | Output esperado de `auto-plan-decide` y `specialty-choose`. NO invocar skills sugeridas. |
|
|
147
|
+
| **Phase 2 (execution)** | Lista de archivos, scripts SQL, decisiones. Verificación read-only de rama. |
|
|
148
|
+
| **Phase 3 (validation)** | Comandos de test con args. NO ejecutar destructivos. |
|
|
149
|
+
| **Phase 4 (closure)** | Lista de artefactos a graduar + paths destino. |
|
|
150
|
+
|
|
151
|
+
Sub-comandos plan-mode-safe: `project-md-upsert --read`, `sessions`, `auto-plan-decide`, `specialty-choose`, `topic-change-check`, `session-resume`, `checkpoint-read`, `objetivo-data`, `tasks-data`, `decisiones-list`, `session-artifacts`.
|
|
152
|
+
|
|
153
|
+
## Compatibilidad legacy
|
|
154
|
+
|
|
155
|
+
Migrables con `/agent-workflow:migrate`:
|
|
156
|
+
- Sesiones v1.x con fases per-flow → mapeo a 4 fases v2.0.
|
|
157
|
+
- Bloques `<!-- QTC-WORKFLOW -->` (pre-v0.8) → AW-PROJECT.
|
|
158
|
+
- `STATUS.md`, `REQUIREMENTS.md`, etc.
|
|
159
|
+
|
|
160
|
+
No migrar automáticamente; usuario decide.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# C1 — specialty-selection (planning)
|
|
2
|
+
|
|
3
|
+
Spec literal del prompt C1. Index: [`../prompts-catalog.md#c1--specialty-selection-planning`](../prompts-catalog.md#c1--specialty-selection-planning).
|
|
4
|
+
|
|
5
|
+
- **Cuándo**: planning phase, después de `agent-workflow specialty-choose --phase planning`, hay 2+ skills sugeridas.
|
|
6
|
+
- **Forma**: 1 question multi-select.
|
|
7
|
+
- `header`: `specialty`.
|
|
8
|
+
- `question`: "¿Qué skills invoco para descomponer el plan?"
|
|
9
|
+
- `multiSelect`: true.
|
|
10
|
+
- `options` (≤4): nombres de skills sugeridas con namespace (ej. `agent-workflow:analyze-synthesize`, `agent-workflow:design-brief`, `agent-workflow:implement` post-Fase C; aliases legacy `qtc-analyze:analyze-synthesize` etc. válidos durante convivencia) y descripción de qué hace cada una en planning.
|
|
11
|
+
- **Refina**: prosa en `skills/session/SKILL.md` "Plan agent + Specialty (suggestion-only)".
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# C2 — cost-guard (queries pesadas en analyze-investigate)
|
|
2
|
+
|
|
3
|
+
Spec literal del prompt C2. Index: [`../prompts-catalog.md#c2--cost-guard-queries-pesadas-en-analyze-investigate`](../prompts-catalog.md#c2--cost-guard-queries-pesadas-en-analyze-investigate).
|
|
4
|
+
|
|
5
|
+
- **Cuándo**: `agent-workflow:analyze-investigate` (legacy `qtc-analyze:analyze-investigate`) antes de ejecutar query categorizada como **costosa** (>10k filas o seq scan >100k según `references/cost-guard.md`).
|
|
6
|
+
- **Forma**: 1 question + preview.
|
|
7
|
+
- `header`: `cost`.
|
|
8
|
+
- `question`: "Esta query estima `<filas>` filas / `<duración>`s en `<server>`. ¿La ejecuto?"
|
|
9
|
+
- `multiSelect`: false.
|
|
10
|
+
- `options`:
|
|
11
|
+
1. "Proceder (Recomendado si esperás el costo)" — "Ejecuta con cost guard registrado en `EVIDENCE.md`."
|
|
12
|
+
2. "Cancelar" — "No la ejecuta; podés reformular o usar muestreo."
|
|
13
|
+
- `preview`: SQL de la query + plan EXPLAIN resumido (5-10 líneas).
|
|
14
|
+
- **Refina**: paso 3 ("aviso al usuario") del procedimiento en `qtc-analyze/skills/analyze-investigate/references/cost-guard.md`.
|