diff --git a/app.md b/app.md index e13fbe2..cfc7181 100644 --- a/app.md +++ b/app.md @@ -2,7 +2,7 @@ name: unibus lang: go domain: infra -version: 0.5.0 +version: 0.6.0 description: "Bus de mensajería unificado sobre NATS+JetStream con cifrado E2E por room (megolm/olm reducido): service de membresía/claves, librería cliente y peers demo." tags: [service, messaging, nats, e2e] uses_functions: @@ -154,6 +154,24 @@ agent..{in,out} inbox/outbox de agente LLM (agent.scout.in) ## Capability growth log +- v0.6.0 (2026-06-07) — descentralización / alta disponibilidad (issue 0003, + fases 0003a–0003e), report 0006. El servidor NATS embebido gana soporte de + cluster con routes autenticadas (secreto de cluster) y TLS mutuo de nodo + (`pkg/embeddednats.ClusterConfig` + `busauth.RouteTLSConfig`, reusando la CA + del 0001). El control plane (`pkg/membership.Store`) pasa a interfaz por + branch-by-abstraction: `sqliteStore` (default) + `jetstreamStore` nuevo sobre + JetStream KV replicado (réplicas configurables R1→R3), con `IsAuthorized` + fail-closed ante pérdida de quorum. `membershipd migrate-to-kv` mueve el + estado SQLite→KV de forma idempotente con backup previo. Los blobs + (`pkg/blobstore.Store`, ahora interfaz) ganan un backend NATS Object Store + replicado además del disco. El cliente acepta listas de seeds NATS y de + control planes con failover/reconnect nativo, el anti-replay pasa a un store + de nonces compartido en KV con TTL (cierra el agujero de replay multi-nodo), y + se implementa la ACL por subject derivada de pertenencia (audit H4 residual: + `busauth.NewNkeyAuthenticatorACL` + `membership.SubjectACLFor` + + `client.RefreshSession`). Todo viaja detrás del flag `decentralized` (off): + el comportamiento de un solo nodo (SQLite + disco) no cambia y master sigue + verde. El despliegue multi-nodo real (0003f) lo ejecuta el humano. - v0.5.0 (2026-06-07) — hardening de seguridad (issue 0004) que cierra los hallazgos de la auditoría red-team (report 0004) y lleva el veredicto de exposición pública de "NO" a "sí-con-condiciones". Anti-DoS pre-auth