@tacuchi/agent-workflow-cli 12.9.0 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/node-process.d.ts +4 -1
- package/dist/adapters/node-process.d.ts.map +1 -1
- package/dist/adapters/node-process.js +65 -0
- package/dist/adapters/node-process.js.map +1 -1
- package/dist/application/paths-service.d.ts +4 -0
- package/dist/application/paths-service.d.ts.map +1 -1
- package/dist/application/paths-service.js +8 -0
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/process-registry-service.d.ts +53 -0
- package/dist/application/process-registry-service.d.ts.map +1 -0
- package/dist/application/process-registry-service.js +95 -0
- package/dist/application/process-registry-service.js.map +1 -0
- package/dist/application/project-tab-data.d.ts +5 -0
- package/dist/application/project-tab-data.d.ts.map +1 -1
- package/dist/application/project-tab-data.js +20 -0
- package/dist/application/project-tab-data.js.map +1 -1
- package/dist/application/source-launch-scripts-service.d.ts +63 -0
- package/dist/application/source-launch-scripts-service.d.ts.map +1 -0
- package/dist/application/source-launch-scripts-service.js +302 -0
- package/dist/application/source-launch-scripts-service.js.map +1 -0
- package/dist/application/source-launch-service.d.ts +52 -0
- package/dist/application/source-launch-service.d.ts.map +1 -0
- package/dist/application/source-launch-service.js +116 -0
- package/dist/application/source-launch-service.js.map +1 -0
- package/dist/application/workspace-init-service.d.ts +3 -0
- package/dist/application/workspace-init-service.d.ts.map +1 -1
- package/dist/application/workspace-init-service.js +40 -4
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/tui/components/process-list.d.ts +15 -0
- package/dist/cli/tui/components/process-list.d.ts.map +1 -0
- package/dist/cli/tui/components/process-list.js +37 -0
- package/dist/cli/tui/components/process-list.js.map +1 -0
- package/dist/cli/tui/components/source-launch-form.d.ts +19 -0
- package/dist/cli/tui/components/source-launch-form.d.ts.map +1 -0
- package/dist/cli/tui/components/source-launch-form.js +68 -0
- package/dist/cli/tui/components/source-launch-form.js.map +1 -0
- package/dist/cli/tui/tabs/project-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +188 -16
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/dist/domain/skills.d.ts +8 -1
- package/dist/domain/skills.d.ts.map +1 -1
- package/dist/domain/skills.js +7 -6
- package/dist/domain/skills.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ports/process.d.ts +22 -0
- package/dist/ports/process.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/w/SKILL.md +4 -6
- package/skills/w/exports/README.md +5 -5
- package/skills/w/exports/export-manuals/SKILL.md +8 -8
- package/skills/w/exports/export-reports/SKILL.md +7 -7
- package/skills/w/harness/SKILL.md +1 -1
- package/skills/w/loops/README.md +3 -4
- package/skills/w/loops/plan-exec-loop/SKILL.md +4 -2
- package/skills/w/loops/quick-loop/SKILL.md +3 -1
- package/skills/w/loops/spec-refine-loop/SKILL.md +3 -1
- package/skills/w/roles/README.md +16 -23
- package/skills/w/roles/tools/SKILL.md +2 -2
- package/skills/w/roles/coding-standards/SKILL.md +0 -82
- package/skills/w/roles/testing/SKILL.md +0 -180
- package/skills/w/roles/writing/SKILL.md +0 -90
|
@@ -21,7 +21,7 @@ Dar al `plan-exec-loop` la capacidad de crear herramientas y utilidades auxiliar
|
|
|
21
21
|
|
|
22
22
|
| Tipo | Rol | ¿Quién lo maneja? |
|
|
23
23
|
|---|---|---|
|
|
24
|
-
| Código de producto (services, controllers, components) | cambio en el repo fuente | `plan-exec-loop`
|
|
24
|
+
| Código de producto (services, controllers, components) | cambio en el repo fuente | `plan-exec-loop` (estilo: convenciones ambientes del host) |
|
|
25
25
|
| Tool / utilidad auxiliar creada por el plan | herramienta de soporte | esta skill (`tools`) |
|
|
26
26
|
| Script SQL de migración | dato persistente | `sql` + `export-scripts` |
|
|
27
27
|
|
|
@@ -120,7 +120,7 @@ Si la tool genera o manipula SQL:
|
|
|
120
120
|
|
|
121
121
|
### Code quality baseline
|
|
122
122
|
|
|
123
|
-
Al autorar el código de la tool,
|
|
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
124
|
- **Shell**: shellcheck-compatible, variables entre comillas, `set -euo pipefail`.
|
|
125
125
|
- **Node/TS**: tipado explícito, sin `any` salvo justificación, error handling explícito.
|
|
126
126
|
- **Python**: type hints, docstring en funciones públicas, manejo de excepciones específico.
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: coding-standards
|
|
3
|
-
description: >-
|
|
4
|
-
Coding standards capability — built-in default for the `coding-standards` role.
|
|
5
|
-
Stack-agnostic principles (SOLID, fail-fast, descriptive names, small methods,
|
|
6
|
-
reuse over duplication) plus per-stack conventions (Java/Spring, Angular/TypeScript,
|
|
7
|
-
Node), security (no secrets in code or logs, parametrized SQL, DB read-only via MCP),
|
|
8
|
-
HTTP error handling (never silence errors), logging levels, and FE-BE integration
|
|
9
|
-
rules (unified sparse DTO, PATCH for edit, no hidden fallbacks). Use when a loop
|
|
10
|
-
implements, reviews or refactors code.
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# coding-standards — Coding standards capability
|
|
14
|
-
|
|
15
|
-
## Role
|
|
16
|
-
|
|
17
|
-
`coding-standards` — built-in default. Rebindable in `.workflow/skills.toml` (third-party skill or `off`).
|
|
18
|
-
|
|
19
|
-
## Purpose
|
|
20
|
-
|
|
21
|
-
Aportar los estándares de código que la IA aplica al **implementar, revisar o refactorizar**. Read-only por diseño: carga reglas, no edita ni ejecuta nada por sí misma — el loop consumidor materializa el código.
|
|
22
|
-
|
|
23
|
-
## Composed by
|
|
24
|
-
|
|
25
|
-
- **`plan-exec-loop`** — al implementar/refactorizar las tasks del plan.
|
|
26
|
-
- **`quick-loop`** — al implementar el atajo liviano.
|
|
27
|
-
|
|
28
|
-
## Knowledge
|
|
29
|
-
|
|
30
|
-
### Principios generales
|
|
31
|
-
|
|
32
|
-
- **SOLID** — Single Responsibility, Open/Closed, Liskov, Interface Segregation, Dependency Inversion.
|
|
33
|
-
- **Fail fast** — validar y retornar al inicio del método (early returns, evitar nesting).
|
|
34
|
-
- **Nombres descriptivos** — el código habla por sí mismo; comentarios solo para el "por qué".
|
|
35
|
-
- **Métodos pequeños** — una sola responsabilidad por función.
|
|
36
|
-
- **Composición sobre herencia**.
|
|
37
|
-
- **Reutilización antes que duplicación (DRY)** — antes de crear componente/función/clase, revisar si ya existe en `shared/` (frontend) o `common/`/`util/` (backend). Si un patrón aparece 2-3 veces, proponer extracción.
|
|
38
|
-
|
|
39
|
-
### Estándares por stack
|
|
40
|
-
|
|
41
|
-
- **Java / Spring Boot**: Constructor Injection (sin Field Injection), `@Transactional(readOnly=true)` para lecturas, Java records para DTOs Request/Response, Jakarta Validation para inputs.
|
|
42
|
-
- **Angular / TypeScript**: constructor injection, `async` pipe en templates, evitar `any`, FormBuilder reactivo sobre `ngModel` directo, arquitectura `@data`/`@presentation`, normalización de tipos.
|
|
43
|
-
- **Node / otros**: mismos principios generales; aplicar las convenciones idiomáticas del proyecto detectado.
|
|
44
|
-
|
|
45
|
-
### Integración FE-BE (cuando el cambio cruza frontend y backend)
|
|
46
|
-
|
|
47
|
-
- **R1 — Sparse DTO unificado**: mismo DTO `<Feature>SaveRequest` para create + edit, todos los campos nullable. `null` = "no tocar".
|
|
48
|
-
- **R2 — PATCH para edit**: `@PatchMapping` en BE, `http.patch()` en FE. POST solo para create. PUT solo si replace total justificado.
|
|
49
|
-
- **R3 — FE envía solo cambios**: payload diff entre `formValue` y entidad original.
|
|
50
|
-
- **R4 — Sin fallbacks que oculten errores**: prohibido `catchError(() => of([]))` en FE; prohibido try/catch con fallback al método legacy en BE durante migraciones. Usar feature flags explícitas para rollout gradual.
|
|
51
|
-
- **R5 — Validación BE con Bean Validation + groups**: `@NotNull(groups = OnCreate.class)` para distinguir reglas POST vs PATCH cuando comparten DTO.
|
|
52
|
-
- **R6 — DB stub-first**: funciones/SP nuevas arrancan devolviendo mock (`RETURN '[]'::jsonb`); implementación real en una fase posterior.
|
|
53
|
-
|
|
54
|
-
### Seguridad
|
|
55
|
-
|
|
56
|
-
- **Nunca** exponer secrets, API keys ni credenciales en código.
|
|
57
|
-
- **Nunca** logear datos sensibles (contraseñas, tokens, datos personales).
|
|
58
|
-
- **Siempre** parametrizar queries SQL (nunca concatenar strings).
|
|
59
|
-
- **BD vía MCP es READONLY**. Modificaciones a BD solo como scripts SQL versionados (ver rol `sql`); las aplica el **usuario**, nunca la IA — ni por MCP, ni `Bash`, ni `psql`, ni driver. (Invariante 4.)
|
|
60
|
-
|
|
61
|
-
### Manejo de errores HTTP
|
|
62
|
-
|
|
63
|
-
- **Nunca** silenciar errores HTTP con `catchError(() => of([]))` ni equivalentes. Los errores del backend se propagan al usuario (toast/mensaje) para detectar regresiones en guardado/sincronización/creación. Para reintentos usar operadores explícitos (`retry`, `retryWhen`), no silenciar.
|
|
64
|
-
|
|
65
|
-
### Logging
|
|
66
|
-
|
|
67
|
-
- `ERROR` — fallos que requieren atención inmediata.
|
|
68
|
-
- `WARN` — situaciones inesperadas pero manejadas.
|
|
69
|
-
- `INFO` — eventos de negocio relevantes (inicio/fin de procesos).
|
|
70
|
-
- `DEBUG` — detalle técnico para diagnóstico.
|
|
71
|
-
|
|
72
|
-
### Convenciones de BD (nomenclatura)
|
|
73
|
-
|
|
74
|
-
Esquemas `esq_`, tablas `tb_`, sequences `seq_`, funciones `fn_`/procedimientos `sp_`, patrón maestra-detalle, auditoría en `esq_audit`. Para autoría de scripts SQL (estilo, header, categorías, rollback) usar el rol **`sql`**.
|
|
75
|
-
|
|
76
|
-
## Output
|
|
77
|
-
|
|
78
|
-
Ninguno propio. La skill aporta reglas; el código lo escribe el loop. Cuando el cambio toca BD, delega la autoría de scripts al rol `sql`. Nunca exporta a `docs/` (invariante 1).
|
|
79
|
-
|
|
80
|
-
## Source
|
|
81
|
-
|
|
82
|
-
Reciclada de `standards/coding-standards/` (SKILL.md + references Java/Spring, Angular/TypeScript, fe-be-integration, database-conventions, frontend-structure, project-structure). Los principios UX de mantenimientos CRUD (formularios, listados, modales) viven en el rol `ui-spec`/`ui-design`; la autoría de scripts SQL en el rol `sql`. Se descarta la dependencia de `profile.json` y de comandos CLI de la doctrina vieja.
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: testing
|
|
3
|
-
description: >
|
|
4
|
-
Estrategia y ejecución de pruebas: selecciona niveles (unit / integration / e2e),
|
|
5
|
-
resuelve comandos por stack detectado, guía la convención de nombres y estructura de tests.
|
|
6
|
-
Pregunta al humano antes de ejecutar; nunca lanza el test runner sin confirmación explícita.
|
|
7
|
-
Compuesta por plan-exec-loop y quick-loop durante la fase de validación de cambios.
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# testing — Test strategy and execution capability
|
|
11
|
-
|
|
12
|
-
## Role
|
|
13
|
-
|
|
14
|
-
`testing` — implementación built-in por defecto. Rebindeable a otra skill (de tercero o `off`) en `.workflow/skills.toml`.
|
|
15
|
-
|
|
16
|
-
## Purpose
|
|
17
|
-
|
|
18
|
-
Dar a los loops la capacidad de razonar sobre tests: qué nivel aplicar, con qué comando, con qué convención. **No ejecuta tests de forma autónoma** — primero pregunta al humano si quiere que el loop los corra, o si los correrá manualmente, o si no hacen falta en esta sesión.
|
|
19
|
-
|
|
20
|
-
## Composed by
|
|
21
|
-
|
|
22
|
-
| Loop | Cuándo la compone |
|
|
23
|
-
|---|---|
|
|
24
|
-
| `plan-exec-loop` | durante validation de cada task ejecutada |
|
|
25
|
-
| `quick-loop` | cuando el cambio quick requiere verificación |
|
|
26
|
-
|
|
27
|
-
## Knowledge
|
|
28
|
-
|
|
29
|
-
### Execution rule
|
|
30
|
-
|
|
31
|
-
Por defecto, **no ejecutar pruebas automáticamente**. Antes de correr cualquier test runner, preguntar al humano vía *structured-choice* (capacidad del arnés — ver `../../harness/SKILL.md`). En **Claude Code** es `AskUserQuestion` (máx 4 preguntas/llamada → **≤3 preguntas de contenido + 1 control `flow`**); en un arnés sin elección estructurada, degrada a **markdown numerado**.
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
structured-choice:
|
|
35
|
-
"¿Correr los tests?"
|
|
36
|
-
[a] Sí, el loop los ejecuta
|
|
37
|
-
[b] Los corro yo manualmente
|
|
38
|
-
[c] No hace falta en esta sesión
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Solo saltear la pregunta si el workspace declara `Validation mode: auto` en `.workflow/config.toml`.
|
|
42
|
-
|
|
43
|
-
### Test levels
|
|
44
|
-
|
|
45
|
-
Tres niveles universales (adaptados al stack detectado):
|
|
46
|
-
|
|
47
|
-
| Nivel | Alcance | Cuándo usarlo |
|
|
48
|
-
|---|---|---|
|
|
49
|
-
| **a) Unit** | Lógica aislada (servicios, utils, mappers) | Fix puntual, lógica sin dependencias externas |
|
|
50
|
-
| **b) Integration** | Unit + capa de API/controladores | Endpoint nuevo o modificado |
|
|
51
|
-
| **c) Full** | Integration + contexto completo + e2e | Feature completa, flujo crítico, integración entre capas |
|
|
52
|
-
|
|
53
|
-
### Stack resolution
|
|
54
|
-
|
|
55
|
-
El stack se detecta por archivos de manifest presentes en el workspace. Precedencia: si el bloque `WORKSPACE → Stack` declara override de build/wrapper, usarlo.
|
|
56
|
-
|
|
57
|
-
#### Spring Boot (Maven)
|
|
58
|
-
|
|
59
|
-
| Nivel | Framework | Comando |
|
|
60
|
-
|---|---|---|
|
|
61
|
-
| a) Unit | JUnit 5 + Mockito | `./mvnw test -Dtest=ClaseTest` |
|
|
62
|
-
| b) Integration | + MockMvc | `./mvnw test` |
|
|
63
|
-
| c) Full | + @SpringBootTest | `./mvnw verify` |
|
|
64
|
-
|
|
65
|
-
> Windows: `mvnw.cmd` en lugar de `./mvnw`.
|
|
66
|
-
|
|
67
|
-
#### Spring Boot (Gradle)
|
|
68
|
-
|
|
69
|
-
| Nivel | Comando |
|
|
70
|
-
|---|---|
|
|
71
|
-
| a) Unit | `./gradlew test --tests ClaseTest` |
|
|
72
|
-
| b) Integration | `./gradlew test` |
|
|
73
|
-
| c) Full | `./gradlew integrationTest` (o `check`) |
|
|
74
|
-
|
|
75
|
-
#### Angular
|
|
76
|
-
|
|
77
|
-
| Nivel | Framework | Comando |
|
|
78
|
-
|---|---|---|
|
|
79
|
-
| a) Unit | Jasmine + Karma (o Jest) | `ng test --watch=false` |
|
|
80
|
-
| b) Integration | + TestBed + ComponentFixture | `ng test --watch=false` |
|
|
81
|
-
| c) Full | + Cypress/Playwright si configurado | `npm run e2e` |
|
|
82
|
-
|
|
83
|
-
#### Node / TypeScript genérico
|
|
84
|
-
|
|
85
|
-
| Nivel | Comando |
|
|
86
|
-
|---|---|
|
|
87
|
-
| a) Unit | `npm test` (script `test` en `package.json`) |
|
|
88
|
-
| b) Integration | `npm test` con suites de integración |
|
|
89
|
-
| c) Full | `npm run test:e2e` o según config |
|
|
90
|
-
|
|
91
|
-
#### Resolución automática
|
|
92
|
-
|
|
93
|
-
1. `mvnw` / `mvnw.cmd` → Maven wrapper.
|
|
94
|
-
2. `gradlew` → Gradle wrapper.
|
|
95
|
-
3. `angular.json` → `ng test`.
|
|
96
|
-
4. `package.json` con script `test` → `npm test`.
|
|
97
|
-
5. Si hay override en `WORKSPACE → Stack` → usarlo.
|
|
98
|
-
|
|
99
|
-
### Naming conventions
|
|
100
|
-
|
|
101
|
-
**Java:** clase `[Objetivo]Test.java`, método `[metodo]_[escenario]_[resultado]`. Estructura Arrange-Act-Assert.
|
|
102
|
-
|
|
103
|
-
```java
|
|
104
|
-
@Test
|
|
105
|
-
void enviar_conEmailValido_retornaExito() {
|
|
106
|
-
// Arrange
|
|
107
|
-
var request = new NotificacionRequest("user@example.com", "Asunto", "template", Map.of());
|
|
108
|
-
when(emailProvider.send(any())).thenReturn(true);
|
|
109
|
-
// Act
|
|
110
|
-
var resultado = service.enviar(request);
|
|
111
|
-
// Assert
|
|
112
|
-
assertThat(resultado).isTrue();
|
|
113
|
-
}
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
**Angular / TypeScript:** archivo `[nombre].spec.ts`, bloques `describe` / `it`. Usar `TestBed` para componentes.
|
|
117
|
-
|
|
118
|
-
```typescript
|
|
119
|
-
describe('AuthService', () => {
|
|
120
|
-
it('should return token on login', () => {
|
|
121
|
-
// ...
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### Level selection prompt (to show the human)
|
|
127
|
-
|
|
128
|
-
Adaptar al stack resuelto. Ejemplo para Spring Boot:
|
|
129
|
-
|
|
130
|
-
```
|
|
131
|
-
¿Qué nivel de pruebas aplicamos?
|
|
132
|
-
a) Unitarios — JUnit 5 + Mockito (rápido, aislado)
|
|
133
|
-
b) Integración — + MockMvc controllers
|
|
134
|
-
c) Completo — + @SpringBootTest (contexto Spring completo)
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
El humano puede cambiar de nivel en cualquier momento o decidir no ejecutar desde el loop.
|
|
138
|
-
|
|
139
|
-
### Execution and logging
|
|
140
|
-
|
|
141
|
-
1. Confirmar que el humano quiere ejecución desde el loop (ver "Execution rule").
|
|
142
|
-
2. Ejecutar el comando resuelto según stack y nivel.
|
|
143
|
-
3. Registrar resultado en `TEST_LOG.md` **solo si** el humano pidió registro formal o la ejecución fue desde el loop.
|
|
144
|
-
4. Si el humano ya validó manualmente, no repetir; anotar una línea breve si aporta trazabilidad.
|
|
145
|
-
5. Si hay fallos y el humano quiere continuar: corregir y re-ejecutar.
|
|
146
|
-
|
|
147
|
-
### TestBuilder pattern (Java)
|
|
148
|
-
|
|
149
|
-
Para construir fixtures reutilizables sin acoplar los tests al constructor de producción:
|
|
150
|
-
|
|
151
|
-
```java
|
|
152
|
-
public class NotificacionTestBuilder {
|
|
153
|
-
private String destinatario = "test@example.com";
|
|
154
|
-
private String estado = "PENDIENTE";
|
|
155
|
-
|
|
156
|
-
public static NotificacionTestBuilder builder() { return new NotificacionTestBuilder(); }
|
|
157
|
-
|
|
158
|
-
public NotificacionTestBuilder destinatario(String val) { this.destinatario = val; return this; }
|
|
159
|
-
public NotificacionTestBuilder estado(String val) { this.estado = val; return this; }
|
|
160
|
-
|
|
161
|
-
public Notificacion build() {
|
|
162
|
-
var e = new Notificacion();
|
|
163
|
-
e.setDestinatario(destinatario);
|
|
164
|
-
e.setEstado(estado);
|
|
165
|
-
return e;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
## Output
|
|
171
|
-
|
|
172
|
-
No produce artefactos de forma autónoma. Cuando el humano confirma ejecución:
|
|
173
|
-
- Corre el comando resuelto y reporta el resultado inline.
|
|
174
|
-
- Escribe `TEST_LOG.md` en la sesión activa solo si fue pedido explícitamente.
|
|
175
|
-
|
|
176
|
-
No gradua a `docs/` (invariant #1).
|
|
177
|
-
|
|
178
|
-
## Source
|
|
179
|
-
|
|
180
|
-
Reciclado de `agent-workflow/standards/testing-strategy/` del bundle viejo (v0.1.0). Se conserva: los tres niveles (a/b/c), la regla de confirmación antes de ejecutar, la resolución de stack por manifest, los naming conventions, la tabla de comandos por framework. Se descarta: la referencia al bloque `AW-PROJECT → Stack` (reemplazado por `WORKSPACE → Stack`), el `TEST_LOG.md` obligatorio, el sandbox-readonly-rules legacy, referencias a `plan mode` del sistema anterior.
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: writing
|
|
3
|
-
description: >-
|
|
4
|
-
Clear technical writing capability — built-in default for the `writing` role. Rules
|
|
5
|
-
for any prose the AI produces in agent-workflow context: spec/plan/session artifacts,
|
|
6
|
-
commit messages, PR descriptions, export deliverables (manuals/reports). Short
|
|
7
|
-
sentences, lists over prose, one idea per line, "what + why" on one line, no jargon,
|
|
8
|
-
no filler. Use across all loops and in export-manuals / export-reports.
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# writing — Clear technical writing
|
|
12
|
-
|
|
13
|
-
## Role
|
|
14
|
-
|
|
15
|
-
`writing` — built-in default. Rebindable in `.workflow/skills.toml` (third-party skill or `off`). The most broadly composed role.
|
|
16
|
-
|
|
17
|
-
## Purpose
|
|
18
|
-
|
|
19
|
-
Reglas de estilo y formato para **toda la prosa** que la IA produce en contexto agent-workflow. Read-only por diseño: carga reglas; el `.md` lo materializa el consumidor (loop o export).
|
|
20
|
-
|
|
21
|
-
## Composed by
|
|
22
|
-
|
|
23
|
-
- **Todos los loops** — al escribir specs, planes, artefactos de sesión, mensajes de commit, descripciones de PR.
|
|
24
|
-
- **`export-manuals`** — al redactar manuales técnicos (`docs/manuals`).
|
|
25
|
-
- **`export-reports`** — al redactar informes ejecutivos (`docs/reports`).
|
|
26
|
-
|
|
27
|
-
(También aplica a respuestas en chat sobre temas agent-workflow.)
|
|
28
|
-
|
|
29
|
-
## Knowledge
|
|
30
|
-
|
|
31
|
-
### Las 6 reglas
|
|
32
|
-
|
|
33
|
-
1. **Frases cortas**: máximo ~15 palabras. Si pasa de 20, partir en dos.
|
|
34
|
-
2. **Listas sobre prosa**: 3+ ideas paralelas van en bullets. Prosa solo para narrar.
|
|
35
|
-
3. **Una idea por línea**: si el bullet usa "y" o ";" para meter una segunda idea, separar.
|
|
36
|
-
4. **"Qué + por qué" en una línea**: formato `<qué>: <por qué corto>`. Sin párrafo aparte para el "por qué".
|
|
37
|
-
5. **Sin jerga ni abreviaturas raras**: palabras comunes. Términos técnicos (MCP, C4) OK; abreviaturas inventadas (ej. "TLDR del CTX") no.
|
|
38
|
-
6. **Sin relleno**: borrar "es importante notar que…", "cabe destacar…", "como se mencionó…", "en conclusión…". La idea va directo.
|
|
39
|
-
|
|
40
|
-
### Palabras a evitar / preferir
|
|
41
|
-
|
|
42
|
-
| Evitar | Preferir |
|
|
43
|
-
|---|---|
|
|
44
|
-
| "es importante notar que" / "cabe destacar" | (borrar, empezar con la idea) |
|
|
45
|
-
| "en otras palabras" / "asimismo" | (borrar) / "también" |
|
|
46
|
-
| "se procede a" / "llevar a cabo" | verbo directo / "hacer" |
|
|
47
|
-
| "implementar la funcionalidad de X" | "implementar X" |
|
|
48
|
-
| "realizar la validación de" | "validar" |
|
|
49
|
-
| "a los efectos de" / "en el marco de" | "para" / "en" |
|
|
50
|
-
| "no obstante" / "previamente mencionado" | "pero" / "antes" |
|
|
51
|
-
| "TLDR", "FYI", "WIP" | escribir la palabra completa |
|
|
52
|
-
|
|
53
|
-
### Ejemplo antes / después
|
|
54
|
-
|
|
55
|
-
Antes:
|
|
56
|
-
> Es importante notar que cada llamada implica un round-trip al servidor MCP además del consumo de tokens correspondiente al JSON de respuesta.
|
|
57
|
-
|
|
58
|
-
Después (-50%):
|
|
59
|
-
> Cada llamada MCP cuesta un round-trip y los tokens del JSON.
|
|
60
|
-
|
|
61
|
-
Decisión densa, antes:
|
|
62
|
-
> Se decidió, luego de analizar las alternativas, implementar la validación de roles solo en el frontend, dado que el backend no requiere la lógica y evita duplicar la regla.
|
|
63
|
-
|
|
64
|
-
Después:
|
|
65
|
-
> **Decisión**: validar permisos solo en el frontend.
|
|
66
|
-
> **Por qué**: el backend no necesita la lógica; evita duplicar la regla.
|
|
67
|
-
|
|
68
|
-
### Cuándo SÍ se permite prosa larga
|
|
69
|
-
|
|
70
|
-
- Resúmenes ejecutivos donde la decisión necesita 4-6 oraciones para sostenerse.
|
|
71
|
-
- Cadena causal de un incidente (causa raíz puede requerir un párrafo).
|
|
72
|
-
- Tradeoffs de UX que necesitan explicación.
|
|
73
|
-
|
|
74
|
-
Aún ahí: oraciones simples encadenadas, no oraciones largas.
|
|
75
|
-
|
|
76
|
-
### Aplicación a los documentos del modelo nuevo
|
|
77
|
-
|
|
78
|
-
- **spec** (`docs/specs`): brief y criterios de aceptación claros; la sección `## UI spec` la formatea el rol `ui-design`.
|
|
79
|
-
- **plan** (`docs/plans`): resumen + fases + tasks con dependencias; tasks sin código inline (el código va en evidencia y se referencia).
|
|
80
|
-
- **decisiones**: `**Decisión**:` + `**Por qué**:`, 3-6 líneas; si es obvia, no se registra.
|
|
81
|
-
- **commit messages / PR**: mismas reglas (frases cortas, sin jerga, sin relleno). Formato canónico del mensaje en el rol `git`.
|
|
82
|
-
- **export manuals/reports**: audiencia operadores/gerencia; bullets sobre prosa, sin relleno corporativo.
|
|
83
|
-
|
|
84
|
-
## Output
|
|
85
|
-
|
|
86
|
-
Ninguno propio. La skill aporta reglas; el `.md` lo escribe el consumidor (loop o export). Cuando escribe a `docs/`, lo hace solo el export que la compone (invariante 1) y solo en su carpeta (invariante 2).
|
|
87
|
-
|
|
88
|
-
## Source
|
|
89
|
-
|
|
90
|
-
Reciclada de `standards/redaccion-simple/` (las 6 reglas, tabla evitar/preferir, ejemplos, cuándo permitir prosa larga). Se descarta el catálogo de estructuras por artefacto del modelo viejo (OBJETIVO/DECISIONES/etc.); los documentos del modelo nuevo son spec/plan + artefactos de sesión, y su estructura la definen los loops y exports.
|