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 ejecución 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.
-
El repositorio
El producto, la flota de auditores, las migraciones y la documentación interna viven en un único repositorio público. No hay una segunda copia arreglada para quien viene de fuera.
-
El tablero
El plan completo está en un tablero de proyecto público: 18 elementos con criterios de aceptación que se pueden verificar, de las tres fases del sitio a las trece del producto. Dos de esos dieciocho no son trabajo: son las tensiones que no hemos resuelto, anotadas a la vista junto a todo lo demás.
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 ejecutamos
La primera ejecución 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 ejecución era ruido.
El arreglo no fue un prompt mejor. 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 ejecución y ese no tiene arreglo determinista.
La licencia: AGPL-3.0
El repositorio incluye un archivo LICENSE con la Licencia Pública General de Affero de GNU, versión 3. Es copyleft fuerte de red: quien lo ejecute como servicio debe publicar sus cambios. Ese es el propósito. El banco de ítems es el producto —ahí reside el grueso del trabajo real— y la promesa de este proyecto es que llegue a quien no puede pagar. Una licencia permisiva permitiría que alguien cogiera el motor y el banco, los cerrara y cobrara por ellos.
Lo que cuesta, dicho sin rodeos: la AGPL ahuyenta a empresas que podrían contribuir, y muchas la prohíben por política interna. Esa contrapartida se asumió a propósito.
Por qué merece 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 llevando 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ú mismo
Clona el repositorio y ejecuta 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