2 Commits
Author SHA1 Message Date
SergioandClaude Opus 4.8 100d09cc73 T11: precisar el oráculo del tally y que CloneDetected es alarma, no recuperación
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>
2026-07-01 23:43:15 +00:00
SergioandClaude Opus 4.8 a8a39a67f6 T11c: fencing por época + detección de clon (frontera §D) — cierra T11
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>
2026-07-01 22:50:57 +00:00