@tacuchi/agent-workflow-cli 13.1.0 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +2 -2
  2. package/dist/application/paths-service.d.ts +2 -0
  3. package/dist/application/paths-service.d.ts.map +1 -1
  4. package/dist/application/paths-service.js +4 -0
  5. package/dist/application/paths-service.js.map +1 -1
  6. package/dist/application/plugin-doctor/skills.d.ts.map +1 -1
  7. package/dist/application/plugin-doctor/skills.js +78 -32
  8. package/dist/application/plugin-doctor/skills.js.map +1 -1
  9. package/dist/application/project-tab-data.d.ts +1 -1
  10. package/dist/application/project-tab-data.d.ts.map +1 -1
  11. package/dist/application/project-tab-data.js +4 -4
  12. package/dist/application/project-tab-data.js.map +1 -1
  13. package/dist/application/skill-index-service.d.ts.map +1 -1
  14. package/dist/application/skill-index-service.js +5 -24
  15. package/dist/application/skill-index-service.js.map +1 -1
  16. package/dist/application/skills-resolver-service.d.ts +25 -1
  17. package/dist/application/skills-resolver-service.d.ts.map +1 -1
  18. package/dist/application/skills-resolver-service.js +84 -0
  19. package/dist/application/skills-resolver-service.js.map +1 -1
  20. package/dist/application/source-launch-scripts-service.d.ts +8 -10
  21. package/dist/application/source-launch-scripts-service.d.ts.map +1 -1
  22. package/dist/application/source-launch-scripts-service.js +8 -15
  23. package/dist/application/source-launch-scripts-service.js.map +1 -1
  24. package/dist/application/source-launch-service.d.ts +1 -1
  25. package/dist/application/source-launch-service.d.ts.map +1 -1
  26. package/dist/application/source-launch-service.js +3 -3
  27. package/dist/application/source-launch-service.js.map +1 -1
  28. package/dist/application/source-remove-service.d.ts +1 -1
  29. package/dist/application/source-remove-service.js +3 -3
  30. package/dist/application/source-remove-service.js.map +1 -1
  31. package/dist/application/workspace-init-service.d.ts +1 -1
  32. package/dist/application/workspace-init-service.d.ts.map +1 -1
  33. package/dist/application/workspace-init-service.js +55 -16
  34. package/dist/application/workspace-init-service.js.map +1 -1
  35. package/dist/cli/commands/remove-source.js +1 -1
  36. package/dist/cli/commands/remove-source.js.map +1 -1
  37. package/dist/cli/commands/skills.d.ts.map +1 -1
  38. package/dist/cli/commands/skills.js +8 -2
  39. package/dist/cli/commands/skills.js.map +1 -1
  40. package/dist/cli/tui/data/workflow-content.js +1 -1
  41. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  42. package/dist/cli/tui/tabs/project-tab.js +3 -3
  43. package/dist/cli/tui/tabs/project-tab.js.map +1 -1
  44. package/dist/domain/skill-frontmatter.d.ts +26 -0
  45. package/dist/domain/skill-frontmatter.d.ts.map +1 -0
  46. package/dist/domain/skill-frontmatter.js +141 -0
  47. package/dist/domain/skill-frontmatter.js.map +1 -0
  48. package/dist/domain/skills.d.ts +1 -1
  49. package/dist/domain/skills.d.ts.map +1 -1
  50. package/dist/domain/skills.js +1 -10
  51. package/dist/domain/skills.js.map +1 -1
  52. package/package.json +1 -1
  53. package/skills/w/README.md +3 -3
  54. package/skills/w/SKILL.md +4 -5
  55. package/skills/w/artifacts/README.md +2 -2
  56. package/skills/w/commands/README.md +5 -5
  57. package/skills/w/commands/plan-exec.md +1 -1
  58. package/skills/w/commands/workspace-init.md +1 -1
  59. package/skills/w/exports/README.md +1 -1
  60. package/skills/w/loops/README.md +4 -5
  61. package/skills/w/loops/plan-exec-loop/SKILL.md +15 -18
  62. package/skills/w/loops/quick-loop/SKILL.md +1 -1
  63. package/skills/w/loops/spec-refine-loop/SKILL.md +11 -1
  64. package/skills/w/roles/README.md +4 -7
  65. package/skills/w/roles/tools/SKILL.md +0 -148
