1be92f63c6a85b3755fd8e7a8abdc97f604ceb84
T10 §D/§F.4: T9 no definía el eslabón cuando no hay ruta al presupuesto
(partición). Ahora:
- router::RebalanceResult { Routed{edges} | Unreachable }. rebalance_to es
TRANSACCIONAL: si las vecinas directas cubren el déficit aplica el flujo
(Routed); si no, no mueve nada y devuelve Unreachable. Nunca a medias, nunca
bloquea.
- SpendOutcome + spend_with_rebalance: gasta local, o repone por rebalanceo, o
ante Unreachable RECHAZA con spendable = presupuesto local (fail-safe). Nunca
sobregira ni cuelga.
Tests: el 60/60 particionado con [50,50] → Unreachable → Rejected{spendable:50}
(gasta ≤50, valor≥0); con ruta se cubre por rebalanceo. Tests de T9b migrados a
la nueva firma.
AVAILABILITY.md (§F.6): el precio honesto del escrow — bajo partición la réplica
se limita a su presupuesto local (CAP: safety > availability); diffuse lo mitiga,
no lo elimina; sin promesas de liveness, solo safety. 61 tests, clippy limpio.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Languages
Rust
100%