@ingeniomaps/cauce 0.8.1 → 0.9.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
@@ -8,10 +8,26 @@ esa operación sea confiable en vez de sólo cómoda: acá se lee qué cambió a
8
8
  un cambio en el protocolo, en las reglas del sistema o en un guard es visible para el usuario y sube
9
9
  minor aunque no toque una sola línea de código.
10
10
 
11
- ## [0.8.1] - 2026-08-15
11
+ ## [0.9.0] - 2026-08-15
12
+
13
+ ### Añadido
14
+
15
+ - `ops integration disable <raíz> <proveedor>`: el par que faltaba. Apagar **no desinstala** —
16
+ `integrations/<proveedor>/` puede tener snapshots y borradores de la empresa, y borrarlos para
17
+ desconectar una integración sería perder trabajo suyo. El andamiaje queda y volver a encender no
18
+ pierde nada.
19
+ - `integration enable` sólo pide lo que falta: reencender un proveedor ya configurado no manda a
20
+ completar un archivo que la empresa terminó hace meses.
21
+
22
+ ## [0.8.2] - 2026-08-15
12
23
 
13
24
  ### Corregido
14
25
 
26
+ - **`integration list` mostraba encendido un proveedor que se habría negado a sincronizar.** Hay dos
27
+ interruptores y `sync` exige los dos: el del registro dice que el proveedor está conectado al
28
+ proyecto, el suyo propio que su configuración está terminada. La lista leía sólo el primero, así
29
+ que después de `enable` decía `● jira` y `sync` contestaba `jira está deshabilitado`. Ahora
30
+ distingue los tres estados y `enable` no promete más de lo que hizo.
15
31
  - `integration enable` no falla si el andamiaje ya está. Habilitar no es inicializar: una instancia
16
32
  que lo arrastra de una versión anterior —o que ya tiene snapshots— sólo quiere el interruptor, y
17
33
  recibía un error pidiéndole un directorio vacío. Ahora repone lo que falte, conserva lo que haya y
package/engine/cli/ops.js CHANGED
@@ -34,6 +34,7 @@ function usage() {
34
34
  ops archive <planning-dir> <NNN>
35
35
  ops integration list <ops-root>
36
36
  ops integration enable <ops-root> <provider>
37
+ ops integration disable <ops-root> <provider>
37
38
  ops integration check <ops-root> [provider]
38
39
  ops integration sync <ops-root> <provider> [--fixture <json>]
39
40
  ops integration promote <ops-root> <provider> <remote-key>
@@ -679,8 +680,17 @@ async function integration(action, rootArg, provider, key) {
679
680
  const root = path.resolve(rootArg || '.')
680
681
  if (action === 'list') {
681
682
  const registry = JSON.parse(fs.readFileSync(path.join(root, 'integrations', 'config.json'), 'utf8'))
683
+ // Hay dos interruptores y `sync` exige los dos: el del registro dice que el proveedor está
684
+ // conectado al proyecto, el suyo propio que su configuración está terminada. Mostrar sólo el
685
+ // primero daba encendido a un proveedor que se habría negado a sincronizar.
682
686
  for (const [name, entry] of Object.entries(registry.providers || {})) {
683
- console.log(`${entry.enabled ? '●' : '○'} ${name} [${entry.adapter}]`)
687
+ let listo = false
688
+ try {
689
+ listo = JSON.parse(fs.readFileSync(path.join(root, 'integrations', name, 'config.json'), 'utf8')).enabled === true
690
+ } catch { /* sin materializar */ }
691
+ const estado = !entry.enabled ? '○' : (listo ? '●' : '◐')
692
+ const nota = estado === '◐' ? ` — falta completar integrations/${name}/config.json y poner enabled: true` : ''
693
+ console.log(`${estado} ${name} [${entry.adapter}]${nota}`)
684
694
  }
685
695
  return
686
696
  }
@@ -699,7 +709,39 @@ async function integration(action, rootArg, provider, key) {
699
709
  copyTemplate(source, path.join(root, 'integrations', provider), {}, true)
700
710
  config.providers[provider].enabled = true
701
711
  F.atomicWriteJson(registry, config)
702
- console.log(`✓ ${provider}: habilitado. Completá integrations/${provider}/config.json antes de sincronizar.`)
712
+ console.log(`✓ ${provider}: conectado al proyecto y andamiaje en integrations/${provider}/.`)
713
+ // Sólo se pide lo que falta: reencender un proveedor ya configurado no debería mandar a
714
+ // completar un archivo que la empresa terminó hace meses.
715
+ let listo = false
716
+ try {
717
+ const suyo = path.join(root, 'integrations', provider, 'config.json')
718
+ listo = JSON.parse(fs.readFileSync(suyo, 'utf8')).enabled === true
719
+ } catch { /* sin configurar */ }
720
+ if (listo) console.log(` Su configuración ya estaba completa: "integration sync" puede correr.`)
721
+ else {
722
+ console.log(` Falta lo tuyo: completá integrations/${provider}/config.json y poné enabled: true ahí.`)
723
+ console.log(` Hasta entonces "integration sync" se niega, que es lo correcto: no hay a dónde apuntar.`)
724
+ }
725
+ return
726
+ }
727
+ // Apagar no desinstala: `integrations/<proveedor>/` puede tener snapshots y borradores de la
728
+ // empresa, y borrarlos para desconectar una integración sería perder trabajo suyo. El andamiaje
729
+ // queda, callado, y volver a encenderlo no pierde nada.
730
+ if (action === 'disable') {
731
+ if (!provider) fail('Falta <provider>.', 2)
732
+ const registry = path.join(root, 'integrations', 'config.json')
733
+ let config
734
+ try { config = JSON.parse(fs.readFileSync(registry, 'utf8')) } catch (error) {
735
+ fail(`integrations/config.json ilegible: ${error.message}`)
736
+ }
737
+ if (!config.providers || !config.providers[provider]) fail(`${provider} no está en integrations/config.json.`)
738
+ config.providers[provider].enabled = false
739
+ F.atomicWriteJson(registry, config)
740
+ console.log(`✓ ${provider}: desconectado del proyecto. "integration sync" deja de correrlo.`)
741
+ const dir = path.join(root, 'integrations', provider)
742
+ if (fs.existsSync(dir)) {
743
+ console.log(` integrations/${provider}/ queda como está: ahí pueden vivir snapshots y borradores tuyos.`)
744
+ }
703
745
  return
704
746
  }
705
747
  if (action === 'check') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ingeniomaps/cauce",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "description": "Sistema portable de planificación y ejecución verificable para cualquier proyecto",
5
5
  "type": "commonjs",
6
6
  "bin": {