@ingeniomaps/cauce 0.36.0 → 0.38.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
@@ -14,6 +14,40 @@ desde este repositorio no va, porque el que lee no puede actuar sobre eso. Cuand
14
14
  unas pocas líneas casi siempre es porque cuenta cómo se descubrió el problema o por qué se eligió el
15
15
  diseño — eso vive en el commit y en el código.
16
16
 
17
+ ## [0.38.0] - 2026-08-19
18
+
19
+ ### Añadido
20
+
21
+ - **Gemini recibe `onboard` y `team`, que sólo tenía como prosa.** Estaban descritos en `GEMINI.md` y no
22
+ existía ningún comando detrás, así que quien venía de otro runner los buscaba en la lista y no
23
+ aparecían.
24
+
25
+ - **`automation install` termina diciendo cómo se invoca lo que acaba de instalar.** Una línea con los
26
+ nombres exactos para ese runner, que es lo que evita buscar en una lista de cincuenta skills el nombre
27
+ que se usó en otro lado.
28
+
29
+ ### Cambiado
30
+
31
+ - **Una convención para el nombre de cada recorrido.** El nombre es el mismo en todos los runners
32
+ —`onboard`, `team`, `autobuild`, `integration-sync`, `integration-promote`—; el prefijo lo pone cada
33
+ uno según su espacio de nombres: `/onboard` en Claude, `/cauce:onboard` en Gemini, `cauce:onboard` en
34
+ Antigravity. Codex no tiene comandos y opera el protocolo desde sus instrucciones.
35
+
36
+ Los comandos de Gemini se mudaron de `/ops:` a `/cauce:`. Si actualizás una instalación anterior,
37
+ `.gemini/commands/ops/` queda huérfano: se borra a mano, `install` no toca lo que ya no declara.
38
+
39
+ ## [0.37.0] - 2026-08-19
40
+
41
+ ### Cambiado
42
+
43
+ - **El arranque deja de completar una dimensión que nadie preguntó.** Al llegar al tope de tres
44
+ preguntas puede quedar una afuera —quién lo usa, qué está muerto, qué externo hay—, y una corrida real
45
+ la escribió igual, deducida del README y de las respuestas a las otras. Todo plausible, nada dicho por
46
+ una persona, y sin marca: se leía con el mismo peso que lo que alguien contestó. Ahora esa dimensión
47
+ queda «Por definir» con su pregunta en el INBOX, y lo que se deduce de otra respuesta va marcado
48
+ `(supuesto)` por plausible que sea. Rige en el recorrido ejecutable y en los tres runners que operan el
49
+ arranque leyendo instrucciones.
50
+
17
51
  ## [0.36.0] - 2026-08-19
18
52
 
19
53
  ### Corregido
package/README.md CHANGED
@@ -139,8 +139,20 @@ no puede hacer, así que ese recorrido vive en el runner:
139
139
  /autobuild ejecuta una tarea ya promovida, fase por fase.