@@ -3,19 +3,17 @@ name: plan-exec-loop
3
3
  description: >-
4
4
  Ejecuta un plan de implementación (docs/plans/PPP-plan-<slug>.md) como living
5
5
  doc: lo lee y actualiza fase a fase mientras edita el código real, gestiona BD
6
- y git. Heir del chasis spec-refine-loop: reusa su motor gap-driven (aplicado
7
- dentro de una tarea ante decisiones/dudas no obvias), research inline con
8
- regla BD read-only, structured-choice con ≤3 preguntas de contenido + 1 control flow
9
- (Compactar/Cerrar) siempre, y artefactos como log vivo (CHECKPOINT siempre,
10
- BACKLOG solo si difiere). Sus deltas: una sola session por run (resume vía
11
- checkbox del plan-doc + CHECKPOINT); git seguro (verifica rama esperada antes
12
- de editar, propone commits por fuente, nunca push/--amend/--no-verify); la IA
13
- NUNCA ejecuta DML/DDL (migraciones se redactan en SCRIPTS.sql, solo read-only
14
- se ejecuta); validación por fase y final (lo dependiente de migración no
15
- aplicada se difiere como handoff a DBA); y SIN auto-export (escribe solo
16
- docs/plans + docs/tools; el resto queda como artefacto de session para
17
- export-*). Compone git, tools y sql. Lo arranca
18
- /w:plan-exec y es reanudable. Invocar para implementar un plan ya generado.
6
+ y git. Heir del chasis spec-refine-loop: reusa su motor gap-driven, research
7
+ inline (regla BD read-only), structured-choice (≤3 preguntas + control flow
8
+ Compactar/Cerrar) y artefactos como log vivo (CHECKPOINT siempre, BACKLOG solo
9
+ si difiere). Deltas: una sola session por run (resume vía checkbox del plan-doc
10
+ + CHECKPOINT); git seguro (verifica la rama antes de editar, propone commits por
11
+ fuente, nunca push/--amend/--no-verify); la IA NUNCA ejecuta DML/DDL (las
12
+ migraciones se redactan en SCRIPTS.sql, solo read-only se ejecuta); validación
13
+ por fase y final (lo dependiente de migración no aplicada se difiere a DBA); y
14
+ SIN auto-export (escribe solo docs/plans; el resto queda como artefacto para
15
+ export-*). Compone git y sql. Lo arranca /w:plan-exec, es reanudable. Invocar
16
+ para implementar un plan ya generado.
19
17
  ---
20
18
 
21
19
  # plan-exec-loop
@@ -36,13 +34,12 @@ PLAN
36
34
 
37
35
  ## Writes
38
36
  - `docs/plans/PPP-plan-<slug>.md` (**read/update**, living doc: estado de fases/tareas, `Open questions`).
39
- - `docs/tools/`: herramientas/utilidades reusables que la IA **crea** durante la ejecución (salida directa, no export).
40
37
  - Artefactos de la plan-exec session en `.workflow/sessions/` (`SCRIPTS.sql`, `DECISION`, `ANALYSIS-FILE`/`CONCLUSIONS`, …).
41
38
  - **NO** escribe en otras carpetas `docs/` ni **gradúa/exporta** otros artefactos automáticamente (ver *Boundary*).
42
39
 
43
40
  ## Boundary — sin auto-export (hard rule)
44
41
 
