From d43ffae3ae63384dc7575f95c1a31769b6b692fa Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Mon, 8 Jun 2026 01:57:00 +0200 Subject: [PATCH] chore: auto-commit (17 archivos) - reports/0001-2026-06-07-unibus-grafana-monitoring.md - reports/0008-2026-06-07-unibus-admin-users-wired.md - reports/0008-2026-06-07-unibus-decentralization-audit.md - reports/0009-2026-06-07-unibus-cluster-hardening.md - reports/0010-2026-06-07-unibus-android-native.md - reports/0011-2026-06-07-unibus-cluster-deploy.md - reports/0012-2026-06-07-unibus-deploy-gaps-closed.md - reports/0013-2026-06-07-unibus-admin-panel.md - reports/0014-2026-06-07-unibus-users-http-admin-api.md - reports/0015-2026-06-07-unibus-web-wired.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) --- ...01-2026-06-07-unibus-grafana-monitoring.md | 145 +++++++++++ ...008-2026-06-07-unibus-admin-users-wired.md | 124 ++++++++++ ...026-06-07-unibus-decentralization-audit.md | 125 ++++++++++ ...009-2026-06-07-unibus-cluster-hardening.md | 89 +++++++ .../0010-2026-06-07-unibus-android-native.md | 147 ++++++++++++ .../0011-2026-06-07-unibus-cluster-deploy.md | 173 ++++++++++++++ ...12-2026-06-07-unibus-deploy-gaps-closed.md | 180 ++++++++++++++ reports/0013-2026-06-07-unibus-admin-panel.md | 158 ++++++++++++ ...-2026-06-07-unibus-users-http-admin-api.md | 203 ++++++++++++++++ reports/0015-2026-06-07-unibus-web-wired.md | 161 +++++++++++++ ...16-2026-06-07-unibus-nats-metrics-clean.md | 226 ++++++++++++++++++ .../0017-2026-06-07-unibus-rollout-0.11.0.md | 147 ++++++++++++ .../0018-2026-06-07-unibus-user-accounts.md | 150 ++++++++++++ reports/assets/unibus-android-chat.png | Bin 0 -> 134236 bytes reports/assets/unibus-android-login.png | Bin 0 -> 72287 bytes reports/assets/unibus-android-rooms.png | Bin 0 -> 97610 bytes .../unibus-grafana-monitoring-dashboard.png | Bin 0 -> 128135 bytes 17 files changed, 2028 insertions(+) create mode 100644 reports/0001-2026-06-07-unibus-grafana-monitoring.md create mode 100644 reports/0008-2026-06-07-unibus-admin-users-wired.md create mode 100644 reports/0008-2026-06-07-unibus-decentralization-audit.md create mode 100644 reports/0009-2026-06-07-unibus-cluster-hardening.md create mode 100644 reports/0010-2026-06-07-unibus-android-native.md create mode 100644 reports/0011-2026-06-07-unibus-cluster-deploy.md create mode 100644 reports/0012-2026-06-07-unibus-deploy-gaps-closed.md create mode 100644 reports/0013-2026-06-07-unibus-admin-panel.md create mode 100644 reports/0014-2026-06-07-unibus-users-http-admin-api.md create mode 100644 reports/0015-2026-06-07-unibus-web-wired.md create mode 100644 reports/0016-2026-06-07-unibus-nats-metrics-clean.md create mode 100644 reports/0017-2026-06-07-unibus-rollout-0.11.0.md create mode 100644 reports/0018-2026-06-07-unibus-user-accounts.md create mode 100644 reports/assets/unibus-android-chat.png create mode 100644 reports/assets/unibus-android-login.png create mode 100644 reports/assets/unibus-android-rooms.png create mode 100644 reports/unibus-grafana-monitoring-dashboard.png diff --git a/reports/0001-2026-06-07-unibus-grafana-monitoring.md b/reports/0001-2026-06-07-unibus-grafana-monitoring.md new file mode 100644 index 0000000..b485de2 --- /dev/null +++ b/reports/0001-2026-06-07-unibus-grafana-monitoring.md @@ -0,0 +1,145 @@ +# Report 0001 — Monitorización de unibus en Grafana/VictoriaMetrics + +- **Fecha:** 07/06/2026 +- **Autor:** agente (Claude Opus 4.8) +- **Ámbito:** `projects/fleet_monitoring/` (exporter + dashboard + deploy) + 1 función nueva en el registry (`functions/infra/`). Solo lectura de `projects/message_bus/apps/unibus/` (endpoint `/healthz` + CA). +- **Estado:** done (métricas de `/healthz`); gap declarado en métricas profundas NATS/JetStream. + +## Resumen + +Se añadió monitorización del cluster de mensajería **unibus** (NATS+JetStream, 3 nodos: magnus, +homer, datardos) a la stack de Grafana/VictoriaMetrics que ya corre en magnus, **sin instrumentar +el bus**. Un nuevo daemon `unibus_exporter` sondea el endpoint público de salud de cada nodo +(`GET https://:8470/healthz`, TLS verificado con la CA del cluster) en un bucle de 15 s, +traduce la respuesta a métricas Prometheus y las empuja a la VictoriaMetrics local de magnus. +Un dashboard dedicado las visualiza. No se tocó nada del código de unibus ni la stack existente +(Caddy/Gitea/VM/Grafana/fleet-agent intactos). + +## Qué métricas se recolectan y cómo + +El `/healthz` de cada nodo devuelve, verificado en producción: + +```json +{"posture":{"enforce":true,"acl":true,"tls":true,"cluster":true,"store":"kv"},"status":"ok"} +``` + +De ahí se derivan estas series (labels `node` e `instance` = nombre del nodo, label común +`job=unibus_exporter`): + +| Serie | Origen | Significado | +|---|---|---| +| `unibus_up` | exporter | 1 si el nodo respondió `/healthz`, 0 si el GET/parseo falló | +| `unibus_status_ok` | healthz `status` | 1 si `status=="ok"` | +| `unibus_posture_enforce` | healthz `posture.enforce` | enforcement de auth (1/0) | +| `unibus_posture_acl` | healthz `posture.acl` | ACL de subjects (1/0) | +| `unibus_posture_tls` | healthz `posture.tls` | TLS del transporte (1/0) | +| `unibus_posture_cluster` | healthz `posture.cluster` | modo cluster activo (1/0) | +| `unibus_store_kv` | healthz `posture.store` | 1 si el store es `kv` (JetStream KV) | +| `unibus_scrape_error` | exporter | 1 si el scrape de ese nodo falló | +| `unibus_scrape_duration_seconds` | exporter | latencia del GET `/healthz` | +| `unibus_cluster_size` | exporter (config) | nº de nodos configurados (los vivos = `sum(unibus_up)`) | + +`unibus_up=0` lo emite el exporter (no el parser) cuando el GET falla, para que un nodo caído sea +**visible** en Grafana, no simplemente ausente. + +## Componentes entregados + +### Función del registry — `parse_unibus_health_go_infra` +- `functions/infra/parse_unibus_health.go` + `.md` + `_test.go` (grupo `fleet-metrics`, tags `unibus`). +- `func ParseUnibusHealth(node string, body []byte) ([]PromSample, error)` — pura de transformación + (clasificada `impure` solo por el error de unmarshal). Tests golden/edge/error. +- **Nota de proceso:** el prompt pedía delegar esta función a `fn-constructor`, pero ese + subagent_type no existe en este entorno. Tras confirmar con el usuario ("crear en el registry"), + se creó a mano siguiendo el flujo (archivos + tests + `fn index`). + +### App — `unibus_exporter` (sub-repo Gitea propio) +- `projects/fleet_monitoring/apps/unibus_exporter/`: `main.go`, `config.go`, `unibus.example.json`, + `systemd/unibus-exporter.service`, `app.md`, `.gitignore`. +- Compone `parse_unibus_health` + `format_prom_exposition` + `push_prom_remote` del registry (no + reescribe push ni formato). Config JSON; secretos (CA, basic-auth) fuera de argv. Verifica TLS + siempre contra la CA del cluster (sin `InsecureSkipVerify`). +- `git init -b master` + commit inicial hecho (apps/* está gitignored en el project; sin sub-repo + el código se perdería). Falta crear el repo Gitea remoto: lo hará `/full-git-push`. + +### Dashboard — `unibus-cluster.json` +- `projects/fleet_monitoring/hub/dashboards/unibus-cluster.json` (formato de los `fleet-*.json`, + datasource `victoriametrics`, carpeta **Fleet**, uid `unibus-cluster`, 9 paneles): nodos up, + cluster size, nodos caídos, posture homogénea segura, up/down por nodo, matriz de posture por + nodo (state-timeline enforce/acl/tls/cluster/store-kv × 3 nodos), latencia de scrape y tabla de + estado por nodo. Panel "Meta-leader" preparado (muestra n/d sin métricas NATS). + +### Deploy — `deploy_unibus_exporter.sh` +- `projects/fleet_monitoring/hub/deploy_unibus_exporter.sh`: compila el binario linux/amd64, sube + binario + CA del cluster a magnus (`/opt/unibus-exporter`, `/etc/unibus-exporter/ca.crt` chmod + 600 la config) e instala el servicio systemd apuntando a `http://127.0.0.1:8428/...` (VM local, + sin auth porque corre en el propio hub). + +## Verificación (evidencia ejecutable) + +**1. Acceso y healthz de los 3 nodos (CA del cluster por path):** +``` +$ curl -s --cacert .../deploy/tls/ca.crt https://135.125.201.30:8470/healthz +{"posture":{"enforce":true,"acl":true,"tls":true,"cluster":true,"store":"kv"},"status":"ok"} + (idéntico en homer 141.94.69.66 y datardos 51.91.100.142) +``` + +**2. Tests de la función:** +``` +$ go test -tags fts5 -run ParseUnibusHealth ./functions/infra/ +ok fn-registry/functions/infra 0.004s +$ ./fn index # → "Indexed 1450 functions ..."; ./fn show parse_unibus_health_go_infra → OK +``` + +**3. Exporter build + scrape/push único de prueba (local → VM):** +``` +$ ./unibus_exporter -config -once +unibus_exporter starting: nodes=3 hub="https://metrics-…/api/v1/import/prometheus" interval=15s +pushed 28 samples for 3 nodes # 1 cluster_size + 3 nodos × 9 series +``` + +**4. Daemon systemd en magnus:** +``` +$ systemctl is-active unibus-exporter → active +$ systemctl is-enabled unibus-exporter → enabled +$ journalctl -u unibus-exporter → "pushed 28 samples for 3 nodes" +``` + +**5. Series en VictoriaMetrics (magnus, 127.0.0.1:8428):** +``` +sum(unibus_up) = 3 +unibus_cluster_size = 3 +count(unibus_up==1) = 3 +unibus_posture_enforce: magnus=1 homer=1 datardos=1 (job=unibus_exporter) +unibus_store_kv: magnus=1 homer=1 datardos=1 +unibus_scrape_duration_seconds: magnus≈4ms homer≈32ms datardos≈19ms +``` + +**6. Dashboard en Grafana (visto en el navegador):** +- `https://grafana-…/d/unibus-cluster` — carpeta Fleet, 9 paneles renderizando datos reales. +- Nodos up: **3** · Cluster size: **3** · Nodos caídos: **0** · Posture homogénea segura: + **OK (enforce+acl+tls+cluster+kv)** · matriz de posture: 15 celdas en verde · tabla de estado + por nodo con ✓ en up/enforce/acl/tls. +- Captura: `unibus-grafana-monitoring-dashboard.png` (junto a este report). +- API: `GET /api/dashboards/uid/unibus-cluster` → `dashboard CARGADO: unibus — Cluster | folder: Fleet | paneles: 9`. + +## Gaps / pendientes + +- **Métricas profundas NATS/JetStream (msgs/s, conexiones, KV bucket msgs, RAFT leader por + stream, `NRestarts`) — NO incluidas, gap recomendado.** La vía es el monitoring embebido de + NATS (puerto 8222), que se confirmó **cerrado** en los 3 nodos en producción + (`curl 127.0.0.1:8222/varz` → CLOSED en magnus/homer/dd). Activarlo (bindeado a 127.0.0.1 + + scrape local, o sacar `/jsz` por SSH) exige tocar la config/unit de los nodos del cluster, que + además están siendo trabajados por otros agentes ahora mismo. Se decidió **no forzarlo** por + riesgo en producción. Para abordarlo después: añadir `UNIBUS_NATS_DEBUG`/equivalente bindeado a + loopback en cada nodo (cambio aditivo, coordinado con `unibus/deploy/cluster/`), un scrape local + del `/jsz`+`/varz` y nuevas series `unibus_jsz_*`. El panel "Meta-leader" del dashboard ya está + preparado para cuando exista `unibus_meta_leader`. +- **`unibus_cluster_size`** refleja el nº de nodos **configurados** en el exporter (3), no un + recuento que el bus reporte (healthz no lo expone). Los nodos vivos se ven con `sum(unibus_up)`. +- **Commit en el repo padre `fn_registry` sin pushear (a propósito):** la función nueva quedó + commiteada en local (`82f1f1bd`, master ahead 1) pero **no se hizo push** del padre, para + respetar el aislamiento pedido. El humano debería revisarlo y pushearlo (junto con `fn index` + para regenerar `registry.db`, que está gitignored). +- **Repo Gitea del exporter:** `apps/unibus_exporter` tiene su `git init` + commit local pero aún + no tiene remoto en Gitea; `/full-git-push` lo creará (`dataforge/unibus_exporter`). +- **Vida útil (DoD capa 3):** validado funcionalmente hoy; falta la ventana de uso real ≥7 días. diff --git a/reports/0008-2026-06-07-unibus-admin-users-wired.md b/reports/0008-2026-06-07-unibus-admin-users-wired.md new file mode 100644 index 0000000..e6db93d --- /dev/null +++ b/reports/0008-2026-06-07-unibus-admin-users-wired.md @@ -0,0 +1,124 @@ +# Report 0008 — unibus_admin: pestaña Users cableada a la API del plano de control + +- **Fecha:** 07/06/2026 +- **Autor:** agente (Claude Opus 4.8) +- **Ámbito:** `projects/message_bus/apps/unibus_admin` (gateway Go + SPA Mantine), sub-repo `dataforge/unibus_admin`, rama `master` +- **Estado:** done (código + verificación E2E del código) — con un gap de **despliegue** del bus documentado abajo + +## Resumen + +La pestaña Users del panel de administración de unibus estaba degradada en cluster +porque el gateway sólo sabía gestionar la allowlist abriendo el `membership.Store` +directo con `--db`, y caía a `users_backend=none` (estado informativo) cuando no había +acceso directo al store. El control plane de unibus ahora expone una API HTTP admin-only +de users, y `pkg/client` la envuelve con `ListUsers/AddUser/RevokeUser` firmados. Este +trabajo cablea el gateway a esos métodos (camino principal: API HTTP firmada, funciona +en cluster), deja la pestaña Users operativa (sin el estado "degradado"), y verifica la +cadena completa list → add → revoke (con idempotencia 409) end-to-end contra un +`membershipd` master real. `--db` queda como fallback single-node explícito. + +## Cambios + +| Archivo | Cambio | +|---|---| +| `internal/admin/repo.go` | Eliminado `ErrUsersUnavailable` y el camino "none"; comentarios del interface `Repo` y de `MeInfo.UsersBackend` actualizados (`"control-plane"` \| `"sqlite"`). | +| `internal/admin/repo_bus.go` | `ListUsers/AddUser/RevokeUser` usan `r.cli.*` (API firmada) cuando no hay store directo; con `--db` siguen usando el store. `UsersWritable()` → `true` (el gateway conectado siempre puede; el control real es `requireAdmin` en runtime). Backend por defecto `"control-plane"`, `"sqlite"` con `--db`. | +| `internal/admin/server.go` | Handlers `/api/users` simplificados (cualquier error del control plane → 502 con su mensaje, que ya trae el código embebido, p.ej. `(HTTP 409)`); quitado el manejo de `ErrUsersUnavailable` y el import `errors`. | +| `main.go` | `--db` documentado como opcional (fallback single-node); por defecto el backend es `control-plane`. Logs de arranque acordes. | +| `web/src/pages/UsersPage.tsx` | Quitado el `Alert` "Gestión de users no disponible" y el gating `writable` (botón Add deshabilitado / revoke oculto). El badge muestra `backend: `. La tabla (handle/rol/estado/sign_pub/creado), el modal Add (handle + sign-pub hex64 + rol) y revoke con confirmación se mantienen. | +| `web/dist/*` | Bundle SPA recompilado (embebido por el binario). | +| `app.md` | Diagrama, tabla de capacidades, ejemplos de arranque y gaps actualizados al cableado control-plane + el gap de despliegue del bus. | + +El gateway **reutiliza** los métodos del cliente del bus (`pkg/client`), no reimplementa +firma ni HTTP. No se tocó el repo `unibus` (sólo se importa por `replace => ../unibus`). + +## Verificación + +### Mecánica (verde) + +``` +go vet ./... → VET_EXIT:0 +go build -o unibus_admin . → BUILD_EXIT:0 (19 MB, embebe la SPA) +cd web && pnpm build → tsc -b + vite build OK (sin errores de tipo) +``` + +### Cobertura E2E del código (verde) — contra `membershipd` master real + +El cluster de producción aún no expone la ruta `/users` (ver Gaps), así que la cadena +del panel se verificó contra un `membershipd` compilado de master (con la ruta) arrancado +localmente (sqlite, `--bus-auth soft`), con el operador sembrado como admin +(`membershipd user add --role admin`). El gateway firma como el operador; el bus verifica +con `requireAdmin`. Secuencia ejecutada **por la API del panel** (`/api/users`): + +| Paso | Comando (gateway en :18481) | Resultado | +|---|---|---| +| list (antes) | `GET /api/users` | `[operator(admin,active)]` | +| add | `POST /api/users {gapcheck_admin_ui, member}` | `201 {"status":"added"}` | +| list | `GET /api/users` | `gapcheck_admin_ui` **active/member** + operator | +| re-alta (idempotencia) | `POST /api/users` (mismo sign_pub) | `409` `user already registered (unchanged); revoke it first` | +| revoke | `POST /api/users/revoke {sign_pub}` | `200 {"status":"revoked"}` | +| list (final) | `GET /api/users` | `gapcheck_admin_ui` **revoked** + `revoked_at`; operator intacto | + +`sign_pub` de prueba: `1cb658d9d3f23e6bf5791a3865a1eec731f3df30ad4b85f6fca0074b8bdc98a4` +(aleatorio, role member). Limpieza: revocado al final (revoke es la limpieza; no hay hard +delete). El operador admin y la DB de prueba vivían en `/tmp` efímero, ya borrados. **No se +tocó la allowlist del cluster de producción.** + +### SPA (verde) — verificada visualmente (browser MCP) + +Panel servido en `:18481`, pestaña Users: +- Badge `backend: control-plane` (sin Alert degradado), botón "Añadir user" **activo**. +- Tabla con `gapcheck_admin_ui` MEMBER/REVOKED (sin botón revoke por estar revocado) y + `operator` ADMIN/ACTIVE (con botón revoke). +- Modal "Añadir user al bus" renderiza Handle + `sign_pub (hex, 64)` + Rol(member) + + Cancelar/Añadir. + +### Conectividad contra el cluster vivo (verde, salvo la ruta ausente) + +- Gateway local apuntado a homer (`141.94.69.66:8470`) + datardos (`51.91.100.142:8470`), + TLS+nkey con la CA del bus, identidad operator desde `pass`: **conecta y firma** + (`/api/me` devuelve el endpoint real del operador `vI8HXcintzK-…`). `GET /api/users` + → `404 page not found` desde el control plane (ruta ausente en esos binarios). +- Panel efímero arrancado **en magnus** (puerto 18482, sin tocar el `unibus-admin.service`) + contra el control plane loopback de magnus (KV, enforce, TLS): `/api/me` OK (pasa el + `enforce` de magnus firmando como operador), `GET /api/users` → `404`. El binario + efímero y su log se borraron; el service real quedó `active`. + +## Estado del deploy en magnus + +**No se re-desplegó el service.** El panel `unibus-admin.service` sigue `active` en magnus +(healthz 200). Build linux/amd64 del binario nuevo: **listo** (probado en magnus en puerto +efímero). El re-deploy queda **bloqueado por una dependencia**: re-desplegar ahora cambiaría +la pestaña Users de un Alert informativo a un error `502 (GET /users → 404)`, porque el +`membershipd` de magnus aún no expone la ruta. Procedimiento para cuando el bus esté en +v0.10.0 (aditivo, sin tocar otros sites del Caddyfile): + +```bash +cd web && pnpm install && pnpm build && cd .. +CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o unibus_admin . +scp unibus_admin magnus:/opt/unibus_admin/unibus_admin +ssh magnus 'systemctl restart unibus-admin.service' # el unit ya arranca sin --db (backend control-plane) +ssh magnus 'curl -fsS http://127.0.0.1:8480/healthz' # + comprobar la pestaña Users vía el subdominio Caddy +``` + +El `deploy/unibus-admin.service` no necesita cambios para el camino control-plane (no usa +`--db`). Verificar tras el restart que `ExecStart` no incluye `--db` (si lo incluyera, +quitarlo para usar la API del plano de control). + +## Gaps / pendientes + +1. **Cluster sin la ruta `/users` (despliegue).** Los `membershipd` desplegados + (magnus/homer/datardos) son anteriores al merge de la API de users y devuelven 404. La + verificación E2E del panel contra el cluster vivo **de producción** no es posible hasta + actualizar el bus a v0.10.0. La cadena está verificada contra un `membershipd` master + real (mismo código que correrá en el cluster), y el gateway ya conecta y firma bien + contra los nodos reales. Acción fuera de este aislamiento (toca el repo `unibus`/su + deploy): actualizar los binarios del cluster. +2. **Mapeo de código de estado.** Un `409` (re-alta idempotente) del control plane llega a + la SPA como `502` con el mensaje del bus (que incluye `(HTTP 409)`). La SPA muestra el + mensaje íntegro, así que la UX es correcta y accionable; no se parseó el string de error + para propagar el código exacto (se evitó un parser frágil — KISS). Mejora menor opcional + si `pkg/client` expone el status estructuradamente. +3. **Replicación `followers 2/2`.** No se inspeccionó la replicación KV cross-node porque la + ruta `/users` no está viva en el cluster; el panel no expone métricas de JetStream + (varz/jsz) — gap ya conocido de la pestaña Cluster. diff --git a/reports/0008-2026-06-07-unibus-decentralization-audit.md b/reports/0008-2026-06-07-unibus-decentralization-audit.md new file mode 100644 index 0000000..ce0e86d --- /dev/null +++ b/reports/0008-2026-06-07-unibus-decentralization-audit.md @@ -0,0 +1,125 @@ +# Report 0008 — unibus: auditoría de seguridad de la superficie descentralizada (issue 0003, vectores N1–N6) + +- **Fecha:** 07/06/2026 +- **Autor:** agente auditor (Claude Opus 4.8), mentalidad red-team +- **Ámbito:** `projects/message_bus/apps/unibus` (sub-repo `dataforge/unibus`), HEAD `df3b62a` (v0.7.0, master). Paquetes `embeddednats`, `busauth`, `membership`, `client`, `cmd/membershipd`. Superficie nueva introducida por la descentralización (issue 0003, fases 0003a–0003e). +- **Estado:** done — auditoría + verificación activa con cluster efímero en proceso. NO se modificó código de producción; los tests de ataque fueron efímeros (creados, ejecutados, borrados); el working tree quedó idéntico al baseline. +- **Origen:** la re-auditoría previa (report 0006-security-reaudit) auditó el commit PRE-0003 (618f6b6) porque durante 0003 el working tree no compilaba. La superficie distribuida de 0003 nunca se había red-teameado. Esta auditoría la cubre antes de exponer el bus público en cluster (0003f). + +--- + +## Resumen ejecutivo — ¿es seguro exponer el bus DESCENTRALIZADO (cluster) público HOY? + +**Veredicto: NO** para el bus descentralizado en cluster, tal como el binario lo cablea en v0.7.0. Dos hallazgos bloqueantes, ambos demostrados con ataque ejecutable sobre un cluster efímero en proceso: + +1. **N3 — anti-replay roto en cualquier cluster real.** El binario `membershipd` **nunca llama** `Server.UseReplicatedNonces`. Cada nodo mantiene su `memNonceCache` por-proceso. Una petición firmada una vez y aceptada en el nodo A se **acepta también replayada al nodo B** (demostrado: 200 en A, 200 en B). El cierre de replay multi-nodo que el issue reivindica existe como API (`kvNonceStore`) y como test (`TestReplicatedNonceRejectsCrossNodeReplay`, que lo invoca explícitamente), pero el binario que se desplegaría no lo usa. + +2. **N2 — fuga total del control plane vía `$JS.API.>` al activar el KV.** El grant ACL de cliente es `clientInfraSubjects = {"_INBOX.>", "$JS.API.>"}`. En cuanto el control plane descentralizado esté activo (los buckets `UNIBUS_users/rooms/members/room_keys` en JetStream KV — el objetivo central de 0003), `$JS.API.>` permite a **cualquier peer registrado** leer esos buckets directamente por NATS, **bypassando toda la autorización HTTP**. Demostrado: una identidad registrada, rol `member`, miembro de ninguna room, cosechó el allowlist completo (handles, roles, claves), el grafo de rooms (subjects, owners) y la metadata de sealed-keys de una room ajena. + +**Matiz honesto (importante para priorizar):** el binario **v0.7.0 todavía no activa el control plane descentralizado**. El store es **siempre SQLite** (`membership.Open` en `main.go:90`); el flag `decentralized` existe en `dev/feature_flags.json` pero **ningún código Go lo lee**; `OpenJetStream` solo lo consume el comando `migrate-to-kv`. En consecuencia: + +- Como **nodo único standalone** (`enforce` + TLS), unibus sigue tan seguro como tras el hardening 2 (report 0007): toda la regresión verde, `govulncheck` 0 alcanzables. **Eso sí es desplegable.** +- Como **cluster multi-nodo** (lo que 0003 persigue), **NO es seguro**: N3 es explotable de inmediato (cualquier cluster con el binario actual), y N2 se vuelve explotable en cuanto se complete el wiring del KV **o** simplemente se ejecute `migrate-to-kv` contra un nodo que sirva clientes bajo ACL (ese comando SÍ está cableado y crea+puebla los buckets). + +Como la pregunta es específicamente sobre el bus **descentralizado en cluster**, la respuesta es **NO — corregir N3 y N2 antes de 0003f.** + +--- + +## Hallazgos NUEVOS de la superficie 0003 + +| Sev | Vector | Descripción | Evidencia (comando + salida) | Fix | +|---|---|---|---|---| +| **ALTA** | N3 | El binario `membershipd` no llama `UseReplicatedNonces` ni siquiera con `--cluster-name`. Cada nodo usa `memNonceCache` por-proceso → un request firmado capturado se replaya con éxito a otro nodo del cluster (su cache nunca vio el nonce). El anti-replay multi-nodo es **nulo** en el binario desplegable. | Ataque efímero `TestAttack0008_N3` (2 `NewServer(...,AuthEnforce)` = wiring exacto del binario, sin `UseReplicatedNonces`): `node A first use -> 200 ; SAME ts+nonce replayed to node B -> 200`. | Cablear `UseReplicatedNonces(js, replicas)` en `main.go` cuando hay JetStream/cluster; fail-fast si el bucket no se crea. Idealmente: `--cluster-name != ""` ⇒ nonce replicado obligatorio. | +| **ALTA** | N2 | El grant ACL `$JS.API.>` (en `acl.go:20`, `clientInfraSubjects`) deja a cualquier peer registrado ejecutar la JetStream API y **leer los buckets KV del control plane** (`KV_UNIBUS_users`, `KV_UNIBUS_rooms`, `KV_UNIBUS_members`, `KV_UNIBUS_room_keys`) por NATS, saltándose `requireMember` y los chequeos own-endpoint del HTTP. Fuga del allowlist (handles+roles+claves), del grafo de rooms (subjects/owners) y de la metadata de sealed-keys (endpoint destino + existencia). El propio `TestReaudit_H4_WildcardMetadataLeak` documenta este residual y dice que se difirió a "la línea 0003" — pero **0003 no lo cerró**; con el KV escala de "fuga de metadata de subject" a "fuga del control plane entero". | Ataque efímero `TestAttack0008_N2` (poblar KV sin auth, rebootear el mismo store con la ACL de producción, eve `member` lee): `eve read UNIBUS_users[ceo] = handle="ceo-root-admin" role="admin" status="active"`; `eve read UNIBUS_rooms[PRIVROOM] subject="room.board.ma-deal" owner=... encrypt=true`; `eve read UNIBUS_room_keys[PRIVROOM..1]`. | NO conceder `$JS.API.>` entero. Derivar permisos JetStream mínimos por-room (API del stream/consumer de las rooms del peer) y **denegar** los streams `KV_UNIBUS_*`. Mejor aún: aislar el control plane KV en una NATS *account* separada inaccesible a clientes. Mientras tanto, **no** activar `decentralized: on` ni `migrate-to-kv` contra un nodo que sirva clientes con ACL. | +| **MEDIA** | N1 | **El cluster es tan seguro como su nodo más débil.** El data plane reenvía todos los subjects entre nodos; un nodo del cluster sin authenticator (o `--bus-auth off`) permite a un peer **no autenticado** `Subscribe(">")` y cosechar el tráfico reenviado de los nodos con ACL. Mitigado para el binario embedded en bind público por `validateBootConfig` (un bind no-loopback exige `enforce`), pero explotable si se usa NATS externo, un bind loopback que rutea, o un nodo mal configurado. | Ataque efímero `TestAttack0008_N1` escenario 2 (cluster 2 nodos ACL + 1 nodo `withACL=false`): `unauthenticated mallory on a no-auth cluster node harvested room-A traffic forwarded from the ACL'd node: "secret-A-2"`. | Forzar/documentar posture homogénea (enforce+ACL+TLS) en TODOS los nodos. Health/arranque que rechace formar cluster con un peer en posture inferior. Nunca exponer el puerto de cliente de un nodo sin enforce. | +| **MEDIA** | N4 | La ACL congela permisos al conectar; un peer que crea/se une a una room debe llamar `client.RefreshSession()` para poder pub/sub en su subject. **Ningún cliente del repo lo llama** (`cmd/chat`, `cmd/worker`, `mobile`, `gateway`): grep solo halla la definición y comentarios. El fallo es *fail-closed* (deniega, no abre), pero rompe la usabilidad bajo `enforce`+ACL, lo que empuja al operador a **desactivar la ACL** (volver a `NewNkeyAuthenticator` abierto) para que las apps funcionen → regresión de seguridad a discreción del operador. | `grep -rn RefreshSession --include="*.go" \| grep -v _test.go` → solo definición + comentarios; `cmd/worker/main.go` crea `room.ModeNATS` y publica sin refrescar. | Llamar `RefreshSession` tras cambios de membresía en todos los clientes, o implementar refresh transparente (rehacer suscripciones). Documentar el contrato como requisito de despliegue. | +| **MEDIA** | N3 | El bucket de nonces en **R1** es un SPOF de autenticación: si cae el nodo dueño del stream `KV_UNIBUS_nonces`, todo `Create` falla → el `kvNonceStore` (correctamente) hace *fail-closed* → **todos los requests autenticados se rechazan** (DoS de auth de todo el bus). Inherente a R1; se mitiga con R3 (quorum 2/3). | Análisis de `nonce_kv.go:67-77` (fail-closed) + `JetStreamConfig.Replicas` configurable; el rollout R1 del issue lo deja expuesto. | No vender R1 como "HA". Documentar que el control plane (incl. nonces) no tolera caída hasta R3. Considerar degradación controlada vs. DoS total. | +| **BAJA** | N1 | La CA de routes es **la misma** que la del data plane de clientes (`RouteTLSConfig` reusa la CA del 0001). Acopla dos fronteras de confianza: si algún día se emiten certs de cliente con esa CA, podrían presentarse al puerto de routes (el segundo factor sigue siendo el password de cluster). Además el password de cluster viaja en `--routes nats://user:pass@host` → visible en `ps`/`/proc//cmdline`/journald. | Lectura de `tls.go:55-75` (misma `pool` para RootCAs+ClientCAs) y `main.go:59` (password en argv). | CA separada para routes (o restricción por EKU/nombre). Pasar el secreto de cluster por archivo/env, no por argv. | +| **BAJA** | N6 | `migrate-to-kv` es idempotente (Put-overwrite) y hace backup (`VACUUM INTO`) — correcto. Pero **ejecutarlo contra un nodo enforce+ACL crea y puebla los buckets KV**, que quedan legibles por `$JS.API.>` (ver N2) aunque el control plane siga leyendo de SQLite. Y si `--nats-url` apunta a un nodo remoto sin `--ca`, el allowlist (handles/roles/sign pubs) viaja **plaintext** por NATS (los sealed-keys ya son ciphertext E2E). | Lectura de `migrate.go` + `main.go` (el comando conecta con `--nats-url`/`--ca`); ata con la evidencia N2. | Ejecutar `migrate-to-kv` solo en loopback o con TLS. No correrlo contra un nodo que sirva clientes con ACL hasta resolver N2. | + +### N5 (failover del cliente) — sin hallazgo de seguridad + +Al reconectar a otro nodo, el cliente **re-autentica**: `RefreshSession`/el reconnect automático de nats.go reusan `natsOpts` (incluyen `nats.Nkey` y `nats.Secure(TLS)`), así que el nuevo nodo re-ejecuta el handshake nkey + verifica firma sobre su propio nonce + `IsAuthorized` + (con ACL) deriva permisos **frescos de su store**. No hay ventana operando sin re-autenticar ni con permisos ACL viejos. Los caches preservados (`keyCache`/`signCache`) son las propias claves del peer — reusarlas no es inseguro. *Nota funcional (no de seguridad):* con SQLite por-nodo el estado del control plane diverge entre nodos, así que el failover de transporte funciona pero un nodo puede no conocer una room creada en otro — esa es la razón por la que el control plane KV (no cableado) es necesario. + +--- + +## Regresión — ¿0003 rompió algún fix de 0001/0004/0005? + +**No.** Todos los tests de auditoría/re-auditoría/gap previos siguen verdes y siguen **rechazando** sus ataques. Re-ejecución sobre `df3b62a`: + +``` +$ CGO_ENABLED=0 go test ./pkg/membership/ ./pkg/client/ -run \ + 'TestAudit_|TestGap_|TestReaudit_|TestReplicatedNonce|TestSubjectACL|TestRefreshSession|TestClientFailover' -v -count=1 +--- PASS: TestAudit_HorizontalMetadataLeak (autz por pertenencia, H3) +--- PASS: TestAudit_OwnerSpoof (owner binding, H6) +--- PASS: TestAudit_DoSBodyLimitNoAuth (body limit pre-auth) +--- PASS: TestAudit_NonceCachePoisonPreAuth (nonce poison: autorizar antes de cachear) +--- PASS: TestAudit_NoSubjectACL (confidencialidad de contenido E2E) +--- PASS: TestReaudit_DoSConcurrency (in-flight global cap, N2 del 0006) +--- PASS: TestReaudit_SigNilSpoof (sig-nil drop en rooms SignMsgs, N3 del 0006) +--- PASS: TestReaudit_H4_WildcardMetadataLeak (ACL confina Subscribe(">")) +--- PASS: TestReplicatedNonceRejectsCrossNodeReplay (la API KV cierra el replay — cuando se usa) +--- PASS: TestSubjectACLIsolation (aislamiento por subject single-node) +--- PASS: TestRefreshSessionGainsNewRoom (refresh re-deriva permisos) +--- PASS: TestClientFailoverAcrossNodes (failover transparente) +ok github.com/enmanuel/unibus/pkg/membership +ok github.com/enmanuel/unibus/pkg/client + +$ CGO_ENABLED=0 go test ./cmd/membershipd/ -run 'TestClusterConfigPolicy|TestSplitRoutes' -v +--- PASS: TestClusterConfigPolicy (8 sub-casos: rechaza cluster público sin secreto / sin TLS / TLS parcial) +--- PASS: TestSplitRoutes +``` + +Suite completa + toolchain: + +``` +$ CGO_ENABLED=0 go build ./... # OK +$ CGO_ENABLED=0 go vet ./... # limpio +$ CGO_ENABLED=0 go test -count=1 ./... +ok cmd/membershipd ; ok pkg/blobstore ; ok pkg/busauth +ok pkg/client ; ok pkg/embeddednats ; ok pkg/frame ; ok pkg/membership + +$ govulncheck ./... +=== Symbol Results === +No vulnerabilities found. +Your code is affected by 0 vulnerabilities. +(0 en paquetes importados; 13 en módulos requeridos pero NO alcanzables por el código) +``` + +`govulncheck`: **0 vulnerabilidades alcanzables**, confirmando lo que 0005a anotó (el bump de nats-server/nats.go/modernc sigue limpio en superficie alcanzable). + +--- + +## Confirmaciones — qué SÍ resiste (verificado, no asumido) + +- **N1 — auth de routes real y mutua.** Un nodo con el password de cluster incorrecto **no forma route** (`TestClusterRejectsBadRouteAuth`: impostor 0 routes, baseline del nodo legítimo intacto). Un nodo cuyo cert no está firmado por la CA del bus **no establece route en ninguna dirección** (`TestClusterRejectsUnsignedNode`, `RequireAndVerifyClientCert`). El listener de routes es un plano server-to-server distinto del de clientes; **no** reusa el authenticator nkey. `validateClusterConfig` rechaza arrancar un cluster en bind público sin secreto **y** sin TLS mutuo completo (8 sub-casos verdes). +- **N1.1 — la ACL aísla subjects CROSS-NODE** con posture homogénea. Ataque efímero (cluster 2 nodos ACL): `eve's cross-node sub to "room.cross.a" denied: Permissions Violation for Subscription`; alice publica en el nodo 0 y eve (nodo 1) **no recibe nada** — la ACL se aplica en el nodo de entrega antes del fan-out. +- **N2 — la ESCRITURA al KV está denegada.** La ACL no concede `$KV.>` para publicar; un peer no puede escribir los buckets ni escalar privilegios por esa vía. Verificado dos veces: el primer intento de seed bajo ACL falló con `Permissions Violation for Publish to "$KV.UNIBUS_users..."`, y el ataque N2 confirmó `eve KV Put rejected by ACL (good)`. **La fuga es solo de lectura** (grave igualmente), no de escritura. +- **N3 — la API de nonce replicado funciona cuando se usa.** `TestReplicatedNonceRejectsCrossNodeReplay` (que llama `UseReplicatedNonces` explícito) rechaza el replay cross-node (401). El `Create` atómico vía RAFT es linealizable (sin race de visibilidad inter-nodo). El handler valida skew → firma → allowlist **antes** de reclamar el nonce (`auth.go:189-238`), así que un atacante no autenticado **no** puede inundar el bucket de nonces (anti-DoS preservado). El problema es solo que el binario no la invoca (N3 arriba). +- **N5 — el failover re-autentica** (nkey+TLS) y deriva permisos frescos; sin ventana insegura. +- **N6 — migración** idempotente con backup consistente (`VACUUM INTO`); estado parcial recoverable. +- **Regresión completa** (auth firmada, anti-replay single-node, autz por pertenencia, DoS body+in-flight, fail-open guard, TLS forzado, sig-nil drop, nonce poison, owner spoof) verde + govulncheck limpio. + +--- + +## Recomendaciones priorizadas antes del deploy 0003f + +1. **[BLOQUEANTE] Cablear el nonce replicado en el binario.** En `membershipd`, cuando arranca con `--cluster-name` (o siempre que haya JetStream), llamar `srv.UseReplicatedNonces(js, replicas)` y **fail-fast** si el bucket no se crea. Sin esto, todo cluster tiene replay cross-node (N3). Test de no-regresión: replicar `TestAttack0008_N3` esperando 401 en el nodo B. +2. **[BLOQUEANTE antes de `decentralized: on`] Cerrar `$JS.API.>`.** Sustituir el grant amplio por permisos JetStream mínimos por-room (solo la API del stream/consumer de las rooms del peer) y **denegar explícitamente** los streams `KV_UNIBUS_*` (y `OBJ_*`). Opción robusta: mover el control plane KV a una NATS *account* separada, inaccesible desde la account de clientes. Hasta entonces, **no** activar `decentralized: on` y **no** correr `migrate-to-kv` contra un nodo que sirva clientes con ACL (N2/N6). +3. **[ALTA] Posture homogénea del cluster.** Garantizar (arranque/health) que todos los nodos corran `enforce`+ACL+TLS; un solo nodo débil exfiltra todo el data plane (N1.2). No exponer el puerto de cliente de ningún nodo sin enforce. +4. **[MEDIA] Completar el wiring del control plane KV** (selección de store + bootstrap del authenticator interno, el "ciclo bootstrap" pendiente) antes de afirmar HA del control plane; hoy es SQLite por-nodo → estado divergente (N5 nota). +5. **[MEDIA] RefreshSession en los clientes** (chat/worker/mobile/gateway) tras cambios de membresía, o refresh transparente; si no, la ACL es inutilizable y se desactivará (N4). +6. **[MEDIA] No vender R1 como HA.** El nonce/control plane en R1 es SPOF de auth; documentar y planificar R3 (N3 DoS). +7. **[BAJA] CA separada para routes** y secreto de cluster por archivo/env (no argv) (N1). +8. **[BAJA] `migrate-to-kv` solo en loopback o con TLS** (N6). + +--- + +## Gaps honestos de esta auditoría + +- **Todo in-process.** Varios `nats-server` embebidos en un proceso; sin 3 VPS reales. No se probó el **chaos test de red** del DoD del issue (matar 1/3, matar 2/3, partición/split-brain RAFT) — eso es 0003f y requiere despliegue real. El comportamiento de quorum se razonó, no se midió en red. +- **N2 modela el estado post-wiring.** El binario v0.7.0 no activa el control plane KV, así que el ataque N2 **simuló** el decentralized (poblar el KV sin auth y rebootear el store con la ACL de producción). La fuga es real a nivel API+ACL y se dispara en cuanto se cablee el KV **o** se corra `migrate-to-kv` en un nodo con ACL; no es explotable contra el binario tal cual mientras el store sea SQLite y no existan los buckets. +- **Object Store (blobs) no probado directo** vía `$JS.API.>`. Probable misma clase de fuga que N2 (los blobs son ciphertext E2E → impacto menor: metadata/tamaños), no verificado. +- **DoS por volumen del bucket de nonces** (millones de `Create` por tráfico autorizado legítimo) no medido bajo carga; solo se verificó que el atacante no-autenticado no lo alcanza. +- **`mobile`/`gateway`** no auditados para `RefreshSession` ni para reuso de sesión en failover. +- Los tests de ataque fueron **efímeros** (`pkg/membership/zzz_audit0008_attack_test.go`, creado/ejecutado/borrado); el working tree quedó en baseline (`git status --porcelain` vacío). Reproducir requiere recrearlos; sus cuerpos están descritos arriba. diff --git a/reports/0009-2026-06-07-unibus-cluster-hardening.md b/reports/0009-2026-06-07-unibus-cluster-hardening.md new file mode 100644 index 0000000..73b1653 --- /dev/null +++ b/reports/0009-2026-06-07-unibus-cluster-hardening.md @@ -0,0 +1,89 @@ +# Report 0009 — unibus: completar y endurecer el cluster (issue 0006, fases 0006a–0006g) + +- **Fecha:** 07/06/2026 +- **Autor:** agente (Claude Opus 4.8) +- **Ámbito:** `projects/message_bus/apps/unibus` (sub-repo `dataforge/unibus`), `master`. unibus 0.7.0 → **0.8.0**. +- **Estado:** done — 7 fases implementadas, mergeadas a master (merge `--no-ff` por fase), issue 0006 cerrado. +- **Origen:** issue `dev/issues/0006-cluster-hardening-and-wiring.md`, derivado de la auditoría report `0008-2026-06-07-unibus-decentralization-audit.md`. + +## Resumen + +La auditoría 0008 concluyó que el bus **en cluster** NO era seguro (2 bloqueantes) y que 0003 dejó el control plane descentralizado **sin cablear** (el binario seguía en SQLite single-store; el flag `decentralized` no lo leía nadie). Este trabajo cierra los dos bloqueantes (N3 replay cross-node, N2 fuga del control plane por `$JS.API.>`), cablea el store KV y el nonce replicado, fuerza posture homogénea (N1), hace usable la ACL bajo enforce (N4 RefreshSession), endurece los bajos (secreto fuera de argv, migrate guard, CA de routes separada, R1≠HA) y deja el material de deploy de los 3 nodos (magnus+homer+datardos) listo **sin tocar ningún VPS**. Branch-by-abstraction: con `--store sqlite` (default) el single-node es idéntico al baseline v0.7.0 y siempre desplegable. + +## Cambios por fase (cada fase = una rama `issue/0006x-*`, merge `--no-ff`) + +| Fase | Bloqueante / vector | Cambio | Archivos clave | +|---|---|---|---| +| **0006a** | N3 (BLOQUEANTE) — replay cross-node | El binario cablea el nonce KV replicado: `--cluster-name != ""` ⇒ `srv.UseReplicatedNonces(js, replicas)` obligatorio (fail-fast). Ciclo bootstrap resuelto con identidad interna efímera (`NewNkeyAuthenticatorACLInternal` + `fullPermissions`) y conexión in-process privilegiada. | `pkg/busauth/authenticator.go`, `cmd/membershipd/{internal_conn,wiring,main}.go` | +| **0006b** | N2 (BLOQUEANTE) — fuga del control plane | ACL pasa de `{_INBOX.>, $JS.API.>}` a allow-set **cerrado por-room**: JS API solo de los streams `UNIBUS_` del peer (`jsSubjectsFor`). `KV_UNIBUS_*`/`OBJ_*` quedan fuera del set → denegados. Clientes acceden a blobs por HTTP, no por NATS object store. | `pkg/membership/acl.go` | +| **0006c** | wiring KV (raíz) | Flag `--store kv\|sqlite` (default sqlite). `kv` abre `OpenJetStream` sobre la conexión interna; `storeHolder` fail-closed rompe el ciclo bootstrap del authenticator. | `cmd/membershipd/{store_holder,main}.go`, `dev/feature_flags.json` | +| **0006d** | N1 (ALTA) — posture | `validateClusterConfig` exige `enforce` si `--cluster-name != ""` (un nodo débil no se une). `/healthz` publica `Server.Posture` {enforce,acl,tls,cluster,store}. | `cmd/membershipd/config.go`, `pkg/membership/server.go` | +| **0006e** | N4 (MEDIA) — RefreshSession | `cmd/chat`, `cmd/worker`, `local_files/bridge` y `mobile` llaman `RefreshSession` tras cambios de membresía; contrato documentado para mobile/gateway. | `cmd/{chat,worker}/main.go`, `local_files/bridge/main.go`, `mobile/unibus.go` | +| **0006f** | bajos (N1/N6 + R1 doc) | Secreto de cluster fuera de argv (`--cluster-pass-file`/`UNIBUS_CLUSTER_PASS` + inyección de creds en routes); `migrate-to-kv` rechaza target remoto sin `--ca`; docs CA routes separada + R1 SPOF vs R3 HA. | `cmd/membershipd/{config,migrate_cli,main}.go`, `deploy/README.md` | +| **0006g** | material de deploy | `deploy/cluster/`: `generate-cluster-certs.sh` (CA de cluster separada + cert por nodo SAN público+WG+hostname), `membershipd-cluster.service` (unit parametrizada por `cluster.env`), `deploy-cluster.sh` (cross-build + rsync, dry-run por defecto), `README.md` runbook. NO toca VPS. | `deploy/cluster/*` | + +## Verificación (evidencia ejecutable) + +### Regresión de los ataques del report 0008 + tests de wiring nuevos + +``` +$ CGO_ENABLED=0 go test -count=1 -v -run 'TestAttack0008|TestInternalConn|TestStoreHolder|TestKVStore|TestHealthExposesPosture|TestClientCreateRoomRefreshPublishFlow|TestResolveClusterPass|TestInjectRouteCreds|TestIsLoopbackURL' ./cmd/membershipd/ ./pkg/membership/ +--- PASS: TestAttack0008_N3 (replay cross-node -> 401; wiring del binario) +--- PASS: TestAttack0008_N3_StandaloneKeepsLocalCache (single-node sin cluster: cache local OK) +--- PASS: TestAttack0008_N3_ClusteredRequiresJetStream (clustered sin JS -> fail-fast) +--- PASS: TestAttack0008_N1 (nodo clustered sin enforce -> rechazado) +--- PASS: TestAttack0008_N2 (eve no lee buckets KV; golden room JS OK) +--- PASS: TestInternalConnPrivilegedUnderEnforce (bootstrap: internal id full-perms bajo enforce) +--- PASS: TestInternalConnOutsiderRejected (outsider rechazado) +--- PASS: TestKVStoreBootstrapUnderEnforce (store KV autoriza clientes bajo enforce) +--- PASS: TestKVStoreDecentralizedConsistency (un nodo ve rooms creadas en otro) +--- PASS: TestStoreHolderFailClosed (holder vacío deniega; sirve tras set) +--- PASS: TestHealthExposesPosture (/healthz publica posture) +--- PASS: TestClientCreateRoomRefreshPublishFlow (create->refresh->sub->pub bajo enforce+ACL) +--- PASS: TestResolveClusterPass / TestInjectRouteCreds / TestIsLoopbackURL +ok github.com/enmanuel/unibus/cmd/membershipd +ok github.com/enmanuel/unibus/pkg/membership +``` + +### Suite completa + toolchain (master, HEAD tras los 7 merges) + +``` +$ CGO_ENABLED=0 go build ./... # OK +$ CGO_ENABLED=0 go vet ./... # limpio +$ CGO_ENABLED=0 go test -count=1 ./... +ok cmd/membershipd ; ok pkg/blobstore ; ok pkg/busauth ; ok pkg/client +ok pkg/embeddednats ; ok pkg/frame ; ok pkg/membership + +$ go run golang.org/x/vuln/cmd/govulncheck@latest ./... +No vulnerabilities found. +Your code is affected by 0 vulnerabilities. +(0 alcanzables; 13 en módulos requeridos pero no llamadas por el código) +``` + +Regresión de auditorías previas (0001/0004/0005 + reaudit) sigue verde — la corrida completa incluye `TestAudit_*`, `TestReaudit_*`, `TestReplicatedNonce*`, `TestSubjectACL*`, `TestClientFailover*`. `bash -n` de `deploy/cluster/{generate-cluster-certs,deploy-cluster}.sh` pasa. + +### DoD por bloqueante + +- **N3** → `TestAttack0008_N3`: replay del mismo `ts+nonce` al nodo B da **401** (antes 200+200). Edge single-node y fail-fast clustered cubiertos. +- **N2** → `TestAttack0008_N2`: eve (registrada, miembro de ninguna room) **no** puede bindear `KV_UNIBUS_users` ni subscribirse a `$KV.UNIBUS_users.>` (permissions violation); golden: el owner sigue manejando el stream JetStream de SU room. +- **N1** → `TestAttack0008_N1`: un nodo `--cluster-name` con `--bus-auth off` es **rechazado** en arranque; `/healthz` expone la posture para detectar un peer débil. + +## Gaps / pendientes (honesto) + +1. **Seed del primer admin en KV bajo enforce** — el `user` CLI escribe solo en SQLite, y bajo enforce ninguna herramienta externa puede escribir el primer admin al KV (chicken-and-egg de auth: para escribir hay que ser admin). El runbook documenta el procedimiento que **sí** funciona con el código actual: un *bootstrap loopback no-auth* (`--store kv --bus-auth off --bind 127.0.0.1`) + `migrate-to-kv` sobre el mismo store dir, luego arrancar la unit enforce. Mejora futura limpia: `membershipd user add --store kv`. Documentado en `deploy/cluster/README.md`. +2. **Chaos test de red real** (matar 1/3, 2/3, partición/split-brain RAFT) — requiere los 3 VPS; es 0003f. Aquí solo se razonó el quorum + se probó la consistencia in-process (dos stores, mismos buckets). +3. **Object Store (blobs) vía NATS** — los clientes acceden a blobs por HTTP, no por el object store NATS, así que `OBJ_UNIBUS_*` queda fuera del allow-set de clientes (cerrado por la misma regla que N2). No se añadió un test de ataque dedicado para OBJ (el cliente nunca lo toca por NATS); cubierto por construcción. +4. **External NATS + cluster** — el wiring del nonce/KV está plenamente probado para el server **embebido** (el target del deploy). Para `--nats-url` externo se conecta como cliente plano (`connectExternalJS`); la auth/posture del NATS externo es responsabilidad del operador (no validada aquí). +5. **R1 = SPOF de auth** — documentado, no "resuelto": R1 no es HA. La condición de HA real es R3 (quorum 2/3), que es un paso operativo (`nats stream update --replicas 3`) del runbook. + +## Veredicto — ¿el bus DESCENTRALIZADO es seguro para 0003f? + +**Sí, con condiciones.** Los dos bloqueantes del report 0008 (N3, N2) están cerrados y portados como regresión; el control plane descentralizado está cableado (`--store kv`) y es fail-closed; la posture homogénea se fuerza en arranque y se observa en `/healthz`; la ACL es usable bajo enforce sin desactivarla. Condiciones para el deploy 0003f: + +1. **3 nodos en R3** (magnus+homer+datardos) para HA real — arrancar en R1 y escalar a R3 en sitio antes de declarar HA (R1 es SPOF de auth). +2. **Posture homogénea** en los 3 nodos: `enforce` + per-subject ACL + TLS de datos + mutual route TLS. El binario rechaza unirse al cluster sin enforce; verificar `/healthz` de cada nodo. +3. **CA de routes separada** de la de clientes (la genera `deploy/cluster/generate-cluster-certs.sh`); secreto de cluster por archivo/env, nunca en argv. +4. **Seed del admin** por el procedimiento loopback-bootstrap del runbook; `migrate-to-kv` solo loopback/TLS. +5. Pendiente de validar en 0003f: el **chaos test de red** sobre los VPS reales (kill 1/3 tolera; kill 2/3 debe fail-closed, no fail-open). + +El **nodo único standalone** (`--store sqlite`, enforce+TLS) permanece seguro y desplegable en todo momento (branch-by-abstraction): este trabajo no lo altera. diff --git a/reports/0010-2026-06-07-unibus-android-native.md b/reports/0010-2026-06-07-unibus-android-native.md new file mode 100644 index 0000000..1b22bf8 --- /dev/null +++ b/reports/0010-2026-06-07-unibus-android-native.md @@ -0,0 +1,147 @@ +# Report 0010 — unibus app Android nativa (Compose + binding gomobile) + +- **Fecha:** 07/06/2026 +- **Autor:** Claude (agente Android) +- **Ámbito:** `projects/message_bus/apps/unibus` — binding `mobile/`, app `android/` +- **Estado:** done (mock primero, binding real cableado y listo para enchufar) +- **Rama:** `issue/android-native` (sub-repo `dataforge/unibus`), pusheada. NO mergeada a master. +- **Aislamiento:** todo el trabajo en worktree `/tmp/unibus_android`. Cero cambios en `~/fn_registry/.../apps/unibus` ni en el repo padre. + +## Resumen + +App Android nativa de unibus en Kotlin/Compose (Material 3, tema oscuro, acento +índigo/violeta) que replica el look & feel de la app web. Construida sobre un +binding gomobile rehecho que delega todo el cifrado de extremo a extremo en +`pkg/client` (el mismo que cualquier otro peer del bus). La iteración 1 corre +sobre datos mock para iterar el diseño; el repositorio real (binding) está +cableado y compilando detrás de la misma interfaz para enchufar el bus después. + +Las tres pantallas (Login, lista de rooms, chat estilo Element) se verificaron +en el emulador Pixel_API34: arrancan sin crash y son visualmente equivalentes a +la web. Capturas en `assets/`. + +## Cambios + +| Qué | Dónde | Por qué | +|---|---|---| +| Binding gomobile rehecho | `mobile/unibus.go` (package `mobile`) | Se borró en la limpieza de frontends; la app lo necesita. API plana sobre `pkg/client`. | +| Script de regeneración del .aar | `mobile/gen_aar.sh` | El `.aar` (38 MB) no se versiona; reproducible con un comando. | +| App Compose | `android/` (Gradle + Kotlin) | App nativa con E2E real en el dispositivo. | +| Capa de repositorio | `android/.../data/Repository.kt` + `BindingRepository.kt` | Aísla la UI; mock para diseño, binding para el bus real, misma interfaz. | +| Pantallas | `LoginScreen.kt`, `RoomListScreen.kt`, `ChatScreen.kt` | Réplica de `web/src` (Login.tsx, Sidebar.tsx, ChatPanel.tsx). | +| Tema | `ui/theme/Theme.kt` | Escala dark.* + brand índigo/violeta igual que el tema Mantine de la web. | +| go.work gitignored | `.gitignore` (raíz del sub-repo) | Resuelve el `replace fn-registry` con path absoluto desde el worktree, sin tocar `go.mod`. | + +### 1. Binding gomobile (`mobile/unibus.go`) + +Tipos planos gomobile-friendly (string/[]byte/int/bool/error/interfaces). No +reimplementa criptografía — cada método delega en `pkg/client`. API expuesta: + +- `GenerateIdentity(path)`, `NewSession(idPath, natsURL, ctrlURL, caPath)` → usa + `client.Connect` con la auth nueva (TLS pineado al CA + nkey si `caPath != ""`). +- `EndpointID`, `ConnectedServer`, `IsConnected`. +- `CreateRoom(subject, mode)`, `Join`, `RefreshSession` (contrato de membresía + issue 0006e: tras crear/unirse/invitar, `RefreshSession` antes de pub/sub). +- `Publish(text)`, `Subscribe(FrameListener)`, `ListRoomsJSON`. +- `Card`, `Invite`, `Kick`, `Request`, `Close`. + +`FrameListener` (interfaz implementada en Kotlin) documenta el contrato de hilo: +`OnFrame` llega en una goroutine de NATS, así que la implementación Kotlin salta +al hilo principal (`Handler(Looper.getMainLooper()).post { ... }`) antes de tocar +estado de Compose. + +Clases Java generadas: `com.unibus.core.mobile.{Mobile, Session, FrameListener}`. + +### 2. App Compose (`android/`) + +- Navegación por estado (KISS, sin lib de routing): Login → lista de rooms → chat. +- `AppViewModel` orquesta el estado observable; `UnibusRepository` desacopla la + fuente: `MockUnibusRepository` (en memoria, mock espejo de `mock.ts`) y + `BindingUnibusRepository` (sobre `unibus.aar`, cableado completo y compilando). +- Diseño: tokens de color `dark.6/7/8/9` + dimmed + brand `#6C47E6` vía + `LocalUnibusColors`; avatares con iniciales; candado/hash por política E2E; + badges de no leídos; chat estilo Element (avatar+nombre+hora+texto) + composer. + +## Verificación + +### Binding compila y .aar generado (sí) + +``` +$ go build ./mobile/ # con go.work (replace fn-registry absoluto) +BUILD_OK mobile + +$ gomobile bind -target=android -androidapi 21 -javapkg com.unibus.core \ + -o android/app/libs/unibus.aar ./mobile +# 26 s. Resultado: +android/app/libs/unibus.aar 38 MB +jni/{armeabi-v7a,arm64-v8a,x86,x86_64}/libgojni.so # 4 ABIs +classes.jar -> com/unibus/core/mobile/{Mobile,Session,FrameListener}.java +``` + +### APK compila (sí) + +``` +$ cd android && ./gradlew assembleDebug --no-daemon +BUILD SUCCESSFUL in 1m 9s +37 actionable tasks: 37 executed + +APK: android/app/build/outputs/apk/debug/app-debug.apk (53 MB) +package: com.unibus.app versionName=0.1.0 launchable-activity .MainActivity +ABIs empaquetadas: lib/{arm64-v8a,armeabi-v7a,x86,x86_64}/libgojni.so +``` + +Toolchain: AGP 8.5.2, Gradle 8.7, Kotlin 1.9.24, Compose BOM 2024.06.00, +compileSdk 34, minSdk 21 (= `-androidapi 21` del bind), Java 17. + +### Verificación visual en emulador (sí — sin crash) + +Instalado y lanzado en `emulator-5554` (Pixel_API34, KVM). `adb logcat` sin +`FATAL`/`AndroidRuntime`. Las 3 pantallas son equivalentes a la web: + +- `assets/unibus-android-login.png` — Login: candado de marca, "unibus", campos + Identidad/Contraseña, botón Conectar. +- `assets/unibus-android-rooms.png` — lista de rooms: avatar+handle, buscador, + candado/hash, hora, último mensaje, badges de no leídos (3, 1) en violeta. +- `assets/unibus-android-chat.png` — chat estilo Element: header con candado + + "cifrada · E2E", mensajes avatar+nombre+hora+texto (nombre propio en violeta), + composer redondeado + send. + +## Ruta del APK + +``` +/tmp/unibus_android/android/app/build/outputs/apk/debug/app-debug.apk +``` + +(Worktree efímero. El APK se regenera con `cd android && ./gradlew assembleDebug` +tras `./mobile/gen_aar.sh`.) + +## Gaps / pendientes + +- **El binding NO está conectado en la UI todavía** — por diseño (la tarea pedía + mock primero). Para activar el bus real: instanciar `BindingUnibusRepository` + en `MainActivity` con las URLs del bus y pasarlo a `AppViewModel`; las + pantallas no cambian. Falta UI de configuración del endpoint (natsURL/ctrlURL) + y de carga del `ca.crt` (hoy se espera en `assets/ca.crt`, opcional → plaintext). +- **`ListMembers` no existe en `pkg/client`** — se expone `ListRoomsJSON` + (vía `ListMyRooms`). Listar miembros requiere primero exponerlo en el cliente. +- **Password no desbloquea la identidad aún** — `LoadOrCreateIdentity` crea/lee + la clave directamente; el campo password es UI-only de momento. +- **Metadata de room en el binding es parcial** — `ListRoomsJSON` da + subject/encrypted/role/epoch; `lastMessage`/`unread`/`messages` los rellena hoy + el mock. Con el bus real habrá que derivarlos del stream + persistencia local. +- **`.aar` no versionado** (38 MB, regenerable) — reviewer debe correr + `./mobile/gen_aar.sh` antes de compilar. Requiere Go + gomobile + NDK. +- **Verificación solo en x86_64 (emulador)** — no probado en hardware ARM físico. +- **`go.work` local** — necesario solo al construir el binding desde un worktree + fuera del árbol del registry; en checkout normal el `replace` relativo resuelve. + +## Notas (onboarding) + +Para retomar: + +1. `./mobile/gen_aar.sh` regenera `android/app/libs/unibus.aar` (Go+gomobile+NDK). +2. `cd android && ./gradlew assembleDebug` → APK en `app/build/outputs/apk/debug/`. +3. Diseño en `android/app/src/main/java/com/unibus/app/ui/` (espejo de `web/src/`). +4. Para enchufar el bus real: cambiar el repo del `AppViewModel` de + `MockUnibusRepository` a `BindingUnibusRepository(context, natsURL, ctrlURL)`. + La interfaz `UnibusRepository` es el único punto de contacto UI↔datos. diff --git a/reports/0011-2026-06-07-unibus-cluster-deploy.md b/reports/0011-2026-06-07-unibus-cluster-deploy.md new file mode 100644 index 0000000..903714c --- /dev/null +++ b/reports/0011-2026-06-07-unibus-cluster-deploy.md @@ -0,0 +1,173 @@ +# Report 0011 — Despliegue del cluster unibus de 3 nodos (magnus + homer + datardos) + +- **Fecha:** 07/06/2026 +- **Autor:** agente (Claude) + operador +- **Ámbito:** `projects/message_bus/apps/unibus/` (sub-repo `dataforge/unibus`) — despliegue del bus como cluster HA de 3 nodos sobre VPS OVH. Issue 0006g. +- **Estado:** done — cluster en producción, R3 (HA real), posture enforce+ACL+TLS homogénea, chaos test de pérdida de 1 nodo superado. + +## Resumen + +unibus está desplegado como un **cluster de 3 nodos** (magnus, homer, datardos) con +replicación **R3** del plano de control (rooms/members/keys/users en JetStream KV + el +bucket de nonces anti-replay). La posture de seguridad es idéntica en los tres nodos +(`enforce` + per-subject ACL + TLS de datos + mutual-TLS de routes + `--store kv`), el +admin operador está sembrado en el KV replicado, y el cluster tolera la caída de +cualquier nodo (quórum 2/3). El material de deploy estaba preparado pero **nunca se había +probado contra VPS reales**; durante el despliegue se encontraron y corrigieron **tres +defectos de arranque en frío del cluster** que impedían la convergencia. + +## Topología real (Fase 0) + +| Nodo | SSH | IP pública | Rol | Notas | +|---|---|---|---|---| +| magnus | `magnus` (root) | 135.125.201.30 | seed / nodo | **= organic-machine.com = `om` = vps-3546abf9** | +| homer | `homer` (root) | 141.94.69.66 | nodo | vps-0db0572c | +| datardos | `dd` (root) | 51.91.100.142 | nodo | vps-ba7da64f | + +**Hallazgo crítico — identidad de magnus:** el prompt describía magnus como un VPS con +coolify + minio + postgres + authentik + portainer + dagu. La realidad: **magnus es el +mismo host que `organic-machine.com` / `om`** (confirmado por DNS → 135.125.201.30, por la +nota del entry `pass` `MAGNUS_ovh_ssh_-_ubuntu_organic-machine` → `ssh ubuntu@organic-machine.com`, +y por el label `"node":"magnus"` del fleet-agent). Tras la reinstalación de `om` del +06/06/2026, coolify fue removido; magnus hoy corre **caddy + grafana-fleet + +victoriametrics + docker(registry-api, gitea, gitea-postgresql) + fleet-agent** — es el +host crítico del ecosistema (Gitea de todos los sub-repos + registry-api + hub de +monitorización). El bus se desplegó **conviviendo** con todo eso, sin tocar ningún +servicio existente. + +**Acceso SSH:** los tres nodos exponen `PermitRootLogin without-password`. Se instaló la +clave pública del operador (`id_ed25519`) en `/root/.ssh/authorized_keys` de los tres vía +`sudo` (NOPASSWD disponible como `ubuntu`). Se creó el alias `magnus` en `~/.ssh/config`. + +**Puertos del bus libres (regla dura):** 8470 (HTTP), 4250 (NATS cliente), 6250 (routes) +estaban **LIBRES en los tres** antes de tocar nada; cero colisión con caddy(80/443), +gitea(3000/22222), registry-api(8420), VM(8428), grafana(3001). + +## Decisión WireGuard vs público + +El runbook prefiere `ROUTE_NETWORK=wg` (routes server-to-server por mesh WireGuard privado). +Se verificó con `wg show` que **NO existe mesh WireGuard entre los tres nodos del cluster**: +homer y datardos **ni siquiera tienen el binario `wg` instalado**, y los únicos peers WG de +magnus(om) son los PCs personales del operador (`home-wsl`, `windows-lucas`), no los VPS. +La "datardos-wg 10.21.0.x" mencionada en el issue 0006 no está montada. + +**Decisión (autorizada por el runbook): `ROUTE_NETWORK=public` + mutual-TLS.** Las routes +viajan por las IPs públicas pero están protegidas por la **CA de routes separada** (un cert +de cliente del plano de datos no puede presentarse en el puerto de routes). No se montó un +mesh WG a ciegas. Trade-off: el puerto 6250 escucha en la IP pública; en magnus (único nodo +con ufw activo) se restringió por ufw a las IPs de homer y datardos; en homer/datardos (ufw +inactivo, hosts Docker) el mutual-TLS de routes es la protección — activar un firewall desde +cero en hosts Docker en producción se evitó por riesgo de romper su networking y de lockout +SSH. + +## Cambios + +### Configuración de deploy (`deploy/cluster/`) +- `nodes.env`: rellenado con la topología real (IP de magnus, `ROUTE_NETWORK=public`, + `KV_REPLICAS=3`). Se limpió la sintaxis ``/`` de los **comentarios**, + que el guard `grep -q '<[A-Z_]\+>'` de los scripts interpretaba como placeholders sin + rellenar y abortaba (defecto del material: los comentarios mismos disparaban el guard). +- TLS: `generate-cluster-certs.sh` generó la CA de routes separada + cert de route y cert de + datos por nodo (SANs con IP pública + hostname). Secreto de route: `openssl rand -hex 32`. +- Secretos guardados en `pass`: `unibus/operator-identity` (clave privada del operador), + `unibus/operator-sign-pub` (hex), `unibus/cluster-route-secret`. Las claves TLS y el + `cluster.pass` quedan gitignored en `secrets/`+`out/`, nunca a git. + +### Fixes de código (mergeados a `master` del sub-repo unibus, vía TBD `--no-ff`) + +Tres defectos en la ruta de arranque en frío del cluster, ninguno visible en single-node +(donde JetStream está listo al instante): + +| # | Archivo | Defecto | Fix | +|---|---|---|---| +| 1 | `pkg/embeddednats/embeddednats.go` | El pooling de routes de nats-server 2.10 (pool de 3 por defecto) generaba churn de "duplicate route"/"client closed" en el cluster pequeño, interrumpiendo los heartbeats RAFT del meta-group → re-elecciones perpetuas de líder. | `Cluster.PoolSize = -1` (una route por par). | +| 2 | `pkg/embeddednats/embeddednats.go` | Los nodos son hosts Docker; NATS anunciaba las IPs de los bridges Docker (172.x / 10.0.x) a los peers, que intentaban conectar a esas IPs privadas inalcanzables → desestabilizaba el meta-group. | `Cluster.NoAdvertise = true` (solo las routes explícitas a IPs públicas). Más un toggle `UNIBUS_NATS_DEBUG` (off por defecto) que habilita el logger y el puerto de monitoreo del nats embebido para depurar. | +| 3 | `pkg/membership/jetstream_store.go` | Una op de KV es request/reply de NATS; en un cluster frío la op se publicaba una vez, antes de que el nodo tuviera contacto con el meta-leader, así que el request se descartaba (no se encola) y la única llamada con context largo se bloqueaba hasta el timeout. | Reintentar cada bucket con contexts cortos hasta éxito o agotar un budget de bootstrap (120s); aterriza en cuanto el meta-group converge. | + +Con los tres, el cluster forma limpio, crea los buckets KV, escala R1→R3 in-place y sobrevive +la pérdida de un nodo. + +## Verificación (evidencia ejecutable) + +### Fase 4 — posture homogénea + cluster formado +``` +$ for h in magnus homer dd; do curl -fsS https://127.0.0.1:8470/healthz --cacert ...; done +[magnus] {"posture":{"enforce":true,"acl":true,"tls":true,"cluster":true,"store":"kv"},"status":"ok"} +[homer] {"posture":{"enforce":true,"acl":true,"tls":true,"cluster":true,"store":"kv"},"status":"ok"} +[dd] {"posture":{"enforce":true,"acl":true,"tls":true,"cluster":true,"store":"kv"},"status":"ok"} + +/jsz: meta-leader=datardos, cluster_size=3, 6 streams creados, NRestarts=0 en los 3. +``` + +### Fase 5 — admin sembrado en el KV replicado +``` +$ membershipd user add --db seed.db --handle operator --sign-pub 48bc...73fa --role admin +$ membershipd migrate-to-kv --replicas 1 +migrated to KV: 0 rooms, 0 members, 0 keys, 1 users +$ /jsz KV_UNIBUS_users -> msgs=1 (admin presente en el cluster) +``` +(El seed se hace por el bootstrap loopback no-auth del runbook, antes de arrancar el cluster; +con los fixes y arranque escalonado magnus→homer→datardos, el cluster adopta el store seedeado +y converge.) + +### Fase 6 — escalado R1 → R3 in-place (HA real) +``` +Antes: cada bucket leader=magnus, 0 followers (R1, SPOF en magnus) +$ KV_REPLICAS=3 en los 3 cluster.env; restart rolling (homer primero) +Después: cada uno de los 6 buckets leader=magnus, followers_current=2/2 (R3, quórum 2/3) +``` + +### Fase 7 — chaos test (pérdida de 1 nodo) +``` +$ systemctl stop membershipd-cluster (magnus, líder de los 6 streams) -> magnus DOWN +[homer] healthz ok [dd] healthz ok +meta-leader re-electo: homer (era datardos), meta_size=3 +los 6 streams re-eligieron líder a homer automáticamente, sirviendo con quórum 2/3 +KV operativo degradado: KV_UNIBUS_users accesible, admin msgs=1 +$ systemctl start membershipd-cluster (magnus) -> rejoin +los 6 streams: followers_current=2/2 (magnus re-sincronizó como follower R3) +``` +No se mataron 2 nodos (sería pérdida de quórum esperada, fuera de scope). + +### Sanity — servicios existentes de magnus intactos +``` +caddy/grafana-fleet/victoriametrics/fleet-agent = active +docker: registry-api, gitea, gitea-postgresql corriendo; gitea HTTP=200 +puertos 80/443/3000/3001/8420/8428 (existentes) + 4250/6250/8470 (bus) coexisten +``` + +### Producción limpia +- `UNIBUS_NATS_DEBUG` retirado de los 3 `cluster.env`; rolling restart; puerto de monitoreo + 8222 cerrado; los 3 healthz OK. +- ufw de magnus: añadidas (aditivas, sin tocar reglas existentes) `8470/tcp`, `4250/tcp` + públicas y `6250/tcp` restringido a homer+datardos. +- `go vet` + `go test ./pkg/embeddednats/ ./pkg/membership/` → ambos `ok`. + +## Gaps / pendientes + +- **Push a Gitea pendiente:** los 2 commits de fix están en `master` local del sub-repo + `unibus`, **no pusheados**. El operador debe `git push` (o `/full-git-push`). +- **Seed del admin en cluster corriendo (GAP del report 0009):** no existe `user add --store + kv`; añadir usuarios requiere el bootstrap loopback con el cluster parado. Para sembrar el + admin hubo que limpiar stores, seedear en magnus standalone y arrancar el cluster (orden + escalonado magnus→homer→datardos). Mientras no exista una vía de alta de usuarios al KV con + el cluster vivo, cada alta requiere ese procedimiento. Recomendación: implementar `user add + --store kv` que use la conexión interna privilegiada. +- **Verificación de cliente end-to-end no ejecutada:** el chaos test validó el plano de + control (healthz + failover de meta/stream leaders + KV legible con 2/3), pero no se conectó + un cliente del bus autenticado (nkey+TLS) a crear/publicar en una room durante el corte. + Queda como verificación complementaria con la identidad `operator` (en `pass`). +- **R1 fue inservible en este cluster:** el rollout R1→R3 del runbook asume que R1 funciona + primero; en la práctica R1 dejaba los 6 buckets en un único nodo (SPOF) y, sobre todo, el + arranque solo convergió tras los 3 fixes. El despliegue saltó directo a R3 una vez formado. +- **Orden de arranque del runbook:** el runbook indica arrancar "magnus solo y verificar + healthz" antes de los demás; con `--cluster-name` de 3 un nodo solo no tiene quórum del + meta-group, así que magnus solo nunca sirve healthz hasta que se une un segundo nodo. El + arranque correcto es simultáneo (cluster limpio) o escalonado con el retry loop que tolera + la espera de quórum. Conviene corregir esa instrucción del README. + +--- + +**Gaps cerrados en report 0012** (`0012-2026-06-07-unibus-deploy-gaps-closed.md`): GAP A +`user add --store kv` (alta al KV con el cluster vivo), GAP B verificación cliente end-to-end +real + failover (`cmd/clientcheck`), GAP C runbook corregido. Verificado contra los 3 VPS. diff --git a/reports/0012-2026-06-07-unibus-deploy-gaps-closed.md b/reports/0012-2026-06-07-unibus-deploy-gaps-closed.md new file mode 100644 index 0000000..c9901de --- /dev/null +++ b/reports/0012-2026-06-07-unibus-deploy-gaps-closed.md @@ -0,0 +1,180 @@ +# Report 0012 — Cierre de los gaps del despliegue del cluster unibus (report 0011) + +- **Fecha:** 07/06/2026 +- **Autor:** agente (Claude) +- **Ámbito:** `projects/message_bus/apps/unibus/` (sub-repo `dataforge/unibus`) — cierre de los gaps que el despliegue del cluster de 3 nodos (report 0011) dejó abiertos. Rama `quick/0011-deploy-gaps` (worktree `/tmp/unibus_gaps`, basada en master). +- **Estado:** done — GAP A y GAP B cerrados con evidencia ejecutable contra el cluster VIVO (magnus + homer + datardos, R3); GAP C (runbook) corregido. Pendiente menor: rollout del binario nuevo a magnus+homer (documentado, sin urgencia — la capability está probada y desplegada en datardos). + +## Resumen + +El report 0011 dejó tres gaps. Este trabajo los cierra: (A) `membershipd user add|list|revoke --store kv` añade usuarios al KV replicado con el cluster en marcha vía la conexión interna privilegiada — sin parar-sembrar-rearrancar; (B) `cmd/clientcheck` es la verificación end-to-end real del plano de datos (cliente autenticado nkey+TLS, room E2E, publish/subscribe, incluido failover con un nodo caído) que el chaos test del 0011 nunca ejecutó; (C) el runbook `deploy/cluster/README.md` queda corregido (orden de arranque, R1 inservible, nueva vía de alta). Todo verificado contra los 3 VPS reales con la posture enforce+ACL+TLS+R3 intacta. `app.md` sube 0.8.0 → 0.9.0. + +## Cambios + +| Archivo | Qué | Por qué | +|---|---|---| +| `pkg/client/identity.go` | `LoadIdentity` (load-only) extraída de `LoadOrCreateIdentity` | La CLI `--store kv` y el daemon cargan la identidad de servicio persistida; se preserva el guard "archivo corrupto = error, no se regenera". | +| `cmd/membershipd/main.go` | flag `--internal-id-file` | Persiste la identidad interna privilegiada (load-or-create, 0600) en vez de efímera, para que la misma nkey esté disponible fuera de proceso. Vacío = efímero (default dev/single-node sin cambios). | +| `cmd/membershipd/users_kv.go` | `connectKVStore` + `reportKVReplication` (nuevo) | Conexión privilegiada al NATS del cluster con la identidad interna; abre el store KV y escribe. Rechaza remoto sin `--ca`. Imprime `followers_current` tras escribir. | +| `cmd/membershipd/users_cli.go` | `--store kv` en `add`/`list`/`revoke` + idempotencia explícita | Alta/baja contra el KV vivo. Re-alta de la misma clave = `ErrUserExists` (sin sobrescribir ni elevar rol). | +| `cmd/membershipd/kv_useradd_test.go` (nuevo) | tests de integración GAP A | Golden bajo enforce, idempotencia, endpoint muerto, remoto-sin-CA. | +| `cmd/clientcheck/` (nuevo) | comando de verificación E2E reutilizable | GAP B: cliente real, room E2E, golden + loop (failover). | +| `deploy/cluster/README.md` | runbook corregido | GAP C: arranque por quórum, R1 SPOF→R3, vía de alta live, topología real. | +| `deploy/cluster/membershipd-cluster.service`, `deploy-cluster.sh` | `--internal-id-file ${INTERNAL_ID_FILE}` + `INTERNAL_ID_FILE` en cluster.env | Para que un deploy fresco habilite la vía de alta live en todos los nodos. | +| `app.md` | 0.8.0 → 0.9.0 + growth log | Nueva capability. | + +### Mecanismo de la conexión privilegiada (GAP A) — diseño y porqué + +Bajo `enforce` la ACL por-subject confina a cada usuario del bus a la JetStream API de SUS rooms; ninguna identidad de usuario normal puede tocar los buckets `KV_UNIBUS_*`. La única identidad a la que el autenticador concede permisos plenos de JetStream es la **identidad de servicio interna** de `membershipd` (la que ya rompe el ciclo bootstrap del nonce/KV). Esa identidad era **efímera por proceso**, así que ningún proceso externo podía presentarla. + +Solución elegida (la más simple y segura de las opciones del prompt — "creds del propio servicio" + "ejecución por loopback en un nodo"): el daemon **persiste** su identidad de servicio en `--internal-id-file` (cada nodo genera/carga la suya, `0600`, junto a las claves TLS del nodo). La CLI `user add --store kv`, ejecutada **por loopback en el nodo** (el SAN del cert data-plane cubre `127.0.0.1`), carga ese mismo archivo y presenta la nkey que el autenticador del nodo reconoce con permisos plenos → abre `OpenJetStream` y escribe el bucket `KV_UNIBUS_users` replicado. + +Seguridad (no baja la posture): leer el archivo de identidad exige **root en el nodo**, lo que ya implica control total de ese nodo (la clave TLS del servidor y el `cluster.pass` ya están ahí). Co-ubicarlo no añade exposición práctica. La posture publicada en `/healthz` (enforce+acl+tls+cluster+store=kv) es idéntica con o sin el flag. Cambio respecto a 0011: la identidad interna pasa de efímera a durable (rotable borrando el archivo + reinicio); documentado. + +## Verificación + +> Secretos redactados: clave privada del operador, su `endpoint` derivado, el hex del operador (`48bc…`) y los de usuarios de prueba se muestran truncados. Nota de build: el worktree vive en `/tmp`, donde el `replace fn-registry => ../../../../` de `go.mod` no resuelve; se usó un `go.work` fuera del árbol (`GOWORK=/tmp/unibus_gaps.work`, NO commiteado) solo para compilar. El checkout canónico bajo `~/fn_registry/.../unibus` no lo necesita. + +### Mecánica — vet + build + test (CGO_ENABLED=0) + +``` +$ CGO_ENABLED=0 go vet ./... -> rc=0 +$ CGO_ENABLED=0 go build ./... -> rc=0 +$ CGO_ENABLED=0 go test ./pkg/membership/ ./cmd/... +ok github.com/enmanuel/unibus/pkg/membership 8.455s +? github.com/enmanuel/unibus/cmd/chat [no test files] +? github.com/enmanuel/unibus/cmd/clientcheck [no test files] +ok github.com/enmanuel/unibus/cmd/membershipd 0.413s +? github.com/enmanuel/unibus/cmd/worker [no test files] + +$ CGO_ENABLED=0 go test ./... (suite completa) +ok github.com/enmanuel/unibus/cmd/membershipd 0.370s +ok github.com/enmanuel/unibus/pkg/blobstore 0.091s +ok github.com/enmanuel/unibus/pkg/busauth 0.007s +ok github.com/enmanuel/unibus/pkg/client 6.168s +ok github.com/enmanuel/unibus/pkg/embeddednats 5.894s +ok github.com/enmanuel/unibus/pkg/frame 0.002s +ok github.com/enmanuel/unibus/pkg/membership 8.383s +``` + +Tests de integración GAP A (nodo enforce embebido, identidad de archivo): +``` +$ go test ./cmd/membershipd/ -run TestUserAddStoreKV -count=1 +ok github.com/enmanuel/unibus/cmd/membershipd 0.050s + TestUserAddStoreKV_GoldenAndIdempotent (escribe bajo enforce + ErrUserExists sin sobrescribir) + TestUserAddStoreKV_RequiresInternalIdentity (sin id file / id ausente -> error) + TestUserAddStoreKV_UnreachableKV (endpoint muerto -> error envuelto) + TestUserAddStoreKV_RemoteWithoutCARefused (remoto sin --ca -> rechazado) +``` + +### GAP A — `user add --store kv` contra el cluster VIVO + +Despliegue de verificación: binario nuevo + `--internal-id-file` a **datardos** (nodo no-crítico) con backups reversibles; arranca con identidad persistida, posture intacta, reincorporado a R3: +``` +$ ssh dd ... (restart con binario nuevo) +internal service identity: persisted (/opt/unibus/secrets/internal.id) # 0600 root +healthz: {"posture":{"enforce":true,"acl":true,"tls":true,"cluster":true,"store":"kv"},"status":"ok"} +``` + +**Golden** (alta nueva, replicada R3): +``` +$ ssh dd 'sudo /opt/unibus/membershipd user add --store kv --handle gapcheck_user --role member --sign-pub a58b…5622' +added user "gapcheck_user" (a58b…5622) role=member +KV_UNIBUS_users: leader=homer followers_current=2/2 msgs=2 <-- replicado a los 2 followers +``` + +**Lectura replicada** (`user list --store kv` en datardos lee el KV replicado): +``` +HANDLE ROLE STATUS SIGN_PUB CREATED +gapcheck_user member active a58b…5622 2026-06-07T17:33:00Z +operator admin active 48bc… 2026-06-07T16:48:12Z +``` + +**Edge 1 — idempotencia** (re-alta de la misma clave, y misma clave con otro rol): +``` +$ ssh dd 'sudo .../membershipd user add --store kv --handle gapcheck_user --role member --sign-pub a58b…5622' +membershipd user add: user a58b…5622 already registered (unchanged); revoke it first to replace (exit 1) +$ ssh dd 'sudo .../membershipd user add --store kv --handle impostor --role admin --sign-pub a58b…5622' +membershipd user add: user a58b…5622 already registered (unchanged); revoke it first to replace (exit 1) + -> NO se sobrescribe ni se eleva a admin (sin escalado de privilegios vía re-alta). +``` + +**Edge 2 — alta con un nodo caído (quórum 2/3)**. Se para homer (líder del stream); el stream re-elige líder a datardos y el alta commitea: +``` +>>> STOP homer (líder de KV_UNIBUS_users) — quedan datardos+magnus = quórum 2/3 +homer is-active=inactive +$ ssh dd 'sudo .../membershipd user add --store kv --handle gapcheck_user2 --role member --sign-pub e560…4bf4' +added user "gapcheck_user2" (e560…4bf4) role=member +KV_UNIBUS_users: leader=datardos followers_current=1/2 msgs=3 <-- líder failover homer->datardos; commit con quórum +>>> START homer (rejoin) -> is-active=active ; healthz 3/3 ; user list muestra los 3 usuarios +``` + +**Error 1 — KV inalcanzable** (puerto muerto): +``` +$ ssh dd 'sudo .../membershipd user add --store kv --nats-url nats://127.0.0.1:4999 --handle x --sign-pub a58b…5622' +membershipd user add: --store kv: connect cluster NATS "nats://127.0.0.1:4999": nats: no servers available for connection (exit 1) +``` + +**Limpieza** (revoke de los 2 usuarios de prueba — `revoke` es flip de status, no hay hard-delete en KV): +``` +$ ssh dd 'sudo .../membershipd user revoke --store kv a58b…5622' -> revoked user a58b…5622 +$ ssh dd 'sudo .../membershipd user revoke --store kv e560…4bf4' -> revoked user e560…4bf4 +$ user list --store kv: + gapcheck_user member revoked a58b…5622 + gapcheck_user2 member revoked e560…4bf4 + operator admin active 48bc… +``` + +### GAP B — verificación cliente END-TO-END real + +**Golden E2E** (identidad operator de `pass`, CA por path, nkey+TLS+https a los 3 nodos, room E2E efímera, 5 msgs): +``` +$ clientcheck --ca ca.crt --identity-file \ + --nats-seeds nats://magnus,homer,datardos:4250 --ctrl-seeds https://...:8470 --messages 5 +connected: endpoint= nats=nats://51.91.100.142:4250 +created E2E room: id=01KTHHXA… subject=test.gapcheck.968e58c37a2d3d81 (encrypt=true sign=true persist=false) +published 5 messages; waiting for decrypted echoes... +GOLDEN OK: all 5 messages received and decrypted end-to-end +``` + +**Edge E2E — failover con cliente conectado**. Loop publish/subscribe 1/s mientras se para el nodo atado (datardos): +``` +loop: publishing every 1s for 1m0s — stop a node now to test failover + t= 7s sent=7 recv=6 up=true node=nats://51.91.100.142:4250 publish=ok <-- atado a datardos +>>> 19:29:07 STOP datardos (nodo atado) + t= 8s sent=8 recv=7 up=true node=nats://135.125.201.30:4250 publish=ok <-- FAILOVER a magnus, sin perder mensaje + … +>>> 19:29:29 START datardos (rejoin) + … +loop done: sent=56 received=56 <-- CERO pérdida a través del corte + attached to nats://135.125.201.30:4250 for 49 ticks + attached to nats://51.91.100.142:4250 for 7 ticks +FAILOVER OBSERVED: client was attached to 2 distinct nodes across the run +LOOP OK: client kept receiving across the run (received=56) +``` +Cluster sano 3/3 tras el corte (datardos reincorporado a R3). + +### GAP C — runbook corregido + +`deploy/cluster/README.md`: +- **Arranque** (corregido): "arrancar magnus solo y verificar healthz" deadlockea — un nodo solo de un cluster de 3 no tiene quórum del meta-group RAFT y JetStream nunca queda current, así que `--store kv` no crea los buckets y `/healthz` no devuelve ok hasta que se une un segundo nodo. Se documenta el arranque que forma quórum (los 3 cerca, el orden da igual) o escalonado apoyado en el retry loop de 120s; un nodo solo NUNCA se auto-sirve, así que no se debe condicionar el arranque del siguiente al healthz del anterior. Se nombran los 3 fixes de cold-start del 0011. +- **R1 inservible** (corregido): a R1 los 6 buckets viven en un solo nodo (SPOF de autenticación); el cold start solo converge con los 3 fixes; ir directo a R3 una vez formado el cluster. R1 es artefacto transitorio, no hito. +- **Vía de alta con cluster vivo**: nueva sección documentando `user add --store kv` (mecanismo, idempotencia, HA, sin hard-delete) que sustituye parar-sembrar-rearrancar. +- **Topología real**: IPs reales, `ROUTE_NETWORK=public` (no hay mesh WireGuard), magnus = host crítico convivido. + +## Gaps / pendientes + +- **Rollout del binario nuevo a magnus + homer**: la verificación live de GAP A desplegó el binario `0.9.0` + `--internal-id-file` solo en **datardos** (nodo no-crítico). magnus y homer siguen con el binario 0011. La capability de alta está probada y disponible desde datardos; la escritura replica R3 a los otros dos. Estado mixto seguro a nivel de protocolo (cambios aditivos/node-local, posture idéntica). Para uniformidad + redundancia de la capability, rodar el binario a homer y magnus (comandos exactos en el README, con backups y healthz entre nodos). Se dejó como decisión del operador por tocar el host crítico magnus y por haber dos agentes vivos en el sub-repo; no es urgente. +- **Sin hard-delete de usuarios en KV**: `revoke` deja la fila en estado `revoked` (denegada en ambos planos, auditable); el KV no borra filas, igual que el store SQLite. Los dos `gapcheck_user*` de prueba quedan revocados (inertes; sus claves privadas eran aleatorias y descartadas). No se inventó un delete a medias (regla del prompt). +- **Sin borrado de la room de prueba (GAP B)**: el control plane no expone borrado de rooms (no hay endpoint ni `DeleteRoom` en el store). Las rooms `test.gapcheck.` creadas (efímeras, E2E, solo el operator como miembro, subject aleatorio) quedan como filas en `KV_UNIBUS_rooms`/members (inocuas, sin tráfico). Documentado; no se inventó un delete. +- **kill-2/3 (pérdida de quórum)**: fuera de scope (esperado fail-closed); el runbook lo deja como paso manual. +- **Push a Gitea del 0011**: sigue pendiente del operador (gap heredado del 0011, ajeno a este trabajo). Esta rama `quick/0011-deploy-gaps` se pushea a `origin` para revisión; NO se mergea a master (lo revisa el operador). + +## Commits (rama `quick/0011-deploy-gaps`) + +``` +e1a7402 chore: bump unibus to 0.9.0 (live user-add + clientcheck) +ce72131 docs(cluster): correct runbook + wire --internal-id-file into deploy +3aa5a2c feat(clientcheck): end-to-end client verification (E2E room + failover) +02c2004 feat(membershipd): user add/list/revoke --store kv against a live cluster +``` diff --git a/reports/0013-2026-06-07-unibus-admin-panel.md b/reports/0013-2026-06-07-unibus-admin-panel.md new file mode 100644 index 0000000..f568bcf --- /dev/null +++ b/reports/0013-2026-06-07-unibus-admin-panel.md @@ -0,0 +1,158 @@ +# Report 0013 — unibus_admin: panel web de administración + +- **Fecha:** 07/06/2026 +- **Autor:** agente (Claude) +- **Ámbito:** app nueva `projects/message_bus/apps/unibus_admin` (sub-repo Gitea `dataforge/unibus_admin`), desplegada en magnus +- **Estado:** done + +## Resumen + +Panel web de administración del bus `unibus`: un único binario Go que sirve una SPA +Mantine embebida (`embed.FS`) y expone una REST API. El binario tiene la identidad +ADMIN del operador y media cada acción contra el plano de control del bus firmando +las peticiones; el navegador nunca firma, nunca habla NATS ni ve una clave privada. +Tres capacidades: **Cluster** (salud + posture de los 3 nodos), **Rooms** (listar, +crear, ver miembros, invitar, expulsar+rekey) y **Users** (allowlist del bus). +Verificado end-to-end contra el cluster vivo (magnus+homer+datardos, enforce+TLS+KV) +y desplegado en magnus tras Caddy con basic auth en un subdominio ofuscado. + +## Arquitectura + +``` +navegador (SPA Mantine, dark/índigo) + │ fetch /api/* — basic auth de Caddy + bind loopback (doble barrera) + ▼ +unibus_admin (gateway Go) — identidad ADMIN del operador + ├── pkg/client (unibus) CreateRoom / Invite / Kick / ListMyRooms (firma + cripto E2E) + ├── GET firmado a mano /rooms/{id}/members (membership.CanonicalRequest + cs.SignEd25519) + ├── GET /healthz CA-pinned posture de cada nodo del cluster + └── membership.Store (opc.) users (sólo con --db / acceso KV) + ▼ +cluster unibus (magnus + homer + datardos, --store kv --kv-replicas 3, enforce+ACL+TLS) +``` + +Decisión clave: el gateway **reutiliza el cliente del bus** para todo lo que lleva +criptografía (sellar la clave de room en create/invite, rotar en rekey) y construye +GETs firmados con la **única fuente de verdad** de la firma del bus +(`membership.CanonicalRequest` + `cs.SignEd25519`, ambos exportados) para las lecturas +que el cliente no expone (lista de miembros). No reimplementa firma ni cripto. La +identidad se carga de `pass unibus/operator-identity` (dev) o de un fichero 0600 +(`--identity-file`, producción). El TLS se ancla a la CA del bus (`busauth.LoadCATLSConfig`). + +Capa de repositorio (`internal/admin/Repo`): dos implementaciones —`busRepo` (real) y +`mockRepo` (`--mock`)— detrás de los mismos handlers REST, así la SPA tiene un único +camino de código para mock y real. + +## Cambios / artefactos creados + +| Artefacto | Qué | +|---|---| +| `main.go`, `embed.go` | flags, carga de identidad, wiring, embed de `web/dist` | +| `internal/admin/repo.go` | interface `Repo` + tipos wire (RoomView, MemberView, UserView, NodeHealth, Posture) | +| `internal/admin/repo_bus.go` | impl real: rooms (client), members (GET firmado), cluster (healthz CA-pinned), users (Store) | +| `internal/admin/repo_mock.go` | datos de muestra para iterar la UI | +| `internal/admin/server.go` | REST `/api/*` + servidor de la SPA embebida (fallback SPA) | +| `internal/admin/identity.go` | carga de la identidad del operador desde `pass` o fichero 0600 | +| `web/` | SPA React 19 + Vite 6 + Mantine v9 (dark/índigo): AdminShell + ClusterPage + RoomsPage + UsersPage + api.ts | +| `app.md`, `deploy/unibus-admin.service`, `deploy/README.md` | registro + artefactos de deploy | + +Repo Gitea: `dataforge/unibus_admin` (master, 3 commits). `git init -b master` dentro del +sub-repo se hizo inmediatamente tras el scaffold (apps/* gitignored en el padre). + +## REST API del gateway + +`GET /api/me` · `GET /api/cluster` · `GET /api/rooms` · `POST /api/rooms` · +`GET /api/rooms/{id}/members` · `POST /api/rooms/{id}/invite` · +`POST /api/rooms/{id}/kick` · `GET /api/users` · `POST /api/users` · +`POST /api/users/revoke` · `GET /healthz`. + +## Verificación (evidencia ejecutable) + +### Build (verde) + +``` +$ CGO_ENABLED=0 go build ./... # exit 0 +$ CGO_ENABLED=0 go vet ./... # exit 0 +$ cd web && pnpm build # tsc -b && vite build → dist/ (485 KB JS, 222 KB CSS) +$ CGO_ENABLED=0 GOOS=linux go build # ELF estático 18.9 MB +``` + +### Golden path — membershipd local, posture auth-off (sqlite) + +``` +POST /api/rooms {"subject":"ops.deploy","encrypt":true,...} → 201 {"room_id":"01KTHJF18N...","role":"owner"} +GET /api/rooms → [ops.deploy epoch 1 owner] (ListMyRooms vía client) +GET /api/rooms/{id}/members → [{endpoint:vI8HX..., role:owner, sign_pub, kex_pub}] (GET firmado) +POST /api/users {ana,...} → 201 added ; GET /api/users → operator+ana active +POST /api/users/revoke {ana} → 200 ; GET /api/users → ana=revoked +GET /api/cluster → magnus up, posture store:sqlite +``` + +### Error path + posture de PRODUCCIÓN — membershipd local enforce + TLS + nkey + +``` +GET /api/me → endpoint del operador derivado de la identidad cargada de pass +GET /api/cluster → magnus up, posture {enforce:true, acl:true, tls:true} (healthz https) +GET /api/rooms → 200 (ListMyRooms): exige conexión nkey+TLS y petición FIRMADA verificada bajo enforce +GET /api/rooms/{id}/members → 200 (GET firmado verificado bajo enforce) +POST /api/rooms (E2E) → 201 (firma + clave sellada) +GET /api/rooms/01XXXXNOEXISTE/members → 403 {"error":"forbidden: not a member of this room"} ← error path +``` + +### Contra el CLUSTER VIVO (magnus público, internet) + +``` +GET /api/cluster → magnus UP posture{enforce,acl,tls,cluster,store:kv} (86 ms) +GET /api/rooms → 3 rooms reales del operador (test.gapcheck.*) ← operador allowlisted en el cluster KV +``` + +### Despliegue en magnus (verificado en el host y por URL pública) + +``` +ssh magnus systemctl is-active unibus-admin.service → active +ssh magnus curl 127.0.0.1:8480/api/cluster + → [magnus UP 3ms, homer UP 39ms, datardos UP 7ms] los 3 nodos, posture enforce+acl+tls+cluster+kv + +# URL pública (subdominio ofuscado + basic auth de Caddy): +curl https://admin-.organic-machine.com/healthz → 401 (sin auth) +curl -u admin:*** https://admin-.../healthz → {"status":"ok"} +curl -u admin:*** https://admin-.../api/cluster → 3 nodos UP +``` + +### Visual (browser MCP) + +- Local mock: las 3 pestañas renderizan (Cluster 2/3 con datardos DOWN; Rooms 4 salas + con badges E2E/cleartext, epoch, rol, modal crear + drawer miembros; Users 4 con + ADMIN/MEMBER/REVOKED y revoke sólo en activos). +- URL pública desplegada: SPA renderiza la pestaña Cluster con **3/3 UP** reales + (magnus 0ms, homer 12ms, datardos 7ms) y el endpoint del operador, sin badge MOCK. + +## Estado del deploy en magnus + +- `unibus-admin.service` (systemd system, `Restart=always`), binario en + `/opt/unibus_admin/unibus_admin`, identidad 0600 en `/opt/unibus_admin/identity.json`. +- Puerto `8480` en loopback. Caddy site aditivo + `admin-.organic-machine.com` → basic auth (user `admin`) → `reverse_proxy 127.0.0.1:8480`. + Caddyfile validado y recargado; bloques existentes (gitea/registry/grafana/metrics/logs) + intactos; `membershipd-cluster.service` y `caddy` siguen `active`. +- Credenciales y URL en `pass`: `unibus/admin-panel-password`, `unibus/admin-panel-url`. +- Backup del Caddyfile previo a la edición: `/etc/caddy/Caddyfile.bak.unibus_admin.`. + +## Gaps / pendientes + +- **Users en el cluster (KV)**: el plano de control no expone endpoint HTTP de users + (viven sólo en el store). Con el cluster en `--store kv`, el gateway aún no abre el + KV, así que en producción la pestaña **Users queda degradada** (estado informativo: + `users_backend=none`). Funciona en single-node con `--db`. Se habilita con la vía de + alta KV de la rama `quick/0011-deploy-gaps` del repo unibus (otro agente) o con un + cliente KV admin. No se duplicó ese trabajo. +- **meta-leader / tamaño de quórum**: `/healthz` sólo da status + posture; el líder + RAFT y el nº de réplicas vivas requieren el endpoint de monitoreo de NATS (varz/jsz), + no expuesto. La pestaña Cluster muestra up/posture/latencia de cada nodo. +- **Invite a room E2E**: pide sign_pub + kex_pub del invitado en hex (la clave de room + se sella contra su X25519). No hay directorio de claves públicas; la UI los pide a mano. +- **Login propio de la app**: hoy la auth es la basic auth de Caddy + bind loopback. Un + login a nivel de app (sesión, roles en la UI) queda como mejora futura. +- **Vida útil (Capa 3 DoD)**: recién desplegado hoy; el criterio de >=7 días de uso real + sin romper queda por acumular. El service tiene `Restart=always` y healthz para + observabilidad. diff --git a/reports/0014-2026-06-07-unibus-users-http-admin-api.md b/reports/0014-2026-06-07-unibus-users-http-admin-api.md new file mode 100644 index 0000000..afe52b5 --- /dev/null +++ b/reports/0014-2026-06-07-unibus-users-http-admin-api.md @@ -0,0 +1,203 @@ +# unibus — API HTTP admin-only de gestión de usuarios + +- Slug: `unibus-users-http-admin-api` +- Fecha: 2026-06-07 +- Rama: `quick/users-http-admin` (basada en `quick/0011-deploy-gaps`) +- Worktree: `/tmp/unibus_usersapi` +- Versión: 0.9.0 → 0.10.0 + +## Resumen + +Se cierra la última asimetría del control plane de `unibus`. Antes, las rooms +tenían una superficie HTTP firmada (`POST /rooms`, `POST /rooms/{id}/invite`, +etc.) pero los usuarios solo se gestionaban por CLI local (`membershipd user +add|list|revoke`) o por acceso directo al store. Esto obligaba al panel de +administración a tener `--db` o acceso directo al KV del cluster, rompiendo el +modelo de "el panel habla firmado como un cliente más". + +Ahora los usuarios tienen API HTTP admin-only, simétrica con rooms: + +- `GET /users` — lista completa del allowlist (incluye revocados). +- `POST /users` — alta `{sign_pub, handle, role}`. +- `POST /users/{signpub}/revoke` — revocación (flip de status). + +El server ejecuta las mutaciones contra el **mismo** store privilegiado que ya +usa para las rooms (`s.store`): SQLite en single-node, JetStream KV replicado +(`UNIBUS_users`) en cluster. No se abre ninguna conexión KV nueva ni se usa la +identidad interna; el storage no cambia de sitio. El panel firma como admin y +deja de necesitar `--db`/KV directo. Funciona idéntico single-node y cluster. + +## Modelo + +- **Storage unificado (sin cambios).** `pkg/membership/store.go` define UNA + interface `Store` que abstrae rooms + members + sealed-keys + users, con dos + backends elegidos por `--store`: `sqlite` (single-node) y `kv` (cluster, + JetStream KV). El `Server` ya tiene el store privilegiado abierto y escribe ahí + para todo. Este cambio solo expone `s.store.AddUser/ListUsers/RevokeUser` por + HTTP; no altera dónde viven los datos. +- **HTTP admin-only y no acceso directo al KV.** El panel (gateway Go) habla + firmado como admin al control plane, igual que un cliente normal habla para + rooms. El server (que sirve el KV con permisos plenos en cada nodo) ejecuta la + mutación. El panel no necesita `--db`, ni la identidad interna `internal.id`, ni + correr en un nodo del cluster. +- **Bootstrap (huevo-gallina).** La CLI `membershipd user add --store kv` (de la + rama base) sigue existiendo SOLO para sembrar el admin #0: sin un admin sembrado + no hay quién firme el primer `POST /users`. A partir de ahí, toda la gestión es + HTTP admin-only. + +## Cambios por archivo + +### `pkg/membership/server.go` +- El contexto de request ahora lleva, además del `endpoint` del firmante, su + `sign_pub` hex. Motivo: `EndpointID(signPub) = base64url(sha256(signPub))` es + one-way, así que el endpoint no se puede revertir a la clave para mirar al + firmante en el allowlist. `withSigner(ctx, endpoint, pubHex)` + `signerPubHex(r)`. +- Helper `requireAdmin(w, r) (string, bool)`: default-deny. Devuelve `true` solo + si hay firmante autenticado Y `s.store.GetUser(pubHex)` confirma `role == admin` + y `status == active`; cualquier otro caso (sin firmante, no-admin, revocado, + error de store) → 403, fail-closed. A diferencia de `requireMember`, NO relaja + en AuthOff/dev: una operación que concede/revoca acceso nunca corre sin admin + verificado. +- Tres handlers, todos tras `requireAdmin`, registrados en el mux: + - `handleListUsers` → `s.store.ListUsers()` → `[]userJSON` (incluye status). + - `handleAddUser` → valida `sign_pub` (hex 64 vía `ValidateSignPubHex`) y role + (`admin|member`, vacío = member); `ErrUserExists` → 409 (no sobrescribe); + éxito → 201. + - `handleRevokeUser` → valida el path `{signpub}`; `s.store.RevokeUser(...)`; + desconocido/ya-revocado → 404; éxito → 200. +- `/healthz` sigue exento de auth; el resto hereda firma+nonce+TLS+enforce. + +### `pkg/membership/users.go` +- Nueva `ValidateSignPubHex(signPub) error` (hex de 64 chars = Ed25519 de 32 + bytes), single source of truth compartida por la CLI y los handlers. + +### `cmd/membershipd/users_cli.go` +- `validateSignPubHex` delega ahora en `membership.ValidateSignPubHex` (se elimina + el import `encoding/hex` que quedaba huérfano). Misma validación, una sola + implementación. + +### `pkg/client/client.go` +- `UserInfo` (tipo plano para el panel) + métodos firmados vía `doJSON`: + - `ListUsers() ([]UserInfo, error)` → `GET /users`. + - `AddUser(signPub, handle, role string) error` → `POST /users`. + - `RevokeUser(signPub string) error` → `POST /users/{signpub}/revoke`. +- Mirrors de wire types `userJSON` / `addUserReq`. + +## Contrato JSON de los endpoints + +Todos requieren las cabeceras de firma de transporte ya existentes +(`X-Unibus-Pub/Ts/Nonce/Sig`, sobre `CanonicalRequest`) Y que el firmante sea un +admin activo. Errores en el envoltorio estándar `{"error": "..."}`. + +### `GET /users` (admin-only) +Respuesta `200`: +```json +[ + {"sign_pub":"<64-hex>","handle":"alice","role":"admin","status":"active","created_at":"2026-06-07T..."}, + {"sign_pub":"<64-hex>","handle":"carol","role":"member","status":"revoked","created_at":"...","revoked_at":"..."} +] +``` +- `403` si el firmante no es admin activo. + +### `POST /users` (admin-only) +Body: +```json +{"sign_pub":"<64-hex>","handle":"carol","role":"member"} +``` +- `role` opcional (vacío = `member`). +- `201` `{"status":"added"}` en éxito. +- `400` si `sign_pub`/`handle` vacíos, hex inválido, o role fuera de `{admin,member}`. +- `409` `{"error":"user already registered (unchanged); revoke it first to replace"}` + si la clave ya está registrada (idéntica semántica que la CLI: no sobrescribe ni + eleva rol). +- `403` si el firmante no es admin activo. + +### `POST /users/{signpub}/revoke` (admin-only) +- Sin body. +- `200` `{"status":"revoked"}` en éxito (flip de status, sin hard-delete: la + identidad queda auditable; `IsAuthorized` la deniega en ambos planos al instante). +- `400` si `{signpub}` no es hex de 64 chars. +- `404` si no hay user activo con esa clave. +- `403` si el firmante no es admin activo. + +## Authz admin (default-deny) + +``` +firma+nonce+TLS+enforce (middleware existente) → requireAdmin + │ + signerPubHex(r) ausente ───────────────────────► 403 + GetUser(pubHex) error / role!=admin / status!=active ► 403 + admin activo ──────────────────────────────────► handler +``` + +No se baja la posture: la firma anti-replay, el enforce, el TLS y la ACL por +subject quedan intactos. La autorización admin se suma encima, consultando el +store en cada request (un admin recién revocado es denegado de inmediato). + +## Métodos del cliente (para el panel) + +```go +type UserInfo struct { + SignPub, Handle, Role, Status, CreatedAt, RevokedAt string +} + +func (c *Client) ListUsers() ([]UserInfo, error) +func (c *Client) AddUser(signPub, handle, role string) error +func (c *Client) RevokeUser(signPub string) error +``` + +El panel (`unibus_admin`) construye un `client.Client` con la identidad del admin +(la misma que firma para rooms) y llama estos tres métodos. Un `403` del server se +propaga como `error`. La pestaña Users del panel deja de necesitar `--db` o acceso +KV directo. + +## Evidencia ejecutable + +Build sin CGO con `go.work` externo (el worktree vive en `/tmp`, donde el +`replace fn-registry => ../../../../` del go.mod no resuelve; no se commitea): + +``` +printf 'go 1.26.4\nuse /tmp/unibus_usersapi\nreplace fn-registry => /home/enmanuel/fn_registry\n' > /tmp/usersapi.work +GOWORK=/tmp/usersapi.work CGO_ENABLED=0 go vet ./... # exit 0 +GOWORK=/tmp/usersapi.work CGO_ENABLED=0 go build ./... # exit 0 +GOWORK=/tmp/usersapi.work CGO_ENABLED=0 go test ./pkg/membership/ ./pkg/client/ -count=1 +# ok github.com/enmanuel/unibus/pkg/membership 8.399s +# ok github.com/enmanuel/unibus/pkg/client 6.166s +``` + +Tests nuevos (verbose): + +``` +=== RUN TestUsersHTTP_NonAdminForbidden --- PASS (403 en GET/POST/revoke) +=== RUN TestUsersHTTP_AdminRoundtrip --- PASS (add 201 → list activa → revoke 200 → list revocada) +=== RUN TestUsersHTTP_Validation --- PASS (hex 400, role 400, re-alta 409, fila intacta) +=== RUN TestClientUsersAdminAPI --- PASS (cliente admin add/list/revoke; member → 403 en los 3) +``` + +Cobertura de los casos pedidos: +- **403 no-admin** en los tres endpoints (`TestUsersHTTP_NonAdminForbidden`, + y la mitad no-admin de `TestClientUsersAdminAPI`). +- **Roundtrip admin** add → list (aparece, activa) → revoke (status revocado) + (`TestUsersHTTP_AdminRoundtrip`, `TestClientUsersAdminAPI`). +- **Validación**: hex inválido → 400, role inválido → 400, re-alta → 409, y + verificación de que el 409 no muta la fila existente (`TestUsersHTTP_Validation`). +- **Test de cliente** contra un membershipd embebido bajo enforce + (`TestClientUsersAdminAPI`). + +## Gaps / notas para el integrador + +- **Bootstrap sigue por CLL.** El admin #0 se siembra con `membershipd user add + --store kv` (rama base). La API HTTP no puede crear el primer admin (no habría + quién firme). Documentado en `app.md` (gotcha + growth log). +- **Revoke de admins.** Nada impide a un admin revocarse a sí mismo o al último + admin. No se añadió un guard "no te quedes sin admins" (fuera de alcance de esta + tarea; el flujo de bootstrap por CLI permite recuperarse). Candidato a endurecer + si el panel lo necesita. +- **`revoke` mapea desconocido y ya-revocado a 404 indistintamente.** `RevokeUser` + del store no distingue ambos casos; se mapea a 404 con mensaje genérico. Si el + panel quiere idempotencia en revoke, conviene un cambio en el store (fuera de + alcance). +- **El gotcha histórico "ni auth en las rutas GET" de `app.md`** describe la + posture v1 y precede al enforce; no se tocó (es histórico, no de esta tarea). +- **Integración.** El operador mergea esta rama junto con `quick/0011-deploy-gaps`. + No se mergeó a master desde aquí. diff --git a/reports/0015-2026-06-07-unibus-web-wired.md b/reports/0015-2026-06-07-unibus-web-wired.md new file mode 100644 index 0000000..11d000a --- /dev/null +++ b/reports/0015-2026-06-07-unibus-web-wired.md @@ -0,0 +1,161 @@ +# Report 0015 — unibus: SPA web cableada al bus (gateway REST/SSE) + +- **Fecha:** 07/06/2026 +- **Autor:** agente (Claude Opus 4.8) + operador +- **Ámbito:** `projects/message_bus/apps/unibus` — gateway web (`cmd/webgw`) + capa de datos de la SPA (`web/src`) +- **Rama:** `quick/web-wire` (sub-repo `dataforge/unibus`), 2 commits, pusheada. NO mergeada (la integra el orquestador coordinando con el agente de estilo que trabaja en master). +- **Estado:** done (MVP funcional end-to-end verificado contra el cluster vivo) + +## Resumen + +La SPA de chat de unibus estaba 100% en datos mock (`src/mock.ts`). Ahora funciona de verdad contra el bus: un **gateway Go** (`cmd/webgw`) actúa como peer autenticado del bus (sesión `pkg/client` con la identidad del operador) y expone REST + SSE al navegador; la SPA tiene una **capa de datos** (`src/api.ts`) que reemplaza el mock — la sidebar lista rooms reales, el panel hace stream de mensajes reales descifrados por SSE y el composer publica de verdad. Verificado end-to-end por curl y en el navegador (login → ver rooms → enviar → recibir descifrado en vivo, incluido fan-out a varios clientes simultáneos). No se reestilizó ningún componente: solo cambió de dónde vienen los datos. + +## El gateway (`cmd/webgw`) + +Binario Go único. Mantiene la identidad del operador (desde `pass unibus/operator-identity` o un fichero 0600, solo en memoria) y una sesión `pkg/client` conectada al bus. Mismo *posture seam* que `unibus_admin` y `cmd/clientcheck`: `--ca` vacío = plaintext dev; `--ca ` = TLS + nkey en ambos planos. + +Archivos: +- `cmd/webgw/main.go` — flags, carga de identidad, wiring, arranque + shutdown. +- `cmd/webgw/identity.go` — carga de identidad/passphrase desde `pass`/fichero (gemelo de `unibus_admin/internal/admin/identity.go`). +- `cmd/webgw/gateway.go` — wrapper del `pkg/client`: tipos wire + operaciones de room. +- `cmd/webgw/hub.go` — fan-out: **una** suscripción al bus por room, multiplexada a N clientes SSE. +- `cmd/webgw/server.go` — superficie HTTP: auth por cookie, REST, SSE, static opcional. + +### Endpoints + +| Método y ruta | Acción de `pkg/client` | Notas | +|---|---|---| +| `POST /api/login` | — | Desbloquea sesión con la passphrase del operador (compare en tiempo constante). Emite cookie `unibus_session` HttpOnly. Única ruta `/api` sin sesión. | +| `POST /api/logout` | — | Invalida la sesión. | +| `GET /api/me` | `Endpoint()` | Identidad del operador que el gateway encarna. La SPA la consulta al montar para reanudar sesión. | +| `GET /api/rooms` | `ListMyRooms()` | Lista de rooms del operador. | +| `POST /api/rooms` | `CreateRoom(subject, policy)` | `{subject, encrypted}` basta; policy por defecto = encrypted+persisted+signed (Matrix-like). Acepta override `encrypt`/`persist`/`sign_msgs`. | +| `POST /api/rooms/{id}/join` | `Join(roomID)` | Idempotente; obtiene la clave de room para rooms cifradas. | +| `POST /api/rooms/{id}/send` | `Publish(roomID, body)` | El peer sella (AEAD) y firma antes de salir del proceso. | +| `GET /api/rooms/{id}/stream` | `Subscribe(roomID, handler)` | SSE: cada frame **descifrado** como evento `data:`. Historia primero (rooms persistidas, `DeliverAll` en el primer bind) y luego en vivo. Heartbeat `: ping` cada 25 s. | +| `GET /healthz` | — | Liveness sin auth. | + +### Decisiones de diseño + +- **Hub fan-out por room.** El `pkg/client` deriva el nombre del consumer durable por `(room, endpoint)`; dos `Subscribe` de la misma room desde el mismo operador competirían por el durable. El gateway mantiene **una** suscripción por room y reparte cada frame descifrado a todos los clientes SSE — así varias pestañas/clientes ven todos los mensajes y se abre como mucho una suscripción al bus por room. Conteo de referencias: la suscripción se cierra cuando se va el último cliente (con orden de locks consistente `g.mu → h.mu`, broadcast no bloqueante que descarta a un cliente atascado en vez de frenar la room). +- **`RefreshSession` gateado por posture.** Tras crear/unirse a una room, NATS congela los permisos por-subject; bajo ACL hay que refrescar la sesión (reconectar). En plaintext dev NO hace falta y además tiraría los streams SSE vivos, así que solo se llama cuando `--ca` está puesto. +- **Auth por cookie, no header.** `EventSource` no permite cabeceras personalizadas pero sí envía la cookie same-origin; por eso la sesión es una cookie HttpOnly. La passphrase se compara con `subtle.ConstantTimeCompare`. +- **Sin embed estático en build.** El gateway sirve la SPA opcionalmente desde `--web-dir` (no `go:embed`), para que `go build ./...` sea siempre verde sin exigir `pnpm build` previo. En dev se usa el proxy de vite; para servir el dist se pasa `--web-dir web/dist`. + +### Modelo de confianza E2E + +El contenido sigue **cifrado end-to-end en el bus**. El gateway puede leer el plaintext porque **actúa como el cliente del operador**: es un miembro legítimo de cada room y posee la clave de room K como cualquier peer; sella/abre en el lado servidor del peer. Es la misma confianza que tendría un cliente nativo de escritorio del operador. El cleartext solo cruza un canal SSE autenticado (cookie de sesión) sobre loopback (o TLS fronted en deploy). En la **fase 2** (wallet por-navegador con WebCrypto, identidad Ed25519 por usuario) el descifrado puede moverse al navegador y el gateway dejaría de ver plaintext. + +## La capa de datos de la SPA (`web/src`) + +Los componentes conservan su aspecto y props; solo cambió la fuente de datos (permitido: no se reestiliza). + +- `src/api.ts` — capa única de repositorio. Wrappers `fetch` (cookie same-origin) para login/logout/me y rooms list/create/join/send; `streamRoom()` abre un `EventSource` y entrega cada mensaje descifrado. Mappers wire→UI (`roomFromWire`, `messageFromWire`). +- `src/types.ts` — añade las formas wire del gateway (`MeInfo`, `RoomWire`, `MsgWire`) junto a los tipos UI existentes. +- `src/App.tsx` — al montar consulta `/api/me` para reanudar sesión; si no hay (401), muestra Login. Logout llama al gateway. +- `src/Login.tsx` — el campo de contraseña desbloquea la sesión del gateway (passphrase del operador); estados básicos de carga y error. El handle es solo nombre a mostrar en esta iteración. +- `src/ChatShell.tsx` — carga rooms de `/api/rooms` con estados loading / empty / error; mismo layout `Flex`. +- `src/ChatPanel.tsx` — stream de mensajes por SSE para la room activa (dedup por id); el composer publica por el gateway. Sin inserción optimista: el eco del propio mensaje vuelve por SSE con el id de frame real, evitando duplicados. +- `src/vite.config.ts` — proxy de dev `/api` (REST + SSE) → gateway en `:8481`. + +`mock.ts` se deja intacto (ya no se importa) para no chocar con el trabajo de estilo paralelo en master. + +## Verificación (evidencia ejecutable) + +Entorno: cluster vivo local `membershipd --bind 0.0.0.0` (control plane HTTP `:8470`, NATS `:4250`), **plaintext dev** (https en `:8470` no responde; http `/healthz` → `{"status":"ok"}`). Identidad operador desde `pass unibus/operator-identity`. + +### Build + +``` +$ CGO_ENABLED=1 go build ./... # módulo entero → EXIT 0 +$ CGO_ENABLED=1 go vet ./cmd/webgw/ # EXIT 0 +$ gofmt -l cmd/webgw/ # (vacío) +$ cd web && pnpm build # tsc -b && vite build + ✓ 6948 modules transformed. + dist/assets/index-*.js 411.85 kB + ✓ built in 2.09s +``` + +### Gateway arranca y conecta al bus + +``` +[webgw] operator endpoint: vI8HXcintzK-oTAz_AgSErXBUeIygQzGMQlCRTnzcWo +[webgw] control plane: http://127.0.0.1:8470 (+0 failover) +[webgw] bus TLS+nkey: OFF (plaintext dev) +[webgw] web gateway: http://127.0.0.1:8481 +``` + +### REST + auth (curl) + +``` +$ curl -s :8481/healthz -> {"status":"ok"} +$ curl -s -o /dev/null -w '%{http_code}' :8481/api/rooms -> 401 (sin sesión) +$ curl -c jar -d '{"passphrase":"..."}' :8481/api/login + -> {"endpoint":"vI8HXcin...","sign_pub":"48bc0dc8...729571a1332b4b2deb0bd78326a06bcf149e7d560728d8dc0b98173fa"} +$ curl -b jar :8481/api/me -> {"endpoint":"vI8HXcin...", ...} +$ curl -b jar :8481/api/rooms -> [] (operador sin rooms al inicio) +``` + +### E2E cifrado: crear room → SSE → enviar → recibir DESCIFRADO + +Room efímera cifrada+firmada (misma policy que `clientcheck`): + +``` +$ curl -b jar -d '{"subject":"test.webwire.22a152c9","encrypt":true,"persist":false,"sign_msgs":true}' :8481/api/rooms + -> {"id":"01KTHQKFPTR8VYZGVKP1CDZBY8","subject":"test.webwire.22a152c9","encrypt":true,...,"role":"owner"} +# SSE abierto en background, luego 2 sends: +$ curl -b jar -d '{"body":"hola E2E desde webgw"}' .../send -> {"status":"sent"} +$ curl -b jar -d '{"body":"segundo mensaje cifrado"}' .../send -> {"status":"sent"} +# El SSE entregó AMBOS, descifrados: +: connected +data: {"id":"01KTHQKGPX...","sender":"vI8HXcin...","body":"hola E2E desde webgw","ts":1780859126493,"mine":true} +data: {"id":"01KTHQKGQ3...","sender":"vI8HXcin...","body":"segundo mensaje cifrado","ts":1780859126499,"mine":true} +``` + +### Historia / scrollback (room persistida) + +Mensajes enviados ANTES de suscribir se entregan al abrir el SSE (`DeliverAll`): + +``` +$ curl -b jar -d '{"subject":"test.webwire.persist.a8d5dfc8","encrypted":true}' :8481/api/rooms + -> {"id":"01KTHQMAY7MV479A9QWD48928F","encrypt":true,"persist":true,"sign_msgs":true,...} +$ curl -b jar -d '{"body":"historico-1"}' .../send ; curl -b jar -d '{"body":"historico-2"}' .../send +# SSE abierto DESPUÉS de enviar: +data: {"...","body":"historico-1",...} +data: {"...","body":"historico-2",...} +``` + +### Navegador (browser MCP, gateway sirviendo el dist en `:8481`) + +- Login con handle `leo` + passphrase → entra a ChatShell. +- Sidebar muestra las 2 rooms reales del bus (`webwire.22a152c9`, `webwire.persist.a8d5dfc8`) con candado E2E. +- Escribir en el composer + enviar → el mensaje aparece descifrado en el panel (sender + hora), composer se limpia. +- **Fan-out / segundo cliente:** con el navegador suscrito a la room, un `curl` independiente sobre la MISMA room recibió el mensaje descifrado, y un mensaje enviado por curl (`PING-LIVE-NAVEGADOR-check`) apareció **en vivo en el panel del navegador** (21:12) — confirma una suscripción al bus multiplexada a varios clientes. + +## Gaps / pendientes + +- **Login wallet multiusuario (FASE 2).** Hoy el gateway usa UNA identidad (la del operador) y la passphrase solo desbloquea la sesión del gateway; el handle es cosmético. La fase 2 es identidad Ed25519 por-navegador (WebCrypto), descifrado en el cliente y por-usuario; el modelo de confianza E2E se endurece (el gateway dejaría de ver plaintext). Está documentado en el header de `main.go`/`gateway.go`, no bloquea el MVP. +- **Handle legible del remitente.** La UI muestra el `endpoint id` crudo del remitente (`vI8HXcin...`). Resolver endpoint→handle vía `/users` o la lista de miembros de la room es trabajo de pulido (fase 2). +- **Historia en re-suscripción de rooms persistidas.** El consumer durable es por-operador (compartido entre pestañas/sesiones del gateway): al reabrir el SSE, resume desde su último ack y NO re-entrega la historia ya consumida. En la prueba en navegador, un re-montaje del panel dejó el panel sin la historia previa (los mensajes nuevos sí llegan). Para "todas las pestañas ven toda la historia" hace falta un buffer de scrollback en el gateway o consumers efímeros con `DeliverAll` por stream SSE. Documentado; no bloquea el chat en vivo. +- **Crear room desde la UI.** El MVP lista/streamea/envía; no hay botón "nueva room" en la SPA (las rooms se crean por gateway/admin). Es un añadido de UI menor. +- **Limpieza de rooms de prueba.** El `pkg/client` no expone borrar room ni *self-leave* (solo `Kick` a otros), así que las rooms `test.webwire.*` creadas en la verificación quedan en el control plane. No es posible limpiarlas con la API actual; queda anotado. +- **Sidebar: `lastMessage`/`unread`/hora.** Se rellenan neutros (no se inventan datos); alimentarlos del último frame por room es pulido futuro. +- **`go.work` local.** El worktree vive en `/tmp`, donde el `replace fn-registry => ../../../../` del `go.mod` resuelve a `/`. Se añadió un `go.work` local (override del replace al repo real) excluido de git (`info/exclude`). En el repo en su ubicación normal no hace falta. + +## Cómo ejecutarlo + +```bash +# 1. gateway (operador desde pass, bus local plaintext) +go run ./cmd/webgw --identity-pass unibus/operator-identity \ + --unlock-pass-entry unibus/admin-panel-password \ + --ctrl-url http://127.0.0.1:8470 --nats-url nats://127.0.0.1:4250 --port 8481 + +# 2a. dev: vite con proxy a :8481 +cd web && pnpm install && pnpm dev # http://localhost:5181 + +# 2b. o servir el dist desde el propio gateway +cd web && pnpm build +go run ./cmd/webgw ... --web-dir web/dist # http://127.0.0.1:8481 + +# secured cluster: añadir --ca ca.crt y URLs https:// / seeds adicionales (como clientcheck) +``` diff --git a/reports/0016-2026-06-07-unibus-nats-metrics-clean.md b/reports/0016-2026-06-07-unibus-nats-metrics-clean.md new file mode 100644 index 0000000..68cd181 --- /dev/null +++ b/reports/0016-2026-06-07-unibus-nats-metrics-clean.md @@ -0,0 +1,226 @@ +# Report 0016 — unibus: métricas profundas de NATS/JetStream (limpio, sin debug-log) + +- **Fecha:** 07/06/2026 +- **Autor:** Claude (agente NATS metrics) +- **Ámbito:** `projects/message_bus/apps/unibus` (flag), `functions/infra` (parser del registry), `projects/fleet_monitoring/apps/unibus_exporter` (scraper), `projects/fleet_monitoring/hub` (dashboard + deploy) +- **Estado:** done (código + dashboard listos y probados; rollout al cluster pendiente, por diseño) + +## Resumen + +Se añadieron las métricas server-level de NATS/JetStream (msgs/s, conexiones, slow consumers, +memoria, KV bucket msgs, RAFT leader por stream, reinicios) a la monitorización del cluster +`unibus`, **de forma limpia**: desacoplando el endpoint de monitoring del nats-server (puerto 8222) +del debug-log verboso al que estaba acoplado. + +El problema original: el monitoring 8222 solo se abría con `UNIBUS_NATS_DEBUG=1`, que enciende el +log verboso del nats-server (rutas/RAFT/subjects de rooms a journald en claro), incompatible con el +endurecimiento del issue 0007. La causa era únicamente cómo estaba escrito el toggle: monitoring y +debug-log estaban acoplados sin necesidad. + +La solución es un flag dedicado `UNIBUS_NATS_MONITOR=1` que abre el monitoring loopback **sin tocar +el nivel de log**, un scraper local por nodo (modo nuevo del `unibus_exporter`) que lee `/varz`, +`/connz`, `/jsz` por loopback y empuja a VictoriaMetrics reusando las funciones del grupo +`fleet-metrics`, y un dashboard Grafana `unibus-nats`. **No se reinició el cluster** (eso es el +rollout consolidado del binario 0.11.0). + +## Cambios + +### Parte 1 — flag desacoplado en unibus (rama `quick/nats-monitor-flag`, pusheada) + +Repo: `dataforge/unibus`. Commit `1c93251`. + +| Archivo | Cambio | +|---|---| +| `pkg/embeddednats/embeddednats.go` | Función pura nueva `natsLogOpts(debugEnv, monitorEnv) (noLog, debug, trace, monitor)`; `StartServer` la usa. El monitoring se abre con `monitor` (no con `debug`). | +| `pkg/embeddednats/monitor_test.go` | Tests del desacoplamiento (tabla pura) + server real con `MONITOR=1` (8222 loopback) + server sin flag (cerrado). | +| `deploy/cluster/membershipd-cluster.service.d/nats-monitor.conf` | Drop-in systemd aditivo (`Environment=UNIBUS_NATS_MONITOR=1`). | +| `deploy/cluster/README.md` | Sección "NATS server metrics" con runbook de activación rolling + gate R3. | +| `app.md` | Bump 0.10.0 → 0.11.0 + growth log. | + +Diff esencial (lógica): + +```go +// natsLogOpts: pura, testeable. MONITOR=1 abre el endpoint dejando el log en silencio. +func natsLogOpts(debugEnv, monitorEnv string) (noLog, debug, trace, monitor bool) { + debug = debugEnv == "1" || debugEnv == "2" + trace = debugEnv == "2" + monitor = monitorEnv == "1" || debug // debug sigue implicando monitor (compat) + noLog = !debug + return noLog, debug, trace, monitor +} +// ... +opts.NoLog, opts.Debug, opts.Trace = noLog, debugNATS, traceNATS +if monitorNATS { + opts.HTTPHost = "127.0.0.1" // loopback hardcoded — el monitoring NUNCA es público + opts.HTTPPort = 8222 +} +``` + +El bind `127.0.0.1` se mantiene hardcoded: el endpoint no tiene auth y nunca debe ser alcanzable +por red. El `|| debugNATS` preserva el comportamiento viejo (DEBUG sigue abriendo el monitoring). + +### Función nueva del registry — `parse_nats_monitor_go_infra` + +Creada vía `fn-constructor` en el repo padre (`functions/infra/`). Análoga a `parse_unibus_health`, +mismo paquete `infra`, reusa el tipo `PromSample`. + +``` +func ParseNatsMonitor(node string, varz, connz, jsz []byte) ([]PromSample, error) +``` + +Convierte `/varz` + `/connz` + `/jsz?streams=1` en `[]PromSample` con labels `node`/`instance`. +Robusta: `/varz` es el core (error si no parsea); `/connz` y `/jsz` best-effort. Series: ver tabla +del dashboard abajo. Tag de grupo `fleet-metrics` (+ `nats`, `jetstream`, `monitoring`). + +### Parte 2a — modo NATS-local en `unibus_exporter` (rama `quick/nats-deep-metrics`, commit local) + +Repo: `dataforge/unibus_exporter` (sub-repo **sin remote aún**). Commit `dcdae92`. + +Segundo modo de scrape, componible con el modo healthz existente: + +| Archivo | Cambio | +|---|---| +| `config.go` | Bloque `nats_monitor {enabled, node, base_url}` + overrides `UNIBUS_NODE`/`UNIBUS_NATS_URL`; validación relajada (healthz, NATS o ambos). | +| `main.go` | `scrapeNATS()` lee loopback 8222 (`/varz`,`/connz`,`/jsz?streams=1`), llama `ParseNatsMonitor`, reusa `FormatPromExposition` + `PushPromRemote`. `getJSON` genérico. | +| `nats_mode_test.go` | `scrapeNATS` contra fixtures reales + varz caído + validación de config. | +| `testdata/nats_{varz,connz,jsz}.json` | Fixtures reales capturados de un nats-server 2.11.15. | +| `systemd/unibus-exporter-nats.service` | Unit del modo NATS-local (por nodo). | +| `unibus.nats.example.json` | Config de ejemplo nats-only. | +| `app.md` | Bump 0.1.0 → 0.2.0 + tabla de métricas NATS + growth log. | + +El modo healthz no se tocó. Como el monitoring de NATS es loopback-only y sin auth, este modo corre +**en cada nodo** (un exporter local por nodo), distinto del exporter healthz central de magnus. + +### Parte 2b — dashboard + deploy (rama `quick/nats-deep-metrics`, pusheada) + +Repo: `dataforge/fleet_monitoring`. Commit `dfd55dc`. + +| Archivo | Cambio | +|---|---| +| `hub/dashboards/unibus-nats.json` | Dashboard `unibus-nats` (uid), datasource `victoriametrics`, 12 paneles. Lo recoge el provider `fleet` existente (escanea el path de dashboards). | +| `hub/deploy_unibus_nats_exporter.sh` | Deploy del exporter en modo NATS-local por nodo. magnus → VM local sin auth; homer/datardos → ingesta pública con basic auth (`pass fleet/ingest-pass`, nunca en argv). Instala `unibus-exporter-nats.service` y sondea 8222 para avisar si el monitoring no está abierto. NO reinicia membershipd. | + +## Verificación (evidencia ejecutable) + +### P1 — flag (unibus, `CGO_ENABLED=0`) + +``` +$ go build ./... → BUILD_EXIT=0 +$ go test ./pkg/embeddednats/ -run 'TestNatsLogOpts|TestMonitor' -v +--- PASS: TestNatsLogOptsDecoupled (7 subcases: default off, monitor-only ⇒ log quiet, + debug⇒monitor, trace⇒debug+monitor, both, garbage ignorado ×2) +--- PASS: TestMonitorEndpointLoopback (server real MONITOR=1: /varz 200 en 127.0.0.1:8222) +--- PASS: TestMonitorDisabledByDefault (sin flag: MonitorAddr nil, endpoint cerrado) +$ go test ./pkg/embeddednats/ → ok 5.953s (suite completa, cluster_test incluido) +``` + +### Función del registry (`CGO_ENABLED=1 -tags fts5`) + +``` +$ go test ./functions/infra/ -run 'ParseNatsMonitor|Battery' → ok 0.004s + Golden verifica: nats_msgs_in_total=17, nats_msgs_out_total=17, nats_mem_bytes=18288640, + nats_jetstream_streams=3, kv_bucket_msgs{UNIBUS_users|rooms|members}=2, + nats_jetstream_raft_leader{KV_UNIBUS_users}=1. +$ ./fn index → Indexed 1451 functions (sin error en la función) +$ ./fn show parse_nats_monitor_go_infra → indexada OK +``` + +### P2a — exporter (`CGO_ENABLED=0`) + +``` +$ go build ./... → BUILD_OK +$ go vet ./... → VET_OK +$ go test ./... → ok 0.005s + TestScrapeNATSFromFixtures, TestScrapeNATSVarzDown, TestConfigNatsModeValidation +``` + +### E2E real — scraper contra un nats-server embebido vivo + +Se levantó un nats-server embebido **con el binario 0.11.0 real** (`UNIBUS_NATS_MONITOR=1`, 8222 +abierto, 3 KV buckets creados), se corrió el exporter en modo NATS-local apuntando a `127.0.0.1:8222` +y empujando a un VictoriaMetrics simulado (receptor HTTP local). El exporter empujó **29 series** +reales, recibidas y verificadas: + +``` +unibus_exporter starting: nodes=0 nats="http://127.0.0.1:8222 (node=probe)" ... +pushed 29 samples (nodes=0 nats=true) + +# series recibidas en el VM simulado (extracto): +nats_msgs_in_total{instance="probe",node="probe"} 17 +nats_msgs_out_total{instance="probe",node="probe"} 17 +nats_connections{instance="probe",node="probe"} 1 +nats_mem_bytes{instance="probe",node="probe"} 1.855488e+07 +nats_slow_consumers{...} 0 +kv_bucket_msgs{bucket="UNIBUS_users",...} 2 +kv_bucket_msgs{bucket="UNIBUS_rooms",...} 2 +kv_bucket_msgs{bucket="UNIBUS_members",...} 2 +nats_jetstream_raft_leader{stream="KV_UNIBUS_users",...} 1 +nats_jetstream_streams{...} 3 +nats_server_start_seconds{...} 1.78085962e+09 +nats_up{...} 1 nats_scrape_error{...} 0 +``` + +Esto valida toda la cadena: nats real → scrape loopback 8222 → `ParseNatsMonitor` → formato +Prometheus → push a VictoriaMetrics. El harness y los temporales se limpiaron tras la prueba. + +### Dashboard + +``` +$ python3 -c "json.load(...)" → OK uid=unibus-nats title='unibus — NATS server' panels=12 +``` + +Paneles: NATS up · conexiones · msgs/s in · slow consumers · JetStream msgs · reinicios (1h); +msgs/s por nodo (in/out) · conexiones por nodo · KV bucket msgs por bucket · memoria por nodo; +tabla "Leader RAFT por stream" · tabla "JetStream por nodo". + +## Runbook de activación (consolidada, HUMANO/orquestador — tras el rollout 0.11.0) + +El monitoring requiere reiniciar `membershipd` (reinicia el miembro RAFT del nodo). Se hace dentro +del rollout consolidado del binario 0.11.0, **nunca dos nodos abajo a la vez**. + +1. **Dependencia previa (registry):** commitear la función nueva al registry y push directo a master + (es aditivo, exento de TBD): `functions/infra/parse_nats_monitor.{go,md,_test.go}` + + `functions/infra/testdata/nats_*.json`. Sin esto el exporter no compila en otro entorno. +2. **Rollout del binario 0.11.0** a los 3 nodos en orden **magnus → homer → datardos**, instalando + en cada uno el drop-in `nats-monitor.conf` + `daemon-reload` + `restart membershipd-cluster`. + **Entre cada nodo**, esperar reconvergencia R3 (`followers_current=2/2` en los 6 KV buckets) y + `healthz` verde en el nodo reiniciado antes de pasar al siguiente (comandos en + `deploy/cluster/README.md` § "NATS server metrics"). +3. **Desplegar el scraper por nodo** (una vez que su 8222 está abierto): + `./hub/deploy_unibus_nats_exporter.sh magnus om` (y `homer homer`, `datardos dd`). +4. **Provisionar el dashboard:** copiar `hub/dashboards/unibus-nats.json` a + `/var/lib/grafana/dashboards` en magnus (mismo mecanismo que `unibus-cluster.json`; el provider + `fleet` lo recoge). +5. **Verificar:** series `nats_*`/`kv_bucket_msgs` en VictoriaMetrics y el dashboard `unibus-nats` + en Grafana. + +## Gaps / pendientes + +- **Función del registry sin commitear (dependencia de integración):** `parse_nats_monitor` está + creada, indexada y testeada en el working tree del padre `fn_registry`, pero NO se commiteó + (aislamiento: el prompt prohíbe tocar el padre; el orquestador la integra). Es el paso 1 del + runbook. El exporter la importa, así que debe ir al registry antes de integrar el exporter. +- **`unibus_exporter` sin remote Gitea:** el sub-repo aún no está sincronizado a `dataforge/`. El + commit `dcdae92` quedó **local** en la rama `quick/nats-deep-metrics`; el push se hará vía + `/full-git-push` (que crea el repo) o configurando el remote. Las otras dos ramas + (`quick/nats-monitor-flag` en unibus, `quick/nats-deep-metrics` en fleet) sí están pusheadas. +- **Validación contra el cluster vivo no realizada (por diseño):** el scraper se validó e2e contra + un nats-server embebido local con el binario 0.11.0 real, no contra magnus/homer/datardos. + Activar `UNIBUS_NATS_MONITOR` en datardos habría exigido reiniciar un nodo RAFT de producción con + otros agentes trabajando contra el cluster vivo — riesgo no justificado. Queda para el rollout. +- **`NRestarts` por proceso/stream no lo expone NATS 8222:** se emite `nats_server_start_seconds` + como proxy (un cambio de su valor = el nats-server reinició; el panel "Reinicios (1h)" usa + `changes()`). El contador de reinicios del proceso systemd (`NRestarts`) vendría de otra fuente. +- **Nit de linter (cosmético):** `parse_nats_monitor.go` usa `HasPrefix`+`TrimPrefix` donde el + linter sugiere `CutPrefix`. No afecta corrección; opcional de pulir. +- **Cluster NO reiniciado:** magnus/homer/datardos intactos (8222 cerrado, healthz OK). Correcto + según el encargo. + +## Ramas + +| Repo | Rama | Estado | +|---|---|---| +| `dataforge/unibus` | `quick/nats-monitor-flag` | commit `1c93251`, **pusheada** (NO merge) | +| `dataforge/fleet_monitoring` | `quick/nats-deep-metrics` | commit `dfd55dc`, **pusheada** (NO merge) | +| `dataforge/unibus_exporter` | `quick/nats-deep-metrics` | commit `dcdae92`, **local** (sub-repo sin remote) | +| `fn_registry` (padre) | working tree | función `parse_nats_monitor` sin commitear (paso 1 del runbook) | diff --git a/reports/0017-2026-06-07-unibus-rollout-0.11.0.md b/reports/0017-2026-06-07-unibus-rollout-0.11.0.md new file mode 100644 index 0000000..442759b --- /dev/null +++ b/reports/0017-2026-06-07-unibus-rollout-0.11.0.md @@ -0,0 +1,147 @@ +# Report 0017 — Rollout consolidado unibus 0.11.0 al cluster de 3 nodos (ROLLING, gate R3) + +- **Fecha:** 07/06/2026 +- **Autor:** agente (Claude Code) +- **Ámbito:** `apps/unibus` (membershipd) + `apps/unibus_admin` (panel) — cluster HA producción magnus + homer + datardos +- **Estado:** done — los 3 nodos en 0.11.0, R3 pleno, panel redeployado, sin rollbacks + +## Resumen + +Rollout rolling del binario `membershipd` 0.11.0 a los tres nodos del cluster, uno a uno +con gate de reconvergencia R3 entre cada nodo, activando en el mismo ciclo de restart el +monitoring NATS loopback limpio (`UNIBUS_NATS_MONITOR=1`, desacoplado del debug-log). Un +solo ciclo de restart por nodo desbloqueó las tres cosas previstas: la API `/users` (panel +admin, antes 404 con request firmado), las métricas NATS en `127.0.0.1:8222`, y el cierre +del gap del binario viejo (report 0012). Después, re-deploy del panel admin en magnus. El +cluster mantuvo quórum (2/3) en todo momento; cada nodo reconvergió a R3 (6/6 streams KV a +`followers_current=2/2`) antes de tocar el siguiente. No fue necesario ningún rollback. + +## Cambios + +| Fase | Acción | Resultado | +|---|---|---| +| 0 — Integrar | `git merge --no-ff quick/nats-monitor-flag` → master (commit `f31580d`), app.md → 0.11.0 | Sin conflictos; `web/` no tocado | +| 0 — Verificar | `go build ./...` + tests `membership`/`client`/`embeddednats`/`cmd/membershipd` | Todo verde; push a `origin/master` | +| 1 — Build | `CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /tmp/membershipd_0.11.0 ./cmd/membershipd` | ELF static x86-64, sha `f6096a8e…`, `--help` OK | +| 2 — Rollout | magnus → homer → datardos: backup + drop-in `UNIBUS_NATS_MONITOR=1` + binario + restart + gate R3 | 3/3 reconvergidos, sin perder quórum | +| 3 — Verificar | healthz 3/3, `/users` firmado 200 3/3, 8222 3/3, sin debug, R3 6/6 a 2/2 | Todo verde | +| 4 — Panel | rebuild master (Users cableado) + backup + deploy magnus + restart `unibus-admin.service` | `/api/users` 200, end-to-end vía Caddy 200 | + +Detalle del flag (0.11.0): función pura `natsLogOpts(debugEnv, monitorEnv) (noLog, debug, trace, monitor)` +con `monitor = monitorEnv=="1" || debug` y `noLog = !debug`. Con `MONITOR=1` el endpoint de +monitoring abre en `127.0.0.1:8222` (bind loopback hardcoded) dejando el log del nats-server +en silencio (`NoLog` true). El acoplamiento inverso se mantiene (`DEBUG` implica `MONITOR`). +Drop-in systemd aditivo: `/etc/systemd/system/membershipd-cluster.service.d/nats-monitor.conf` +con `[Service]` + `Environment=UNIBUS_NATS_MONITOR=1` — no toca el unit base ni `cluster.env`. + +El binario nuevo es drop-in del unit existente: se verificó que acepta los 17 flags del +`ExecStart` (incluido `--internal-id-file`, presente solo en el unit de datardos). No se +modificó ningún unit ni `cluster.env`. + +## Verificación + +### Unit y baseline (confirmados, no asumidos) + +``` +ExecStart=/opt/unibus/membershipd … (EnvironmentFile=/opt/unibus/cluster.env) +HTTP_PORT=8470 NATS_CLIENT_PORT=4250 +healthz baseline (3 nodos): {"posture":{"enforce":true,"acl":true,"tls":true,"cluster":true,"store":"kv"},"status":"ok"} +8222 baseline: CERRADO en los 3 (esperado, sin drop-in) +binario viejo: magnus/homer 29337645 b; datardos 29374815 b (0012, con --internal-id-file) +``` + +### Hallazgo clave del gate R3 — métrica autoritativa + +La métrica `followers_current` de `/jsz` **solo es autoritativa consultada en el LEADER del +stream**. Un nodo follower (recién reiniciado) reporta su vista desactualizada de los otros +peers (`current=false`, `lag` constante) durante minutos sin que sea un problema real. La +señal autoritativa por nodo es el **`/healthz` del nats-server** (`127.0.0.1:8222/healthz`): +devuelve 503 si cualquier stream del que el nodo es miembro está lagging, 200 sólo cuando +todos están current. Se usó ese endpoint como gate primario por nodo, y la vista del +stream-leader para el conteo explícito `2/2`. + +### Gate R3 por nodo (orden magnus → homer → datardos) + +| Nodo | Backup | membershipd healthz | nats /healthz | meta (leader/size/pending) | 8222 /varz | [DBG]/[TRC] | quórum otros 2 | +|---|---|---|---|---|---|---|---| +| **magnus** | `membershipd.bak.20260607-192416Z` | 200 enforce+acl+tls+cluster+kv | 200 ok | homer / 3 / 0 | 200 | 0 | homer 200, dd 200 | +| **homer** | `membershipd.bak.20260607-193313Z` | 200 idem | 200 ok (t=0) | datardos / 3 / 0 | 200 | 0 | magnus 200, dd 200 | +| **datardos** | `membershipd.bak.20260607-193452Z` | 200 idem | 200 ok (t=0) | homer / 3 / 0 | 200 | 0 | magnus 200, homer 200 | + +Re-elecciones de meta-leader observadas (esperadas, quórum 2/3 intacto): inicial `homer` → +restart homer → `datardos` → restart datardos → `homer` (final). Tras completar los tres, la +vista del stream-leader (magnus) confirmó los 6 buckets KV +(`users/rooms/members/room_keys/rooms_by_member/nonces`) a `followers_current=2/2`: + +``` +streams KV a 2/2: 6/6 (stream-leader=magnus); meta-leader=homer cluster_size=3 pending=0 +``` + +### FASE 3 — verificación post-rollout (3 nodos) + +``` + magnus homer datardos +membershipd 200 200 200 +posture enforce+acl+tls+cluster+store=kv (homogénea) +/users firmado 200 200 200 (3 users idénticos — KV replicado R3) +8222 varz/jsz/connz 200/200/200 200/200/200 200/200/200 +nats /healthz ok ok ok +journal DBG/TRC 0 0 0 +``` + +`/users` firmado se verificó con un verificador throwaway (`client.Connect` + `ListUsers` +del propio `pkg/client`, identidad operator desde `pass unibus/operator-identity` en archivo +local 0600, TLS+nkey contra cada nodo por su IP pública; SAN del cert cubre las IPs). Antes +del rollout, un GET `/users` firmado daba 404 (ruta ausente en el binario viejo); ahora da +200 con la allowlist: + +``` +operator role=admin status=active +gapcheck_user role=member status=revoked (residuo E2E del report 0012) +gapcheck_user2 role=member status=revoked (residuo E2E del report 0012) +``` + +El verificador y la copia local de la identidad se eliminaron (`cmd/usercheck` borrado del +working tree; `/tmp/operator.id` con `shred`). Working tree de unibus limpio +(`master...origin/master`). + +### FASE 4 — deploy del panel admin + +``` +panel binario nuevo: /opt/unibus_admin/unibus_admin (sha 812831…), backup unibus_admin.bak.20260607-194114Z +service unibus-admin.service: active; journal limpio ("users backend: control-plane", "bus TLS+nkey: ON", "cluster nodes probed: 3") +GET /api/users (loopback 8480): HTTP 200 — lista real (3 users), ya no 502 +GET /api/cluster: 3 nodos up:true, posture homogénea, latencias 0/10/5 ms +end-to-end vía Caddy (basic auth admin): GET https://admin-…/api/users -> HTTP 200 con lista +end-to-end sin auth: HTTP 401 (Caddy basic_auth protege) +``` + +El binario del panel se reconstruyó desde master (frontend `web/dist` ya embebido, no se tocó +ningún `web/`). El Caddyfile no se modificó: el site (`reverse_proxy 127.0.0.1:8480` + +`basic_auth`) quedó intacto; no hizo falta `caddy reload` (mismo puerto/config). La cadena +completa navegador → Caddy(TLS+auth) → panel → bus firmado `/users` → KV R3 está probada. + +## Seguridad + +- Secretos siempre desde `pass`/path, nunca en git ni argv: identidad operator a archivo + local 0600 (borrada con `shred`); password del panel pasado a curl por stdin (`-K -`), + nunca en la línea de comandos. +- Monitoring vía `UNIBUS_NATS_MONITOR` (drop-in), **nunca** `UNIBUS_NATS_DEBUG`: confirmado + 0 líneas `[DBG]`/`[TRC]` en journald de los 3 nodos. 8222 bind loopback hardcoded. +- Backups reversibles por nodo conservados en `/opt/unibus/` (membershipd) y + `/opt/unibus_admin/` (panel) — listados arriba. +- Gate R3 estricto, un nodo abajo a la vez; quórum 2/3 nunca perdido. magnus (host crítico): + sólo se reinició `membershipd-cluster.service`. Posture homogénea mantenida. + +## Gaps / pendientes + +- **Verificación visual de la pestaña Users con navegador: no realizada.** Se verificó la + cadena funcionalmente end-to-end (Caddy basic_auth → panel → bus → `/api/users` 200 con la + lista real). No se abrió el navegador para no exponer el `admin-panel-password` en la URL + (el basic_auth de Caddy obliga a meter las credenciales en la URL o en un dialog nativo no + automatable de forma segura). El render de la SPA es determinista sobre `/api/users`, que + responde 200. +- Los usuarios `gapcheck_user`/`gapcheck_user2` (revoked) son residuos de los checks E2E del + report 0012, no usuarios reales; pueden limpiarse del KV si se desea (no bloquea nada). +- Binarios temporales en `/tmp` (locales y de los nodos) eliminados. Los backups `.bak.*` + se conservan a propósito para reversibilidad. diff --git a/reports/0018-2026-06-07-unibus-user-accounts.md b/reports/0018-2026-06-07-unibus-user-accounts.md new file mode 100644 index 0000000..8b0a54f --- /dev/null +++ b/reports/0018-2026-06-07-unibus-user-accounts.md @@ -0,0 +1,150 @@ +# Report 0018 — unibus: cuentas estilo WhatsApp (alta por invitación + baja por hard-delete) + +- **Fecha:** 07/06/2026 +- **Autor:** Claude (Opus 4.8) +- **Ámbito:** bus `unibus` (`pkg/membership`, `pkg/client`) + panel `unibus_admin` (gateway + SPA) +- **Estado:** done (código + tests + verificación e2e local). Gap de despliegue: el cluster vivo sigue en 0.11.0; el rollout a 0.12.0 lo hace el orquestador. + +## Resumen + +Capa de CUENTAS sobre el modelo wallet: la clave privada de cada usuario nace y vive en SU dispositivo; el servidor solo guarda la pública. El admin **crea** usuarios generando un **enlace de invitación** de un solo uso (nunca ve la privada) y **elimina** usuarios con **hard-delete** real (purga del allowlist), manteniendo `revoke` como acción distinta (status flip auditable). El usuario abre el enlace en su cliente, genera ahí su par de claves, y se registra con `POST /register` (autorizado por el token, no por firma admin). + +Dos repos tocados, ambos en ramas (NINGUNO mergeado a master): +- Bus `unibus` → rama `quick/user-accounts` (6 commits, pusheada). Bump 0.11.0 → **0.12.0**. +- Panel `unibus_admin` → rama `quick/user-accounts-ui` (3 commits, pusheada). Bump 0.1.0 → **0.2.0**. + +## Parte 1 — Bus (`quick/user-accounts`) + +### Hard-delete +`Store.DeleteUser(signPub) error` en ambos backends: SQLite `DELETE FROM users` y jetstreamStore `users.Delete(signPubHex)` (con `Get` previo para devolver `ErrNotFound` en un miss, ya que KV `Delete` es idempotente). Borra SOLO el allowlist; las membresías de rooms del ex-usuario quedan **inertes** (ya no puede autenticarse en ningún plano). NO se hace limpieza parcial de membresías — un owner expulsa/rekey su room para forward secrecy. `revoke` se mantiene intacto. + +Fix de consistencia colateral: el `GetUser` de SQLite ahora mapea `sql.ErrNoRows` → `ErrNotFound` como el KV y como documenta `store.go` ("every lookup miss returns ErrNotFound"). Antes devolvía el error crudo del driver. + +### Invites (nuevo backend de datos, ambos stores) +Tipo `Invite{Token, Handle, Role, ExpiresAt, Used, CreatedAt}` + campos de auditoría del consumo (`UsedAt/UsedSignPub/UsedKexPub`, vacíos hasta consumir). Métodos en `Store`: +- `CreateInvite(handle, role, ttlSecs) (Invite, error)` — token = 32 bytes `crypto/rand` en hex (64 chars); TTL default **7 días** si `ttlSecs <= 0`; role admin|member (vacío → member). +- `GetInvite(token)`, `ListInvites()`. +- `ConsumeInvite(token, signPub, kexPub) error` — valida (existe, no usado, no caducado) → registra el `signPub` con el handle/role del invite → marca usado. **Single-use atómico**: SQLite usa una transacción guardada por `used = 0`; KV usa un compare-and-swap sobre la revisión de la entry (mark-first). Burn-on-claim idéntico en ambos: si el `signPub` ya está registrado, devuelve `ErrUserExists` con el invite YA gastado. +- `CancelInvite(token)` — hard-delete del invite pendiente (para la futura cancelación admin). + +Persistencia: migración aditiva numerada `003_invites.sql` (raíz + copia embebida byte-idéntica) con tabla `invites` (+ índice `idx_invites_used`); bucket KV nuevo `UNIBUS_invites`. Nada borrado/recreado. + +### Endpoints HTTP (`pkg/membership/server.go`) +| Método/ruta | Auth | Qué hace | +|---|---|---| +| `POST /invites` | admin-only (`requireAdmin`) | body `{handle, role, ttl_secs?}` → `{token, expires_at}` | +| `GET /invites` | admin-only | lista de invites **pendientes** (filtra usados/caducados) | +| `DELETE /invites/{token}` | admin-only | cancela un invite | +| `DELETE /users/{signpub}` | admin-only | hard-delete (purga) | +| `POST /register` | **token** (sin firma admin) | redime un invite (ver contrato abajo) | + +`/register` es la única ruta mutante exenta de firma admin. Se separó `isRateExempt` (solo `/healthz`) de `isAuthExempt` (`/healthz` + `POST /register`): `/register` **salta la firma admin pero sigue sujeto al rate-limit por IP** del control plane (20/s, burst 40). Validación estricta de las dos claves hex (`ValidateSignPubHex` + nuevo `ValidateKexPubHex`, 32 bytes / 64 hex) ANTES de gastar el token; handle y role los fija el invite (sin escalado). + +### `pkg/client` +`CreateInvite/ListInvites/CancelInvite/DeleteUser` firmados como admin; `Register(token, signPub, kexPub)` SIN firma vía un nuevo helper `doUnsigned` (failover entre control planes + surfacing del error estructurado del server). + +### Tests (todos verdes, `CGO_ENABLED=0`) +- `pkg/membership/invites_test.go` — suite store-level sobre **ambos** backends (golden redeem, single-use, token desconocido, caducado [forzado], cancel, hard-delete) + burn-on-claim. +- `pkg/membership/invites_http_test.go` — HTTP: crear invite admin → `/register` sin auth 201 → aparece en `/users` → re-register 409 → caducado 410 → keys malformadas 400 → no-admin 403 en las 4 rutas admin → hard-delete purga (vs revoke). +- `pkg/client/invites_test.go` — e2e cliente: admin acuña invite → joiner NO registrado redime sin firma → aparece → hard-delete desaparece. + +## CONTRATO de `POST /register` (para el agente del cliente `/join`) + +La página `/join?token=` del cliente web consume este endpoint. Contrato exacto: + +**Request** — `POST /register`, `Content-Type: application/json`, **sin** cabeceras de firma: +```json +{ "token": "<64-hex>", "sign_pub": "<64-hex Ed25519>", "kex_pub": "<64-hex X25519>" } +``` +- `token`: el de `?token=` del enlace. +- `sign_pub`: clave pública Ed25519 generada localmente (identidad / firmas). +- `kex_pub`: clave pública X25519 generada localmente (key-exchange / sellado de room keys). +- El cliente genera el par localmente; la privada NUNCA se envía. `handle` y `role` NO van en el body (los fija el invite). + +**Respuestas:** +| Código | Cuerpo | Significado | +|---|---|---| +| `201` | `{"status":"registered"}` | alta correcta; la identidad ya puede conectarse al bus | +| `400` | `{"error":"token required"}` / `{"error":"sign-pub must be a 32-byte Ed25519 public key (64 hex chars)…"}` / `…kex-pub…` | body o claves malformadas | +| `404` | `{"error":"invalid or unknown invite token"}` | token inexistente | +| `409` | `{"error":"invite already used"}` | token ya consumido (single-use) | +| `409` | `{"error":"identity already registered"}` | el `sign_pub` ya está en el allowlist | +| `410` | `{"error":"invite expired"}` | invite caducado | +| `429` | `{"error":"rate limit exceeded"}` | rate-limit por IP | + +Notas para el cliente: el endpoint es público pero rate-limited; un token es de un solo uso, así que tras `201` el cliente debe guardar su identidad localmente (cifrada con la contraseña que elija el usuario) — un reintento con el mismo token dará `409`. + +## Parte 2 — Panel `unibus_admin` (`quick/user-accounts-ui`) + +### Gateway +- `POST /api/invites` → `client.CreateInvite`; `GET /api/invites` → `client.ListInvites`; `DELETE /api/users/{pub}` → `client.DeleteUser`. (list/add/revoke existentes intactos.) +- Doble vía como el resto de users: plano de control firmado (cluster) / store directo (`--db` single-node). +- **Base URL del enlace**: el gateway construye `<>/join?token=XXX` donde `<>` es la URL del **cliente final** (la app que hospeda `/join`, NO el panel). Se configura con el flag `--join-base-url https://chat.unibus.example` o la env `UNIBUS_JOIN_BASE_URL`; se expone en `/api/me` (`join_base_url`). Si no se configura, la SPA usa su propio origen como respaldo y avisa. + +### SPA (Mantine, dark, índigo) +- Botón **"Crear usuario"** → modal (handle + rol + caducidad en días) → `POST /api/invites` → muestra el **enlace copiable** + alerta de caducidad + aviso si el base URL no está configurado. +- Card **"Invitaciones pendientes"**: handle, rol, token parcial, caducidad, copiar enlace. +- Botón **"Eliminar"** por fila → modal de **confirmación FUERTE** que exige teclear el handle y advierte en rojo "BORRADO PERMANENTE" (distinto del revoke, que sigue siendo un `window.confirm`) → `DELETE /api/users/{pub}`. +- Se conserva "Añadir user (clave conocida)" para el caso avanzado. + +### Nota de build (revertida) +Para compilar el panel contra los métodos nuevos del cliente mientras `quick/user-accounts` no está en master, se apuntó temporalmente `go.mod` del panel: `replace github.com/enmanuel/unibus => /tmp/unibus_useraccounts`. **Revertido a `../unibus`** tras verificar (confirmado en el commit). Consecuencia: el panel en `../unibus` no compilará hasta que el bus llegue a master; por eso la rama del panel se mergea DESPUÉS del bus. + +## Verificación (evidencia ejecutable) + +### A) Contrato 0.12.0 contra un `membershipd` local (enforce, admin sembrado) +``` +$ membershipd user add --db … --handle operator --sign-pub --role admin +added user "operator" (0ce29047…) role=admin +# membershipd --bus-auth enforce → /healthz: {"posture":{"enforce":true,"acl":true,…},"status":"ok"} + +# admin crea invite (firmado) → token 39503d27ae93… +# POST /register con curl (SIN firma): +register -> HTTP 201 body: {"status":"registered"} +# dora aparece en /users: {"Handle":"operator",…} {"Handle":"dora",…} (2 filas) +# re-register MISMO token: +re-register -> HTTP 409 body: {"error":"invite already used"} +# hard-delete de dora → deleted ee64614216ae… +# /users tras delete: {"Handle":"operator","Role":"admin","Status":"active"} (1 fila — dora purgada) + +# errores de /register: +POST /register token inexistente -> {"error":"invalid or unknown invite token"} (HTTP 404) +POST /register sign_pub "abcd" -> {"error":"sign-pub must be a 32-byte Ed25519 public key (64 hex chars), got 2 bytes"} (HTTP 400) +``` + +### B) Gateway del panel (`--mock`) +``` +GET /api/me -> {"users_backend":"sqlite","mock":true,"join_base_url":"https://chat.unibus.example"} +POST /api/invites -> {"handle":"ana","role":"member","token":"9455207f9098","join_url":"https://chat.unibus.example/join?token=9455207f9098…"} +GET /api/invites -> [{"handle":"ana","role":"member","join_url":"https://chat.unibus.example/join?token=…"}] +GET /api/users (antes) -> ["operator","ana","lucas","leo-revoked"] +DELETE /api/users/{pub} -> {"status":"deleted"} HTTP 200 +GET /api/users (después)-> ["operator","lucas","leo-revoked"] (ana purgada) +GET / -> HTTP 200 (SPA index) GET /join -> HTTP 200 (fallback SPA) +``` + +### C) Cluster vivo (sin tocar usuarios reales) +``` +# Salud (vía SSH, loopback TLS, CA pinada): +magnus {"posture":{"enforce":true,"acl":true,"tls":true,"cluster":true,"store":"kv"},"status":"ok"} +homer {"posture":{"enforce":true,"acl":true,"tls":true,"cluster":true,"store":"kv"},"status":"ok"} +datardos {"posture":{"enforce":true,"acl":true,"tls":true,"cluster":true,"store":"kv"},"status":"ok"} + +# Confirmación de que /register NO está desplegado aún (rollout 0.12.0 necesario): +cluster magnus (0.11.0): POST /register -> HTTP 401 (no es ruta pública; pasa por auth y rechaza) +nodo local (0.12.0): POST /register -> HTTP 400 (ruta pública activa → token required) +``` + +### Build/test +- Bus (`/tmp/unibus_useraccounts`): `CGO_ENABLED=0 go build ./...` OK, `go vet ./pkg/...` OK, `go test ./...` OK (todos los paquetes verdes, incluida la suite nueva). +- Panel (contra el worktree, antes de revertir el replace): `CGO_ENABLED=0 go build ./...` OK, `go vet ./...` OK; SPA `pnpm build` OK (tsc + vite). + +## Gaps / pendientes + +- **Rollout del cluster a 0.12.0 (orquestador).** El cluster vivo está en 0.11.0; `/invites`, `/register` y `DELETE /users` no existen allí todavía. La verificación e2e de los endpoints NUEVOS contra el cluster vivo queda pendiente del rollout (verificado contra un nodo local 0.12.0 en su lugar). Confirmado con `/register -> 401` en los 3 nodos. +- **Orden de merge.** El panel (`quick/user-accounts-ui`) debe mergearse a master DESPUÉS de que el bus (`quick/user-accounts`) llegue a master, porque `go.mod` del panel apunta a `../unibus` y consume los métodos nuevos del cliente. +- **`kex_pub` validado pero no persistido en el allowlist.** `/register` valida el `kex_pub` (lo necesita el cliente para E2E) y lo guarda como dato de auditoría del consumo del invite (`used_kex_pub`), pero el allowlist de users sigue guardando solo `sign_pub` (igual que antes de este cambio). No hay un directorio global de `kex_pub`; sigue poblándose por-room al invitar a un room (sin cambio). No es regresión. +- **El cliente `/join` (web/) lo implementa otro agente.** Este trabajo deja `/register` listo y el contrato documentado arriba; `web/` no se tocó. +- **Cancelar invite desde el panel.** El bus expone `DELETE /invites/{token}` y `client.CancelInvite`, pero la UI del panel solo muestra/copia invites pendientes (no los cancela). Fácil de añadir; fuera del scope pedido. +- **`go.work` local.** El worktree del bus en `/tmp` usa un `go.work` (gitignored) con `replace fn-registry => /home/enmanuel/fn_registry` para resolver el registry desde `/tmp`. No commiteado. +- **Migración de invites en el snapshot SQLite→KV.** `importSnapshot/ExportSnapshot` (migración 0003c) no incluye invites; son efímeros (7 días) y de bajo valor, no se migran. Documentado, no bloqueante. diff --git a/reports/assets/unibus-android-chat.png b/reports/assets/unibus-android-chat.png new file mode 100644 index 0000000000000000000000000000000000000000..9d00cce9c81bbff5411e7f60f5f552fe4d4726b9 GIT binary patch literal 134236 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≻mB!285EF0J%a-f^J=ZkYb+27h!?|nuorp*HsR}FJ2xznZFr0RqOL+<^@Y;1H zFD_#Jp81k#WwKF?ir-rkkXp1gY@D-gSO0UZE&t#2%7m*x*-7p4Ax__(j+SufXo+KI z1!3_P`qp#C*KA=R`elA^uc*o1qM@904`?|5O@4rNLE=QDg0X` z+|N-${aY{j|IpBw(=u{U!^!oHLpc{6jX3~O=XbR7dXxSx{AKz`kABb3R;E`#j4m%%-Y$#ymdI~EVLHEX>;CyYN8&bK zBF;H+p8u?b|0UD=)uHAYlz$0|qp?D5kPozF!b-&q%)oL`sK!Rvga z53)LT--Y1^6|nSUyQANOv3RKw9!{LU#TOyv8E(M7(1h#4i zQMhckQXiSudpuOU{1^ea$-=Z<9O~#&V%1VG-RO0>xVy z(5aatz+%k<`sE4$ZHo3v;S^A)woxfFe;<(P(JLe(lnzalXNbVSz!zC5S+hqzC`E4- zmql=-83V`(68n%Odv8HdYZMie90rm3Gy-~sG?023p}c@06;B1qdP3Ak50=xxdPUAS zTJZh*nRE;VFvI?1LeH04wSBxkC_(<{Q&zr zIbPrKCQ>am9c=XHeUyv&Nfe`b5Y%}mZ5Cso*Yx|7yJ8XJx#8UMc2gGK8V>UWE>+rZ zZqi-C_-QD?@Q3C{Oend3OZEt-_v#*i#r^N19nkqxz%xb;s3sFax(WPIU>PcdTSQi@ z{q~z|`a3ebZmg>VjGZ| zp#rqB-9Ake49z%}G2=SE%8C80Teo(51o6_*LNPnprG(XQfyLXWjb4g>r{@@?#IppM z^DS5+B7a3^1X08dXToC8(bH*LGgX-s!Xx9)0uQ9HQB(i#ayz=6&^dq4)B7H>;|(Y& zqt3cfOTcj}c4b)Pe@=s#tSr^-il#jmX&`mpe36`7xXSiU4pPmz z{cfPhg$7^f5imHduo30Ad}UjyUd>qc98LmYk^}Rv4~Jta%{PkOfZi$v1LLK5FnSTp z5E-P?T9$8vI~;Y?2Ch1CuDl(jyi(P4_WC= z#_(*oIfPbrcXPuPeHhrxV}hFpS}Mj(%Sh)s=_e2%fUBI4s6{|Pl9^XHH|hIp&Xyix z(EsW-)cR=WDX@rpy-~H}R}r^1Ch)Ef1KJWnvXSxkAm-pc^cQ1QUcy)``{s?av(E|n zm*dKEYJ1G<-C#-n-e1_aLCo@=XwcC|ncu~R-^cdP2)}{Vg48S-Ut573^kya|Mx8y>e$f0xy{_n9@KU6UDRY9p%CmNC zY;0d?h#YK|UAup1T0`R)65P?wM)@^sCGCIHt zlzQC}*w9J07r}25d9=U5_(l{QgW@!u^ZVG*O90MyArv}`f0rWkV$&^0CqI9_BoW82 z{s{|52J}VIJ|J1E#v}rjeeEJ-ZcqGMWDP(I`|Uv9H-;bz5-vwMNX8>6miwd=f%w5` zv)(6^&&&)wJ8p-S5O&j%pLqA4Na^b8Ca?Wqb==kW1)B}^ZXO^FS)h%Ppbuqht_3-{ zKMe>pr6qSJ%I@xlx&GMha)mjt%%M$r@Aqr2o$U}fa00o}@Nh8>%lSU87msNz+Mo>9 zQHjP$yCw({Ob?g&0>R#>;b3c}zchE21Q!r2i0No%rb@N0?+*rbmAP0!IM)pP{mfnV{5D9PA3O?5a5uzoB%D&!0Hof z`Sm+AE*Hu4-17qSVJMDVfR>eM) zrJmW%f1EYtIM^A^uYTIKcR#Ju>9Ai?Kz;da3)efPJ3JmVzlRS_SI-W2(A?)YE2Ei; zb+?dqlQv-mg#{GQs!KKujm%?zP_m+D0$jn78TT}urPV8}dqL_G#Lvu{nt#!N7ek?L z_YVs2iwJfs=<{(6RGfAD4D2;~d(QUe3m7lkxFGFq@3sS#^>pA?Ln%$$|9eoUE}pG2 zOwqQ8FnT?W9LVV8r)P-ePd*kX8G>jwpt$SVAUqEQVAkvmye2*;~dVH z$6|w{6w7f5aO_-;cfkhgHuAWI6s<>2pPjEcT~h%fI;ZqDA?eR(-+)9!e^$gZB+$GJ zJI9JcT`@R7#GBcr0yN@NM@B~6$6=14XDD2L00d8qte0h~55j6`5UW@x&A^hQR=4V8 z0}2zm(qUS&OmzzGLh`X{cfR@g^u@p))(ZMW5Bd~NszAa?X;{-PCf4c90XCA9wi5V$ zIkoHD>P~CLI%lqPb8~|=0OZ2Nu+r@wN@)6q1flhI1X5u{0~)K@Y*&>)h8&I`s<1)# z!PZA#c*{eM)vgn&D{K~h6kxB>2<;1BnxQ!xaG|J~oTv2eF>x4Cl^{Xf9dCv%_wcN>lY1GO^aV?no|Kjw$;@VqB3?tuT8{hocC+ zBJ}pgWh#NLae~6b5F9q?T};$C>~dmV*158?XZe!3SB^9^r0b+lTx}8Ar9WIG6n0LH ze|^CRWJbPxO;c``&l%ci9Fc%*W|h~RrCM)HO`=95!3}h6ykyy~_BaM?P+c92=bg!= zNK8~p_cXgY+8#{+bu-$^@QbJrOu4p>*Zt|YTda@%GDB{WSvOeL&RU^%2-)87a&U{y z$}edh-6VWdx%j_WEvu`mmWmn%uh9v^I#^J-f!k{4s z_%(J5?5jO5o3Z9@k6uEHEkNbz3p6Uy85=DHkb}sM-o>{AY7Aj$?^1BU&8RzVH%|rK z-sSyTR5ePq&!+>tK6e(o@i@QQl&e9w##zDytlj2tJ`929b|5&2SAiLF_D54$N=gMt zm9Y*B57Zr+2r#M50j)MLFu-gaM^pBx&vvO%*g`t4$8{Gg)=I`NyiK|`VG3R0mv=Mr z#@8xL*VRs!CEbDsRjP@(p&E(Wz;oO5COQYb3p;jtvW*l^yS4lc`jXx_f|bGPjMp$i zUPD78VlmxnvFj+Vg*3Ck56g9jXwr7v1k>#v0bdCsxAHA$ti6g^dNCNghmMmr&)iESd=#OaJB@RX3Sw}lij$=kyNnZKlr|I z^uihAS{j8K7REy*G$$na&{+dW`mmKNLg^cyy%Ny=YyMxPUX@7%CcX60K;zrD`qvSU*B!8doAm&3>aa9A>isJxE+$h2LK|m0acDS@5~u>q z6-ODFpxdtoie>162gm+&E;@k&lH+`d!{kIc7*0l_jzF7#*Wc|#5LAx$u`tm784{2f z!q*g~BTPUWoT07TG7A>KXBVg~`jFEc{rQAfq`Rh4uEv0t)(@t7J1|jhbxLhf?TD1g z)u^T*z(G2~8;h++SwK0S25hIp)NLc6*p57_Ed;9vgSHUbqi(k|+4cO~+Vu(+|FszK zQPdL)JF1q6)_o0j({~SHMu(oaVX?>Z1hOoJ>wYwrzK9G%xL-*kY}C7;Tpg4{pCZ4n1s&oOfuH=o|%9 z^FMe_=zYpssfz22W^12rhAtoEI2P$93O5%un0q2vz)LFWS)1y06!)QYT&Hwg9y~wE z*o}JtLJtX!fs`+eP(X8k!pa|o3I=*IWM^t~?7(E!2f7ye&}z3pJFRTpXUq}-+8g9X zO5qJz?+ZSAwi@QQeaLS!W^OlTP$8NE5NmM<{3Yj+7^RglLb@mSIl~n9p4}UqDj{h!MV@$@Xz>Qwrc50a+ro;(Gl#3lY0owV}UQG z<29gH>7ZAqbh7*XM)huK?egDr*`v8CgTG)3KqN8lv~(*?95{gqJ|iz;u$kdUv=M{NYH0d=^L#psrg4@^f@XD9F~V z!BOn8F^|>4_p`(G%CTxaf3Qp|caOb~PWDYor%9Qpg`pRY9~$h}Cdy@VYxg2i`!21U zGcW{A{@Djesa`E;$B01N{MDY#e?Lq+{T~;Aab>hHH7SA1QXxl8IlDz6FuDDQ!BmyQ zS@1IC*szCAGwidmAN7fy+Mo^cK>6WD*(n5|%+ttoR(zqAgWO(Zdd}>A=UuMMNnc|NTw1d$sH( zrsFA#u`UX5OoY$@&3q-`C-(J9Zax*2L^KH3CnV1ywp|srt7~`v&YPB2wry6&qf*gk z4*ULm3YlDAd?xK1aVkEn$f1yMVIu$+icRq_+`SrZh8hBe1`d^>QNh{3J4;T9?n@7D z0WQaT5()mazk)1;drh9VA_f*_CoWt6a!TL9& z;p>%qPgU-0est(q>K){6zRp;6^QLJ?kyCf9`?yanK4Uh7c2O}gS*TwC%}06RRdx~{ z|4EPAs5Z-C*!0t<%*?$ga^Rk5f!lCg+ax0;r4ZP%?PvnMC&n%Ivy|O@s3NS+*L2*< zPTQ?Msng?S7K!|-6$5UkK{Ji*lV)A3qnPzQb8bhnp7aFJNV|kO-SR&Regr<@%Fpz! zh^r|DrqV||TR7gR9fr_*;qB+Mtu7vdx4IQ}8yY5uTOuf=pI&V}L-wxL@!Xuh;?c+% z*r1#R@6EO-+yfTLSl;_jsH431jdT-s@4n8^B5Ds)I@Z`6I-SejeMFUKt+L6gCr>NJ zI&ZgLqdo;gSBtviwk0vf?Ed^r(CjzBgnc^JKB3_@0#4xah+=$kknKEcuXh$OT0+r+ zR?W+p2H(*_J;aY&eClw63d>Fay4AnJ!@aKnt*x;A&!c(VX*qk}5jewAwwjBkK|Gv@MSn*l;b&#aZ*xcNt`&8A}@^lT@A1mXfxu_!uTnfw6 zv#<-Ego*8^(b;Y_-8*I+{+mzGtt@jgvcjS~gZ>o50UF5G;p+&(R2j^dX_SNJ;CZ}@ zK>k6WQ5W(B4hLi%x6@NIY&rm9p%)OCCR=A^WRo_Mz+v3tRoHh)whx!qdK##{U7T;b zrji^-vZ4?eO0RgNm__Sq5~6WR7yfeoGz-?091@kp0{P`ojNQZxUI~Z^?v7)T$r&0N zW{(5ZMgCy!`$bNAHnu^5R!uO{vq3|OV4o-LZK>d^e-&K3>~7u0%JjwJ)b3p+eQXH@N}5NWK3?}1v2Cmr;Tbw^j@}Jy+6e=*&7@bbU{Js zV11RBRGzk+#e32eZ^=bUHCb{hV}(0T@dIkRCZFMSq=r$iuWLK&X>W1$LB4#dx2TXp zmRfp9$elMr)i0?+o~6%^v@`6G&85b<o1ign-p-XaZ^%7yD9C|T?7|BvrohjjE*)@qm>(Z zDeI?re>Q?YKOcGcNbJ|sG7EpikPnHeYU$eAkvxx?s%oXG>YB_r_POaR3W{2RfPVPL^M}|qn%#{%f1{(fxLOZME%_IDls=T;c3jX{YtC~pXX?@{ zdsiB6T+V#w5++nqUO_`H{$K{d$;oN_=H|_~HcX~vo#|*;rSH|$qLr>cWM{uSoul?O zDT#uDf@&7jS4V2y1O^O?WvwHRmlFLGBoIRwba9+0n2QYnQCLzArgAktV~e}1|0DcrM}rEv+T?P_>y{;7`EY)jBZ zEW8i1pRqCAF)w08?l$(8nrSB1JT`vNH>?t|RU(y{T+*Sg_`!6rD=+EDhO$iPIt3;5 zI3=kSVS+K|7|bQ}#WIT}TO-z>3BzRnEguqOT|Sr`4(gCwoj8T z@2gj@x;(IPExDi;T1Oq{?2!<~u{EOQkBPzE^6MSYbd}6f3MHIah--2UYh%o8!u9Em zzFu+~wk`v+U~^QJgK(nAKud$?^)1-WeOyRhC(Hc$_3I%O)fGrgUKkkA0lXz0QSbs<(VinM}ccrFf)*S)8w z$FW7{dL#M!k6z_D1B%Es9$DGoBYVJ}(RcWv&K>jSB}|$0JCM14@$)kcK`0BNB-4!^ z6+&9_L9Y&D6Of?6%xCW&JxXY9xP(=nC7-FN1=;k~nnBH9UuGJKcjs+5Zz;xlxkN{`$pxa?lZca56`Rs{6b( z*ITG3ndtf)#JqZPH3fDN!+3>y-ObdfGrQ`zuHmMTP(>((p6A({-n& zX2Mf}17zuRbb*xR?l5SYlXUI4G8(Lcws3S#_Kz>zIpH(m=O89N*Q zFz`E2xYbuSRdTLSQlQD;dSc=C`}|c3k{|ci#=Sv9qrS26B6y{yInUlB@r6}UH#te- z@$e_adZq0y9(#Z*^6jSiD~ZFN-nn*pp(Elksgtxc{;bK8e(n*DqrK97Fb`iL5VNqz z@3l7HS$JKVpYo~U&q8WhtOe^Os}|eNhO{Sx4@gzt6t4}SJMfz#2|-!$&TV2qB5#Ks z0!;WMN5F9)O(irU@Uiena)b}Pnqo$n@0U$;HKrx&{y{)`$UqptY!?wx=(^u&W)qn? zjF47R`T{iW%8gH7zNC>e)xTiq%gUe`l_pNejFYvoQW0U@l)=<^G*{ixP~&vM>dFELW?d3NY84KDxe--rTn~nW2D}MLl-VJtC}omFs#ldGhw@YT{FycVl1ONCO)M7z6+*9= z`vJ7aU=@Ire^&L2SFad8C8h<4Ju|K}&GB~a%*I#57#HTcii4fLb^6(A@p}oV=leVQ zp7jLWa2lE}HH#Z0ViRlZR0wRJzq+}95A_6auzE14-K<5ON=Dy!WJAkNF+JMv&E?zN$e&*@-%-fxCqP*}xi>Xn(*sYO})Ya8hVf;w7GM|R#$**LwuwTod``rjysfJk|5AP#G zrhEQcmX93sNsZ=zkN_;=JyHY-$YMS?Ui@lldCbpG`pMLW#jthVPy!REZiKtul@G7l zAEl?>lYKI`FC1E*uHe1`>GY<3 zwD9hhaJFLvb5#UKi@E*8k)6j{Km-}5l4tr?Q8Uj?9Mp#Y`JU&AG8?M^ChC=_aA zfku+nJm0C_y;@ID;{@oOVgt(W?`PvmY}fZQFB5fXMf^zFl&J=PPUgLgXL2miR0nTx zlOxO;Hhzt&H=wiDGNuBeW z=k>ZH2Y`I7rI6h}2#y^^XXr{ag|Sn1PYODDDNj&uz~iwetab6*rK z?58>C{q*GzGY=h>2g1I@Um0r-ETPoaBwhlcAXH znG~LAn)ct$2Zs2grk}E<09efdDD>=DkiBl2Ol-;l>vpq$i@+7U<`y!S0e#8I8*wGL zOVea1Rx4Sc_J4w&M`{qicC=SL-0V|F!(!neLxJ5mM$#)Pw%iIdJa0 zwI3D~W)Ru!{|1V5Og&K`Q4NKqoH{%Ep|H~dmzY-{`HWRjH-k(> zK7u*x!G(d^a#17#c3xS-s+_8wz42L_`9uQxm0~khG>cNVUDyVMXOwnlzuniCqW`c~ zVS^mokB6oTo2R8eh@qs~3_5SWmZ6{qv&L&w$D}$IGv)MPH`msLtp#!+aFw3hx_mtk zpvdo}Y;ClWoj39EM?GS`2ld1ExB93;) zZ&Ou%Hc_RxA#yO&VrAC=41?>ZyYb+3@Jf|vELgGEuvqD2Z~WjO(fQH*b{W!%8sCV?rxB=T&wB)F}y1V|Nc!3@Y3Y1d576NZH3nr%lB=f zinpwN9u9ky&;{iy+hkclY7*6RDJ%K1G|hf2R}+V;2<(L*{EQ z%Q$auwOqx<9;k`Vh#G0-bMz1^czdMvyIabB9G7^%xf08*P1X zF8Uy(b9nobcq}V6n6)#P=Kw2Lb+!9tYX8iBXA}ZvhkU3n7{VklYUj2&S4eio;A8U~+q_o1~<;S1(Add0Rp9uig?nVwH*=Hi+}w1*WG8|ydidYs)get|CTZtYn!k^PqEy+0cpcwb+6FsN6A zuPI684r_rBx&5gxhv9^-iV9(@sCwLLR*UOl{e;ZZ{)z6GKxYaQCt?AMUP7GQzw zNFt{7T1>3*8S3cX-CE=iPVvlQEhl90uz7RCW+oEtuFZS+>-MaKEi`$J9O_GCv~_&K zzxavt5D*B{P_;iRy4 z$(_fs;FHZ99I0{PNtrUNpt7@SbXP5Q=`*_j{`crv>Sv-5_3|hpP_B>o^YGE5usSNb zzbtfgbW)JwfgpqNbPY*v)e#*y1brk7CVH;36Doq*K;?m1Xd+#gJcxipS?~q#$?wO) zBvdL^>l0iZ(QMZ<6>>|IRG%lyyazUQc zy{#??if`f1>=7bXxPl&_{=#fXMV9euGAn(ez*`x#6Durr>bic z6?bwx{l(v3L`cZ9*V#zoP4u!`TbFv}uZ^{~Pp7Ay7)MKpoS|?Ky@Vcu`wgnuFDDs)0ri3^VYc@WGgh z=IPU>Lsbcel}x8n)2r973%)DV?J;C63yk`P_O{-QSRbiT7q`qhSbBT{4#ze=Gf}y< zcX@(&E&pCc)0n<-xHNj>G(vF~LvAXMzt%i{aN{*qaJ=2d)KwfD&(xP6iOS1gzkS<` z27K?Bg~FjX(MImh$;As&YI2_e=qH9AI*oDbyAm@agc%(JUgd~3P|)hc{kC=$Heaaf z3xA1e_hQ35J6oDe#q)^bC`A-k@edcSz;x}+RAf9jI{2e2jSq?(z96qLQdN_PN`>B~ zYmoeNS}oiFz6haC9ONFzrb}4(T#!RO-s~DT6TEpTZO~9WlJ^0e?$i29ez+XOkHo)s z6uy!o9`S*>erv+2`+eKrRt&o1kN4RettWBaA#i>95`8Ty?Pj3h1dzf$==s8-h~t6F zPxc#e86uy(wHgkbIv9qbP2)SueV0W5_HCx9fwPN`&vlQA^GjMU4jKCmIOt(WDSw;Y z=@!UU6u3}(c9bbyyarK<5Q?|=MAok2;x>O@?%!%{A^VmHXL!MeTj(oD_rs!mHLwIi z`&%bg-Q#8Yp>w-@k3p z`8;lahCF>zO3Ijt6CVG;L*4Gk%aF8uYe&!TZA30)*X5JKb`S#Kr$x)-)0fB)IFJ6x z;n{fQAIsPKgy|+207zxX(fsaiiFl@$r_+8nn%}Cq_x<@j2F5U>&kW~34E{0S&wmNW z=UKpx>KfmYypV!02{qMz=4&vsJkD!14 z-%F#%8%P0Brt%I-FZCuJBo> z_0Y!;hP_Cn|17NNZaImQW<4sUp#4%g(5t|QRck;iY)m!H}5s`}x?0F1+rsuyOi_cef&3J zmrBSXCa;i?d@c;Q7Q1POz;-KDI;cdt`)6q-u2m{IVR}YBqZx>P{&8U>TN|sE@V^oz$u3)6GXHN;L{FK-{DDhpFD0*Z zzAi_g?1$_9-{LfwV8`~myPkM+#RBhS@&gHpXf=W1+eczZqMWb|3?r-mmMGid`wy4l zDP7$OcW3fYoxLoG}{sQXWZ7 z4fn>ghC3tQCuI&j)^z#Z8~@*Bxx|CB>+u(uG4Xv2HbaEDxkIiH&}?9NvJwwd7zL&u zjrPv`@0G8D#mrw{;(A0-cr!ix^4EuU)||dC$$g*mx>7fiW5nS63H@WxCCA(J+Q+N@7JmuyM^{qYqa3TFd|D^S@MqKh%yY+>p8|&r* z^Hgsct%Sq;|`kzML7;{m+s)F++#eg#_NkdWqSM zC8>Yc`$Fj1PR&W-!2|bdM#+&T8s2iLNT$Q{)uy>M&Hu&STYps*ZgIa`MM?z(q+0|< zLK^835F{j}rMm<~Iuwvb5K%zsZfPlL1nCax?gq(sZuOjV-+$naaWBIkRAB8D&zjGS z@BBZ!+)ng|L};xSTy&(?FzNwl`2hYwsP$2wUQOF(X*HT z-HPbhud>Q9KhUT|?KZ90@h!FCMieWL2N~~(gkt&rJ>`tLazh_6xSQoI_^+fjd3o`p z6@EL*`iPQj{O_vX$Z$QyfafpltSjk1t$2C<3`dpq=DpPT`cEgb32A_H$A{Rh!S~wY zyAP^|H7YP{Xba}#AP_L4#p~?kVBkJ8gm8PoA&*uEt)>C8JDKVfA*ch3N4>x-xDG%G)>8A zib#d5>NjgUuO$6NW#g#Ow{~_!qnWjD_EoUM03ty9_vQ~+#2U=bG%jbTKHZnLMY(!a zudUx~Yk%KY=fbJCYpewg+>E6Wc7m~)*>~Z#d43~-OVSgwT3s|I;0T5xv3X#YzD3o9=)tzem)C=ik14(55mYx)f9<((@Vc9 zxgnc6(;OnEqr(h>gbr(Zx-@p+246uasH*z0r_0~w<0A$402z(nQ%;Zjj}`zncxuR! zTMpa4fBzniS;xHn_f+piOWVFFpS%RN44z)^<#8A4Mgc5X;dTyp`%yy3I57oW&$T56 z%sHW63TPD7{B;*sSA(T)Jsgyi{_((&bzd(pXk7rQt?k;<)9vaYLY5gfeH!DgPgfw( z33&;<_0fw@mSW7&2GGZZ@JdRGJ+kf~fzu$eq$hs-oMw14iyjaDOE zvYM}*rqhDpeQ;nfjknO~+M_%oX;<0&+>^k(OMNqC#-VVBS58~Q;-$LHqX#afm0hMf z#uH{Kh8vl7lpSY$3GPSeZ_xJNL`$-_rfl3*T}UXHBZ>bl_QiZPMtJbpwf2`Cjt+|P+H|?KJZ1;~vmiBpLOBa((z2)9HQ6)Ls969^e$u3|- z9n(oiRg}M+OGkFnl)uCQmXuz^x%uOH=D}rq*S~N zkN*|4gIL-tE6GX@93a-mhA44;Y=(8Cvoa^IFW=J>grawjp#Fe`t)h3H}yU;#Ss11 zrA$Jd!EI?G> zax+@rhM_iYzZeTXJ>LD;e(&DVZkSMk>mhT7GDFbVJEEL)#d}tP@qdi5dDk6WGLao> z*wx6%B_e5}ImGOLE5K#g;s#tlysm}nY120qN4@uj1A@?|2eW=wo%+#q=eqyi^evwddF?n*Z zk0~}*peNNie6KSSU9qt=9;;!uHi74s&^ar1+fIG$(Ejzh>V{fY>2JkhMBcF0;YApj z!Ly@)IN)m|LjKiC`#>g`oD1UX)Aot1_hO^OAOaXxa>R> zt3eM%#OKR;y4V9LiVV)w;Q}Y`kKx`#>^%x7l!Z0GlE%3TOw5J%1Z;h!oPQ> zp>13qA0M}E87@S4?FIyt$3-ZvTHzBA#L#jhgc&$nS4ThEh7anMYeELByxcBaI#q!o zipOKTm|f|Q^YE22J+F@X7QQK6t-H;4Qn7?8%3hV#guZA#-uDuOgE^$|Vg)bUF?Wt#&U zqF@rGrZLgJk8^w4cb}3R-qW+D%zF+S4s6V?6*C)Qry(Pk`^*pyn-j_O&8Ra^NMYSD zGWrnP@W&~9diK!Kr(u%m1Gyg81J5!FblX*5{(W8B)SD`6)EoubKdRb^J?ncH!(GmB zLh17JxQ328)ie{iB4OTxMS${Ziefr@t~OP)Gl?u=lyRb#(sd_pN;@6P6W2sV!YSo8 zmyCXH*p6Kguv=(xn4->R)!(M+PBxMMvk9(^nwc3a59JHFOz`^Q(TCn%uD^;V`Dd;7 z?>%((Nk$t!lxWx`#3L&s^xTw+boMp+L=eq#_i@8SU%N#Kwr>7|;%lUS;a)^2$EAMb z9Ve=|VqWR4UIR~`GB}vWl^-?adI)5-`FMGMzQDesPa&duuAVZ<<88qmN`3o~mP2ER zB2|p$-Saha1L}8Dw)-n8v~heUhwhO1T)n2En_hq52q3EmhNebnHBdfp&il-loAcK@ zKbR`UzzU%9uho>7^taQ5`-TxPh4p!2Mx&uP>ok4Tv}sp8;&c9#ld$npPg}NClB79wp~9-UE*rJ;&*m);^)A0+wT~g(9>9% zn*%>OOm!BFm|n0ImrQtSziQ|Gt~+?^cT9|brKNcaZeL$*{ga}1qvjivmz4b6u;iT@ z5<~U@XxqK&cy|b24Bq4E4Vw~FGz7Q|mJh4Yql*p=p6@l3`4!)4jNN3gR>T%B`-az( z+dS>ihI(qZ;$BH6Z?Fy9bFD{|`v%l9#yv02jH4qfE3Y8x>l?OVw&N89Gp)Ap>0mC` zdV0>wE#=raRubOl2T>BFm420p)^CXcv zdKP`TAzW$giG9_XJ^%8qq|qpEtIv||eIF|OlauD%qj+gXPddV567%wwy_YSgcRGR> z&I+n{gd0$(Lsp1l?_Lz6_<80gH z2N=BWR}sS0hYc6MipJ7t(GXfvzkE`PU%f$n`DnFU#1xMgrS5!PkC!OIYr`sCl*X>% zz`&;e_cM~%`1smq$)Ysx-UbB6C^IR=>SS0Cd4^9bovOqbOYJzLPDNT zzOdbTQ9<_T5qF{WFO3Z4GPRJqe{77T{V0m0!QezfR+r}Y_5L2yOa@qh^}i^uHf1_a z7#rH^qWmu5j*0&Gjd)v9$9n=RK36AS3_L)?h0o32_VFUrhhm079!nF(m>Q^uetPko z+L~c40YO4kLysgBe{^=%1616^u>ulZmk{8)c^pl9G$rMi|}qQdi)Vl$+Jrmjv5=wbhe2;A7&ztQ-KZ5xWexUGNLs|MMSI?X`} zT#=3bh9>j-ZPeVRsx+*9jVW9&Fl8l6(GOO=evbDUM`Q0y!3bZbN7xvafZEym+J3X>&!N-VgMXAj6OD1DGJ zYgeIvmP3Oz6&w=uI?Tq1zS#eqO{hMc3Y|zuk498X>=FW~VBV#oLB=ASo(tU9uF1~) zd3H(1_VDaPNv4-@tYt9GWYXnq=O&(b=bL2kFgfjtZid?1&Yf~gU<53jlXtTm$E%h> zNv5GG_}3B+E3V38?*ijr-PyC2WHK67#g+x0l6%WML#7iQy$;Evq)}rWRtLTJ*sva6 zB@EWz+d;2C@}`VAsC}9{+nsZ2FM$y%9Di3F^-yGGzk%)q<6!f-OR#j`D{D09y7d)J z6joNouWz^=9^*2wbOxQGYr{3aS;f)O!GemPT?I_EiQ{t`ToZ&w zA72;+@U}0xCAjb&Fd;7TIywL4iP`97ZQtMQ)D6RWGi@ivs6ZG+aTk*ly}@VvZ}sqw8kHSj2C#NBk3V6_OqaU*~-k>Z`2J z-`nx-TK1DtC#II-rj6VkF@`_ z#s(F*M`mUie%HzUpdKvD5Eb|%1l%t&0T&d>FtWn(u$AQDKMue<1LU$5!<|7s&(8CT z_{w9_<3~a$zLm8-r-Rg2dUy?=m!$3&q+&;(Cfz^U?MEXbK1u4iVF5-ZIR(g{f&uxcV zSj$&uIV~TDi7nQOK2y zODXs$IX|EwM;{@GgAqB$C|hiq zE3eU&nqOQ{^i&}(5Z6eqy6k>bdEzG<%~vic!gP+3nQYis@0clM+6=mAf-7WS zd$6U70)YU2w6>(29vkDpd4aDu&FfkxnODvnuSGY|z(cyzM%sG++x5?($$wL-Juv0_ zWGWnEA{1-7bdK)mnQm*q`@8mQ5#1SiqUj=XiS81SJ*$ooeSgjT5t!@1%d``eM^(EN z_^b493T$pA?rT6G%8S)&?|wZ-@!0s|d5X`)#675^7N#jz*9~5iv+cwb`1}9jst+NB zj4d!6=4DWzB>guv_(E3h;}n8nPg>I7RC84ORCrSD1~5JrXYHU*Q#*PW$Y-u&6xDM5mdl{eK^}&9NdBE3xxyo_TOuL(+IR z>tJ=Wqs#S!2Qh;g`%;1`)`!D6_lD**p%L}Xls)39?bdtl{|Z|pug%8L=@W8n-FzDI zKjF(WUHfV_l1`oYs>0Xy=DLvb1DR2gs0k%L{d5*#7_VRk@$$Zm+AvJp!q!7-Rjk^M^6cx(5}`1Fg@(y!=4 z`DU_&rnGlP@t5{OCJXQVOQJ=`Z~Ehm=j^M$pg@_-1&o`hH0TmOQ>|t&ef%?+X1^&12;wmd?^5+d+(sV9GNe z`eIi1_UQd977Tpqql4os*kATidU>-q1>aPThZp7V?XerzA{S~TTJDhFXMm>)ZEC)17)(hv%^zIf9g5?=N#-Z;T*JBCPSYLuspxGSrVN& z`et>0jQqdH_ywu?D+o4~S}I-l;U2y6_ip>thFM(R0so3w=7Cylb;#xEFo1gZelPMv zpqNJ`R`M>M@b77GsxyBAvt&W5rIhC@m;b`yu3WBYek136SgX>-{Qv3^!R_#nsg(BF zd*2Irbucqlrk!r9#^3q3#$=;q=;7P4zXf`uR>{cyl%&=28sHeuFaLcb-p24o%iAvP z%}c4|iKMNVY)RAvQhdsim15FtqIUdyxl5%}I~Z69cvyBNYnq|BFJ#hI2va`f`bc>8 z{kMk2i3x?w0>TnzY_+x;Ke>E~H#0ht{<9C3+Z>-*;|z#`c658?e!egc3gSC}!$YC> zftQDYhQ?f~>HzO1r>rbI6y?FWa;<}_#mBf%4-%z$#lxE-p_IsiJm2!P(|8#!nNPfq z3@M8D5LBSR@;qyLs>^s2}&}`tBFHnI=fvOzsIUw zxxp=|-;tb~d$mqaV;&Qu>~ke!Eppa;L^{Lqs%d69A$ZS{{{2&6i^?QqM&_0jR@Ojj zIJL2Xg#aHN^7{lZv}Y=yg;G*Wi;Q1Dpo4k$``O_vv~nHUjg%`4`uXY0HAHdv5lJ-fEI&MvWH3F$sw#q5;5i1MH zCShaQv#G?|X71t5Wn)853NTvQu?#3u{Z&K>&HFmh6f!0 zw-#aU&2v}@<>Bv9a#e#sqXx|bWUtY%{h(g8yW0RW_yQ{I7n4#_8ohh)IBP(!1>B%d zKM!|yd_eXCEi~95?LvI->cW;6_)Xg;Ewg>H&_TDV990VsJ75>!K?PQ0T+k*%8dWRu z8dU^>@_C??JKtqywl2T&$8J82l(R)db#N<6UxeUV;fnHahJkyD5)T$ITv zw;!5PYI*(|(ThvrmPv!RsI)660-EySZ5UEm&T;aSl$FU=&21clhMlh(q_fZ}GqV~V z9*!Cm)H>jP9)FRLP@oXE(Ua`|gUxTg>jPFeC}NpvjDLe_nZ}%7wk9C(;iDM)yS;G@ zH}>OAnJIm!4ym`o-ym>u^2T26DJZ3b>Y~rH%}8l2{M9cy znozpEEj&6l2#;P~AJ9EeG1bV8u|+{ec|Mc!`0e@#o}Qkb!Ydb1byYtIE}^&3|wljCO@#u5%loS*Y)jGNlQ&Qt~s}Cp%3H`mV0Fe$%#1;T<5g9qe zY(VoVHX9?T5ftn;!Ey|vGHw)wkhhhkWat$dsJ)Sr|g;s>8 z%38rcL0-oH3J3J=S4l#eXSm?82LbBuG9oWEeHMrZD9a1x6es_r@w;ZBKeQ_B zd8qu(elaumID3qdL+WFH+3COsDs+gYFZ*35_W5x0X4ImaI`P-9Uu~E2YYRLYPyr5W zFumK=Fg8YtD0umc7kPI~`6B6MaU%tQ_i?l|8)m`3Nf%5Rrc>>52@xnGZJsl)Pn2EV z7BTI}z|DdU?J%s+Y90g)Aju$y+}ht3f&QM2SV8Ua57Vqj;rZ{tTbvsWg9cS68{ApnT5G*QjBQF*A7qghK4 z?|$$}b}SD1f+(ElZXT&r+F@)RNZxq@@=m5hQUp< zGrt>0Ae^@vH5L~~(eYTmv$r<7x`4hX;8+Rmk8u*23$!vpU>w)E{bRZCN|>g z)RpnIzDjOjo={X38DcbtkkV7ELMxXnE*U5%Zq;^ykkV~$yM=RuFU{U0m_mTWhl&c? zfK$S7?Jb#PO5dL>Et%R~sH>~#~6e%O>)Wt!ycIYv%JuS zFk=U(74@~*G_IjYrF6MZXFpeW+*QpoEQAnGVtH?2^KT(Q5@OC@dMI>+ptpQQ1YYxj zlP2fW!W3~=46`;)9;H2&I3^d0q4yR~lVq*?iNNaz%iA=P%%#H?c-7U{GbvE~72mX__A_<|^_V)I7(a~tBickoY zqAdrm0kRu{kK*0>bv|(p?g(-1-^a)LzrPwuaOXnHDDUS^(+YqvR-KPpK+BnGnR@J| z8T8#h`{r=Z@N0~HQC(f#5x|^eJ*HM1c#}6XK@RfjY=21hSgXJgjE4bmU?e6zWf%J+ z?#SdcWA<-UeS>#>dr;G61V5jNLbm`RFLYMi(;)?UWlYR#A>g|eo4rnz`H&!axS?7$ zg0uKojO}!MopmOB+QhJHM=cUO1-GL*G`b%*Kp}s6>Xu<6@YEVQ&;(yyxJQc18DujY zmcGBE+3tSJ)6=tRtNxkRU z1xZ&%u@Un8=R99Lj?I$i{89}xp|z2VoD}*>Capm5#rwI2%z5Q?s}kiKNRh|qu)7)d zY`t@Q6P+W#pPDAGYiTj4e=Pq@-R{PnQJK4gbcrCQ1MM1U_>2crzkTF0!J?CkyDJCi zVSOOB41aaJ-*3+8)yA-Y*cIy!SXmJql!=)+s;&&2a; zqx2&6JpN&QlD8tCP+W`;e2hkzVC@4hBMjvUCgH@y7C54UR2fL4rDTbOC|0>G3(7AZ z7MaAl$wNm0Q)zPxsk{8{Lg%AZ&G_Xly@o9)|4fTro5Vx#@BU9xm?kB(RK3jytbh>{NmhDbnWUs_$mFY@#A^H+eGVs-6|Bk8*5 z8c%=YM|=A-QsW9t(Q4i0#ol6L_G8qV}NI~1@KCpHZwObSLkyI@&59U zQw755ERX>}!Q_ZixqiooOs98HK}u7U`i8$hEy_m3Lbyzf2;H`C?9>$~k|K!rx)Vk7 z#eHk8lW1S+|91KP>WhS4BQf=N-XM5 ztgilvhXs1RVE*VG(CWRl$x&|43v`6&L84Ibyb%vsK$0!o7%gen?+XP(zqPlAqTsB< z(-7W#NgqUL~9-7-U1b31@umL4;FuU*Y42IJe$6P+#+eCs)G8z zs zsBOM?Wk^9(^zvY?uFZbS;@-&yd*J@(J2FoqNCymZkGC~%Wv6C!gTIv3e^?d6YM*w5 zQUrxg*vvV<5wjNC%}US`(P~SC66raflnBV1E2)fAT)uK;8%T(;{j>%1ZU_h_20t-* zvVHoQamv{o(gEwWamYLb6%J7{e936w#+T$LwVQ&;tM=M$)l7?RJGbt~(NtVQY^pD1 zUqN6|3R?DF{Ky)}4v8T3W7es98;N?RS{xXdWj_KvMs?7}(qyILSZpB&P328PC)i{U zoNG&m@ET}0fR>QkY~Ft8>;%sArRT@N#QM0!aPGiE%xl^y(Q80WHYl3cfb8Ny6A9VN z6v>VO<4n8jKz(#`pIdqwNf|bfnv(Jyj$1w(%7;)Elzr*s#BGj-g_tkPlDiVcEeSyr z!Px2rnEG`})YWIunE}y95S`tASPW9a zU~)bJ;rY9Wg_`s)s10rud@rwqY0t5%94oVF>4&CMEhJ2LMz(SKwj|?3xmuVbc-uHA zBK+w;&+e)cH&Q~G3J|!lUD;WbyN;~zo^0MTCi z4k2c5UMk9+SzZoEFz&!1C%@t3i+==OQK`5In}MO}lo&OB$+L)e2IHhaV@x4wZ(N)p}G)`qKl zLgZkoNr>#p1y~V6nM(-+8=L!ap2KqQqbI7X4!o8VRU@>l&tC~VblJ<;U;W{IMcuj1fJiBPHg$>D8YUU01wz)Lme6TL%|8UrNZ6eiOs)kEdG??f!Q}pNz%zl=bZ4>x+sj?L$WcmamxN3!@!_=*M>C7T_ z&a~86T;;kRR&>3$Uv%DR8Fua^z{O2s-}(MYpJ6ZBk2C+C0Z6CsH$T%EQUN6?WE>io zXTEirR%YzyLV!tcPKcLWv6qjhxipp@RwutG_Zc2tZsd5m<0`?#r-yj{xqBg=&J&)H zKgdwdjNow}4YoI98T=MqtcjyY|UC zO!9HhV1*L>_Ct^D-aD@e-Od&R9%{eMIpZ&EDx$nQ&b|KOt&y{;#6Xsj9W)df3YJbK zVBTS1kY4mXKJ~q3oa+QO_p=QL&p_hDt&R}v@%Y-zb7%-y_j}LbBhT7&Cz|eoE==fun#DY0KyyOxH=ehd{hcUkn-Ix zV7SUn#Z2X@3!NCAn`JhWr7wq*q;d&mzVi-M<-Xt7fdK|6n3$N27U2H%E>$bvG{sie z(m6jqvAGUi@QCg#M~m0IWB_o*=^6tf)s4Zj!QDpX_T-4+nGtOKjo6@|ARcmHnyv_1 z|4=34R#W@D%KzXldUTr^2PFUWeO@yV>E`NtBWw>l$%_W>lf)EcEa}+|4Cq4lEHWRV zuWLj|NZ6mPhP}Ts&@g2Z|H#;wt}|XJ46>JcC!yr?gN&Sz;j47oYzAFkkKUnm6}Jf% z5Q!k9dtkMq{KRveGrLhg_ru*%Uisq&^t6O6UCVx#|s7foL5g>wW|+~SLyPzFEnc>0Qs@> z=xMA(^1XqugAD9rGU__Jy``sayX$4BLhL3T^*@x-8)wHLW%OAz|HEjlXKlxZkb$Ag zVjT%`^|VyanJOwNt&{sahCrYWoaQSC&~h%Fms8wAAkCs>i0w-Mz2vKUzpPIAS^b&5 zoOv0nLC_Y375_~+5jnQ=37TqN@R;$-u5ORz_U^IJ8c0pgK=uiuVAH;|8!(>yDcnIY zkOA%|7X2CCS1H|~N7i_H3P7M5hL*5EkU>Y&Ac84|yXAwf$Gx&H?xtbqZ$`%K=MkMs z-*mjClqUCL8lL4~7<=q$#aLi=SLeZ62!XKY{VVMz*b)N;en)#;)&~$V^qDdbaOLS# zE)@Ij0$b*_kxaBGLzF1Uvg+Spd<5G6z<~*TB+==s_wh+5n}oS3{+vdp0|tm3`;IYb z=Ls2QUT`Y$Et>Hil`dgcrsIzQ)TPIuBSWddmXX0wVoC3r4RSIltN-SJEUzt!kZvg=I84dqk^AD3s!{BX)}gD-l#gw ztA5oScKzW>Cl=&i0XIj)VVltDs4|G+@4@X?yytLgWn9-1I0ah6P`VwqCn^^i`i$4G}=eY6Eg8$@_;QfHNaW^Y76ntOo%sqx_ zY(agpu^g-x0_!%J93&ynsJ_0<&c1(ocG?&}gS79+Y$uoHFjXEU6ar9hki37XCa%rv z)a-qBa?^DRp^r_5<3D&mAUZl)?p+aMuE7jC60^^)DBMRU`;&pgY>nTH&uJsB^Fh4h z>OfJsS1N2(?#Dwac7=j)^mw-&3>cZ|YWL;N(17pmVj{?amrZl0Z^h%oUO?dQ@zTz& z?hOVW)%UFq>Y*;h4&s3e$1uryeb{qY%$x3VqN?qZG;%2#Sh3;5I} zWx)$|ifL1hF!k9HY@!WK2L}h=YSg!H88GR1GDIP~ZfFW3YyzyK$7qh;9`DN~s&kLC zW5?Gvx5gm51DbLI0_XA48}eo$3D19iX_>4dEKI>Zhc|3$Wrg9qKUb+`ju*HngP&>) zjM=w#BBG=H!F3Jj8|0No*h12F`%slhGiL3=a%Fr;R|&%EK4Sf19#(R`zzZB^X4SLR ztdM|F64(8hxBhS5ykDjqyCih8(qG$eWxR!7(b@$Z*Q|!bkG^o-VgpIGx%+@UG&6vc-%dw z^v^`u4Z!7pp-VB(>g=xfJUI=y}>O6W>>Vp7y3bugDZYr(yr@ZUOt6kU}f2Q z08{u>0G1#i>hIhAhUTe+4}(1Wnq^k(&lY-9Wq1d+#!75-XSnujI{<-v@~Ozg@%Z#$ zTb zp#Ze;V-AT>K}E7xkCsCGrgM;x)xHSRwU4Z*?MsuMpwVMpJ-@F=aX2ZM`^Fr)RCI_Q zer=qWgrH*NV?*Xl4{O;`@k>1C#iSu{+Y=|>&@HJS`%?5LJ6)NR{^Qjo1Gt{wU}Erk)?p# zlT3ir_K-{jhw7b_^nS7xNaT3zX5R1!SPnm^+Uu1Gm!bvF{S?&IL|hJcb^4Fd4xmxL z5LiI3Kf-pMz8le-Z6bf2QgHlvEcm@ZQh)Vy^(xQ9ha)qB+hZl?-YR9*+Kd|II8mo( zHv~1Ig{xW9CJ_J)GvDC77;p}Fi4QnkhJ9xS-ZYTwH9?&;*!mDMzfD%TE)<|YtOGd6 zjZ)1_#XD}NJ(2(*U?*OM602iO6E-<7J`kZFkgRqu#&egafnw2cFLe#F-aJ62=lNA6 ziG7`vE2nWaO9}?uJ#zo)dAcpBHE_Ie0aGdJ!1iH5Ao05E;BdFW2U}41!sBeq0g!5? z4rZT(hThSRSG?BsJduqH4GwNZzs+(nRuWyWCm@yaWGM$~G9fQ7Skt9S z?{wi=kZZz&&FD#Hf_LIOBz_GGY;3Bw{d(N9=QhK9uMs>KzBr#LiqO`0`?ifRC^({F zxi|G10QZ%%9FO-m^LMce0LDLEG~bR?3_^=WPqIWJ7zQ5q6?}@+l3ANxQjsIm{7x<7{b=1J=O6;!!%4pzq(5se0%vDtXi8C8(^19kpbWV6n^5=p zLFHzBQ`6NvHsUn-_)uVR%s`=`we6?4@O+!;M9wEUw>yu4b))N#MGZ&}VZDy%{Gr^2 zWp~Z|Tr^tZ$_?edbfsNGxW#lA zl!`HnkBf{ursn6bCTuzHv<&8|2K-X(@+i>=`3>IH1(PPKjm;+gf%;?dIYxji_~YZ_ z8}=Ln*{j|&U9PFB!v1NsizC8UWuQS+EQA?k3hq^Wu3QlAX|8d>0qRcd1t#6YlCT08C4f;ZK3H_$p540lZBxdc<&*tnbQ8VI2Py`Jwl#M~X+LFUq~rJgM`V-u zF#LYwOmf=$eP{g+)rY084zBo~a5;{0RKeNIl<1pJ3SOM%$92q?Az&p#b0FIYIr>TJLot$(?Xwz8i|$It*NC{rM%Ih?Z|GYfA65tkcJ&G`Z;pkj&6 z)^c(fVT>suo~{QmDVH_JH*!r~`i1WE(_Y%^HD?=qg?A*te!xT*D+MobNBut@?X*8T zo%W~OtnE_Gd9ZrEdvHMD3Eo%gnELI(eBH3+{Axb{sE}&y!p$r9IOARDiVrK%bvGK^ zcHWx0guHy%heTh>h1Q)Lo0!bPt^=C?%OK~FcAt!O{qqd>T^L4NpvXW&&pk9J7-Jto zXv)D=O=xMiiT^ZvfX87eynOu%ow>~t`=Rq!;4R|D(|=e?hN$4t3712&#&?c5js`KDi3(u%KIj~+dOpS<>%J6m7)Bw*0<Uk7{NUq|vo+2)ia|Ak``;WA%K%FHnDVeO8Djkk~S@FGeoRB9)Suy6~!`qs1 z$eG*y`D)mLH8n_(6mS?F7&iD6bG+R1vmsDTbTOoLJ39@Jj0A^~VhSp>cU~4b6Ltt8RzL@ zGgTnaA1@}!9n%{+VYjVWaNgBRDKx>slm4y`p=QSoiCrn#+d++W554F`LJIaYLI=LJSULC_qN{0r|o36-N>DU&>A2|0p+c{}0N|-kAZ5&e#;c%6^r1pZLxn{|M5g6E1b21^6c)1+RWlP* zvlA5OMWUk7LL>|ptN*R1ETWH7cR@2~8+m_ffzCfWmULWeKD^D)IG^R66a)u|Onk4{ zx=EERexNnduy7MrR6K0$= z9ppV@eE$GGH2(YIrBld@o1VUkEiYeQ&f^hE51ZU4;^o$#PsFU{LaYBv#o-CPcxm%U zG4uKtoe3yOGON@nxZ2y;OY-UXOLfW559av@%K+Btg3RO zQY#3gVe{WFIi|IX#(4-jBC)P_laD(#mg;462g1wFQm8iMEG0*US~SQ36l| z1wCMq{r3ZDV(p-N@5utDjg4-rA)BlJ3_jeEuz#X)6;ru~PjaHmur+DlN7VniqQjue zFYRHvsnCiAE+jtYlKSGia%yU7;@oCF zt*t9t+uPnj;y%GYpMak;wU-$w_4sk2M%>?3^eT?IZhCt8DhmsxtN-+S4T52? zuKuF)jgS$(LBb(^hI#`B2M2*D|7<&!Wc3niSf>J28a(<;qZ-r(b`#&MJYFE(fmbiL zaDdag3PRrl2{_9b4l|$iu~Hgl=1$C>zc{wrFS1bll^I?~M`NP|C>`V!@`>O;&=4{n zXZdGwi*eDslTs)$X5z5y$9eZ|fVyzzte1zEL?v6bsI4^TRyvfkzl(Ie{Sk6)vFrA^ zG=D-56%Q>w46=Hy%$nlTv_uCTrz9b$6@OTP5>ircAC2up z7wyRbc@7?}*GIX}-NnnE2;pFMC?!BpojNMlmv-TuZ!;|=0+ogOfZ3L&TJ4G#R|#il z9_Y_WL0>hJodbfLf>FW0Eq}ANF)04Au@Lx8q!H3a@>f^A`}{dzJdVuOUq1nEDADn$ zy=hOtstyA^DJC?`M3v1C-5y>P*8K2^`cDQya^Uo7_w}S z3jcz6X6@jL{L{Hp$gVbm#Gja-zlxl>j@5AmA26+0P|-#8yoQM>3cN(@ z25m!Pg!mWG604`Dw{31}K%o{8eyGreDE@i0#PLI}GIYpgtB5^$BI&R?aRU-CjD`EY zCHlpwyM&$KHosPN56D+4V>Tbmxf&wzntZG*QEgL@ZpdsT>lTo{1E9V;3*J?De0=`y z;WazLtsz~1#=yRTjvL#mDlpj;1cV9xLzi4xEp2Vq!?VMwWiyxZDH6`C+f)f#sig@C zh~?#Fh3o-|XmZ}Yhet<5FRSlb1n(}?*r*1FGSa2tft(t8DFc!4o9YQza0mpTVP0)b z)yV4G50NnQva@Fo&$F?yHBJh|ox1&9)OJ|$Q?`zd_8$qi1Dk&}T!ZcP0P6}%Fj=Bf zfl_kMRQ2IvqPss)Fwyp9R4f+)0hfd3j@WMveyAwQ^$=GDG96?xL7gH#_lWGmY!KIR zg-h5W(ikMm^4D?6K|-)JS`wtK?;sA7nKLF6E+M7>wJUCIoj0<24sEK>N_MX0=#=yt z?@MWEU#yp=G3Xg4Ku)FbB=E_CdE~P{mbGEzrw8VH&ptb2QxfH;0)vGZ=o6m@alA#m5h#c| zEf;5pq#>ObtD6m|CH#AmX!opwk1xNz+(fPU`7xL$K;68Chy&7+?Gw|_!tA-y{MX@7zLvCOK5Im1%{9A@FxqscH=dLxlWYcd)gKk*)+A=VVRtn(gKP;-&S_WpBtA z3v`zK62jyRmKCIshtuQ5MG0ID?CfOag0tVzB?fVDVueXNF`pi)(LBA+{z<=NCF5nz z{boT>84Q&9h5YdJY&aB4>bmWpKNn!sYjwYX3Zv7k+kG?IN-c-tR~V>CENFhYa5Kr3 zFGQc@!FlFk^~gW+_jg$<;!?3Yp|r}EBUUB@Rq519Ki;61r0g&04bqJG=!L$#*naeP zMh{Tqb+WksY%iF1~|7gybu!g3C(Nzn@LF-&@g#&LXA}s6@uko;=IGhSJpw zbteeh-nL0fO|ESleF&i$t3r(>yJq~QI88v;`Rz@M;sARD6hB#G{J zWeT(T-p3E2I?$Q^fRp#Sy9q;aw7$Rp7o9-FX{yov_l}WlXG%GY;XQ@0up81sR!|!B z<+W8A7)9+L96Z@rQ!fZDNv2lJjWg;!gPi0tq%8HTqa`+{YfDQ$3qQM2Zvh&dni7~1 zIQ|#Jt%HWRP&%+t5!q3Z4)$L7i7w5 zAZ?_m(faqyj4!k&s$JgT;6C1)Wc|0ieOzgKb{~H>7TlU*c*?Pktnk!Gudj|4740*_ z%JR3hZH9KjpLQtG>-pC}r|Y0LV+kLOd*(``#xP0Oa!H2~r~yr{HKaewr8#b4OHp9L z`0^_$$w#{SLy5D4@9Z+Fw4x%>{p>j_IGrx6ob<@P=3AbJ4>#7lPf)2Lt5|Foh< zR?T!&GDZjF?7-AhDKU;`rl0Ci|KREMv3I=OuI}{GHQLjxG!+&`?ftEN0Jdo-LRp4q zO3!u%Cm*nGJ4QP~6{_wh`WblfzlW?1$STjEss#Hkt?$*U9EF^W*g8mdF+V@gz!)mz zXe&@|IdgTXKhyj3XEbgHi^-H&+tXtXU48vH^&^byH*b2t(+B={7f?V7g3cxs{scV6 zy$}9{yJ~#qS}kvE5IHpbn4FZ1dL`NU<6DuY&Tba&bmiQyZ*@(h57Ui|u-zxV&tKCS zT&ofhuQb>w&T4$r; zus}vJY_qe%X01=!;IN@ZcBq10!Jy$jRGqe$lwH_Dzv}Ah6Y=l}MD1>FHe}KV*rz$6 z@3OC<{+!DKYUS1hogS zDtzqx<~ez=>w46OUb*3SBTEfeBH`g;`>6ZxJ7De&trnA+YXpu`+qQ8X%N&)?+#lM` z6`2oWuZ~8TU69gHTM7QX4?L)@3VS}&q3?Io)6*dp=j4M9HA<($H@VM_Ex;#3eBKE<@g1PQ{IWR7WV_$51zM z<6>Xo)9qEh%f>}`1YCvnm3s!CAozB@UfBpu%OKyz__{>|wW*Jap#f<#-hcE~b!sM5{@K*qXkchf`M6tKuEG}(Jv z_gnyRu3FxG1Iz9;oCnqIq`b3-*>^pp+_YGXl?YifgqPa6?qqVwwC3rM$B#Qqr?Y0a zs&UQyN$(vhm)M(i`2E8zO+Hg7qS!#f|I6=x4{U!%Vp5 zakj0D65jef37x2@p6TT@UO+*R6O`$xX}pbP#i0?gpmas}-`D&Y^+|w?-BjHq;UjFu zmIr8U<_P#KTjN5XuhiDq+`EVBO12h{;8RQ&Z-m99H)60-S$2D^zp8z-&})E6^5lxjQYhs$%3 zcS1vNA|?6%gEb9izX%F}dsAETqZg_EtLSsTVs@}6q7OoAT~6v!fe6XtY*)YckTryZ z@%!wGcd9%8ojAHBo^v#Fdoo@uIQg<^o&RYCE+RbLj9@x-QA3nbuC zd$Bw3yh*z-yhvyBcL%OesnPw?^K=)KH9p7;8UGq*n;FX4+Y<0d>+Ico{pYPnV_`R#6H$Wy>&^Vg+!H4!g-}PouShI-%j?)+Q&r#=$x0;2i0T935?qQQ; z)N}1=o@mEkkt~4Q1T^Nkmbek;XdE?7uLgUnBzsWN57Na-{5O)6-r^RJOaGah9nu|z zl0HMYf!VSj5%fqJj8LG!T<9;TXcT-7zOf1})p!R7vwUhMW*Yv2wlB_OKeP!Ey?!Hm z?u&U5f=)qA+x~&%=U`z`5qaKx`~Mk2=uLm21+hNcAS*3Nl z{{22GN`Ra_-#UNTr~W4p4I)JTo2jYuT{kcQCde;fT7`XKXmm)+8s)#Q{%0Gq{|lJa zZ!-}PQTj=GKNZ=Re`ia3Zn1w^81d$1Vn();!66avDl65T|K|ju%jhj>f%2rE2LG*H zjKt?Hor=ts|IYdX%S)Do9WEg-BG7D|fhri}t=Ja-oGlV=)>GcYM}3KixLV{>#GVC} zq$kWlHxQ*T{A934k<|u92EB)Nw#fBB<^M@o_J7|y?IPd^*QEBfV}hdf))}HyUfE$Y z^+fzLStCmDK~NpzkeiE($bzwp(MW0Z6c3nxRzvFlo!lad3fv(8Xcdu^9pOSt4US3C z%~SaA#V>$)!APVT7#JY0eT@$J^pwo&zp?PJ0$>h$e5qvIqmqxQ60p1pf=+-v{huS1 z7Wlym1;d!PO|!|XOI=~eyh8DzPGu1m*;L2Y)ZQghs0_>CJfN7)cyB)k{459^!eS~ zc!Mch#I3kPV^Thx!<$>H1UK(;u!D~lP#K|G*D&$ViCp=G@j5CinW6Gi7UvhvVXDFU|cKX~ww zF;O@XGAT%h?ga>HYZD#be(<`#lW1NlQ-QXU%Ouo+HcKh*qWj57Nz2Y>o(h6RH~5kX za~!(%}~K>?U=jWYc&EJ0~S0)y31CX3(vBFUs`{&?v5)>dD>ee(fSoEsQi z#~zulxp}yeb6bvpRNB8gSOY8uq?5(4EDu424pMlT^kV5UD?Mmf`LP#pi=lGc%zo{{ z580iP@2{dWxKD6L>xhtqwMiG~ONfwoqH|SMR!QXC$Hwyk-tA)|rh9JH)v%t|CkA6i zK^I1V=!5_@$gU@YtL~AGzlYC1f+FA7#&8>!o zfB$05@nI$b5n%ZV`EigqTWuIp&)Q&dc-1PLWs?Upnaz#=yWngrO(YjPtMroKl zaI3Cg1d$(uZu1@B%wD;LP4~joG)uM+v0veb0&3$TY)y!Hc*gzja>T~E9o{%O+!X{s z3WWlcM+hpVd9Z;m7|6xL_5#Y4Z;Kxk9iiwypufTS6(r+Nn3!auc%j|OocrGkAkQ*y zN?Un(7BdDEWk7>g9t7�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 z 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 K%N5I-Kl=~l517vY literal 0 HcmV?d00001 diff --git a/reports/assets/unibus-android-login.png b/reports/assets/unibus-android-login.png new file mode 100644 index 0000000000000000000000000000000000000000..0207c6790673850481e2e8c62b8818d9d44b882c GIT binary patch literal 72287 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 literal 0 HcmV?d00001 diff --git a/reports/unibus-grafana-monitoring-dashboard.png b/reports/unibus-grafana-monitoring-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..c6a9b51b06067116ae7dcb370e498d72a85d3307 GIT binary patch literal 128135 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

i)@CN1PjlnsG7Yp{~Oc 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 QGjEKiPTE^mTbxh$7i*q-00000 literal 0 HcmV?d00001