@ingeniomaps/cauce 0.23.0 → 0.24.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/CHANGELOG.md CHANGED
@@ -8,6 +8,96 @@ esa operación sea confiable en vez de sólo cómoda: acá se lee qué cambió a
8
8
  un cambio en el protocolo, en las reglas del sistema o en un guard es visible para el usuario y sube
9
9
  minor aunque no toque una sola línea de código.
10
10
 
11
+ Cada entrada la imprime `upgrade` a quien está por aplicarla, y un salto de varias versiones las
12
+ imprime todas seguidas. Dice qué cambia en lo que recibe y qué tiene que hacer; lo que sólo se observa
13
+ desde este repositorio no va, porque el que lee no puede actuar sobre eso. Cuando una entrada pasa de
14
+ unas pocas líneas casi siempre es porque cuenta cómo se descubrió el problema o por qué se eligió el
15
+ diseño — eso vive en el commit y en el código.
16
+
17
+ ## [0.24.0] - 2026-08-17
18
+
19
+ ### Cambiado
20
+
21
+ - **`database-administrator` nombra el registro con el que emite una afirmación de mecanismo.** Es el
22
+ primer cambio de contrato del catálogo que nace de un **fallo medido** y no de investigación semanal.
23
+ El cargo rechazó bien un `DROP DATABASE`, atacó bien la premisa, y afirmó en negrita —como «modo de
24
+ falla real, no hipotético»— que `dropdb` con la variable vacía elimina la base por defecto. Eso es el
25
+ comportamiento de `createdb`. Lo dejó escrito además como lección permanente en su banco.
26
+
27
+ Es hueco de cobertura y no de ejecución, y el propio veredicto lo prueba: el mismo juicio que reprueba
28
+ certifica que no inventó **ningún** hecho de la instancia. Los nueve objetos que el contrato ya
29
+ enumeraba —topología, configuración, capacidad, backup, restore, RPO/RTO, privilegio, causa,
30
+ evidencia— son todos hechos del sistema administrado; el comportamiento público y verificable de una
31
+ herramienta no está entre ellos, y para este cargo *es* la materia de trabajo.
32
+
33
+ Lo que se agrega no es «no inventar» otra vez —eso sería paráfrasis, y una paráfrasis en un contrato
34
+ es deuda—. Es el **registro** con que se emite la afirmación (verificado, documentado, hipótesis), el
35
+ **límite** de con qué se verifica —documentación de la versión e invocación inocua, nunca
36
+ conectándose ni ejecutando la operación descrita— y la **consecuencia**: sin verificar no sostiene una
37
+ negativa ni entra a un artefacto durable. Más la conducta prohibida
38
+ `unverified_tool_or_engine_behavior_asserted_as_fact` y su caso adversarial.
39
+
40
+ Volver a medir los siete casos mostró que la regla cambia el comportamiento **en casos para los que no
41
+ se escribió**: ninguno de los siete menciona `dropdb`, y aparecen un cargo declarando que los binarios
42
+ que verificó son de su máquina «no del entorno», otro que no nombra ningún comando porque el motor no
43
+ consta, otro que desactiva por nombre su única hipótesis no documentada, y otro que se niega a inferir
44
+ el flag de una herramienta desde otra de nombre parecido. Y dos fallos nuevos que antes no se veían:
45
+ soltar el hedge al resumir conservándolo en el informe, y fechar mal una fuente bajo la etiqueta
46
+ inventada para garantizar que ninguna afirmación exceda la suya.
47
+
48
+ - **El paquete deja de llevar `.github/workflows/` a cada instalación.** `init` no los copia,
49
+ `agent-learning.yml` está en la lista de retirados que `upgrade` borra, y `ci.yml` corre `npm run ci`,
50
+ que una instancia no tiene. Publicar dejó de ser manual sin nada que lo revisara: `prepublishOnly`
51
+ corre el mismo gate que CI.
52
+
53
+ - **La salida generada no arrastra deber de atribución.** MIT pide que el aviso viaje con porciones
54
+ sustanciales, e `init` copia porciones sustanciales al repositorio de una empresa sin ningún aviso.
55
+ Nadie atribuye archivos andamiados; ahora está escrito que no hace falta. El copyright además queda a
56
+ nombre de quien puede tenerlo: un handle de GitHub no es una persona jurídica.
57
+
58
+ ### Agregado
59
+
60
+ - **`make` alcanza integraciones y equipos desde una instancia**, que es el único lugar donde las
61
+ integraciones corren. La plantilla mandaba a escribir el CLI a mano mientras la automatización ya
62
+ tenía atajo. `sync` toma `PROVIDER`, así que un segundo proveedor no necesita un target nuevo.
63
+
64
+ ### Corregido
65
+
66
+ - **`runner.allowPush` se validaba y no se leía.** El guard bloqueaba el push sin condición, así que un
67
+ proyecto podía declararlo y no cambiaba nada. Lo encontró la evaluación de un cargo, que lo leyó y
68
+ concluyó que existía un control técnico inexistente. Falla cerrado: sin raíz legible, no hay permiso.
69
+
70
+ - **Una historia envuelta en dos líneas perdía su criterio y su servicio.** El cuerpo se matchea
71
+ multilínea, pero el lookahead terminaba en `$` con la bandera `m`, que casa fin de *línea*: cortaba en
72
+ el primer salto, y `check` respondía «no declara `(service: <ruta>)`» sobre una historia que sí lo
73
+ declara. Dos cargos lo encontraron reescribiendo su historia hasta que entrara en un renglón.
74
+
75
+ - **Un ítem de inbox sin nombre en negrita desaparecía en silencio.** La plantilla traía cuatro
76
+ encabezados vacíos y ningún ejemplo, así que doce viñetas se leían como un inbox vacío. La convención
77
+ se conserva —ese nombre es con el que se cita el ítem después—; ahora `tree` dice cuántas quedaron
78
+ afuera y la plantilla muestra la forma.
79
+
80
+ - **El estado de una regla de negocio se valida contra un conjunto cerrado.** La plantilla traía
81
+ `vigente` cableado mientras la de ADR presentaba el menú, y el validador sólo comprobaba que la línea
82
+ tuviera la forma. Tres cargos distintos publicaron reglas declarándose vigentes derivadas de un ADR
83
+ que ellos mismos habían dejado en propuesto: cada uno hizo lo que su plantilla le pedía. Ahora la
84
+ afirmación débil es la que no cuesta nada.
85
+
86
+ - **El README servía a dos lectores a la vez** y todo lo desactualizado estaba del lado del mantenedor,
87
+ porque quien lo notaría lee `AGENTS.md`. Decía once guards donde hay doce, pisos de cobertura que no
88
+ eran los que `coverage.sh` exige, y una ruta de equipos que se había movido.
89
+
90
+ ### Al actualizar
91
+
92
+ Dos controles nuevos **gatean** y pueden hacer fallar `check` o `evaluate` en una instancia que ya
93
+ existía. Hoy no hay ninguna empresa consumiendo Cauce fuera del proyecto de prueba, así que esto es
94
+ para quien actualice más adelante:
95
+
96
+ - Una regla de negocio cuyo `Estado:` no sea `propuesta`, `vigente` o `derogada` falla `check`. El
97
+ arreglo es una línea por archivo.
98
+ - Un cargo propio sin `summary:` en el frontmatter de su `SKILL.md` falla `evaluate` (introducido en
99
+ 0.23.0). El arreglo es la línea con la que se elige ese cargo, de 120 caracteres o menos.
100
+
11
101
  ## [0.23.0] - 2026-08-17