45
- Este loop **nunca gradúa/promueve artefactos** a `docs/`. Las únicas carpetas `docs/` que escribe son **`docs/plans`** (el plan, living) y **`docs/tools`** (las herramientas que crea — salida directa, no un export). Todo lo demás (migraciones → `docs/scripts`, manuales → `docs/manuals`, diagramas → `docs/diagrams`, etc.) lo hacen skills **`export-*`** aparte, como paso explícito posterior. Los artefactos quedan en sus sessions hasta entonces.
42
+ Este loop **nunca gradúa/promueve artefactos** a `docs/`. La única carpeta `docs/` que escribe es **`docs/plans`** (el plan, living). Todo lo demás (migraciones → `docs/scripts`, manuales → `docs/manuals`, diagramas → `docs/diagrams`, etc.) lo hacen skills **`export-*`** aparte, como paso explícito posterior. Los artefactos quedan en sus sessions hasta entonces. Si una tarea crea una herramienta/utilidad, la documenta la skill ambiente `creating-tools` en `docs/tools` (auto-descubierta por su `description`; el workflow es **indiferente**, no la bindea).
46
43
 
47
44
  ## Inherits
48
45
 
@@ -55,9 +52,9 @@ Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
55
52
 
56
53
  ## Composes
57
54
 
58
- `git` (rama segura + commits propuestos) · `tools` (herramientas reusables → `docs/tools`) · `sql` (regla BD). Todas resueltas por `.workflow/skills.toml`; `off` → el loop sigue sin la capacidad y, si era necesaria, lo dice o pregunta.
55
+ `git` (rama segura + commits propuestos) · `sql` (regla BD). Ambas resueltas por `.workflow/skills.toml`; `off` → el loop sigue sin la capacidad y, si era necesaria, lo dice o pregunta.
59
56
 
60
- > **Convenciones ambientes (no roles).** Los estándares de código, testing y redacción **no son roles** del workflow ni se bindean: son **skills standalone que el host auto-descubre por su `description`** y aplica cuando son relevantes. El workflow es **indiferente** (no las lee ni las busca). Una familia útil vive en el plugin `dev-conventions` del marketplace, pero el workflow **no depende** de él.
57
+ > **Convenciones ambientes (no roles).** Los estándares de código, testing, redacción **y la creación de herramientas** (`creating-tools`) **no son roles** del workflow ni se bindean: son **skills standalone que el host auto-descubre por su `description`** y aplica cuando son relevantes. El workflow es **indiferente** (no las lee ni las busca). Familias útiles viven en plugins del marketplace (`dev-conventions`, `tool-builder`), pero el workflow **no depende** de ellos.
61
58
 
62
59
  ## Internal sessions (managed)
63
60
 
@@ -120,7 +117,7 @@ plan-exec-loop(PPP-plan-<slug>.md):
120
117
  si no coincide → pausar + resolver con humano
121
118
  ejecutar Task:
122
119
  editar código en las fuentes (cambio mínimo)
123
- si crea herramienta/utilidad reusable → docs/tools (salida directa)
120
+ si crea herramienta/utilidad → la skill ambiente creating-tools la documenta en docs/tools
124
121
  si consulta BD read-only → SCRIPTS.sql + ejecutar read-only
125
122
  si cambio BD (DDL/DML) → redactar en SCRIPTS.sql (artefacto session, NO ejecutar)
126
123
  si decisión no obvia → DECISION (etiquetado por fase/tarea, en el ÚNICO DECISION)
@@ -50,7 +50,7 @@ QUICK
50
50
 
51
51
  `git` · `sql` (regla BD) · `research` (inline). Resueltas por `.workflow/skills.toml`.
52
52
 
53
- > **Convenciones ambientes (no roles).** Los estándares de código, testing y redacción **no son roles** del workflow ni se bindean: son **skills standalone que el host auto-descubre por su `description`** y aplica cuando son relevantes. El workflow es **indiferente** (no las lee ni las busca). Una familia útil vive en el plugin `dev-conventions` del marketplace, pero el workflow **no depende** de él.
53
+ > **Convenciones ambientes (no roles).** Los estándares de código, testing, redacción **y la creación de herramientas** (`creating-tools`) **no son roles** del workflow ni se bindean: son **skills standalone que el host auto-descubre por su `description`** y aplica cuando son relevantes. El workflow es **indiferente** (no las lee ni las busca). Familias útiles viven en plugins del marketplace (`dev-conventions`, `tool-builder`), pero el workflow **no depende** de ellos.
54
54
 
