Dos precisiones para que el registro diga exactamente lo que el código hace:
- durable: documentar que `real` es un oráculo INDEPENDIENTE del desembolso
FÍSICO al usuario — se incrementa en el ack (punto de entrega externo e
irreversible), una vez por retiro entregado, y NUNCA lee la contabilidad
interna (value/committed). Cuenta eventos de entrega, no lo que el sistema
cree que gastó. El guard usa la contabilidad para decidir; si se corrompe
(rollback) se entrega de más y `real` lo atrapa. Ahí vive detección vs
prevención.
- BOUNDARY.md: CloneDetected es una ALARMA, no una recuperación. El daño de
una celda ya ocurrió en el mundo (dinero real entregado); aislar evita que
el doble conteo se propague, pero no recupera nada. La compensación vive
fuera del sistema, es coordinación, y puede fracasar. Acotado y delatado,
sí; reversible, no necesariamente. Para que M4 no lo lea como auto-reparación.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
T11 §D: una celda con dos escritores vivos que no se comunican es IMPOSIBLE
de resolver coordination-free (CAP dentro de la celda). El fencing es lo mejor
posible: bounded + detect, no prevent.
- fencing::FencedCell: spent indexado por (device_id, epoch); epoch monótona
DEVICE-LOCAL (evita consenso), persistida al arrancar (boot). merge une por
máximo por época y devuelve MergeOutcome::CloneDetected{device_id,
stale_epoch, live_epoch} cuando halla dos linajes. overspend acotado a una
celda; reconciled_spent = solo el linaje vivo (aísla el obsoleto).
Tests §G.3 (clon detectado, acotado a una celda, delatado; el linaje vivo no
propaga el doble gasto) y §G.4 (fuente monótona una época = Ok; el clon nunca
pasa como Ok silencioso). proptest: daño de clon siempre ≤ una celda.
BOUNDARY.md: el teorema de imposibilidad, la garantía real (bounded+detect vs
el fencing token linealizable de Kleppmann), y por qué epochs device-local.
STRONG_RESULT.md: el terminus honesto §E (seguridad coord-free módulo un
supuesto físico nombrado) + el contrato de M4 §H listo para escribir.
73 tests, clippy limpio. Hito T11 cerrado.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>