140
140
  ```
141
141
 
142
- Claude y Antigravity lo traen como recorrido ejecutable; Codex y Gemini lo operan siguiendo las
143
- instrucciones que `automation install` les deja. Sin runner, la [tabla de comandos](#comandos) y
142
+ ### Cómo se lo llama en cada runner
143
+
144
+ El nombre del recorrido es el mismo en todos —`onboard`, `team`, `autobuild`, `integration-sync`,
145
+ `integration-promote`—; el prefijo lo pone cada runner según su espacio de nombres:
146
+
147
+ | Runner | Se invoca | |
148
+ |---|---|---|
149
+ | Claude | `/onboard` | workflow ejecutable |
150
+ | Gemini | `/cauce:onboard` | comando |
151
+ | Antigravity | `cauce:onboard` | skill |
152
+ | Codex | — | opera el protocolo desde sus instrucciones |
153
+
154
+ `automation install` termina diciendo la lista exacta para el runner que instalaste, que es lo que
155
+ evita buscar en Gemini el nombre que se usó en Claude. Sin runner, la [tabla de comandos](#comandos) y
144
156
  [FLOW.md](template/planning/FLOW.md) hacen el mismo camino a mano.
145
157
 
146
158
  Dentro del proyecto el CLI se invoca con `node tools/ops.js` —o `npx cauce`, que la dependencia deja
@@ -60,5 +60,15 @@
60
60
  "list"
61
61
  ],
62
62
  "expect": "cauce"
63
+ },
64
+ "commands": {
65
+ "invocation": "cauce:{name}",
66
+ "names": [
67
+ "onboard",
68
+ "team",
69
+ "autobuild",
70
+ "integration-sync",
71
+ "integration-promote"
72
+ ]
63
73
  }
64
74
  }
@@ -60,7 +60,12 @@ falló los cinco puntos sin darse cuenta, y todos del mismo lado —lo que no pr
60
60
  no te corresponde se perdió en vez de quedar escrito para alguien.
61
61
  5. **`ops` no es un servicio del producto.** No va en el mapa real: es la instancia desde la que trabajás.
62
62
 
63
- 6. **Corré `node {{OPS_DIR}}tools/ops.js onboard`.** Si te vuelve a ofrecer la pregunta de apertura, la
63
+ 6. **Ninguna dimensión se completa sin haberla preguntado.** Si llegaste al tope de preguntas y una
64
+ quedó afuera —quién lo usa, qué está muerto, qué externo hay— va «Por definir» con su pregunta en
65
+ `{{OPS_DIR}}planning/INBOX.md`, aunque puedas imaginar la respuesta. Y lo que deducís de otra
66
+ respuesta va marcado `(supuesto)`, por plausible que sea: sin la marca se lee con el mismo peso que
67
+ lo que la persona dijo, y nadie va a volver a preguntarlo.
68
+ 7. **Corré `node {{OPS_DIR}}tools/ops.js onboard`.** Si te vuelve a ofrecer la pregunta de apertura, la
64
69
  instancia sigue vacía: no escribiste nada, y no hay nada que informar. Una corrida real entregó un
65
70
  resumen en pasado —«registrado», «documentado», «creada la primera épica»— sobre archivos que en el
66
71
  disco seguían siendo el molde. Estar bloqueado es un resultado legítimo; narrarlo como entrega, no.
@@ -53,5 +53,15 @@
53
53
  "checkpointing": false,
54
54
  "nativeSkills": true
55
55
  },
56
- "roleSkills": ".claude/skills"
56
+ "roleSkills": ".claude/skills",
57
+ "commands": {
58
+ "invocation": "/{name}",
59
+ "names": [
60
+ "onboard",
61
+ "team",
62
+ "autobuild",
63
+ "integration-sync",
64
+ "integration-promote"
65
+ ]
66
+ }
57
67
  }
@@ -57,7 +57,9 @@ Antes de darlo por terminado, comprobá cinco cosas mirando el disco: preguntast
57
57
  formulario; la épica se llama `epic-NNN-<slug>.md` con `status: open` —`epic-001.md` no lo lee nadie—;
58
58
  las secciones de `{{OPS_DIR}}organization/` siguen siendo las del molde y lo tuyo se agregó adentro;
59
59
  `{{OPS_DIR}}planning/HUMAN_ACTIONS.md` tiene una fila por credencial, por externo y por la autoridad de
60
- push; y `ops` no figura como servicio del producto en el mapa. Cerrá corriendo
60
+ push; y `ops` no figura como servicio del producto en el mapa. una dimensión que no
61
+ llegaste a preguntar va «Por definir» con su pregunta en `{{OPS_DIR}}planning/INBOX.md` en vez de
62
+ completarse deduciéndola, y lo que deducís de otra respuesta va marcado `(supuesto)`. Cerrá corriendo
61
63
  `node {{OPS_DIR}}tools/ops.js onboard`: si te vuelve a ofrecer la pregunta de apertura, no escribiste
62
64
  nada y no hay nada que informar. Estar bloqueado es un resultado legítimo; narrarlo como entrega, no.
63
65
 
@@ -19,5 +19,9 @@
19
19
  "projectInstructions": true,
20
20
  "checkpointing": false,
21
21
  "nativeSkills": false
22
+ },
23
+ "commands": {
24
+ "invocation": "",
25
+ "names": []
22
26
  }
23
27
  }
@@ -50,7 +50,9 @@ Antes de darlo por terminado, comprobá cinco cosas mirando el disco: preguntast
50
50
  formulario; la épica se llama `epic-NNN-<slug>.md` con `status: open` —`epic-001.md` no lo lee nadie—;
51
51
  las secciones de `{{OPS_DIR}}organization/` siguen siendo las del molde y lo tuyo se agregó adentro;
52
52
  `{{OPS_DIR}}planning/HUMAN_ACTIONS.md` tiene una fila por credencial, por externo y por la autoridad de
53
- push; y `ops` no figura como servicio del producto en el mapa. Cerrá corriendo
53
+ push; y `ops` no figura como servicio del producto en el mapa. una dimensión que no
54
+ llegaste a preguntar va «Por definir» con su pregunta en `{{OPS_DIR}}planning/INBOX.md` en vez de
55
+ completarse deduciéndola, y lo que deducís de otra respuesta va marcado `(supuesto)`. Cerrá corriendo
54
56
  `node {{OPS_DIR}}tools/ops.js onboard`: si te vuelve a ofrecer la pregunta de apertura, no escribiste
55
57
  nada y no hay nada que informar. Estar bloqueado es un resultado legítimo; narrarlo como entrega, no.
56
58
 
@@ -9,8 +9,12 @@ Adaptador mediante configuración de proyecto, `GEMINI.md`, checkpointing y coma
9
9
  node tools/ops.js automation install . gemini
10
10
  ```
