Resumen. Se evaluaron los frenos computacionales del arnés con un conjunto etiquetado de 274 casos (determinista, sin red) y cuatro subagentes que juzgan con un modelo, con 14 casos repetidos 3 veces (42 llamadas), todo sobre main. Los frenos no fallaron ningún caso; los subagentes acertaron 41 de 42 veredictos. Con estos tamaños de muestra, la cota inferior del intervalo de confianza al 95 % es 95,4 % para el recall de los frenos y 87,7 % para los subagentes en conjunto, y baja a 61–74 % por subagente: cero fallos no es tasa perfecta, y la incertidumbre la fija n.
minScore = 80 %). El eje empieza en 20 %.
claude -p aislado), con 3 llamadas en paralelo. La marca es la mediana. El caso inocente nuevo del reviewer es el más caro (43–57 s): el revisor busca rodeos al patrón antes de decidir.
(?=\s|$), así que git worktree remove wt -f;echo o (git … --force) la rodean; la regla hermana de push usa (?![-\w]). La etiqueta «inocente» es discutible, no el juez. Es la segunda vez que un 0/n o un k/n bajo en este caso señala el dato antes que al agente: la primera, el inocente original duplicaba una regla que el config ya tenía (con una corrida por caso daba 5/6 y quedaba oculto).gate-runner acierta 9/9 veredictos pero su calidad tiene la mayor dispersión (media 0,79, DE 0,27): en 2 de 3 corridas del caso rojo lista varias hipótesis cuando su prompt pide una.Cada número de este informe sale de estos conjuntos, en el commit medido de main (9922a27). Los enlaces apuntan a ese commit, no a la versión actual: si el conjunto cambia, la huella deja de coincidir y el informe está vencido. Los resultados crudos —el resumen determinista y las 42 llamadas con su caso, su entrada, el veredicto esperado, si acertó, su calidad y su latencia— están en evaluaciones-datos.json.
| Conjunto | Archivo en main@9922a27 | Casos | Composición | SHA-256 |
|---|---|---|---|---|
| determinista | .claude/evals/deterministic/cases.json (esquema: cases.schema.json) | 274 | 118 guías · 131 reglas (80 ataques, 45 inocentes, 6 huecos) · 25 señales; es/en | d27fc8d60be2… |
| reviewer | .claude/evals/reviewer/ · casos en reviewerEval.cases | 6 × 3 | 4 diffs con una violación (P4, P5, P6, deuda) · 2 inocentes | por archivo, en el JSON |
| gate-runner | .claude/evals/gate-runner/ · aiEval.suites | 3 × 3 | salidas del gate: rojo con dos señales, verde con omitida, fast verde | por archivo, en el JSON |
| ci-investigator | .claude/evals/ci-investigator/ · aiEval.suites | 3 × 3 | salidas de ci-investigate: rojo sólo en CI, rojo también local, en curso | por archivo, en el JSON |
| explorer | .claude/evals/explorer/ · aiEval.suites | 2 × 3 | preguntas sobre el repo copiado | por archivo, en el JSON |
Las etiquetas (qué debería pasar) viven en el config de ese mismo commit: .claude/harness.config.json (harnessEval, reviewerEval, aiEval, subagentOutput.contracts). Para reproducir: git checkout 9922a27 && npm run eval && npm run eval:ai; lo determinista da lo mismo, lo de IA da una muestra nueva.
npm run eval: el arnés recién instalado (perfil node) en un repo temporal; cada caso pasa por los hooks reales como los corre Claude Code. 274 casos: 118 guías, 131 reglas (80 ataques, de ellos 51 rodeos, 45 inocentes, 6 huecos), 25 señales. Umbrales exactos: recall y exactitud 100 %, falsos positivos 0 %.npm run eval:ai: promptfoo 0.123.1 como corredor; cada subagente aislado en un temporal sin Bash ni hooks; 14 casos × 3 repeticiones. Veredicto contra el contrato del agente; calidad con llm-rubric (juez Sonnet, peso 0). Umbral: 80 % por subagente.main, hecha a mano el 2026-10-19 con la sesión local de Claude Code; no la repite ningún pipeline.