Para máquinas · sin clave

Consulta la evidencia, no le creas al resumen

Cada corrida sellada, veredicto y pre-registro del Evidence Ledger se lee por una API pública de sólo lectura y por un servidor MCP. Cada respuesta lleva elsha256 sellado y las URL crudas de dos copias públicas independientes, así que todo lo que cites se puede comprobar en vez de creer.

Empieza aquí

Sin clave, sin registro, nada que negociar. Tres pasos te llevan de la API a un hash que recomputaste — pégalos y funcionan:

# 1. qué mide el archivo — abre con su propio negativo
curl -s https://rosettaquantum.com/v1/state

# 2. un archivo sellado, con el hash que declara y sus dos copias públicas
curl -s https://rosettaquantum.com/v1/archive/PR-CLEV-001

# 3. recomputa tú ese hash y compara — imprime MATCH
curl -s https://rosettaquantum.com/v1/archive/PR-CLEV-001 \
| python3 -c '
import sys,json,hashlib,urllib.request
d=json.load(sys.stdin)
raw=json.load(urllib.request.urlopen(d["github_raw"]))
meta={k:v for k,v in raw["meta"].items() if k!="content_hash"}
body={k:v for k,v in raw.items() if k not in ("meta","storage")}
mine="sha256:"+hashlib.sha256(
    json.dumps({"meta":meta,**body},sort_keys=True,ensure_ascii=False).encode()).hexdigest()
print(mine); print(d["content_hash"])
print("MATCH" if mine==d["content_hash"] else "MISMATCH")'
      

El paso 3 imprime MATCH. Si alguna vez imprime MISMATCH, estamos equivocados y puedes decirlo en público — de eso se trata:nada de esto pide que le crean. El hash cubre el contenido del archivo, no el archivo: storage queda fuera porque dice dónde vive una copia, no qué dice. Las cuatro convenciones están más abajo, en Cómo comprobar cualquier cosa que esta API te diga.

Para agentes

# el contrato completo, legible por máquina
curl -s https://rosettaquantum.com/v1/openapi.json

# MCP sobre JSON-RPC 2.0 — tampoco pide clave
curl -s -X POST https://rosettaquantum.com/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
      

Apunta un cliente MCP a https://rosettaquantum.com/mcp — 9 herramientas de sólo lectura, sin paso de autenticación.

Publicamos nuestro propio uso

curl -s https://rosettaquantum.com/v1/usage

Con qué frecuencia se llama de verdad a esta API, a la vista. Si dice cero, dice cero — la misma regla que el contador de victorias cuánticas. No guarda IP, ni user-agent, ni identificador: sólo una fecha, una superficie y la formade la ruta, así que nada de ahí puede reconstruir qué consultó nadie. También declara sus propios puntos ciegos, porque un número sin sus límites es una afirmación.

Devuelve el estado medido del archivo. Hoy abre con0 victorias cuánticas medidas — en ninguna corrida sellada hasta hoy un método cuántico le ganó al campeón clásico. Ese negativo es el producto de este archivo, no un hueco, así que la API lo dice primero.

Endpoints

EndpointQué devuelve
GET /v1/jobsDry run only: validates a request and returns the plan without queueing work, consuming quota or writing anything. Requires the Idempotency-Key header.
GET /v1Indice de la API
GET /v1/openapi.jsonEsta especificacion, en OpenAPI 3.1
GET /v1/usageCuántas veces se llamó a esta API · público, y declara lo que NO se guarda
GET /v1/stateEstado medido del Evidence Ledger
GET /v1/runsCorridas selladas · ?recipe= filtra por receta, p.ej. RQ-0012, ?limit= maximo 200, por defecto 50
GET /v1/verdictsVeredictos publicados · ?limit= maximo 200
GET /v1/preregPre-registros: compromisos sellados antes de correr
GET /v1/predictionsPredicciones forward, comprometidas antes de conocer el resultado
GET /v1/manifestsManifiestos: cómo leer el archivo
GET /v1/recipesRecetas del catálogo
GET /v1/reportsReportes de metodología (p.ej. la postulación a Cleveland)
GET /v1/erratasCorrecciones publicadas sobre sellos propios ya anclados — el original no se reescribe
GET /v1/archive/{id}Un archivo sellado completo, con su payload
GET /v1/archive/{id}/rawEl archivo sellado TAL CUAL se selló, sin re-serializar: es el que sirve para recomputar el hash
GET /v1/searchBúsqueda en texto de las corridas · ?q= obligatorio
GET /v1/algorithmsArchivador de algoritmos cuánticos · ?categoria= algebraic | oracular | BQP | ONML, ?q= busca en nombre y problema, ?limit= maximo 200
GET /v1/algorithms/{id}Ficha de un algoritmo · acepta alias por sigla
GET /v1/categoriesCategorías del archivador, con cuantos algoritmos tiene cada una
GET /v1/sourcesFuentes del campo: QPUs, librerías, venues, blogs, normas · ?tipo= qpu | libreria | venue | blog | catalogo | estandar
GET /v1/challengesCorridas de challenge publicadas
GET /v1/challenges/{id}Datos de una corrida completa
GET /v1/challenges/{id}/{proteina}/rawLos bytes exactos sobre los que se calculó el sha256 publicado — sin serializar nada
GET /v1/challenges/{id}/{proteina}Una sola proteína de una corrida
GET /v1/structuresRedes de contactos publicadas por el motor
GET /v1/structures/{pdb}La red de contactos de una estructura, con el sha256 y la URL del PDB de origen
GET /v1/propagate/{run_id}Los blancos de una corrida de propagación
GET /v1/propagate/{run_id}/{target}Top-N predicho de un blanco, con la matriz por referencia firmada
POST /mcpServidor MCP (JSON-RPC 2.0) para agentes