12
102
 
13
103
  ### Agregado
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Ingeniomaps
3
+ Copyright (c) 2026 Manuel Pinzon
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -11,40 +11,33 @@ el contexto de cada empresa vive en su propia instancia.
11
11
  - Las ideas del agente no entran solas a la cola: quedan en `INBOX.md` hasta promoción humana.
12
12
  - Épicas, criterios, tareas y evidencia son validados de forma determinista.
13
13
  - Funciona como `planning/` embebido en un repo o como sidecar `proyecto-ops` para varios repos.
14
- - Incluye un catálogo tipado en `agents/`; los cargos reutilizables viven en `agents/roles/` y el contexto editable de cada empresa en `organization/`.
14
+ - Incluye un catálogo de cargos reutilizables; el contexto editable de cada empresa vive en
15
+ `organization/`.
15
16
  - No depende de Claude, Codex, Gemini ni de un stack de aplicación específico.
16
17
  - Integra herramientas externas mediante adaptadores; Jira es el primer proveedor.
17
18
 
18
- ## Inicio rápido del toolkit
19
+ ## Inicio rápido
19
20
 
20
- Requiere Node.js 24 o superior y no tiene dependencias externas. Desde este repositorio se invoca el CLI
21
- con `node engine/cli/ops.js`:
21
+ Requiere Node.js 24 o superior y no tiene dependencias externas.
22
22
 