11
11
 
12
- Instala `.gemini/settings.json`, el contexto raíz `GEMINI.md` y los comandos `/ops:autobuild`,
13
- `/ops:integration-sync` y `/ops:integration-promote`.
12
+ Instala `.gemini/settings.json`, el contexto raíz `GEMINI.md` y los comandos `/cauce:onboard`,
13
+ `/cauce:team`, `/cauce:autobuild`, `/cauce:integration-sync` y `/cauce:integration-promote`.
14
+
15
+ Antes vivían bajo `/ops:` y eran tres: el arranque y el recorrido de equipo le llegaban sólo como prosa,
16
+ así que alguien que venía de otro runner los buscaba en la lista y no estaban. Si actualizás una
17
+ instalación vieja, `.gemini/commands/ops/` queda huérfano y se borra a mano.
14
18
 
15
19
  Gemini no anuncia hooks nativos en este adaptador: los guards se ejecutan como prechecks indicados por el
16
20
  protocolo y los comandos. Esta degradación está declarada en `manifest.json`, no se simula protección inexistente.
@@ -0,0 +1,21 @@
1
+ description = "Arranca una instancia recién creada: pregunta, escribe el contexto y la primera épica"
2
+ prompt = """
3
+ Seguí la sección «El arranque» de {{OPS_DIR}}AGENTS.md y de este contexto raíz.
4
+
5
+ Empezá por `node {{OPS_DIR}}tools/ops.js onboard`: es instantáneo, y la primera línea que imprime es la
6
+ pregunta con la que tenés que abrir. Hacésela tal cual y esperá la respuesta antes de mirar el
7
+ inventario, sea el workspace vacío, un monolito o diez repos. Según lo que conteste, hasta tres
8
+ preguntas más con las palabras de ese proyecto, una por vez. El inventario ya viene resuelto en esa
9
+ salida —servicios, comandos declarados y las variables que cada uno espera—: no recorras el árbol ni
10
+ corras comandos del proyecto para completarlo.
11
+
12
+ Con eso escribí {{OPS_DIR}}organization/, la sección «Mapa real» de {{OPS_DIR}}AGENTS.md con cada
13
+ comando tal como está declarado y de qué archivo salió, y las raíces reales en workspaceRoots. Las
14
+ credenciales, los sistemas externos y el permiso de push van como filas de
15
+ {{OPS_DIR}}planning/HUMAN_ACTIONS.md, sin proponer ningún valor. Una dimensión que no llegaste a
16
+ preguntar queda «Por definir» con su pregunta en {{OPS_DIR}}planning/INBOX.md, y lo que deducís de otra
17
+ respuesta va marcado «(supuesto)».
18
+
19
+ Cerrá escribiendo la épica como epic-NNN-<slug>.md con status: open —sin slug no la lee nadie— y corré
20
+ `node {{OPS_DIR}}tools/ops.js check planning`. Nunca promuevas al BACKLOG: esa firma es humana.
21
+ """
@@ -0,0 +1,15 @@
1
+ description = "Recorre un equipo y propone una épica candidata, sin promoverla"
2
+ prompt = """
3
+ Obtené el recorrido con `node {{OPS_DIR}}tools/ops.js team show <slug> --json` y ejecutá una etapa a la
4
+ vez, adoptando en cada una el contrato del cargo que la posee. Respetá el dueño de decisión de cada
5
+ dominio: ningún otro cargo resuelve en su lugar.
6
+
7
+ Marcá el exit gate de una etapa como cumplido sólo si se cumple de verdad. Cuando falte evidencia,
8
+ autoridad o una decisión externa, registrá la acción concreta en {{OPS_DIR}}planning/HUMAN_ACTIONS.md y
9
+ detente: una opinión del modelo no es investigación de usuarios ni valida un problema.
10
+
11
+ Si la intención resulta viable, escribí la épica en {{OPS_DIR}}planning/roadmap/ como
12
+ epic-NNN-<slug>.md con criterios observables y cerrá con `node {{OPS_DIR}}tools/ops.js check planning`.
13
+ Si no lo es, registrá en {{OPS_DIR}}planning/INBOX.md por qué y qué la haría viable. **Nunca promuevas
14
+ al BACKLOG**: esa firma es humana.
15
+ """
@@ -18,16 +18,24 @@
18
18
  ],
