@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.
- package/README.md +2 -2
- package/dist/application/paths-service.d.ts +2 -0
- package/dist/application/paths-service.d.ts.map +1 -1
- package/dist/application/paths-service.js +4 -0
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/plugin-doctor/skills.d.ts.map +1 -1
- package/dist/application/plugin-doctor/skills.js +78 -32
- package/dist/application/plugin-doctor/skills.js.map +1 -1
- package/dist/application/project-tab-data.d.ts +1 -1
- package/dist/application/project-tab-data.d.ts.map +1 -1
- package/dist/application/project-tab-data.js +4 -4
- package/dist/application/project-tab-data.js.map +1 -1
- package/dist/application/skill-index-service.d.ts.map +1 -1
- package/dist/application/skill-index-service.js +5 -24
- package/dist/application/skill-index-service.js.map +1 -1
- package/dist/application/skills-resolver-service.d.ts +25 -1
- package/dist/application/skills-resolver-service.d.ts.map +1 -1
- package/dist/application/skills-resolver-service.js +84 -0
- package/dist/application/skills-resolver-service.js.map +1 -1
- package/dist/application/source-launch-scripts-service.d.ts +8 -10
- package/dist/application/source-launch-scripts-service.d.ts.map +1 -1
- package/dist/application/source-launch-scripts-service.js +8 -15
- package/dist/application/source-launch-scripts-service.js.map +1 -1
- package/dist/application/source-launch-service.d.ts +1 -1
- package/dist/application/source-launch-service.d.ts.map +1 -1
- package/dist/application/source-launch-service.js +3 -3
- package/dist/application/source-launch-service.js.map +1 -1
- package/dist/application/source-remove-service.d.ts +1 -1
- package/dist/application/source-remove-service.js +3 -3
- package/dist/application/source-remove-service.js.map +1 -1
- package/dist/application/workspace-init-service.d.ts +1 -1
- package/dist/application/workspace-init-service.d.ts.map +1 -1
- package/dist/application/workspace-init-service.js +55 -16
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/commands/remove-source.js +1 -1
- package/dist/cli/commands/remove-source.js.map +1 -1
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +8 -2
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +1 -1
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +3 -3
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/dist/domain/skill-frontmatter.d.ts +26 -0
- package/dist/domain/skill-frontmatter.d.ts.map +1 -0
- package/dist/domain/skill-frontmatter.js +141 -0
- package/dist/domain/skill-frontmatter.js.map +1 -0
- package/dist/domain/skills.d.ts +1 -1
- package/dist/domain/skills.d.ts.map +1 -1
- package/dist/domain/skills.js +1 -10
- package/dist/domain/skills.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/README.md +3 -3
- package/skills/w/SKILL.md +4 -5
- package/skills/w/artifacts/README.md +2 -2
- package/skills/w/commands/README.md +5 -5
- package/skills/w/commands/plan-exec.md +1 -1
- package/skills/w/commands/workspace-init.md +1 -1
- package/skills/w/exports/README.md +1 -1
- package/skills/w/loops/README.md +4 -5
- package/skills/w/loops/plan-exec-loop/SKILL.md +15 -18
- package/skills/w/loops/quick-loop/SKILL.md +1 -1
- package/skills/w/loops/spec-refine-loop/SKILL.md +11 -1
- package/skills/w/roles/README.md +4 -7
- 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
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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/`.
|
|
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) · `
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
package/skills/w/roles/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## Capability catalog
|
|
10
10
|
|
|
11
|
-
All
|
|
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
|
|
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
|
|
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`, `
|
|
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.
|