@ingeniomaps/cauce 0.49.0 → 0.51.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,32 @@ 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.51.0] - 2026-08-27
18
+
19
+ ### Agregado
20
+
21
+ - **El guard `destructive` bloquea la forma ancha de `git checkout` y `git restore`.** `git checkout
22
+ -- .` destruye lo mismo que `git reset --hard` —que ya se bloqueaba— y sin recuperación, pero se
23
+ escribe como una limpieza. Se bloquea sólo cuando la ruta es `.`, `*`, `:/` o no hay ninguna:
24
+ revertir un archivo nombrado es trabajo corriente y sigue pasando. Lo que engaña es que el alcance no
25
+ se ve en el comando — `.` es el directorio actual, y ahí suele haber más de lo que uno está mirando.
26
+
27
+ ## [0.50.0] - 2026-08-27
28
+
29
+ ### Corregido
30
+
31
+ - **La investigación semanal recibe las herramientas que su instrucción nombra.** Corría sin permisos
32
+ declarados, así que no podía correr un comando ni salir a la web —que es todo lo que una
33
+ investigación hace— y devolvía el informe vacío en tres minutos. El cargo se portaba bien y lo decía:
34
+ «no voy a fabricar fuentes, fechas ni salidas de comando para llenar el informe». Ahora se le declaran
35
+ las que su `AUTOMATION.md` nombra —buscar, leer, escribir su informe, `make agent-learn` y
36
+ `make agent-evaluate`— y sólo ésas: saltear permisos le daría justo lo que su instrucción le prohíbe.
37
+ - **Un informe sin contenido ya no abre PR.** Que el archivo exista no alcanza: `learn` lo crea vacío y
38
+ el modelo puede devolverlo tal cual, y así se publicaba. Un lunes eso son veintinueve PRs en blanco
39
+ sin que nada lo diga. Ahora se miran las secciones que la propuesta mensual consolida, y si están
40
+ vacías el job falla nombrando cuáles y dónde mirar la causa.
41
+
42
+ ## [0.49.0] - 2026-08-27
18
43
 
19
44
  ### Agregado
20
45
 
@@ -28,12 +53,6 @@ diseño — eso vive en el commit y en el código.
28
53
 
29
54
  ### Corregido
30
55
 
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
56
  - **`dependsOn` dejó de ser decorativo: un recorrido corre sus etapas como su contrato las declara.**
38
57
  Hasta ahora el motor las corría en fila y le pasaba a cada una los handoffs de **todas** las
39
58
  anteriores, sin mirar de qué decía depender. `technical-design` existe para tener tres lecturas
@@ -45,15 +64,17 @@ diseño — eso vive en el commit y en el código.
45
64
  **no** declara `dependsOn` sigue viendo todo lo anterior, igual que antes: independencia es una
46
65
  afirmación, y una afirmación se declara. Si una etapa no cumple su gate, el corte es por nivel — las
47
66
  que corrieron con ella entran igual al handoff, y lo que se abandona son los niveles siguientes.
67
+ - **Un recorrido que frena da igual la salida que su contrato reserva para no poder.** `change-review`
68
+ enumera tres veredictos y el tercero es «no poder aprobar»; bloqueado, su informe parcial escribía
69
+ «No hay veredicto», que no es ninguno de los tres. Con el diff, los importadores y las pruebas a la
70
+ vista, un revisor **sí** puede firmar que no aprueba: eso es un veredicto, no su ausencia. Vale para
71
+ cualquier recorrido cuyo contrato tenga esa salida — un destino de «nada que hacer», una
72
+ recomendación de investigar.
48
73
  - **Cambiar el `flow.json` de un recorrido ahora envejece sus veredictos.** El aviso de «el contrato
49
74
  cambió y la última corrida es anterior» miraba sólo el `SKILL.md`, que un recorrido no tiene, así que
50
75
  no se disparaba nunca: se le podía agregar una dimensión a un gate y sus casos aprobados seguían
51
76
  leyéndose vigentes. Qué archivo **es** el contrato depende del sujeto — el de un cargo es su
52
77
  `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
78
  - **`ops context` ya no se traga las acciones humanas cuando no hay tarea en cola.** Se imprimían
58
79
  después del `return` de «sin tarea disponible», así que una instancia recién arrancada —`onboard`
59
80
  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.51.0",
4
4
  "description": "Sistema portable de planificación y ejecución verificable para cualquier proyecto",
5
5
  "keywords": [
6
6
  "planning",