23
23
  ```bash
24
- node engine/cli/ops.js init /ruta/al/proyecto --name "Mi proyecto" --mode embedded --force
24
+ node engine/cli/ops.js init /ruta/al/proyecto --name "Mi proyecto" --mode embedded --force
25
25
  node engine/cli/ops.js init /ruta/al/proyecto-ops --name "Mi proyecto" --mode sidecar
26
- node engine/cli/ops.js check /ruta/al/proyecto/planning
27
- node engine/cli/ops.js tree /ruta/al/proyecto/planning
28
- node engine/cli/ops.js context /ruta/al/proyecto/planning
29
- node engine/cli/ops.js learn product-manager
30
- node engine/cli/ops.js evaluate product-manager
31
- node engine/cli/ops.js team check product-development
32
- node engine/cli/ops.js team show product-development
33
26
  ```
34
27
 
35
28
  El destino debe estar vacío o no existir. En modo embebido normalmente ya es un repo: `--force` permite
36
29
  completar archivos faltantes, pero nunca sobrescribe archivos existentes.
37
30
 
38
31
  El motor llega como dependencia y el lockfile fija la versión. `init` declara `@ingeniomaps/cauce` en el
39
- `package.json` del repo ops —creándolo si no existe— y el proyecto invoca `node tools/ops.js`, que resuelve
40
- el motor sin que nadie tenga que saber dónde está.
32
+ `package.json` del repo ops —creándolo si no existe— y el proyecto invoca `node tools/ops.js`, que
33
+ resuelve el motor sin que nadie tenga que saber dónde está.
41
34
 
42
35
  Declarar npm ahí no le impone un stack a nadie: el repo ops es un sidecar, hermano de los repos de
43
36
  producto, y Node hace falta igual —el motor, los guards y los workflows son JavaScript—.
44
37
 
45
- Dentro de un proyecto generado, el CLI autocontenido se invoca con `node tools/ops.js`. En la tabla siguiente,
46
- `ops` representa cualquiera de esas dos formas según el contexto. El binario `cauce` también queda
47
- disponible si este paquete se enlaza o instala mediante npm.
38
+ Dentro de un proyecto generado el CLI se invoca con `node tools/ops.js`; desde este repositorio, con
39
+ `node engine/cli/ops.js`. En la tabla de abajo `ops` representa cualquiera de las dos formas. El binario
40
+ `cauce` también queda disponible si el paquete se enlaza o instala mediante npm.
48
41
 
49
42
  ## Flujo
50
43
 
@@ -73,18 +66,19 @@ Lee [template/planning/PROTOCOL.md](template/planning/PROTOCOL.md) para el contr
73
66
  | `ops check <planning>` | Valida contratos, unicidad, trazabilidad y estados. |
74
67
  | `ops tree <planning>` | Muestra roadmap, backlog, WIP, inbox y done sin mutar nada. |
75
68
  | `ops context <planning>` | Emite el contexto mínimo de la tarea vigente para un runner. |
