@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 +34 -0
- package/README.md +14 -2
- package/automatization/runners/antigravity/manifest.json +10 -0
- package/automatization/runners/antigravity/skills/onboard/SKILL.md +6 -1
- package/automatization/runners/claude/manifest.json +11 -1
- package/automatization/runners/codex/AGENTS.md +3 -1
- package/automatization/runners/codex/manifest.json +4 -0
- package/automatization/runners/gemini/GEMINI.md +3 -1
- package/automatization/runners/gemini/README.md +6 -2
- package/automatization/runners/gemini/commands/cauce/onboard.toml +21 -0
- package/automatization/runners/gemini/commands/cauce/team.toml +15 -0
- package/automatization/runners/gemini/manifest.json +25 -7
- package/automatization/workflows/onboard.js +5 -1
- package/engine/automation/index.js +9 -0
- package/package.json +1 -1
- /package/automatization/runners/gemini/commands/{ops → cauce}/autobuild.toml +0 -0
- /package/automatization/runners/gemini/commands/{ops → cauce}/integration-promote.toml +0 -0
- /package/automatization/runners/gemini/commands/{ops → cauce}/integration-sync.toml +0 -0
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
|
-
|
|
143
|
-
|
|
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,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. **
|
|
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.
|
|
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
|
|
|
@@ -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.
|
|
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 `/
|
|
13
|
-
`/
|
|
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/
|
|
22
|
-
"target": ".gemini/commands/
|
|
21
|
+
"source": "commands/cauce/autobuild.toml",
|
|
22
|
+
"target": ".gemini/commands/cauce/autobuild.toml"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
|
-
"source": "commands/
|
|
26
|
-
"target": ".gemini/commands/
|
|
25
|
+
"source": "commands/cauce/integration-sync.toml",
|
|
26
|
+
"target": ".gemini/commands/cauce/integration-sync.toml"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
|
-
"source": "commands/
|
|
30
|
-
"target": ".gemini/commands/
|
|
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.
|
|
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
|
File without changes
|
|
File without changes
|
|
File without changes
|