19
19
  "artifacts": [
20
20
  {
21
- "source": "commands/ops/autobuild.toml",
22
- "target": ".gemini/commands/ops/autobuild.toml"
21
+ "source": "commands/cauce/autobuild.toml",
22
+ "target": ".gemini/commands/cauce/autobuild.toml"
23
23
  },
24
24
  {
25
- "source": "commands/ops/integration-sync.toml",
26
- "target": ".gemini/commands/ops/integration-sync.toml"
25
+ "source": "commands/cauce/integration-sync.toml",
26
+ "target": ".gemini/commands/cauce/integration-sync.toml"
27
27
  },
28
28
  {
29
- "source": "commands/ops/integration-promote.toml",
30
- "target": ".gemini/commands/ops/integration-promote.toml"
29
+ "source": "commands/cauce/integration-promote.toml",
30
+ "target": ".gemini/commands/cauce/integration-promote.toml"
31
+ },
32
+ {
33
+ "source": "commands/cauce/onboard.toml",
34
+ "target": ".gemini/commands/cauce/onboard.toml"
35
+ },
36
+ {
37
+ "source": "commands/cauce/team.toml",
38
+ "target": ".gemini/commands/cauce/team.toml"
31
39
  }
32
40
  ],
33
41
  "capabilities": {
@@ -37,5 +45,15 @@
37
45
  "checkpointing": true,
38
46
  "nativeSkills": true
39
47
  },
40
- "roleSkills": ".gemini/skills"
48
+ "roleSkills": ".gemini/skills",
49
+ "commands": {
50
+ "invocation": "/cauce:{name}",
51
+ "names": [
52
+ "onboard",
53
+ "team",
54
+ "autobuild",
55
+ "integration-sync",
56
+ "integration-promote"
57
+ ]
58
+ }
41
59
  }
@@ -165,7 +165,11 @@ const drafted = await agent(
165
165
  `${BASE}\n\n${EVIDENCE}\n\nEscribí de una sola pasada el contexto de esta instancia, reemplazando el ` +
166
166
  `molde en vez de comentarlo:\n` +
167
167
  `1. ${ORG}/company.md y ${ORG}/product.md: lo que la persona contó y los nombres del repositorio ` +
168
- `permiten afirmar. Lo que nada sostiene queda "Por definir" y su pregunta va a openQuestions. No des ` +
168
+ `permiten afirmar. Lo que nada sostiene queda "Por definir" y su pregunta va a openQuestions. Una ` +
169
+ `dimensión que no llegaste a preguntar no se completa deduciéndola: queda "Por definir" con su ` +
170
+ `pregunta en openQuestions, aunque puedas imaginar la respuesta. Y lo que sí deducís de otra ` +
171
+ `respuesta va marcado "(supuesto)", por plausible que sea: sin la marca se lee con el mismo peso que ` +
172
+ `lo que alguien dijo. No des ` +
169
173
  `por sentado que el proyecto vende algo: puede sostenerse con donaciones, presupuesto interno o ` +
170
174
  `trabajo voluntario, y una sección que no aplica se dice, no se completa con algo plausible.\n` +
171
175
  `2. La sección "## Mapa real" de ${ROOT}/AGENTS.md: una entrada por servicio con su ruta, su runtime y ` +
@@ -694,6 +694,15 @@ function install(root, name, output = console, options = {}) {
694
694
  }
695
695
  }
696
696
  installRoleSkills(root, runner, output)
697
+ // Cómo se lo llama acá. El nombre del recorrido es el mismo en todos los runners —`onboard`, `team`,
698
+ // `autobuild`—; el prefijo lo pone cada uno según su espacio de nombres, y esa diferencia es la que
699
+ // hace que alguien no encuentre en Gemini lo que usó en Claude. Decirlo al instalar cuesta una línea
700
+ // y ahorra buscarlo en una lista de cincuenta skills.
701
+ const invocacion = runner.commands && runner.commands.invocation
702
+ if (invocacion && (runner.commands.names || []).length) {
703
+ const lista = runner.commands.names.map((nombre) => invocacion.replace('{name}', nombre))
704
+ output.log(` ${name}: se invocan como ${lista.join(', ')}`)
705
+ }
697
706
  if (runner.activation && activated(runner) !== true) {
698
707
  output.log(` ${name}: falta registrarlo para que corra. Desde ${paths.install}:`)
699
708
  output.log(` ${runner.activation.hint}`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ingeniomaps/cauce",
3
- "version": "0.36.0",
3
+ "version": "0.38.0",
4
4
  "description": "Sistema portable de planificación y ejecución verificable para cualquier proyecto",
5
5
  "keywords": [
6
6
  "planning",