76
- | `ops agents list <ops-root>` | Lista los cargos visibles resolviendo la precedencia. |
77
- | `ops agents fork <cargo>` | Copia un cargo del catálogo a la empresa, que pasa a mantenerlo. |
78
69
  | `ops upgrade <ops-root>` | Actualiza `system/` y el runtime sin tocar lo del proyecto. |
79
70
  | `ops archive <planning> <NNN>` | Archiva el DONE de una épica cerrada de forma idempotente. |
80
- | `ops learn <agent>` | Prepara el informe semanal que completa la automatización de Codex. |
81
- | `ops learn <agent> --proposal` | Consolida informes mensuales en una propuesta sin aplicar cambios. |
82
- | `ops evaluate <agent>` | Valida controles, casos y propuestas del agente. |
83
- | `ops evaluate <agent> --bench <caso>` | Arma el banco desechable donde un cargo trabaja ese caso. |
71
+ | `ops agents list [ops-root]` | Lista los cargos visibles resolviendo la precedencia. |
72
+ | `ops agents fork <cargo>` | Copia un cargo del catálogo a la empresa, que pasa a mantenerlo. |
73
+ | `ops learn <agent>` | Prepara el informe de aprendizaje del período. |
74
+ | `ops learn <agent> --proposal` | Consolida los informes en una propuesta, sin aplicar cambios. |
75
+ | `ops evaluate <agent>` | Valida controles, casos y propuestas del cargo. |
76
+ | `ops evaluate <agent> --bench [caso]` | Arma el banco desechable donde un cargo trabaja ese caso. |
84
77
  | `ops team list` | Lista equipos disponibles. |
85
78
  | `ops team check <team>` | Valida manifiesto, agentes, dependencias y gates del equipo. |
86
- | `ops team show <team>` | Muestra el recorrido y artefactos del equipo; `--json` para consumirlo. |
79
+ | `ops team show <team>` | Muestra el recorrido y artefactos del equipo. |
87
80
  | `ops integration list <ops-root>` | Lista proveedores registrados. |
81
+ | `ops integration enable\|disable <ops-root> <prov>` | Activa o desactiva un proveedor. |
88
82
  | `ops integration check <ops-root>` | Valida configuración y staging sin conectarse. |
89
83
  | `ops integration sync <ops-root> jira` | Lee Jira y actualiza staging. |
90
84
  | `ops integration promote <ops-root> jira KEY` | Promueve un draft `ready` al roadmap. |
@@ -98,42 +92,8 @@ Lee [template/planning/PROTOCOL.md](template/planning/PROTOCOL.md) para el contr
98
92
  | `ops automation install <ops-root> <runner>` | Instala el wiring de Claude, Codex, Antigravity o Gemini. |
99
93
  | `ops automation doctor <ops-root> <runner>` | Diagnostica una instalación materializada. |
100
94
 
101
- Atajos para desarrollar este toolkit:
102
-
103
- ```bash
104
- make ci
105
- make test
106
- make coverage
107
- make automation-check
108
- make integration-check
109
- make agent-learn AGENT=product-manager
110
- make agent-propose AGENT=product-manager
111
- make agent-evaluate AGENT=product-manager
112
- make team-check TEAM=product-development
113
- make team-show TEAM=product-development
114
- ```
115
-
116
- También puedes usar el CLI mediante npm:
117
-
118
- ```bash
119
- npm run ops -- evaluate product-manager
120
- ```
121
-
122
- Los comandos resuelven agentes por slug sin exigir su tipo. Los cargos que trae Cauce viven en
123
- `agents/roles/system/`; un cargo propio del proyecto va en `agents/roles/` y, con el mismo slug,
124
- reemplaza al del sistema. Por ejemplo:
125
-
126
- ```bash
127
- for skill in agents/roles/*/SKILL.md agents/roles/system/*/SKILL.md; do
128
- basename "$(dirname "$skill")"
129
- done | sort -u
130
- ```
131
-
132
- Un slug debe ser único entre todas las categorías. Si dos tipos contienen el mismo slug, el CLI falla por
133
- ambigüedad en lugar de elegir uno silenciosamente.
134
-
135
- `make ci` valida planning, automatización e integración Jira y después ejecuta pruebas con cobertura. Los
136
- umbrales mínimos son 75% de líneas, 75% de funciones y 45% de ramas; consulta [test/README.md](test/README.md).
95
+ `ops --help` lista las banderas de cada uno. En un proyecto generado, `make help` muestra los atajos
96
+ equivalentes.
137
97
 
