0.6.0 — Oracle contesta por MCP, y la respuesta lleva sus premisas
Nueve commits desde 0.5.0. Sube únicamente la distribución:
VERSION_DISTRIBUCION 0.5.0 → 0.6.0 el paquete y sus ejecutables
VERSION_ALGEBRA 0.6 → 0.6 lo que una medida SIGNIFICA
VERSION_SINTAXIS 0.2 → 0.2 cómo se ESCRIBE
Las tres versiones: qué sube y por qué
- Distribución (
0.5.0 → 0.6.0): sube porque el paquete incorpora el servidor
oracle-mcp, sus tres herramientas, su contrato y sus pruebas de punta a punta. - Álgebra (
0.6): no sube. MCP consulta, evalúa y desafía medidas mediante el álgebra que ya
existía; no agrega un nodo, operador, agregado, escalar ni relación de traza a la forma canónica. - Sintaxis (
0.2): no sube. El lector no aprende ninguna palabra, cláusula ni separación
nueva, y ninguna forma aceptada cambia de significado o deja de aceptarse.
Resumen de los commits del corte
- Se documentó que actualizar Oracle puede vencer un fixture diferencial y exigir regenerarlo
antes de mutar (5de7f21). oracle contextodejó de convertir un catálogo ilegible en «cero medidas», pasó a usar el
catálogo efectivo y quedó enteramente bajo mutación (20a2ded,4743b3e).- Dos estudios independientes fijaron el alcance, los fallos y el contrato MCP; se descartó con
evidencia la compuerta de escritura propuesta originalmente (3f14ec3,824fc1b). - Se implementaron en orden el transporte y las tres herramientas de sólo lectura, cerrando la
ronda detools/mcp.pyen 297/297 (ada8e01,61f89b0,50e02d8). - El sitio ganó una explicación de dónde entra Oracle y de los límites que ningún servidor puede
prometer (f3954ce).
Oracle gana un servidor MCP de sólo lectura para que un agente pueda preguntarle qué mide un
proyecto sin parsear salidas pensadas para personas:
oracle_catalogo_efectivoenumera qué medidas obligan en la raíz fijada y de dónde salen;
al pedir ids devuelve además sus premisas, umbral, ámbito y fijación, y distingue una medida
desconocida de una conocida que no tiene jurisdicción en ese proyecto.oracle_evaluarevalúa contra evidencia JSON una medida del catálogo o un texto.oracleo
JSON recibido en memoria. Devuelve por separadoverde,rojoysin_evidencia, con valor,
umbral, alcance derivado, testigos y advertencias; no acepta rutas.oracle_desafiarreproduce los casos verdes y rojos de una medida y recién entonces ejecuta
sus mutantes. Informa discordancias, rechazos del álgebra y sobrevivientes sin convertir «todos
detectados por esta evidencia» en una aprobación semántica.
Las tres operan sobre la raíz fijada al arrancar el servidor. El servidor no escribe nada: no
guarda medidas ni evidencias, no modifica el proyecto y no persiste los candidatos recibidos en
memoria. Las 16 conversaciones JSON-RPC de las tres herramientas están en
estudios/MCP-CONVERSACIONES.md, capturadas contra el servidor
real.
Por qué NO hay una herramienta que guarde medidas
La primera propuesta tenía una: guardaría una medida sólo si venía con evidencia que la pone en rojo
y evidencia que la pone en verde. Se descartó por dos razones medidas, no de gusto.
El corpus tiene 180 casos. 152 los cazó el arnés automático y 28 se le escaparon, y de esos 28 la
compuerta de escritura ataja cero: ninguno es «alguien guardó una medida sin probarla». El
85,7 % son falsos verdes, y ocurren al LEER.
Y las dos evidencias que la compuerta exigiría pueden haber sido fabricadas para repetir exactamente
el error de la medida. Entonces no autoriza a llamarla buena — y guardar después de ella convierte
evidencia insuficiente en apariencia de aprobación.
La regla que ordena todo el servidor
Un agente no tiene con qué dudar de la herramienta. Si el servidor contesta
{"veredicto": "verde"}, lo toma como verdad y sigue.
Fallo cerrado y respuestas falsables. Nunca una lista vacía, nunca un verde suelto, nunca un
resumen opaco. Un catálogo ilegible produce un error, no un cero.
O, como quedó escrito en los fixtures de aceptación: «no pude mirar» y «miré y no hay nada» son
afirmaciones distintas y jamás deben viajar por el mismo canal.
Esa regla se validó antes de escribir una línea del servidor. Buscando cómo tenía que ser el MCP se
encontró que oracle contexto le decía a los dos consumidores conocidos «LAS 0 MEDIDAS QUE YA
EXISTEN» teniendo 41 y 9 medidas propias: un except Exception: return [] se tragaba el fallo de
cargar sus escalares, y el defecto vivió meses. Está arreglado, y tools/contexto.py entró al perfil
de mutación —donde su primera medición dio 20 sobrevivientes de 30—.
Lo que ningún servidor puede prometer
De esos 28 casos que el arnés no cazó, 14 quedan fuera del alcance de cualquier protocolo de
herramientas: fallas de runtime y señales, saltos causales del propio modelo, falsificación
deliberada en disco, y deudas de diseño del lenguaje. Prometer más es vender humo. Lo que el
servidor sí puede es erradicar la otra mitad.
Los dos rechazos que le enseñan algo a un agente
MEDIDA_NO_EFECTIVA existe en una fuente seleccionada, pero su ámbito no obliga acá
MEDIDA_DESCONOCIDA no aparece en ninguna fuente seleccionada
«No existe» invita a crear un duplicado; «no tiene jurisdicción acá» enseña que el archivo ya tiene
dueño. La distinción sólo es posible gracias al ámbito de 0.5.0.
El transporte no es el del LSP
MCP sobre stdio usa un objeto JSON-RPC UTF-8 por línea, sin cabeceras. tools/lsp.py es buen
precedente en cuatro decisiones —biblioteca estándar, despachador explícito, respuestas compactas,
stdout reservado al protocolo— pero su enmarcado Content-Length no se copia. Y stdout queda
sólo para el protocolo: una línea humana suelta corrompe el canal.
Verificación del servidor
tools/mcp.py entró al perfil de mutación el mismo día que se escribió, antes de construir la
segunda herramienta. Su primera medición fue la peor del proyecto: 154 mutantes, 60 sobrevivientes,
53 minutos. Dos cosas que aparecieron ahí no eran deuda cosmética:
- los códigos de error JSON-RPC no los fijaba nada — el servidor podía devolver
-32601donde
correspondía-32602y pasar la suite entera, y un cliente despacha por ese número; - las anotaciones que el servidor publica sobre sí mismo —
readOnlyHint,destructiveHint—
tampoco. Todo el diseño se apoya en que es de sólo lectura, y esa promesa vivía en constantes que
nadie comprobaba.
La ronda final cerró en 297/297 mutantes rechazados, cero sobrevivientes. El corte pasó 1243
tests, el corpus de 180 casos y la aceptación con exactamente los dos rojos declarados en
meta.la_medida_no_se_fija_solo_con_evidencia_fabricada. Jam y LyraGASP siguieron en aceptación.
El wheel 0.6.0 se instaló además en un entorno limpio: oracle --version publicó las tres versiones
esperadas y el paquete expuso oracle-mcp como ejecutable.