@ingeniomaps/cauce 0.79.0 → 0.81.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.
Files changed (36) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/README.md +6 -3
  3. package/automatization/hooks/README.md +48 -2
  4. package/automatization/hooks/guard-chat.sh +5 -0
  5. package/automatization/hooks/guard-secrets-read.sh +3 -0
  6. package/automatization/hooks/guard-secrets-shell.sh +3 -0
  7. package/automatization/runners/claude/README.md +5 -2
  8. package/automatization/runners/claude/manifest.json +26 -1
  9. package/automatization/runners/claude/settings.json +13 -0
  10. package/automatization/runners/codex/README.md +4 -0
  11. package/automatization/runners/codex/hooks.json +7 -0
  12. package/automatization/runners/gemini/README.md +6 -2
  13. package/automatization/runners/gemini/settings.json +19 -0
  14. package/engine/automation/index.js +9 -1
  15. package/engine/cli/args.js +1 -0
  16. package/engine/cli/bootstrap.js +1 -1
  17. package/engine/cli/ops.js +9 -5
  18. package/engine/cli/wiring.js +21 -3
  19. package/engine/config/paths.js +5 -3
  20. package/engine/hooks/approval.js +42 -8
  21. package/engine/hooks/chat.js +122 -0
  22. package/engine/hooks/files.js +94 -35
  23. package/engine/hooks/input.js +7 -1
  24. package/engine/hooks/run.js +30 -3
  25. package/engine/hooks/secrets-shell.js +62 -0
  26. package/engine/hooks/self-approval.js +31 -0
  27. package/engine/hooks/shell.js +49 -28
  28. package/engine/integrations/providers/jira.js +1 -1
  29. package/engine/integrations/registry.js +28 -5
  30. package/engine/secrets/index.js +201 -0
  31. package/package.json +1 -1
  32. package/template/AGENTS.md +14 -3
  33. package/template/integrations/README.md +21 -0
  34. package/template/organization/README.md +52 -0
  35. package/template/planning/adr/README.md +1 -0
  36. package/template/planning/adr/system/OPS-007-contrato-de-secretos-compartido.md +62 -0
@@ -0,0 +1,62 @@
1
+ # OPS-007 — Un contrato de secretos compartido, sin conocer ningún gestor
2
+
3
+ **Estado:** Aceptado
4
+ **Fecha:** 2026-09-10
5
+
6
+ > Decide qué parte del manejo de secretos es de la base; el gestor, sus scripts y su CI siguen siendo de
7
+ > la empresa.
8
+
9
+ ## Contexto
10
+
11
+ Una empresa que adopta un gestor de secretos termina con el mismo modelo copiado en cada repositorio:
12
+ la identidad con que se lee el gestor, un script que compara el gestor contra el contrato de variables y
13
+ los workflows que avisan en el PR. Nada dice qué servicio usa qué cuenta ni qué identidad, y nada detecta
14
+ que una copia se quedó atrás. En una instancia real se contaron dieciséis copias de un mismo script en
15
+ tres variantes, y el arreglo que tenía una sola no había llegado ni al esqueleto del que salen los
16
+ servicios nuevos.
17
+
18
+ `integrations/` no sirve para esto: su ciclo es de contenido de trabajo que baja a planning (OPS-003), y
19
+ su README prohíbe guardar secretos ahí.
20
+
21
+ ## Decisión
22
+
23
+ **La base declara y compara; no se conecta, no genera y no conoce ningún gestor.**
24
+
25
+ - La declaración vive en `organization/secrets.json`, que es del proyecto: cuentas, proyectos,
26
+ identidades, servicios y los archivos que comparten. Nunca un valor: una clave con forma de secreto es
27
+ un error.
28
+ - Una identidad es un nivel de acceso, no un repositorio. `source: file` es un archivo **fuera de todo
29
+ repositorio**, que carga una persona; `source: ci-secret` vive en el CI.
30
+ - La copia canónica de cada archivo compartido vive en la instancia. `ops secrets check` compara cada
31
+ copia de cada servicio contra ella por hash, sin red, y dice el `cp` que la pone al día. Cauce no
32
+ escribe en los repositorios de producto.
33
+ - El chequeo compara los servicios de una instancia. Una empresa con varios proyectos los declara como
34
+ raíces de la misma instancia, que es lo que hace que un esqueleto y sus derivados se midan contra lo
35
+ mismo.
36
+
37
+ ## Alternativas consideradas
38
+
39
+ - **Un adaptador de la empresa que genere los archivos**: flexible, pero obliga al motor a cargar código
40
+ de la instancia y a versionar una interfaz, para resolver lo mismo que una copia comparada por hash.
41
+ - **El adaptador como paquete versionado que cada instancia instala**: mantiene una instancia por
42
+ proyecto a cambio de publicar y versionar un paquete más.
43
+ - **Un workflow reutilizable compartido**: una sola copia, pero supone GitHub y una organización, y deja
44
+ a la base atada a un proveedor de CI.
45
+ - **Hacerlo un proveedor de `integrations/`**: su staging, reconciliación y promoción no se aplican a
46
+ secretos.
47
+
48
+ ## Consecuencias
49
+
50
+ **Ganamos:** la copia que se quedó atrás se ve, con su arreglo al lado; rotar una identidad compartida
51
+ es cambiar un archivo; y la base sigue sin saber de ningún gestor.
52
+
53
+ **Costos que aceptamos:** un arreglo sigue siendo un commit por repositorio —el chequeo los lista, no los
54
+ aplica—. Juntar varios proyectos en una instancia comparte también su `planning/`. Y una credencial
55
+ dentro de un repositorio es un error aunque esté ignorada por git: es la copia por repositorio que esta
56
+ decisión viene a sacar.
57
+
58
+ ## Estado de implementación
59
+
60
+ Implementado en 0.80.0: `organization/secrets.json`, `ops secrets check` y el recorrido documentado en
61
+ `organization/README.md`. Cauce no trae adaptadores ni un workflow de ejemplo que corra el chequeo en CI;
62
+ correrlo ahí es un paso de la empresa.