ozali 0.4.1 → 0.5.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.
@@ -269,3 +269,81 @@ artefacto, menos cuesta recuperarlo después.
269
269
  agresivo con recall-first (resume antes, evita relecturas grandes).
270
270
 
271
271
  > `savedByRecall` = estimación de relectura evitada por reusar memoria (ver plantilla `06-uso-tokens`).
272
+
273
+ ---
274
+
275
+ ## 8. Cloud: réplica de equipo en tiempo real
276
+
277
+ Engram Cloud es una **capa opt-in** que replica la memoria del equipo a un servidor central,
278
+ **adicional al git-sync**. Con autosync activo, la réplica es **automática e invisible**: los devs
279
+ no necesitan correr `ozali sync` manualmente para compartir memoria.
280
+
281
+ ### 8.1 Modelo: cloud-first, git-sync como backup
282
+
283
+ ```
284
+ dev A guarda memoria → autosync → cloud → dev B (autosync recibe)
285
+
286
+ git-sync (backup/secondary)
287
+ ```
288
+
289
+ - **Cloud-first**: la réplica es en tiempo real (autosync). El repo de conocimiento sigue siendo
290
+ el backup offline (ver [team-history](../../docs/team-history.md)).
291
+ - **Sin cloud**: todo funciona igual, solo que el sync es manual (`ozali sync` + `--push`/`--import`).
292
+
293
+ ### 8.2 Cómo se comparten las memorias vía cloud
294
+
295
+ 1. Un dev guarda una observación con `mem_save` (scope: project, español — ver §1.5).
296
+ 2. El autosync la replica al servidor cloud automáticamente.
297
+ 3. El autosync del otro dev la recibe y la importa a su store local.
298
+ 4. Ambos devs pueden buscarla con `mem_search`.
299
+
300
+ > **Scope + idioma siguen siendo obligatorios** (§1.5): `scope: project` siempre en español,
301
+ > `scope: personal` cualquier idioma. Cloud no cambia esta regla — solo acelera el transporte.
302
+
303
+ ### 8.3 Archivos de configuración
304
+
305
+ | Archivo | Commiteable | Contiene | Propósito |
306
+ |---|---|---|---|
307
+ | `.ozali/cloud.json` | **Sí** (no lleva secretos) | server, project, enrolled, dashboard URL | Que un dev nuevo detecte la cloud del equipo al hacer `ozali init` |
308
+ | `~/.engram/cloud_token` | No (local) | El token de auth | Persistencia del token entre sesiones |
309
+ | `.claude/settings.json` (env) | Sí | `ENGRAM_CLOUD_AUTOSYNC=1`, `ENGRAM_CLOUD_TOKEN` | Autosync en el MCP del agente |
310
+
311
+ > El token **nunca** se commitea. `.ozali/cloud.json` solo tiene metadatos sin secretos.
312
+
313
+ ### 8.4 Comandos cloud del CLI
314
+
315
+ | Comando | Qué hace |
316
+ |---|---|
317
+ | `ozali init` → detecta `.ozali/cloud.json` | Onboarding: conecta al dev nuevo en 1 paso (Fase 1) |
318
+ | `ozali sync --cloud` | Push manual a cloud (además del git-sync) |
319
+ | `ozali sync --cloud --import` | Pull desde cloud (onboarding inverso) |
320
+ | `ozali cloud status` | Estado de enrollment + último sync + upgrade pipeline |
321
+ | `ozali cloud upgrade` | Flujo completo: doctor → repair --apply → bootstrap |
322
+ | `ozali cloud repair` | `engram cloud upgrade repair --apply` |
323
+ | `ozali cloud dashboard` | Abre el dashboard web en el navegador |
324
+ | `ozali cloud config` | Re-configura servidor/token |
325
+ | `ozali audit --conflicts` | Lista conflictos de memoria pendientes |
326
+ | `ozali audit --conflicts --stats` | Estadísticas de conflictos |
327
+
328
+ ### 8.5 Conflictos: qué son y cómo resolverlos
329
+
330
+ Cuando dos devs guardan memorias que el sistema detecta como **potencialmente conflictivas**
331
+ (misma `topic_key`, contenido divergente), Engram Cloud las marca como conflictos pendientes.
332
+
333
+ - `ozali doctor` avisa si hay conflictos pendientes (`pending > 0`).
334
+ - `ozali audit --conflicts` los lista.
335
+ - El agente los resuelve con `mem_judge` (ver protocolo de conflict surfacing en las
336
+ instrucciones del MCP de Engram): `related`, `compatible`, `scoped`, `conflicts_with`,
337
+ `supersedes`, `not_conflict`.
338
+ - `ozali audit --conflicts --judged` muestra los ya resueltos.
339
+
340
+ ### 8.6 Troubleshooting cloud
341
+
342
+ | `reason_code` | Significado | Acción |
343
+ |---|---|---|
344
+ | `blocked_unenrolled` | El proyecto no está enrolado en el servidor | `ozali init` o `ozali cloud config` |
345
+ | `transport_failed` | No se pudo conectar al servidor | Verifica URL, red, firewall |
346
+ | `bootstrap_verified` (upgrade) | Todo OK, no necesita upgrade | — |
347
+ | otro (upgrade) | El proyecto requiere upgrade de esquema | `ozali cloud upgrade` |
348
+
349
+ > `ozali doctor` parsea estos códigos y muestra warnings específicos.