55
55
  ## Delta QUICK — minimal ceremony
56
56
 
@@ -72,6 +72,15 @@ El objetivo persistente necesita una **condición de término checkable** — si
72
72
 
73
73
  > El **convergence gate** (sección *Convergence / exit*) es, operacionalmente, **"todos los `Success criteria` en verde"**. Los gates por-heir (analyze gate, coherencia del plan, validación final, validación puntual proporcional) son **instancias** de esto, con los criterios sembrados al inicio.
74
74
 
75
+ **Integridad del gate (anti-gaming + verificación independiente).** El gate solo vale si no se hace trampa para pasarlo. El loop **no**:
76
+
77
+ - modifica el check ni afloja un `Success criterion` para forzar verde;
78
+ - debilita, borra ni saltea tests/validaciones;
79
+ - usa asserts triviales o tautológicos que siempre pasan (el valor esperado sale de una fuente independiente, no del propio output);
80
+ - parchea el test en lugar de arreglar la causa (preferir arreglar producción).
81
+
82
+ Ante un blocker real **para y lo reporta** (→ `Open questions`/`BACKLOG`) en vez de gamear la métrica. El veredicto cuenta **solo el output del check, no la auto-declaración** del implementador: cuando el deliverable lo justifica, la verificación final la hace una pasada **independiente** (subagente o re-lectura limpia) que no asume correcta la implementación — *only command output counts*.
83
+
75
84
  ## Artifacts as a live log — ciclo artifact-first (chasis — heredado por todos los loops)
76
85
 
77
86
  El loop trabaja **artifact-first**: el artefacto se **siembra antes** de ejecutar y se **actualiza después**, no solo al cerrar. Cada gap/fase/tarea corre el ciclo de **3 tiempos**:
