@ingeniomaps/cauce 0.49.0 → 0.52.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 +53 -11
- package/engine/hooks/run.js +13 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -14,7 +14,53 @@ 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.
|
|
17
|
+
## [0.52.0] - 2026-08-27
|
|
18
|
+
|
|
19
|
+
### Corregido
|
|
20
|
+
|
|
21
|
+
- **Lanzar el aprendizaje a mano ya no arrastra el ensamblaje mensual.** El `workflow_dispatch` corría
|
|
22
|
+
las dos fases, así que probar la investigación de un cargo abría además su propuesta — y una
|
|
23
|
+
propuesta cuesta una firma humana. Peor: consolidar **sella** los informes que consume, o sea que un
|
|
24
|
+
lanzamiento de prueba movía estado real del ciclo. Ahora el dispatch acepta `phase`, con `research`
|
|
25
|
+
por defecto, que es para lo que se lanza a mano; `propose` y `both` siguen disponibles cuando de
|
|
26
|
+
verdad haga falta, y los crones deciden por su cuenta como siempre.
|
|
27
|
+
- **Los permisos de la investigación llegaban partidos, y `Bash` nunca se concedía.** Iban en una
|
|
28
|
+
cadena sin comillas, así que el shell partía `Bash(make agent-learn *)` en tres palabras y el CLI
|
|
29
|
+
descartaba la última —«Ignoring --allowedTools rule "*)"»—. La investigación salía bien igual porque
|
|
30
|
+
con web y lectura alcanzaba, así que el defecto vivía en dos líneas del log y en ningún resultado.
|
|
31
|
+
- **La investigación late mientras corre y deja dicho lo que costó.** El log quedaba mudo los diez
|
|
32
|
+
minutos que dura y no se distinguía de una corrida colgada: la única salida era esperar el timeout
|
|
33
|
+
para saber cuál era. Ahora avisa cada minuto —el latido lo emite el shell y comprueba el proceso, así
|
|
34
|
+
que no puede mentir que sigue vivo— y al cerrar deja en el resumen del job **cuánto costó en dólares,
|
|
35
|
+
cuántos tokens y qué permisos se le negaron**. Eso último es lo que vuelve visible un permiso mal
|
|
36
|
+
escrito, que es como se descubrió el de arriba.
|
|
37
|
+
|
|
38
|
+
## [0.51.0] - 2026-08-27
|
|
39
|
+
|
|
40
|
+
### Agregado
|
|
41
|
+
|
|
42
|
+
- **El guard `destructive` bloquea la forma ancha de `git checkout` y `git restore`.** `git checkout
|
|
43
|
+
-- .` destruye lo mismo que `git reset --hard` —que ya se bloqueaba— y sin recuperación, pero se
|
|
44
|
+
escribe como una limpieza. Se bloquea sólo cuando la ruta es `.`, `*`, `:/` o no hay ninguna:
|
|
45
|
+
revertir un archivo nombrado es trabajo corriente y sigue pasando. Lo que engaña es que el alcance no
|
|
46
|
+
se ve en el comando — `.` es el directorio actual, y ahí suele haber más de lo que uno está mirando.
|
|
47
|
+
|
|
48
|
+
## [0.50.0] - 2026-08-27
|
|
49
|
+
|
|
50
|
+
### Corregido
|
|
51
|
+
|
|
52
|
+
- **La investigación semanal recibe las herramientas que su instrucción nombra.** Corría sin permisos
|
|
53
|
+
declarados, así que no podía correr un comando ni salir a la web —que es todo lo que una
|
|
54
|
+
investigación hace— y devolvía el informe vacío en tres minutos. El cargo se portaba bien y lo decía:
|
|
55
|
+
«no voy a fabricar fuentes, fechas ni salidas de comando para llenar el informe». Ahora se le declaran
|
|
56
|
+
las que su `AUTOMATION.md` nombra —buscar, leer, escribir su informe, `make agent-learn` y
|
|
57
|
+
`make agent-evaluate`— y sólo ésas: saltear permisos le daría justo lo que su instrucción le prohíbe.
|
|
58
|
+
- **Un informe sin contenido ya no abre PR.** Que el archivo exista no alcanza: `learn` lo crea vacío y
|
|
59
|
+
el modelo puede devolverlo tal cual, y así se publicaba. Un lunes eso son veintinueve PRs en blanco
|
|
60
|
+
sin que nada lo diga. Ahora se miran las secciones que la propuesta mensual consolida, y si están
|
|
61
|
+
vacías el job falla nombrando cuáles y dónde mirar la causa.
|
|
62
|
+
|
|
63
|
+
## [0.49.0] - 2026-08-27
|
|
18
64
|
|
|
19
65
|
### Agregado
|
|
20
66
|
|
|
@@ -28,12 +74,6 @@ diseño — eso vive en el commit y en el código.
|
|
|
28
74
|
|
|
29
75
|
### Corregido
|
|
30
76
|
|
|
31
|
-
- **Un recorrido que frena da igual la salida que su contrato reserva para no poder.** `change-review`
|
|
32
|
-
enumera tres veredictos y el tercero es «no poder aprobar»; bloqueado, su informe parcial escribía
|
|
33
|
-
«No hay veredicto», que no es ninguno de los tres. Con el diff, los importadores y las pruebas a la
|
|
34
|
-
vista, un revisor **sí** puede firmar que no aprueba: eso es un veredicto, no su ausencia. Vale para
|
|
35
|
-
cualquier recorrido cuyo contrato tenga esa salida — un destino de «nada que hacer», una
|
|
36
|
-
recomendación de investigar.
|
|
37
77
|
- **`dependsOn` dejó de ser decorativo: un recorrido corre sus etapas como su contrato las declara.**
|
|
38
78
|
Hasta ahora el motor las corría en fila y le pasaba a cada una los handoffs de **todas** las
|
|
39
79
|
anteriores, sin mirar de qué decía depender. `technical-design` existe para tener tres lecturas
|
|
@@ -45,15 +85,17 @@ diseño — eso vive en el commit y en el código.
|
|
|
45
85
|
**no** declara `dependsOn` sigue viendo todo lo anterior, igual que antes: independencia es una
|
|
46
86
|
afirmación, y una afirmación se declara. Si una etapa no cumple su gate, el corte es por nivel — las
|
|
47
87
|
que corrieron con ella entran igual al handoff, y lo que se abandona son los niveles siguientes.
|
|
88
|
+
- **Un recorrido que frena da igual la salida que su contrato reserva para no poder.** `change-review`
|
|
89
|
+
enumera tres veredictos y el tercero es «no poder aprobar»; bloqueado, su informe parcial escribía
|
|
90
|
+
«No hay veredicto», que no es ninguno de los tres. Con el diff, los importadores y las pruebas a la
|
|
91
|
+
vista, un revisor **sí** puede firmar que no aprueba: eso es un veredicto, no su ausencia. Vale para
|
|
92
|
+
cualquier recorrido cuyo contrato tenga esa salida — un destino de «nada que hacer», una
|
|
93
|
+
recomendación de investigar.
|
|
48
94
|
- **Cambiar el `flow.json` de un recorrido ahora envejece sus veredictos.** El aviso de «el contrato
|
|
49
95
|
cambió y la última corrida es anterior» miraba sólo el `SKILL.md`, que un recorrido no tiene, así que
|
|
50
96
|
no se disparaba nunca: se le podía agregar una dimensión a un gate y sus casos aprobados seguían
|
|
51
97
|
leyéndose vigentes. Qué archivo **es** el contrato depende del sujeto — el de un cargo es su
|
|
52
98
|
`SKILL.md`, el de un recorrido su `flow.json`— y ahora se mira el que corresponde.
|
|
53
|
-
## [0.49.0] - 2026-08-27
|
|
54
|
-
|
|
55
|
-
### Corregido
|
|
56
|
-
|
|
57
99
|
- **`ops context` ya no se traga las acciones humanas cuando no hay tarea en cola.** Se imprimían
|
|
58
100
|
después del `return` de «sin tarea disponible», así que una instancia recién arrancada —`onboard`
|
|
59
101
|
deja filas pendientes y ninguna tarea todavía— preguntaba qué toca ahora y recibía «nada», cuando lo
|
package/engine/hooks/run.js
CHANGED
|
@@ -114,6 +114,19 @@ function destructive(input) {
|
|
|
114
114
|
const rules = [
|
|
115
115
|
[/\bgit\s+reset\s+--hard\b/, "'git reset --hard' destruye cambios locales."],
|
|
116
116
|
[/\bgit\s+clean\s+-[^\s]*f/, "'git clean -f' borra archivos sin seguimiento."],
|
|
117
|
+
// `git checkout -- .` destruye lo mismo que `reset --hard` y sin recuperación, pero se escribe como
|
|
118
|
+
// una limpieza. Se bloquea sólo la forma ancha —`.`, `*`, `:/`, o sin ruta—: revertir un archivo
|
|
119
|
+
// nombrado es trabajo corriente y no se toca.
|
|
120
|
+
//
|
|
121
|
+
// Pasó dos veces en una sesión, las dos limpiando restos de una prueba: el comando revirtió también
|
|
122
|
+
// el trabajo de al lado, que no estaba commiteado. Lo que engaña es que el alcance no se ve en el
|
|
123
|
+
// comando — `.` es el cwd, y el cwd suele tener más de lo que uno está mirando.
|
|
124
|
+
[
|
|
125
|
+
// `git restore .` no lleva `--` y destruye igual: es la forma moderna del mismo comando.
|
|
126
|
+
/\bgit\s+(?:checkout|restore)\s+(?:[^;&|]*?\s)?(?:--\s*(?:$|[;&|])|(?:--\s+)?(?:\.|\*|:\/)\s*(?:$|[;&|]))/,
|
|
127
|
+
"'git checkout -- .' revierte todo lo no commiteado del directorio, no sólo lo que estás mirando. "
|
|
128
|
+
+ 'Nombrá el archivo, o commiteá lo que quieras conservar antes.',
|
|
129
|
+
],
|
|
117
130
|
[
|
|
118
131
|
/\bdocker(?:\s+\w+)*\s+(?:volume\s+(?:rm|prune)|system\s+prune|network\s+prune)\b/,
|
|
119
132
|
'La limpieza global de Docker puede borrar datos compartidos.',
|