Math Challenge
Más

Math Challenge está abierto: el código, el plan y la investigación

El repositorio, el plan completo y las 47 investigaciones son públicos — incluidas las que contradicen al producto, y la corrida en que nuestra propia flota de auditores se equivocó.

Qué está abierto

Dos enlaces. Los dos públicos hoy, los dos comprobables en un navegador sin tener cuenta.

Las 47 investigaciones, incluidas las que contradicen al producto

Cuarenta y siete investigaciones, unas 157,000 palabras, con fuentes numeradas y limitaciones declaradas. Se publican enteras, y eso incluye los pasajes donde la evidencia va en contra de lo que estamos construyendo: el encargo original pedía algo adictivo, y la investigación se pasó semanas contradiciéndolo.

Las afirmaciones que no pudimos confirmar contra una fuente primaria van marcadas [unverified] en el texto — 18 marcas repartidas en 14 de los documentos. Se quedan visibles en vez de borrarse en silencio, porque una investigación que esconde sus puntos débiles no es evidencia, es publicidad.

La flota de auditores, y lo que tiene permitido decir

Hoy existen 31 de los 39 auditores planeados. Ocho son deterministas y bloquean cada commit; entre ellos: que los siete locales estén completos, los secretos, el peso del bundle, la paleta de Ignia, que ninguna tabla de niño tenga un campo de texto libre. Los otros veintitrés son adversariales con LLM, instruidos para encontrar la violación y no para aprobar, y cada uno tiene que citar la decisión o la investigación que hace cumplir. Un hallazgo que cita un identificador que no existe queda descartado mecánicamente.

Los hallazgos se escriben en SARIF 2.1.0, el estándar de OASIS, y se suben a GitHub code scanning a mano: este proyecto no usa CI, y es una decisión, no una carencia. Cada hallazgo aterriza anclado a un archivo y a una línea donde cualquiera lo puede leer.

Lo que salió mal la primera vez que la corrimos

La primera corrida completa de la flota adversarial dejó dos veredictos bloqueantes. Uno estaba fabricado: el auditor citó una decisión que sí existe y después afirmó que un archivo decía versión donde el archivo dice versão. Cita real, evidencia inventada, y salió clasificado como bloqueante. La mitad de los hallazgos bloqueantes de esa corrida era ruido.

El arreglo no fue un mejor prompt. Fue una capa determinista que extrae cada cadena que el auditor dice haber visto y comprueba que aparezca de verdad en lo que se le mostró. Si no aparece ninguna, el hallazgo deja de bloquear.

Lo que esa capa todavía no puede hacer, dicho antes de que alguien lo suponga: un auditor que parafrasea en vez de citar no deja cadenas que verificar. Se detecta la fabricación literal, no la interpretación equivocada, que fue el otro fallo de esa misma corrida y ese no tiene arreglo determinista.

La licencia: AGPL-3.0

El repositorio lleva un archivo LICENSE con la Licencia Pública General de Affero de GNU, versión 3. Es copyleft fuerte de red: quien lo corra como servicio tiene que publicar sus cambios. Ese es el punto. El banco de ítems es el producto —ahí vive el grueso del trabajo real— y la promesa de este proyecto es que llegue a quien no puede pagar. Una licencia permisiva dejaría que alguien tomara el motor y el banco, los cerrara y cobrara por ellos.

Lo que cuesta, dicho de frente: la AGPL espanta a empresas que podrían contribuir, y muchas la prohíben por política interna. Ese canje se hizo a propósito.

Por qué vale la pena hacer esto

Publicar la investigación es la estrategia, no un gesto de transparencia. La parte que de verdad cuesta es publicar los errores: el tablero sigue cargando la nota de que la fase F0 se marcó cerrada con uno de sus propios criterios, el 0-RTT, sin verificar, y solo salió porque alguien volvió a preguntar. Un tablero que enseña su propio error vale más que cualquier declaración de valores.

Compruébalo tú

Clona el repositorio y corre la flota. Cada cifra de esta página sale de ese comando o del tablero público. Ninguna se escribió de memoria.

git clone https://github.com/kilowatto/math-challenge
node audits/run.mjs