@@ -116,7 +125,7 @@ El gap **UI sin especificar** (cuando el requerimiento involucra UI; ver *Gap ta
116
125
 
117
126
  Otras capacidades transversales que el chasis usa siempre: `research` (research **inline**, ver abajo), `sql` (regla BD en research). Todas se resuelven por config; `off` → el loop sigue sin la capacidad y, si era necesaria, lo dice o pregunta. La **prosa del spec** sigue las convenciones de redacción **ambientes** (el host auto-aplica una skill de writing instalada si está presente), no un rol compuesto.
118
127
 
119
- > **Convenciones ambientes (no roles).** Los estándares de código, testing y redacción **no son roles** del workflow ni se bindean: son **skills standalone que el host auto-descubre por su `description`** y aplica cuando son relevantes. El workflow es **indiferente** (no las lee ni las busca). Una familia útil vive en el plugin `dev-conventions` del marketplace, pero el workflow **no depende** de él.
128
+ > **Convenciones ambientes (no roles).** Los estándares de código, testing, redacción **y la creación de herramientas** (`creating-tools`) **no son roles** del workflow ni se bindean: son **skills standalone que el host auto-descubre por su `description`** y aplica cuando son relevantes. El workflow es **indiferente** (no las lee ni las busca). Familias útiles viven en plugins del marketplace (`dev-conventions`, `tool-builder`), pero el workflow **no depende** de ellos.
120
129
 
121
130
  ## Deliverable schema (el spec, editado in place)
122
131
 
@@ -199,6 +208,7 @@ La investigación es **inline**: una actividad **dentro de la session actual del
199
208
  - elección de MCP (regla BD) — antes de ejecutar queries;
200
209
  - en **convergencia**, acción: `Guardar especificación refinada` | `Preguntar algo más`.
201
210
  - **Batching**: agrupar hasta 3 gaps de humano en una sola llamada. Si hay más de 3 pendientes, priorizar (los que desbloquean otros gaps primero) y diferir el resto a la próxima vuelta.
211
+ - **Respuesta recomendada por pregunta**: cada pregunta de contenido lleva **siempre** la respuesta que la IA recomienda — como primera opción (marcada *recomendada*) en `AskUserQuestion`, o señalada en el markdown numerado al degradar. Nunca se pregunta "a secas": el humano ratifica o corrige una propuesta, no parte de cero. La IA recomienda en base a lo investigado (regla ask-vs-research), no por defecto vacío.
202
212
 
203
213
  ## Sequence
204
214
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## Capability catalog
10
10
 
11
- All 7 roles, their built-in defaults, their tier, and which loops/exports compose them:
11
+ All 6 roles, their built-in defaults, their tier, and which loops/exports compose them:
12
12
 
13
13
  | Role | Default built-in | Tier | Composed by |
14
14
  |---|---|---|---|
@@ -16,7 +16,6 @@ All 7 roles, their built-in defaults, their tier, and which loops/exports compos
16
16
  | `sql` | `sql` | must | inline research · `plan-exec-loop` · `quick-loop` · `export-scripts` |
17
17
  | `git` | `git` | must | `plan-exec-loop` · `quick-loop` |
18
18
  | `research` | [`research`](research/SKILL.md) | should | all loops (on-demand investigation) |
19
- | `tools` | [`tools`](tools/SKILL.md) | should | `plan-exec-loop` |
20
19
  | `diagrams` | [`diagrams`](diagrams/SKILL.md) | should | `export-diagrams` |
21
20
  | `overview` | `workflow` | should | any loop (orientation about the workflow itself) |
22
21
 
@@ -24,7 +23,7 @@ All 7 roles, their built-in defaults, their tier, and which loops/exports compos
24
23
  - `must` — core to almost every session; built-in always active unless explicitly `off`.
25
24
  - `should` — loaded on-demand; active by default but lower priority to override.
26
25
 
27
- > **Convenciones ambientes (no roles).** Los estándares de código, testing y redacción **no son roles** del workflow ni se bindean: son **skills standalone que el host auto-descubre por su `description`** y aplica cuando son relevantes. El workflow es **indiferente** (no las lee ni las busca). Una familia útil vive en el plugin `dev-conventions` del marketplace, pero el workflow **no depende** de él.
26
+ > **Convenciones ambientes (no roles).** Los estándares de código, testing, redacción **y la creación de herramientas** (`creating-tools`) **no son roles** del workflow ni se bindean: son **skills standalone que el host auto-descubre por su `description`** y aplica cuando son relevantes. El workflow es **indiferente** (no las lee ni las busca). Familias útiles viven en plugins del marketplace (`dev-conventions`, `tool-builder`), pero el workflow **no depende** de ellos.
28
27
 
29
28
  ---
30
29
 
@@ -59,7 +58,6 @@ built-in default
59
58
  # sql = "sql"
60
59
  # git = "git"
61
60
  # research = "research"
62
- # tools = "tools"
63
61
  # diagrams = "diagrams"
64
62
  # overview = "workflow"
65
63
 
@@ -76,7 +74,7 @@ sql = "off" # disable the sql capability
76
74
  ui-design = "acme/figma-spec"
77
75
  ```
78
76
 
79
- `acme/figma-spec` must be installed on the host (e.g. via `skills.sh install acme/figma-spec`). The CLI resolves the skill by name; if not found, it falls back to the built-in default and warns.
77
+ `acme/figma-spec` must be installed on the host (e.g. via `skills.sh install acme/figma-spec`). The binding is **advisory**: the resolver emits the name as-is — it does **not** verify the skill is installed and does **not** auto-fall-back to the built-in default. A typo'd name silently leaves the role bound to a skill that does not exist. Verify the resolution with `aw skills`, which warns when a bound skill is not found in the standard skill roots.
80
78
 
81
79
  ### Override: disable a capability
82
80
 
@@ -115,7 +113,6 @@ ui-design ui-spec built-in
115
113
  sql sql built-in
116
114
  git git built-in
117
115
  research research built-in
118
- tools tools built-in
119
116
  diagrams mermaid-only global (~/.workflow/skills.toml)
120
117
  overview workflow built-in
121
118
  ```
@@ -135,7 +132,7 @@ Each `SKILL.md` follows this schema:
135
132
 
136
133
  | Section | Content |
137
134
  |---|---|
138
- | Frontmatter `name:` | kebab-case; MUST equal the binding name (`research`, `tools`, etc.) |
135
+ | Frontmatter `name:` | kebab-case; MUST equal the binding name (`research`, `diagrams`, etc.) |
139
136
  | Frontmatter `description:` | rich description: what + when; drives automatic selection |
140
137
  | `## Role` | which capability role this implements (its skills.toml slot) |
141
138
  | `## Purpose` | what it does |
@@ -1,148 +0,0 @@
1
- ---
2
- name: tools
3
- description: >
4
- Capacidad de autoría de herramientas y utilidades que el plan crea: scripts, CLIs, helpers,
5
- configuraciones reutilizables. Produce el código de la herramienta y su documentación en
6
- docs/tools/. Compuesta por plan-exec-loop cuando una task crea una utilidad nueva (no un
7
- cambio de producto). No aplica a código de producto — solo a tooling auxiliar.
8
- ---
9
-
10
- # tools — Tool authoring capability
11
-
12
- ## Role
13
-
14
- `tools` — implementación built-in por defecto. Rebindeable a otra skill (de tercero o `off`) en `.workflow/skills.toml`.
15
-
16
- ## Purpose
17
-
18
- Dar al `plan-exec-loop` la capacidad de crear herramientas y utilidades auxiliares con una estructura consistente: el código de la tool + su documentación en `docs/tools/`. Cubre scripts de automatización, CLIs auxiliares, helpers de CI/CD, configuraciones reutilizables, y cualquier artefacto de tooling que el plan genere como producto de una task.
19
-
20
- **Distinciones clave:**
21
-
22
- | Tipo | Rol | ¿Quién lo maneja? |
23
- |---|---|---|
24
- | Código de producto (services, controllers, components) | cambio en el repo fuente | `plan-exec-loop` (estilo: convenciones ambientes del host) |
25
- | Tool / utilidad auxiliar creada por el plan | herramienta de soporte | esta skill (`tools`) |
26
- | Script SQL de migración | dato persistente | `sql` + `export-scripts` |
27
-
28
- ## Composed by
29
-
30
- | Loop | Cuándo la compone |
31
- |---|---|
32
- | `plan-exec-loop` | cuando una task del plan crea una herramienta nueva (helper, script CLI, configuración reutilizable) |
33
-
34
- ## Knowledge
35
-
36
- ### Tool vs. product code
37
-
38
- Una **tool** es cualquier artefacto que el plan crea para soportar el trabajo, no para el usuario final del producto:
39
-
40
- - Scripts de seed/fixtures para desarrollo local.
41
- - CLIs auxiliares (`validate-schema.js`, `sync-env.sh`).
42
- - Helpers de CI/CD (scripts de deploy, linters de configuración).
43
- - Configuraciones reutilizables (templates de entorno, fixtures de test).
44
- - Generadores o scaffolders para tareas repetitivas.
45
-
46
- Si el artefacto es lógica de negocio del producto → no es una tool, es código de producto.
47
-
48
- ### Tool anatomy
49
-
50
- Cada tool tiene dos partes:
51
-
52
- 1. **El código** — en el repo fuente apropiado (en su carpeta natural: `scripts/`, `tools/`, `bin/`, etc.).
53
- 2. **La doc** — en `docs/tools/NNN-<slug>.md` del workspace (invariant #2: PLAN escribe `docs/tools`).
54
-
55
- ### docs/tools/NNN-<slug>.md schema
56
-
57
- ```markdown
58
- # <Nombre de la tool>
59
-
60
- > **Tipo**: <script | cli | helper | config-template | generator>
61
- > **Repo**: <alias de la fuente donde vive el código>
62
- > **Path**: <path relativo al repo>
63
- > **Creada en**: <sesion-slug>
64
-
65
- ## Purpose
66
-
67
- [1-2 oraciones: qué hace y cuándo usarla.]
68
-
69
- ## Usage
70
-
71
- ```<lenguaje o bash>
72
- <ejemplo de invocación>
73
- ```
74
-
75
- ## Parameters
76
-
77
- | Param | Tipo | Requerido | Default | Descripcion |
78
- |---|---|---|---|---|
79
- | `--foo` | string | sí | — | ... |
80
-
81
- ## Output
82
-
83
- [Qué produce: archivos, stdout, efectos secundarios.]
84
-
85
- ## Dependencies
86
-
87
- - <prerequisito 1: binario, env var, servicio>
88
- - <prerequisito 2>
89
-
90
- ## Examples
91
-
92
- ```bash
93
- # Caso de uso principal
94
- ./scripts/validate-schema.sh --env staging
95
-
96
- # Caso edge
97
- ./scripts/validate-schema.sh --env staging --dry-run
98
- ```
99
-
100
- ## Notes
101
-
102
- [Advertencias, limitaciones, cuándo NO usar.]
103
- ```
104
-
105
- ### Numbering
106
-
107
- `docs/tools/` usa numeración secuencial `NNN` (001, 002, ...). Consultar el número siguiente con el filesystem antes de escribir; no asumir el siguiente en base a lo que el loop ya sabe.
108
-
109
- ### Git-safe authoring (invariant #5)
110
-
111
- - Verificar la rama esperada antes de escribir código.
112
- - Proponer el commit; nunca hacer `push`/`--amend`/`--no-verify` autónomamente.
113
- - Si la tool modifica scripts ya existentes: leer el archivo completo primero.
114
-
115
- ### DB scripts rule (invariant #4)
116
-
117
- Si la tool genera o manipula SQL:
118
- - Nunca generar DML/DDL que se ejecute inline — el SQL va a `SCRIPTS.sql` y se entrega vía `export-scripts`.
119
- - Una tool puede generar un archivo `.sql`; no puede ejecutarlo contra la BD.
120
-
121
- ### Code quality baseline
122
-
123
- Al autorar el código de la tool, seguir las convenciones de código **ambientes** del host (auto-descubiertas por su `description`; no es un rol del workflow ni se bindea). Si no hay una skill de estándares aplicable, usar los estándares del lenguaje detectado:
124
- - **Shell**: shellcheck-compatible, variables entre comillas, `set -euo pipefail`.
125
- - **Node/TS**: tipado explícito, sin `any` salvo justificación, error handling explícito.
126
- - **Python**: type hints, docstring en funciones públicas, manejo de excepciones específico.
127
- - **Java**: Javadoc mínimo en clases públicas, excepciones tipadas.
128
-
129
- ### Self-contained tools
130
-
131
- Preferir tools que declaren explícitamente sus dependencias (en doc + en el propio script). Una tool que falla silenciosamente porque le falta un binario es peor que una que no existe.
132
-
133
- ```bash
134
- # Pattern: check dependencies al inicio
135
- command -v jq >/dev/null 2>&1 || { echo "jq requerido: brew install jq"; exit 1; }
136
- ```
137
-
138
- ## Output
139
-
140
- Por cada tool creada:
141
- - **Código**: en el repo fuente, en la carpeta que corresponda (`scripts/`, `tools/`, `bin/`).
142
- - **Doc**: en `docs/tools/NNN-<slug>.md` del workspace.
143
-
144
- Writes `docs/tools/` (invariant #2: PLAN es el dueño de esta carpeta). No gradua a ninguna otra carpeta de `docs/`.
145
-
146
- ## Source
147
-
148
- Autoria original (no hay skill equivalente en el bundle viejo). Basado en la descripción del rol en `workflow-roles/README.md` y en el invariant #2 del diseño (`docs/tools/` es del flujo PLAN). Las convenciones de estructura de doc (`## Purpose`, `## Usage`, `## Parameters`, `## Output`, `## Examples`) siguen el patrón de calidad del bundle.