Sin autenticación. CORS abierto. Cacheado 5 minutos en el edge.

Cómo comprobar cualquier cosa que esta API te diga

content_hash no es el sha256 del archivo. Es el sha256 de una forma canónica: el documento sin meta.content_hash, sinmeta.schema y sin storage, serializado de una manera fija. Calcular el sha256 del archivo tal como se baja da otro valor — enRQ-EXP-EON-K20-002 el declarado es 4ffdfeb4… y el del archivo es a6ff6a5f…. Los dos son correctos: responden preguntas distintas.

Baja los bytes tal como se sellaron

Usa GET /v1/archive/<id>/raw, o cualquiera de las dos copias públicas. Para verificar, no uses GET /v1/archive/<id>: ese endpoint vuelve a serializar el JSON, y un decimal escrito 6.0 regresa como6. El sello no se altera; lo que se pierde es tu capacidad de recomputarlo. Medido sobre las 72 corridas publicadas: 72 de 72 verifican desde/raw, 17 de 72 desde el endpoint que re-serializa. La respuesta de/raw trae el hash declarado en la cabecera x-rq-content-hash, para comparar sin parsear el cuerpo.

Las cuatro convenciones, y por qué son cuatro

El archivo creció en cuatro etapas, y un hash publicado es un hecho público: los archivos viejos no se re-sellan para uniformar el conjunto. Sus hashes están anclados en Bitcoin y hay terceros que ya los citaron — re-sellarlos invalidaría anclas reales. Así que verificar significa probar las cuatro y decir cuál reprodujo. Es historia declarada, no desorden.

convenciónpayloadserialización
v3quita meta.content_hash, meta.schema y storageJCS, RFC 8785 — canónica en cualquier lenguaje
v2igual que v3json.dumps(sort_keys=True, ensure_ascii=False) de Python
v1 canónicaquita meta.content_hash y storageconserva schemaigual que v2
v1 legadameta.content_hash en null, y el cuerpo es sólo w6separators=(",",":") y ensure_ascii por omisión — los no-ASCII escapados

La que viaja es v3. Bajo v1 y v2 el hash depende de cómo Python imprime los números: escribe 6.0 donde JavaScript, Go y Rust escriben 6. Si parseas uno de esos archivos en otro lenguaje y lo vuelves a serializar, obtienes otro hash — en silencio, y con toda la pinta de una alteración. No lo es. Con v3 esa limitación desaparece: JCS normaliza los números, que es para lo que se creó. Los sellos nuevos van en v3 y sólo hacia adelante.

La herramienta

tools/verificar.py — un archivo, sin dependencias, las cuatro convenciones. Dice con cuál reprodujo cada hash, o falla con todas las letras. Verificado sobre el archivo completo: 72 de 72.

# baja el archivo tal como se selló y verifícalo — imprime VALIDO y la convención
curl -s https://rosettaquantum.com/v1/archive/EXP-0012-001/raw -o sellado.json
curl -sO https://raw.githubusercontent.com/RosettaQuantum/evidence/main/tools/verificar.py
python3 verificar.py sellado.json
      

Cada archivo sellado está además anclado en el tiempo en Bitcoin vía OpenTimestamps, en una cadena que no controla ninguna de las partes de este archivo. La especificación completa está en elprotocolo del archivo.

Servidor MCP

POST https://rosettaquantum.com/mcp habla JSON-RPC 2.0 y expone 9 herramientas de sólo lectura: estado_del_archivo, buscar_evidencia, ver_archivo, listar_por_tipo, buscar_algoritmo_cuantico, uso_de_la_api, ver_estructura, ver_propagacion y listar_fuentes_cuanticas.

curl -X POST https://rosettaquantum.com/mcp -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Licencia y citación

Los datos son CC BY 4.0; la atribución es deliberada. Cita así:Rosetta Quantum Evidence Ledger, CC BY 4.0 — https://rosettaquantum.com/ledger. El código es Apache-2.0.

Lo que esta API no hace

Es de sólo lectura. No hay endpoint de escritura, no hay qlib.solve()y no hay plan de pago — eso llega cuando haya demanda y ventaja medida que vender, no antes. Si encuentras un error en el archivo,abre un issue: la corrección externa es el ciclo de calidad que este proyecto quiere.