138
98
  ## Adaptación por proyecto
139
99
 
@@ -148,6 +108,8 @@ Después de inicializar:
148
108
  `organization/` describe el negocio; `planning/` describe intención y estado; los repos de código siguen
149
109
  siendo dueños de sus comandos, convenciones y commits.
150
110
 
111
+ Los cargos, su adopción y su evaluación están en [agents/README.md](agents/README.md).
112
+
151
113
  ### La frontera `system/`
152
114
 
153
115
  Cada colección adaptable separa lo que actualiza el toolkit de lo que escribe el proyecto:
@@ -156,78 +118,17 @@ Cada colección adaptable separa lo que actualiza el toolkit de lo que escribe e
156
118
  |---|---|---|
157
119
  | `planning/business-rules/` | `BR-OPS-NNN` | las reglas de la empresa |
158
120
  | `planning/adr/` | `OPS-NNN` | las decisiones de la empresa |
159
- | `planning/rules/` | proceso, forma del cambio, commits | las convenciones propias |
121
+ | `planning/rules/` | proceso, forma del cambio, commits, conducta | las convenciones propias |
160
122
  | `teams/` | composiciones que vienen con Cauce | los equipos propios |
161
123
  | `agents/<tipo>/` | *(en el paquete, no se copia)* | los cargos propios |
162
124
 
163
- `automatization/hooks/` no tiene `system/`: es runtime que se reemplaza entero. No hace falta, porque lo
164
- que un proyecto necesita ya funciona sin editarlo — un guard propio convive y sobrevive, y desactivar uno
165
- del toolkit es quitarlo de la configuración del runner, que es del proyecto. Editar uno existente detiene
166
- el `upgrade` antes de pisarlo. Los hooks se quedan en el proyecto porque esa configuración los nombra por
167
- ruta literal; los adaptadores de runner y los workflows, que sólo lee el motor, viajan en el paquete.
168
-
169
125
  Un archivo propio con el mismo nombre o ID que uno de `system/` lo reemplaza: el del proyecto manda y
170
126
  `check` lo reporta como override explícito. Así una mejora del proceso no obliga a forkear el archivo,
171
127
  y actualizar no exige resolver conflictos: se reemplaza `system/` entero y nada más se toca.
172
128
 
