chore(0006): bump unibus to 0.8.0, close issue 0006 (cluster hardening + wiring)
All seven phases (0006a–0006g) merged: blockers N3 (replicated nonce) and N2 ($JS.API.> KV leak) closed, decentralized KV store wired (--store kv), homogeneous cluster posture enforced (N1), RefreshSession in all clients (N4), the lows (secret out of argv, migrate guard, R1/CA docs), and the 3-node deploy material. Full suite + every audit-0008 attack regression green; govulncheck 0 reachable. See report 0009. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
name: unibus
|
||||
lang: go
|
||||
domain: infra
|
||||
version: 0.7.0
|
||||
version: 0.8.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,30 @@ agent.<nombre>.{in,out} inbox/outbox de agente LLM (agent.scout.in)
|
||||
|
||||
## Capability growth log
|
||||
|
||||
- v0.8.0 (2026-06-07) — completar y endurecer el cluster (issue 0006, fases
|
||||
0006a–0006g) que cierra los bloqueantes de la auditoría dedicada del cluster
|
||||
(report 0008) y cablea el control plane descentralizado que 0003 dejó a medias.
|
||||
(0006a) Se cablea el nonce replicado en el binario: un nodo con `--cluster-name`
|
||||
usa el bucket JetStream KV compartido obligatoriamente (fail-fast si no se crea),
|
||||
cerrando el replay cross-node (N3); el "ciclo bootstrap" se resuelve con una
|
||||
identidad interna efímera que el authenticator reconoce (full perms) y una
|
||||
conexión in-process privilegiada. (0006b) Se cierra la fuga del control plane
|
||||
por `$JS.API.>` (N2): la ACL pasa a un allow-set cerrado por-room (JS API solo de
|
||||
los streams `UNIBUS_<room>` del peer), dejando `KV_UNIBUS_*`/`OBJ_*` fuera del
|
||||
set y, por tanto, denegados. (0006c) Se cablea el store KV descentralizado
|
||||
(`--store kv|sqlite`, default sqlite = baseline idéntico) con un `storeHolder`
|
||||
fail-closed que rompe el ciclo bootstrap del authenticator. (0006d) Posture
|
||||
homogénea: un nodo rechaza unirse al cluster sin `enforce`, y `/healthz` publica
|
||||
la posture (N1). (0006e) Todos los clientes llaman `RefreshSession` tras cambios
|
||||
de membresía (N4), de modo que la ACL es usable bajo enforce sin desactivarla.
|
||||
(0006f) Bajos: secreto de cluster fuera de argv (`--cluster-pass-file`/env +
|
||||
inyección en routes), `migrate-to-kv` rechaza target remoto sin `--ca`, y docs
|
||||
de CA separada para routes + R1 SPOF vs R3 HA. (0006g) Material de deploy del
|
||||
cluster de 3 nodos (magnus+homer+datardos) en `deploy/cluster/` (certs, unit,
|
||||
script de despliegue dry-run, runbook) — sin tocar ningún VPS. Toda la
|
||||
regresión de auditorías previas + los ataques 0008 siguen verdes; govulncheck 0
|
||||
alcanzables. Branch-by-abstraction: con `--store sqlite` el single-node sigue
|
||||
idéntico y desplegable en todo momento.
|
||||
- v0.7.0 (2026-06-07) — hardening de seguridad 2 (issue 0005, fases 0005a–0005e)
|
||||
que cierra los hallazgos nuevos de la re-auditoría red-team (report 0006) y
|
||||
lleva el veredicto de exposición pública a "sí-con-condiciones". (0005a) Bump de
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
---
|
||||
issue: 0006
|
||||
title: Completar y endurecer el cluster — wiring del control plane KV + N1-N6 de la auditoría 0008
|
||||
status: spec
|
||||
status: done
|
||||
created: 2026-06-07
|
||||
closed: 2026-06-07
|
||||
closed_by: fases 0006a–0006g (ver report 0009); unibus v0.8.0
|
||||
domain: security
|
||||
scope: unibus (cmd/membershipd, pkg/membership, pkg/embeddednats, pkg/busauth, pkg/client)
|
||||
depends_on: 0003 (completa su wiring), 0005 (hereda el bus single-node ya seguro)
|
||||
|
||||
Reference in New Issue
Block a user