Blind Tribunal
Effort: heavy — ocho jurados, una lente cada uno, enrutados por nivel a la familia de modelos más barata que basta, reconvocados con sobres frescos en cada ronda hasta la unanimidad; gástalo en cambios autónomos que aterrizan sin revisión humana. Elimina: aterrizajes rebeldes sin más puerta que la palabra del propio constructor.
El loop de calificación que deja al humano irse sin que el agente se descarrile.
Un panel de jurados revisa el cambio a ciegas, con la autoría borrada. Cada
hallazgo se convierte en un nuevo test que falla. El loop se repite hasta que
todos los jurados aprueban. Nada aterriza solo con la palabra del constructor.
Cuándo ejecutarla
- Antes de aterrizar cualquier cambio autónomo que ningún humano va a revisar.
- Cualquier cambio de alto radio de impacto: con forma de seguridad, que toca datos, cercano a la autoridad.
- Cuando un solo evaluador no basta y quieres lentes independientes sobre el mismo artefacto.
Los asientos
Ocho jurados, una lente cada uno. Cada uno es un modelo de una familia DISTINTA a la
del constructor (misma marca = misma familia). Un jurado al que le piden revisar todo
no revisa nada bien.
| Jurado |
Id de lente |
Nivel |
La pregunta que hace |
| Defecto |
defect |
generalista |
¿Qué se rompe de verdad? Fallos de lógica, errores de sintaxis, defectos nuevos. |
| Proporción |
proportion |
generalista |
¿Es el tamaño correcto? ¿Sobreconstruido, o a la medida de la intención? |
| Consecuencia |
operator_consequence |
seguridad del operador |
Si un operador humano ejecuta esto, ¿qué es destructivo, inseguro o dañino? |
| Reversibilidad |
reversibility |
estado profundo |
¿Deja efectos irreversibles? Si muere a medio camino, ¿el sistema vuelve atrás limpio? |
| Continuidad |
state_continuity |
estado profundo |
¿Huérfana variables, pisa estado global o pierde contexto que los nodos siguientes necesitan? |
| Economía |
resource_economy |
estructural rápido |
¿Bucles sin optimizar, llamadas de red/API redundantes, memoria de más? |
| Frontera |
boundary_condition |
estructural rápido |
Con entradas nulas, vacías, de tipo inesperado o malformadas, ¿falla con gracia? |
| Telemetría |
telemetry |
seguridad del operador |
¿Un fallo aquí se diagnostica desde los logs y el manejo de errores? |
Niveles de enrutamiento (primero la ruta más barata que basta): estado profundo →
el mayor contexto y razonamiento más profundo, idealmente por un harness que LEA el repo
(nunca escriba); estructural rápido → primero una GPU local gratis, FUSIONADA con un
verificador de nube barato que juzga el mismo prompt: la lente pasa solo si ambos pasan;
sin nube, el veredicto local queda marcado UNVERIFIED, nunca «verificado» en silencio; y el
modelo local debe ver TODO el artefacto (dimensiona num_ctx al prompt — el valor por
defecto de Ollama, 4096, trunca en silencio — y rechaza antes de enviar lo que no cabe); el verificador nunca es de la misma familia que el asiento primario, y un asiento UNVERIFIED es una retención (nunca unanimidad); los jurados por harness corren read-only, y cada convocatoria lleva un run_id y escribe su resumen al final;
después los modelos de nube de baja latencia; seguridad del operador →
tu coder más fuerte con base en seguridad; generalista → un generalista grande y fiable.
Cada escalera termina en un peldaño local de supervivencia.
Equipo solo. Cuando solo hay una familia de modelos disponible, degrada
EXPLÍCITAMENTE: un contexto o sesión fresca que nunca vio la conversación del
autor actúa como evaluador ciego, o el humano revisa el sobre con la autoría
borrada. El reporte debe nombrar la puerta debilitada — "calificado a ciegas
misma-familia, no entre familias" — nunca fingir en silencio que la puerta entre
familias se sostuvo.
El constructor se declara, y la exclusión es estructural
"Distinta familia que el constructor" era una regla que se pedía a los jurados recordar. En la
propia prueba del tribunal, el asiento de seguridad del operador lo encabezó el mismo modelo que
había construido el candidato, y nada lo registró ni lo excluyó: el autor calificó su propio
trabajo durante dos rondas. Así que:
- Convoca con el constructor nombrado (
--builder <modelo-o-familia>). El registro lleva
builder_family. Cada peldaño de esa familia se rechaza en voz alta, antes de despachar, en
cada escalera. Una lente sin peldaño QUEDA EN ESPERA — nunca vuelve al constructor.
- Mismo proveedor = misma familia. Una declaración excluye al proveedor entero.
- Pruébalo en la escalera viva, no en un test: la tabla de rutas debe mostrar que sus
asientos pasaron a otra familia. Si no, la exclusión es decoración.
El sobre
Los jurados nunca ven el repo, al constructor ni la conversación. Ven un solo sobre:
- Archivos actuales completos de cada archivo que el cambio tocó, más sus
archivos de test. Nunca fragmentos de diff sueltos — un fragmento esconde el
contrato que lo rodea e induce hallazgos falsos.
- El contrato de revisión: la intención del cambio en una línea, y los
criterios para aprobar.
- Cero autoría. Sin nombres, sin ids de modelos, sin autores de commits, sin
historial de chat. Si la identidad se filtra, el armado del sobre falla con
ruido — nunca se califica sin la venda.
- Nada de prosa sobre el comportamiento viejo. Describir lo que el código
"hacía antes" siembra defectos fantasma. Los archivos hablan solos.
El veredicto
JSON estricto y parseable por máquina, un solo objeto, sin prosa:
{"verdict": "pass" | "refuse",
"findings": [{"severity": "blocker|major|minor|info",
"claim": "...", "evidence": "..."}]}
- Un pass que lista un hallazgo
[blocker] o [major] no es un pass. Es contradictorio y
falla cerrado a refuse, nombrando la severidad que lo contradijo.
- Un veredicto para una lente distinta de la sentada es un peldaño rechazado, no un veredicto:
se anota con ambas lentes y la marcha sigue al siguiente peldaño; solo si todos responden mal la
lente queda en espera. Nunca un pass.
- El directorio de salida se posee antes de barrerse. El órgano sella (stamp) el directorio que
reclama; uno con esas formas de archivo SIN el sello se rechaza, nombrando archivos y remedio,
sin borrar nada. Uno con solo archivos ajenos nunca corrió peligro y no se bloquea.
- Una lente que explota nunca descarta los veredictos ya pagados. Cada fallo se registra por
lente; veredictos y resumen se escriben ANTES de lanzar el error.
- La evidencia de mutación nombra un archivo reescrito (
changed_paths), no solo los que
aparecen o desaparecen.
- Todo lo que escribe el órgano es solo del propietario (0600).
- Un modelo local derramado lo descarga solo su ÚLTIMO poseedor. Dos lentes pueden compartir
una tarjeta; la primera en terminar no le quita el modelo a la otra a mitad de llamada.
- Un peldaño que no cabe el artefacto se salta antes de llamar, con la razón anotada; un
rechazo por capacidad es un TIPO y la marcha sigue — nunca un halt.
- Un jurado que RESPONDIÓ mal — basura, texto que no es JSON, texto de rechazo —
cuenta como refuse; un jurado que NUNCA respondió (falla de transporte,
inalcanzable) es una espera: vuelve a sentarlo vía
fleet-ladder, nunca un pase silencioso. Un solo
disparo por jurado que responde por ronda — sin reintentos.
- Un pase pelado con cero hallazgos y sin evidencia es un voto de poca
información. Cuenta, pero nunca como la única prueba — dos pases pelados no
le ganan a un refuse detallado. Un pase fuerte nombra lo que revisó.
El loop
- Rojo primero: haz commit del test de contrato que falla ANTES de construir el
arreglo, y registra ese commit. El constructor no puede tocar el test
(red-first).
- Construye hasta el verde.
- Arma el sobre con los archivos ACTUALES.
- Sienta a los ocho jurados, por nivel, — de familias distintas a la del constructor
(fleet-ladder resuelve cuáles están vivos).
- Cada jurado además verifica, no solo lee: los tests nuevos pasan; la suite de
regresión no está peor que la línea base; y un chequeo de verde falso — un test
que DEBERÍA fallar (el bug reintroducido) de verdad falla. Un verde falso es un
refuse.
- Ante cualquier refuse: CADA hallazgo — blocker, major y minor — se convierte en
un NUEVO test que falla por la razón real del hallazgo. Arréglalo. Rearma el
sobre con los archivos revisados. Vuelve a convocar a TODOS los jurados. Un
veredicto sobre archivos viejos no es veredicto.
- Aterriza solo con pase unánime. Los hallazgos minor levantados en la ronda
final también se cierran, nunca se difieren — "arreglé los blockers, los minor
después" es exactamente la fuga que esta skill existe para frenar. Un hallazgo
termina ARREGLADO o refutado con evidencia registrada, nunca estacionado.
El pie nombra el lente, un peldaño rechazado conserva sus palabras y el piso tiene tres peldaños
La ronda 4 dejó dos lentes en espera con cero rechazos, y cada eslabón quedó en el registro. Salieron tres leyes:
- Declara la forma de la respuesta junto a la respuesta. El pie del protocolo lleva el nombre literal del lente (
"lens": "defect"), nunca el marcador <your lens>. Un jurado al que se le pidió recordar el lente desde 350 KB antes, dentro de un artefacto que nombra los ocho lentes, respondió el lente equivocado tres veces en dos rondas. Rellena el marcador al renderizar.
- Un peldaño rechazado deja sus palabras en el registro. Una respuesta con lente equivocado o un veredicto anulado lleva un
raw_tail acotado en la entrada rechazada, para que la siguiente ronda lea la causa en vez de inferirla.
- Dos peldaños de nube no son un piso. Cada nivel tiene al menos tres peldaños sin
context_tokens declarado (pueden cargar un artefacto de 120k tokens) antes de su cola local. Un lente equivocado más una anulación nunca deben dejar un lente en espera.
- Un veredicto estructurado nunca comparte su presupuesto con el pensamiento. Un modelo razonador al que se le pidió un veredicto JSON escueto gastó todo su presupuesto de 65536 tokens pensando en un artefacto de 131k tokens y no emitió nada (
finish_reason=length); el tope de tiempo del rol mató después al siguiente peldaño a mitad de camino. Cada peldaño de nube que pide un veredicto en objeto JSON corre con el canal de razonamiento apagado (reasoning_effort: none), y la escalera del verificador guarda detrás una tercera familia por HTTP plano.
- Nada más escribe en el repo del tribunal mientras sesiona. El archivo de estado de un calificador concurrente dentro del checkout cambió bytes bajo un asiento, y el órgano anuló ese veredicto con honestidad: no puede atribuir un cambio. Serializa los escritores, o sesiona en un worktree aparte del mismo commit.
Reglas duras — romper una anula la calificación
- El constructor nunca califica su propio trabajo: ni la misma instancia, ni la misma familia.
- Un refuse de jurado vale lo que vale el sobre. Antes de escribir un test a
partir de un hallazgo, verifica el hallazgo contra los archivos reales. Un
hallazgo sobre código que el sobre nunca llevó significa arreglar el sobre, no
el código.
- Mide la convergencia sobre los hallazgos NUEVOS por ronda, no sobre el total
bruto. Hallazgos nuevos planos o creciendo dos rondas seguidas: detente y
escala al humano. Nunca muelas en vano.
- Nunca debilites ni edites los tests que fallan para alcanzar un pase. Los
jurados verifican que los archivos de test siguen sin cambios desde el commit
rojo.
- Un superviviente es una afirmación; una prueba en verde es una afirmación. Vuelve a correr a
mano cada mutante superviviente, en un árbol aislado, con un tope que sobreviva la carga. Un
timeout no es un superviviente; un error de colección no es una muerte. Toda ruta de veredicto
del arnés debe poder decir INVALID, y un arnés cuya línea base sin mutación no esté en verde
limpio se niega a emitir veredictos.
- Un pase unánime abre la puerta; no es la meta. Aterriza, y luego prueba la
capacidad en vivo sobre la superficie real. Verde sin prueba en vivo no es
estar terminado.
Combina bien con
- red-first — el contrato que falla, commiteado antes de que corra el constructor.
- sniper-testing — efectos reales, corridas acotadas, sin teatro de mocks.
- seam-engineering — arregla la clase, barre a los hermanos, aterriza una guarda.
- repair-loop — el loop de construcción que este tribunal califica.
- blind-eval — la puerta más ligera de conservar-o-revertir cuando la pregunta es de gusto, no de defectos.
Crédito de andamiaje: Matt Pocock, grill-me / grilling (mattpocock/skills, MIT).
El diseño del tribunal adversarial ciego entre familias es de BACKS AIOS.
1---2name: blind-tribunal-33description: Úsala cuando un cambio autónomo necesita una calificación independiente antes de aterrizar y no hay humano en el circuito. Convoca jurados ciegos de familias distintas — una lente cada uno — sobre un sobre con archivos completos y autoría borrada; cada hallazgo se vuelve un nuevo test que falla; se repite hasta que todos los jurados aprueban. Trigger words: blind tribunal, grill tribunal, tribunal, jurors, cross-family grade, convene, blind grade, independent grade, grade before landing. Disparadores: tribunal ciego, jurados, calificación entre familias, convocar, calificar a ciegas, calificación independiente, calificar antes de aterrizar.4license: MIT5---67# Blind Tribunal8**Effort:** heavy — ocho jurados, una lente cada uno, enrutados por nivel a la familia de modelos más barata que basta, reconvocados con sobres frescos en cada ronda hasta la unanimidad; gástalo en cambios autónomos que aterrizan sin revisión humana. Elimina: aterrizajes rebeldes sin más puerta que la palabra del propio constructor.910El loop de calificación que deja al humano irse sin que el agente se descarrile.11Un panel de jurados revisa el cambio a ciegas, con la autoría borrada. Cada12hallazgo se convierte en un nuevo test que falla. El loop se repite hasta que13todos los jurados aprueban. Nada aterriza solo con la palabra del constructor.1415## Cuándo ejecutarla1617- Antes de aterrizar cualquier cambio autónomo que ningún humano va a revisar.18- Cualquier cambio de alto radio de impacto: con forma de seguridad, que toca datos, cercano a la autoridad.19- Cuando un solo evaluador no basta y quieres lentes independientes sobre el mismo artefacto.2021## Los asientos2223Ocho jurados, una lente cada uno. Cada uno es un modelo de una familia DISTINTA a la24del constructor (misma marca = misma familia). Un jurado al que le piden revisar todo25no revisa nada bien.2627| Jurado | Id de lente | Nivel | La pregunta que hace |28| --- | --- | --- | --- |29| Defecto | `defect` | generalista | ¿Qué se rompe de verdad? Fallos de lógica, errores de sintaxis, defectos nuevos. |30| Proporción | `proportion` | generalista | ¿Es el tamaño correcto? ¿Sobreconstruido, o a la medida de la intención? |31| Consecuencia | `operator_consequence` | seguridad del operador | Si un operador humano ejecuta esto, ¿qué es destructivo, inseguro o dañino? |32| Reversibilidad | `reversibility` | estado profundo | ¿Deja efectos irreversibles? Si muere a medio camino, ¿el sistema vuelve atrás limpio? |33| Continuidad | `state_continuity` | estado profundo | ¿Huérfana variables, pisa estado global o pierde contexto que los nodos siguientes necesitan? |34| Economía | `resource_economy` | estructural rápido | ¿Bucles sin optimizar, llamadas de red/API redundantes, memoria de más? |35| Frontera | `boundary_condition` | estructural rápido | Con entradas nulas, vacías, de tipo inesperado o malformadas, ¿falla con gracia? |36| Telemetría | `telemetry` | seguridad del operador | ¿Un fallo aquí se diagnostica desde los logs y el manejo de errores? |3738**Niveles de enrutamiento (primero la ruta más barata que basta):** estado profundo →39el mayor contexto y razonamiento más profundo, idealmente por un harness que LEA el repo40(nunca escriba); estructural rápido → primero una GPU local gratis, FUSIONADA con un41verificador de nube barato que juzga el mismo prompt: la lente pasa solo si ambos pasan;42sin nube, el veredicto local queda marcado UNVERIFIED, nunca «verificado» en silencio; y el43modelo local debe ver TODO el artefacto (dimensiona `num_ctx` al prompt — el valor por44defecto de Ollama, 4096, trunca en silencio — y rechaza antes de enviar lo que no cabe); el verificador nunca es de la misma familia que el asiento primario, y un asiento UNVERIFIED es una retención (nunca unanimidad); los jurados por harness corren read-only, y cada convocatoria lleva un `run_id` y escribe su resumen al final;45después los modelos de nube de baja latencia; seguridad del operador →46tu coder más fuerte con base en seguridad; generalista → un generalista grande y fiable.47Cada escalera termina en un peldaño local de supervivencia.4849**Equipo solo.** Cuando solo hay una familia de modelos disponible, degrada50EXPLÍCITAMENTE: un contexto o sesión fresca que nunca vio la conversación del51autor actúa como evaluador ciego, o el humano revisa el sobre con la autoría52borrada. El reporte debe nombrar la puerta debilitada — "calificado a ciegas53misma-familia, no entre familias" — nunca fingir en silencio que la puerta entre54familias se sostuvo.5556## El constructor se declara, y la exclusión es estructural5758"Distinta familia que el constructor" era una regla que se pedía a los jurados recordar. En la59propia prueba del tribunal, el asiento de seguridad del operador lo encabezó el mismo modelo que60había construido el candidato, y nada lo registró ni lo excluyó: el autor calificó su propio61trabajo durante dos rondas. Así que:6263- **Convoca con el constructor nombrado** (`--builder <modelo-o-familia>`). El registro lleva64 `builder_family`. Cada peldaño de esa familia se rechaza en voz alta, antes de despachar, en65 cada escalera. Una lente sin peldaño QUEDA EN ESPERA — nunca vuelve al constructor.66- **Mismo proveedor = misma familia.** Una declaración excluye al proveedor entero.67- **Pruébalo en la escalera viva, no en un test:** la tabla de rutas debe mostrar que sus68 asientos pasaron a otra familia. Si no, la exclusión es decoración.6970## El sobre7172Los jurados nunca ven el repo, al constructor ni la conversación. Ven un solo sobre:7374- **Archivos actuales completos** de cada archivo que el cambio tocó, más sus75 archivos de test. Nunca fragmentos de diff sueltos — un fragmento esconde el76 contrato que lo rodea e induce hallazgos falsos.77- **El contrato de revisión**: la intención del cambio en una línea, y los78 criterios para aprobar.79- **Cero autoría.** Sin nombres, sin ids de modelos, sin autores de commits, sin80 historial de chat. Si la identidad se filtra, el armado del sobre falla con81 ruido — nunca se califica sin la venda.82- **Nada de prosa sobre el comportamiento viejo.** Describir lo que el código83 "hacía antes" siembra defectos fantasma. Los archivos hablan solos.8485## El veredicto8687JSON estricto y parseable por máquina, un solo objeto, sin prosa:8889```json90{"verdict": "pass" | "refuse",91 "findings": [{"severity": "blocker|major|minor|info",92 "claim": "...", "evidence": "..."}]}93```9495- **Un pass que lista un hallazgo `[blocker]` o `[major]` no es un pass.** Es contradictorio y96 falla cerrado a refuse, nombrando la severidad que lo contradijo.97- **Un veredicto para una lente distinta de la sentada** es un peldaño rechazado, no un veredicto:98 se anota con ambas lentes y la marcha sigue al siguiente peldaño; solo si todos responden mal la99 lente queda en espera. Nunca un pass.100- **El directorio de salida se posee antes de barrerse.** El órgano sella (stamp) el directorio que101 reclama; uno con esas formas de archivo SIN el sello se rechaza, nombrando archivos y remedio,102 sin borrar nada. Uno con solo archivos ajenos nunca corrió peligro y no se bloquea.103- **Una lente que explota nunca descarta los veredictos ya pagados.** Cada fallo se registra por104 lente; veredictos y resumen se escriben ANTES de lanzar el error.105- **La evidencia de mutación nombra un archivo reescrito** (`changed_paths`), no solo los que106 aparecen o desaparecen.107- **Todo lo que escribe el órgano es solo del propietario (0600).**108- **Un modelo local derramado lo descarga solo su ÚLTIMO poseedor.** Dos lentes pueden compartir109 una tarjeta; la primera en terminar no le quita el modelo a la otra a mitad de llamada.110- **Un peldaño que no cabe el artefacto se salta antes de llamar**, con la razón anotada; un111 rechazo por capacidad es un TIPO y la marcha sigue — nunca un halt.112- Un jurado que RESPONDIÓ mal — basura, texto que no es JSON, texto de rechazo —113 cuenta como **refuse**; un jurado que NUNCA respondió (falla de transporte,114 inalcanzable) es una **espera**: vuelve a sentarlo vía115 [fleet-ladder](../fleet-ladder/SKILL.md), nunca un pase silencioso. Un solo116 disparo por jurado que responde por ronda — sin reintentos.117- Un pase pelado con cero hallazgos y sin evidencia es un **voto de poca118 información**. Cuenta, pero nunca como la única prueba — dos pases pelados no119 le ganan a un refuse detallado. Un pase fuerte nombra lo que revisó.120121## El loop1221231. Rojo primero: haz commit del test de contrato que falla ANTES de construir el124 arreglo, y registra ese commit. El constructor no puede tocar el test125 ([red-first](../red-first/SKILL.md)).1262. Construye hasta el verde.1273. Arma el sobre con los archivos ACTUALES.1284. Sienta a los ocho jurados, por nivel, — de familias distintas a la del constructor129 ([fleet-ladder](../fleet-ladder/SKILL.md) resuelve cuáles están vivos).1305. Cada jurado además verifica, no solo lee: los tests nuevos pasan; la suite de131 regresión no está peor que la línea base; y un chequeo de verde falso — un test132 que DEBERÍA fallar (el bug reintroducido) de verdad falla. Un verde falso es un133 refuse.1346. Ante cualquier refuse: CADA hallazgo — blocker, major y minor — se convierte en135 un NUEVO test que falla por la razón real del hallazgo. Arréglalo. Rearma el136 sobre con los archivos revisados. Vuelve a convocar a TODOS los jurados. Un137 veredicto sobre archivos viejos no es veredicto.1387. Aterriza solo con pase unánime. Los hallazgos minor levantados en la ronda139 final también se cierran, nunca se difieren — "arreglé los blockers, los minor140 después" es exactamente la fuga que esta skill existe para frenar. Un hallazgo141 termina ARREGLADO o refutado con evidencia registrada, nunca estacionado.142143## El pie nombra el lente, un peldaño rechazado conserva sus palabras y el piso tiene tres peldaños144145La ronda 4 dejó dos lentes en espera con cero rechazos, y cada eslabón quedó en el registro. Salieron tres leyes:146147- **Declara la forma de la respuesta junto a la respuesta.** El pie del protocolo lleva el nombre literal del lente (`"lens": "defect"`), nunca el marcador `<your lens>`. Un jurado al que se le pidió recordar el lente desde 350 KB antes, dentro de un artefacto que nombra los ocho lentes, respondió el lente equivocado tres veces en dos rondas. Rellena el marcador al renderizar.148- **Un peldaño rechazado deja sus palabras en el registro.** Una respuesta con lente equivocado o un veredicto anulado lleva un `raw_tail` acotado en la entrada rechazada, para que la siguiente ronda lea la causa en vez de inferirla.149- **Dos peldaños de nube no son un piso.** Cada nivel tiene al menos tres peldaños sin `context_tokens` declarado (pueden cargar un artefacto de 120k tokens) antes de su cola local. Un lente equivocado más una anulación nunca deben dejar un lente en espera.150- **Un veredicto estructurado nunca comparte su presupuesto con el pensamiento.** Un modelo razonador al que se le pidió un veredicto JSON escueto gastó todo su presupuesto de 65536 tokens pensando en un artefacto de 131k tokens y no emitió nada (`finish_reason=length`); el tope de tiempo del rol mató después al siguiente peldaño a mitad de camino. Cada peldaño de nube que pide un veredicto en objeto JSON corre con el canal de razonamiento apagado (`reasoning_effort: none`), y la escalera del verificador guarda detrás una tercera familia por HTTP plano.151- **Nada más escribe en el repo del tribunal mientras sesiona.** El archivo de estado de un calificador concurrente dentro del checkout cambió bytes bajo un asiento, y el órgano anuló ese veredicto con honestidad: no puede atribuir un cambio. Serializa los escritores, o sesiona en un worktree aparte del mismo commit.152153## Reglas duras — romper una anula la calificación154155- El constructor nunca califica su propio trabajo: ni la misma instancia, ni la misma familia.156- **Un refuse de jurado vale lo que vale el sobre.** Antes de escribir un test a157 partir de un hallazgo, verifica el hallazgo contra los archivos reales. Un158 hallazgo sobre código que el sobre nunca llevó significa arreglar el sobre, no159 el código.160- Mide la convergencia sobre los hallazgos NUEVOS por ronda, no sobre el total161 bruto. Hallazgos nuevos planos o creciendo dos rondas seguidas: detente y162 escala al humano. Nunca muelas en vano.163- Nunca debilites ni edites los tests que fallan para alcanzar un pase. Los164 jurados verifican que los archivos de test siguen sin cambios desde el commit165 rojo.166- **Un superviviente es una afirmación; una prueba en verde es una afirmación.** Vuelve a correr a167 mano cada mutante superviviente, en un árbol aislado, con un tope que sobreviva la carga. Un168 timeout no es un superviviente; un error de colección no es una muerte. Toda ruta de veredicto169 del arnés debe poder decir INVALID, y un arnés cuya línea base sin mutación no esté en verde170 limpio se niega a emitir veredictos.171- Un pase unánime abre la puerta; no es la meta. Aterriza, y luego prueba la172 capacidad en vivo sobre la superficie real. Verde sin prueba en vivo no es173 estar terminado.174175## Combina bien con176177- [red-first](../red-first/SKILL.md) — el contrato que falla, commiteado antes de que corra el constructor.178- [sniper-testing](../sniper-testing/SKILL.md) — efectos reales, corridas acotadas, sin teatro de mocks.179- [seam-engineering](../seam-engineering/SKILL.md) — arregla la clase, barre a los hermanos, aterriza una guarda.180- [repair-loop](../repair-loop/SKILL.md) — el loop de construcción que este tribunal califica.181- [blind-eval](../blind-eval/SKILL.md) — la puerta más ligera de conservar-o-revertir cuando la pregunta es de gusto, no de defectos.182183> Crédito de andamiaje: Matt Pocock, grill-me / grilling (mattpocock/skills, MIT).184> El diseño del tribunal adversarial ciego entre familias es de BACKS AIOS.