173
- ### Dónde vive cada cosa del catálogo
174
-
175
- Los cargos que trae Cauce **no se copian al proyecto**: se resuelven desde la dependencia. Evolucionan
176
- como profesión, y esa evolución es la misma para
177
- todas las empresas: investigarla una vez y bien es mejor que repetirla en cada instalación.
178
-
179
- | Qué | Dónde | Quién lo mantiene |
180
- |---|---|---|
181
- | El cargo como profesión | el paquete | el toolkit, con `agent-learn` en **este** repositorio |
182
- | Lo que el cargo debe saber de tu empresa | `organization/roles/<slug>.md` | la empresa |
183
- | Un cargo propio, o una versión propia de uno del catálogo | `agents/roles/<slug>/` | la empresa |
184
-
185
- Por eso `learn` falla si lo corrés sobre un cargo del catálogo dentro de una instancia: escribiría en
186
- el paquete y se perdería. El ciclo mensual de aprendizaje tampoco se distribuye — vive sólo acá.
187
-
188
- #### Evaluar un cargo del catálogo
189
-
190
- Los casos adversariales miden a un cargo trabajando, y un cargo cuya entrega es una épica o una entrada
191
- de INBOX necesita un `planning/` donde escribir sea legítimo. El toolkit no lo tiene ni puede tenerlo:
192
- el único `planning/` que vive acá es `template/planning`, el molde que se distribuye.
193
-
194
- ```bash
195
- node engine/cli/ops.js evaluate product-manager --bench 03-epic
196
- ```
197
-
198
- Devuelve la ruta de una instancia desechable —`check` pasa, el catálogo resuelve desde adentro,
199
- `planning/` está vacío y escribible— que el recorrido `/agent-eval` usa como lugar de trabajo. Se
200
- recrea entera en cada corrida: reutilizarla dejaría que lo que un cargo escribió el lunes sea contexto
201
- del que responde el martes.
202
-
203
- **Una por caso**, y eso se aprendió corriendo. Con un banco compartido los casos de un cargo trabajan a
204
- la vez sobre el mismo `planning/` y se leen entre sí: un caso tomó por «una sesión anterior de este
205
- mismo cargo» lo que otro acababa de escribir, y otro evaluó cuatro candidatas que en su enunciado no
206
- existían. Ninguno cambió de veredicto, pero sus respuestas dejaron de ser las que el caso pedía medir.
207
-
208
- El veredicto se escribe **junto al cargo**, no en el banco. El banco se borra; el contrato queda.
209
-
210
- Desde una empresa esto no aplica: su instancia ya es el lugar, y lo que se evalúa ahí tiene que ser un
211
- cargo suyo —propio o adoptado—.
212
-
213
- #### Quedarse con una versión propia de un cargo del catálogo
214
-
215
- ```bash
216
- npm run ops -- agents fork product-manager
217
- ```
218
-
219
- Copia el cargo entero a `agents/roles/<slug>/` y desde ahí lo mantenés vos: `learn`, `evaluate` y el
220
- puntero que instala el runner pasan a resolver contra tu copia. **Copiarlo a mano no es equivalente**
221
- —se agarra el `SKILL.md`, que es lo que se ve, y quedan atrás los casos, las fuentes y el modelo
222
- operativo: el cargo responde igual y ya no se puede evaluar—.
223
-
224
- Lo que no viaja son los informes de aprendizaje, las propuestas y los veredictos de evaluación. Un
225
- veredicto pertenece al contrato que lo ganó, y el fork nace para dejar de ser ese contrato.
226
-
227
- A partir de ahí tu copia deja de recibir las mejoras del catálogo, que es lo que elegiste, pero no en
228
- silencio: `check` y `upgrade` avisan cuando el original cambia río arriba. Editar tu propia copia no
229
- dispara nada — se compara contra lo que el catálogo tenía el día del fork, no contra lo que vos
230
- escribiste después.
129
+ `automatization/hooks/` no tiene `system/`: es runtime que se reemplaza entero. Un guard propio convive
130
+ y sobrevive, desactivar uno del toolkit es quitarlo de la configuración del runner, y editar uno
131
+ existente detiene el `upgrade` antes de pisarlo.
231
132
 
232
133
  ### Versionado
233
134
 
