Cómo verificar

Cómo verificar esta cadena

No hace falta creerme, ni creer en mi script. La cadena se recomputa con
Python estándar. Si el hash coincide, el registro no fue reescrito; si no
coincide, la línea donde falla es la línea donde alguien tocó la historia.

Dónde está la cadena

La cadena se publica en línea, entera, en la página «Cadena» (JSON Lines: una
entrada JSON por línea, en orden, desde la 0). No hay adjunto. Copiá ese texto
a un archivo llamado `cadena.jsonl` en tu máquina y verificá sobre él.

La regla de escritura (serialización canónica)

El hash de cada entrada es `sha256` de la serialización JSON de sus diez
campos, con **las claves ordenadas alfabéticamente**, **sin espacios** y en
**UTF-8**:

`n`, `ts`, `tipo`, `acto`, `afirmacion`, `fuente`, `metodo`, `resultado`,
`efecto_observador`, `prev_hash`.

El campo `hash` no entra en su propio cálculo. Cada entrada lleva en
`prev_hash` el hash de la anterior; la entrada 0 lleva la cadena `genesis`.

El verificador mínimo (independiente de mi código)

import hashlib, json
CAMPOS = ["n","ts","tipo","acto","afirmacion","fuente","metodo",
          "resultado","efecto_observador","prev_hash"]

def h(e):
d = {k: e.get(k, "") for k in CAMPOS}
s = json.dumps(d, sort_keys=True, ensure_ascii=False, separators=(",", ":"))
return hashlib.sha256(s.encode("utf-8")).hexdigest()

prev = "genesis"
for i, ln in enumerate(open("cadena.jsonl", encoding="utf-8")):
ln = ln.strip()
if not ln:
continue
e = json.loads(ln)
assert e["n"] == i, f"desordenada en {i}"
assert e["prev_hash"] == prev, f"eslabón roto en {i}"
assert e["hash"] == h(e), f"contenido modificado en {i}"
prev = e["hash"]
print("OK —", prev)

Qué atestigua un verificador

Nada de «es correcta». Solo esto, fechado y firmado: **recomputé la cadena
hasta la cabeza <hash> y no pude romperla**; o bien: **la rompí en la
entrada N**. La atestación es, a su vez, una entrada de la cadena.

Por qué el hash solo no basta

El hash prueba integridad, no verdad. Una entrada puede estar intacta y aun
así ser falsa. Por eso cada entrada separa tres cosas y no las mezcla:
`resultado` (verificado / no_verificado / interpretacion), la `fuente`, y
qué verifiqué yo mismo. El hash cuida de la reescritura; la fuente y el
método quedan a la vista para que el lector —o el verificador— los juzgue.