oracle0.6.0

metalenguaje de medidas · experimental

Medir
no opinar

Un lenguaje para escribir reglas que fallan —con un número, un umbral y las filas que ofendieron— en vez de documentos que aconsejan.

Empezar Ver el código Python ≥ 3.11 · sin dependencias · MIT

el problema tiene nombre: goodhart

Cuando quien construye la herramienta escribe también su verificador, el verificador termina preguntando lo que la herramienta ya contesta bien.

Con un modelo de lenguaje el efecto es más fuerte: escribe la herramienta y su test con la misma mano, y no tiene memoria entre sesiones — sólo existe lo que quedó en el repositorio. Una regla escrita como consejo se lee y se olvida. Tiene que negarse.

Una medida que nada puede romper es decoración

Por eso el catálogo se muta: se rompen las medidas a propósito y se exige que el corpus lo note. La que sobrevive a todo no estaba midiendo nada.

una medida, entera — así se ve en el editor

documento.nombre_sigue_la_convencion.oracle
3 casos · 1 verde · 2 rojos · umbral <= 0 segun contrato
1ninguno documento.nombre_sigue_la_convencion: 2 de documento d 3 donde d.sigue_convencion == false 4 umbral <= 0 segun contrato porque "rompe el índice" 5 alcance "no ve el contenido del documento, sólo su nombre"

La línea gris de arriba no la escribió nadie: la pone el editor. Dice qué evidencia pone a prueba esa medida —y avisa SIN FIJAR cuando no la pone a prueba ninguna. Es el mismo servidor LSP en Emacs y en VS Code.

Así se ve
un rojo

No «falló la verificación». El valor medido, contra qué se lo comparó, de dónde salió ese número, y exactamente qué filas lo produjeron.

Un rojo sin testigos obliga a creerle. Con testigos se puede discutir — y a veces la equivocada resulta ser la medida.

ROJO  documento.nombre_sigue_la_convencion
      valor 2  (<= 0)  segun contrato

      testigos:
        2026-07-25-informe.md      carpeta 00-Proceso
        notas finales.md           carpeta 00-Proceso

      alcance: no ve el contenido del documento,
               sólo su nombre

obligatorio en toda medida

umbral
segun

De dónde sale el número, de un conjunto cerrado: medicion, contrato, convencion o tanteo. Un umbral sin procedencia es un valor puesto a ojo con cara de dato.

alcance

Qué no mira. Se escribe en prosa y no se puede omitir. Sin eso el silencio pasa por cobertura.

testigos

Las filas que ofendieron, no un conteo. Es la diferencia entre un veredicto que se acata y uno que se discute.

cinco niveles, una sola representación

Casi todas las herramientas viven en L0 y L1. Los dos niveles negativos son lo que distingue «esto está bien» de «esto estaba bien cuando lo miré».

L−2

Identidad y frescura del referente. ¿Lo que se midió sigue siendo lo mismo?

L−1

El sensor se declara: qué unidades produce y hasta dónde llega.

L0

Las filas de evidencia. Lo que se observó.

L1

Las medidas. Lo que se afirma sobre esas filas.

L2

Medidas sobre medidas. El catálogo juzgándose a sí mismo.

41

medidas en el catálogo

131

casos que las ponen a prueba

0

mutantes vivos en el núcleo

0

dependencias

Empezar

Python ≥ 3.11 y nada más. Sin dependencias que resolver, se instala también sin red desde el archivo del release. Con pip hace falta un entorno propio: en Arch, Debian 12+, Ubuntu 23.04+ y Fedora, instalar al Python del sistema falla con externally-managed-environment.

Instala nueve comandos y el catálogo base viaja adentro, así que un proyecto nuevo ya tiene quién lo juzgue desde el primer oracle test.

El editor viene incluido: un servidor LSP que Emacs y VS Code comparten, con diagnósticos, completado que muestra la unidad de cada campo, y un aviso sobre toda medida que ninguna evidencia pone a prueba.

$ uv tool install oracle-metalenguaje
$ oracle init mi-proyecto
$ cd mi-proyecto
$ oracle nueva documento.nombre_sigue_la_convencion
$ oracle test

Seguí con De cero a un rojo: de uv tool install a un rojo con testigos, con cada comando ejecutado de verdad.

Esto es experimental, y conviene decirlo

El metalenguaje es el destino, no la descripción. La reflexión sobre el catálogo sigue fijada en Python —L2 tiene mecanismo propio, que es justo lo que un metalenguaje no debería necesitar—. No hay fecha de corte ni condición de cierre.

Lo que sí hay son ocho decisiones escritas con lo que se descartó y por qué, unos límites conocidos publicados junto al release, y una historia de commits donde cada afirmación dice qué se midió para sostenerla.

Escribí la regla
que atrapa tu defecto

Empezar