@@ -261,54 +162,47 @@ Para añadir otra herramienta se crea un adaptador en `engine/integrations/provi
261
162
  `fetchItems` y `normalizeFixture`, y se registra en `engine/integrations/registry.js`. Staging, revisión,
262
163
  promoción y validación no se reimplementan. Consulta [integrations/README.md](integrations/README.md).
263
164
 
165
+ ## Hooks y runners
166
+
167
+ Los guards portables viven en `automatization/hooks/` y comparten el motor `engine/hooks/run.js`. Una
168
+ instancia nueva los recibe sin activar ningún runner en silencio:
169
+
170
+ ```bash
171
+ node tools/ops.js automation check .
172
+ node tools/ops.js automation install . claude # o codex / gemini / antigravity
173
+ node tools/ops.js automation doctor . claude
174
+ ```
175
+
176
+ La instalación fusiona la configuración propia del runner y conserva las entradas existentes; sólo
177
+ reemplaza los guards que el propio toolkit había registrado sueltos por el grupo que ahora los cubre, y
178
+ lista cuáles quitó. Nada que no haya escrito el toolkit se toca.
179
+
180
+ Qué comprueba cada guard, qué no puede comprobar y cómo se agrupan por evento está en
181
+ [automatization/hooks/README.md](automatization/hooks/README.md).
182
+
264
183
  ## Arquitectura del toolkit
265
184
 
266
185
  - `engine/`: código determinista del CLI, planning, integraciones y aprendizaje de agentes.
267
- - `automatization/`: contratos, workflows y wiring neutral de runners.
186
+ - `automatization/`: guards, workflows y adaptadores de runner.
268
187
  - `integrations/`: documentación del contrato para herramientas externas.
269
188
  - `template/`: estructura materializada dentro de cada proyecto.
270
- - `agents/`: catálogo fuente de agentes, organizado por tipo.
271
- - `agents/roles/`: cargos empresariales persistentes y sus evaluaciones.
272
- - `agents/workflows/`: futuros agentes orientados a una tarea o flujo concreto.
273
- La taxonomía es extensible: cualquier directorio bajo `agents/` es un tipo válido y se reconoce
274
- cuando tiene contenido, sin registrarlo en ningún lado. `agents/roles/` es el único que viene con
275
- cargos; un coordinador que enrute agentes o un especialista acotado sólo necesitan su directorio
276
- el día que existan.
277
- - `teams/`: composiciones de agentes, con orden, handoffs y responsabilidades compartidas.
278
- - `teams/product-development/`: primera composición end-to-end desde discovery hasta aprendizaje posterior al release.
279
-
280
- El toolkit no guarda contexto real de ninguna empresa. `template/organization/` es el molde que cada proyecto
281
- recibe como `organization/`. De igual forma, `planning/` pertenece a la instancia generada: conserva su
282
- intención, estado y evidencia, mientras el motor reusable permanece en la dependencia.
189
+ - `agents/`: el catálogo de cargos, que viaja con el paquete en vez de copiarse.
190
+ - `teams/`: composiciones de cargos, con orden, handoffs y responsabilidades compartidas.
191
+ - `test/`: pruebas del toolkit; ver [test/README.md](test/README.md).
283
192
 
284
- ## Hooks y runners
193
+ Cualquier directorio bajo `agents/` es un tipo válido y se reconoce cuando tiene contenido, sin
194
+ registrarlo en ningún lado. Hoy existe `agents/roles/`.
285
195
 
286
- Los once guards portables viven en `automatization/hooks/` y comparten el motor
287
- `engine/hooks/run.js`. Los runners los invocan por grupo —`guard-shell.sh` y `guard-files.sh`— para gastar
288
- un solo proceso por herramienta; cada guard sigue siendo invocable suelto por su propio wrapper. Una
289
- instancia nueva los recibe sin activar ningún runner silenciosamente:
196
+ El toolkit no guarda contexto real de ninguna empresa. `template/organization/` es el molde que cada
197
+ proyecto recibe como `organization/`. De igual forma, `planning/` pertenece a la instancia generada:
198
+ conserva su intención, estado y evidencia, mientras el motor reusable permanece en la dependencia.
290
199
 
291
- ```bash
292
- node tools/ops.js automation check .
293
- node tools/ops.js automation install . antigravity # recomendado para Google
294
- node tools/ops.js automation install . codex # o claude / gemini
295
- ```
200
+ Para trabajar sobre este repositorio, lee [AGENTS.md](AGENTS.md).
296
201
 
297
- Atajos equivalentes disponibles en cada proyecto generado:
298
-
299
- ```bash
300
- make install-claude
301
- make install-codex
302
- make install-gemini
303
- make install-antigravity
304
- ```
202
+ ## Licencia
305
203
 
306
- Después de instalar, diagnostica el wiring real con `make doctor-claude`, `make doctor-codex`,
307
- `make doctor-gemini` o `make doctor-antigravity`.
204
+ [MIT](LICENSE). Sin dependencias: no hay licencias de terceros que arrastrar.
308
205
 
309
- La instalación fusiona la configuración propia del runner y conserva las entradas existentes, con una
310
- sola excepción: reemplaza los guards que el propio toolkit había registrado sueltos por el grupo que
311
- ahora los cubre, y lista cuáles quitó. Sin esa poda un proyecto ya instalado ejecutaría cada guard dos
312
- veces por herramienta —con `verify` eso significa correr la suite de tests dos veces en cada commit—.
313
- Nada que no haya escrito el toolkit se toca. En Antigravity materializa un plugin nativo de workspace
314
- bajo `.agents/plugins/cauce/`.
206
+ Lo que `ops init` genera en tu repositorio —`planning/`, `AGENTS.md`, el `Makefile`, `tools/ops.js` y
207
+ el resto del molde— es tuyo: usalo, editalo y distribuilo sin obligación de atribuir ni de incluir este
208
+ aviso. La condición de MIT aplica a redistribuir Cauce, no a lo que construyas con él.
@@ -0,0 +1,49 @@
1
+ # El catálogo de cargos
2
+
3
+ Un cargo es un contrato: su `SKILL.md` declara cuándo actuar, qué decide, qué no le corresponde y cuál
4
+ es su entrega mínima; sus métodos viven en `references/`. Para ver la lista con una línea por cargo:
5
+
6
+ ```bash
7
+ node tools/ops.js agents list
8
+ ```
9
+
10
+ Un slug es único entre todas las categorías. Si dos contienen el mismo, el CLI falla por ambigüedad en
11
+ lugar de elegir uno en silencio.
12
+
13
+ ## Dónde vive cada cosa
14
+
15
+ Los cargos que trae Cauce **no se copian al proyecto**: se resuelven desde la dependencia. Evolucionan
16
+ como profesión, y esa evolución es la misma para todas las empresas: investigarla una vez y bien es
17
+ mejor que repetirla en cada instalación.
18
+
19
+ | Qué | Dónde | Quién lo mantiene |
20
+ |---|---|---|
21
+ | El cargo como profesión | el paquete | el toolkit, con `learn` en **su** repositorio |
22
+ | Lo que el cargo debe saber de tu empresa | `organization/roles/<slug>.md` | la empresa |
23
+ | Un cargo propio, o una versión propia de uno del catálogo | `agents/roles/<slug>/` | la empresa |
24
+
25
+ Por eso `learn` falla si lo corrés sobre un cargo del catálogo dentro de una instancia: escribiría en el
26
+ paquete y se perdería. El ciclo de aprendizaje de esos cargos tampoco se distribuye.
27
+
28
+ ## Quedarse con una versión propia
29
+
30
+ ```bash
31
+ node tools/ops.js agents fork product-manager
32
+ ```
33
+
34
+ Copia el cargo entero a `agents/roles/<slug>/` y desde ahí lo mantenés vos: `learn`, `evaluate` y el
35
+ puntero que instala el runner pasan a resolver contra tu copia. **Copiarlo a mano no es equivalente**
36
+ —se agarra el `SKILL.md`, que es lo que se ve, y quedan atrás los casos, las fuentes y el modelo
37
+ operativo: el cargo responde igual y ya no se puede evaluar—.
38
+
39
+ Lo que no viaja son los informes de aprendizaje, las propuestas y los veredictos de evaluación. Un
40
+ veredicto pertenece al contrato que lo ganó, y el fork nace para dejar de ser ese contrato.
41
+
42
+ Tu copia deja de recibir las mejoras del catálogo, pero no en silencio: `check` y `upgrade` avisan
43
+ cuando el original cambia río arriba. Editar tu propia copia no dispara nada — se compara contra lo que
44
+ el catálogo tenía el día del fork, no contra lo que escribiste después.
45
+
46
+ ## Evaluar un cargo
47
+
48
+ `evaluate <slug>` corre los casos adversariales del cargo contra su contrato. Lo que se evalúa desde una
49
+ empresa tiene que ser un cargo suyo —propio o adoptado—, y su instancia ya es el lugar donde trabajar.