# FLIPS — de-circularización de T5–T7 (T8a) Registro de los veredictos que **cambian** al pasar del encoding de retículo de T5–T7 (circular) al **orden nativo derivado del merge** (T8a, Addendum §B). Cada flip es una confesión: ahí el veredicto de la pista de retículos no venía de la semántica del dato, sino de una incomparabilidad **fabricada a mano** leyendo la etiqueta monótono/reset. Reproducible con `oracle::tests::t8a_el_orden_nativo_voltea_los_resets`. ## La causa (T8 §A) El encoding de T7 sembraba `ResetVal` con `generación = componente del subgrafo monótono`. Eso **lee la etiqueta** `monotone`/`reset` — la misma información que usa CALM — y con ella construye la incomparabilidad que hacía colapsar los reset a ⊤. Acuerdo perfecto con CALM, sí, pero por circularidad: un espejo, no un teorema. ## La cura (T8 §B) El orden se deriva ahora **mecánicamente del merge**, sin tocar la etiqueta: ``` join(a, b) := merge_del_CRDT(a, b) a ≤ b := ( merge(a, b) == b ) ``` Bajo este orden, el registro con reset (LWW: gana la generación mayor) es una **cadena** totalmente ordenada. En una cadena la difusión siempre reconcilia al máximo → **corre libre**. El reset NO colapsa: un LWW-register es un CRDT, y los CRDT son libres de coordinación por construcción. ## Flips observados (8) Todos en la misma dirección: `coordina` (T7 circular) → `corre libre` (T8a nativo). Ninguno al revés. | Caso | T7 (circular) | T8a (nativo) | |---|---|---| | `par-no-monotono` | coordina | **corre libre** | | `camino-con-reset-en-0` | coordina | **corre libre** | | `camino-con-reset-en-1` | coordina | **corre libre** | | `camino-con-reset-en-2` | coordina | **corre libre** | | `dos-resets-separados` | coordina | **corre libre** | | `estrella-con-reset` | coordina | **corre libre** | | `arbol-con-reset` | coordina | **corre libre** | | `todo-reset` | coordina | **corre libre** | Los casos puramente monótonos (`camino-monotono-*`, `estrella-monotona`, `triangulo-monotono`, `cuadrado-monotono`, …) **no** cambian: ya corrían libres, y siguen corriendo libres — ahora por la razón correcta (su merge reconcilia), no por topología ni por etiqueta. ## Lectura honesta El veredicto `coordina` que T5–T7 daba al reset era **artificial**. Bajo el orden nativo, todo CRDT puro corre libre en cualquier grafo, ciclos incluidos (`oracle::tests::nativo_todo_crdt_puro_corre_libre`). Eso es correcto y es incómodo: significa que la pista de retículos, tal como estaba, **no medía nada que CALM no midiera** — de hecho, medía la etiqueta que le dábamos. La obstrucción real no vive en el tipo de dato; vive en un **invariante global** que la fusión no preserva (saldo ≥ 0, unicidad de ID). Ese es el objeto de T8c, y el único sitio donde puede aparecer la "discrepancia buena" (Tarski libre / CALM sintáctico coordina) que probaría que el instrumento es más fino que un check por-programa — el marco es *invariant confluence* (Bailis et al. VLDB 2014). Hasta cerrar T8c (`STRONG_RESULT.md`), la conclusión honesta es: **versión débil no descartada**; el haz podría estar colapsando a CALM.