@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 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.49.0] - 2026-08-26
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
@@ -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.',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ingeniomaps/cauce",
3
- "version": "0.49.0",
3
+ "version": "0.52.0",
4
4
  "description": "Sistema portable de planificación y ejecución verificable para cualquier proyecto",
5
5
  "keywords": [
6
6
  "planning",