
Laboratorio de evaluación de comportamiento (Quorum) para el proyecto superpowers que impulsa CLIs reales de agentes de codificación (Claude, Codex, Gemini, Kimi y más) a través de un agente de QA y los califica según el cumplimiento del flujo de trabajo contra criterios de escenario y comprobaciones posteriores deterministas.
Laboratorio de evaluación comportamental para superpowers. Quorum impulsa CLIs reales de agentes de codificación (Claude, Codex, Antigravity, Gemini, Kimi, OpenCode, Pi y Copilot) a través de un agente de control de calidad Gauntlet y los califica según los criterios de aceptación del escenario más comprobaciones posteriores deterministas.
El código, la CLI, las rutas y el texto en línea usan quorum en minúsculas; la forma
capitalizada Quorum aparece en los encabezados y la tabla de actores.
No es un conjunto de pruebas genérico. Es un laboratorio de evaluación para el cumplimiento del flujo de trabajo: activación de habilidades, comportamiento del área de trabajo, coordinación de subagentes, reflejos de verificación, calidad de revisión y patrones de modelado de costos.
quorum tiene dos modos de ejecución muy diferentes:
biome, tsc y
bun test. No llaman a las API del modelo ni inician agentes CLI.El CI público debe permanecer en el lado estático/de unidad de esa línea. Nunca agregue claves API,
invocaciones en vivo de quorum run … ni lanzamientos de agentes en modo peligroso al CI público.
Las evaluaciones en vivo ejecutan el Coding-Agent bajo prueba con amplio poder de ejecución:
--dangerously-skip-permissions.--dangerously-bypass-approvals-and-sandbox.--dangerously-skip-permissions y depende de la autenticación local de
navegador/llave para agy.--skip-trust --approval-mode=yolo; la autenticación por clave API es la predeterminada,
con autenticación OAuth opt-in para ejecuciones locales de confianza.--yolo.--dangerously-skip-permissions.--allow-all.quorum fija el HOME de cada Coding-Agent (además de los directorios base XDG y TMPDIR)
a un hogar desechable por ejecución en <run>/home — el lanzador inserta el
token $QUORUM_HOME_ENV construido por src/agents/home-env.ts (xdgHomeEnv, la
única fuente de verdad). El directorio de configuración de cada agente se colapsa debajo de ese
hogar (Claude .claude, Codex .codex, Gemini ., OpenCode ., Antigravity .,
Copilot .copilot, Kimi .kimi-code, Pi .pi/agent), de modo que el Coding-Agent
encuentre su configuración a través de su propio $HOME predeterminado y nunca vea el ~/.claude,
~/.codex, ~/.gemini, ~/.kimi-code, ~/.pi, ~/.copilot, ~/.config real del host
u otro estado relativo al hogar, complementos instalados o sesiones anteriores.
El aprovisionamiento siembra la configuración — y las credenciales OAuth del host que cada agente
necesita — en ese hogar desechable antes del lanzamiento, por lo que no hay inicio de sesión en
tiempo de ejecución. Copilot también coloca el complemento local de Superpowers bajo el hogar
aislado, usa un entorno externo en lista blanca y escribe un .copilot-env que contiene secretos
con permisos chmod-0600 dentro del directorio de ejecución. Esto reduce el radio de explosión pero
no es un sandbox. Los lanzadores de OpenCode y Copilot también usan entornos en lista blanca,
pero los Coding-Agents en vivo aún se ejecutan con amplio poder de sistema de archivos y
ejecución de comandos.
Ejecute evaluaciones en vivo solo desde un entorno local de confianza:
results/, los registros de sesión en bruto, los artefactos de llamadas a herramientas/estado
de sesión y las entradas del Gauntlet-Agent como
sensibles.Instale y ejecute los controles estáticos:```bash bun install bun run check bun run quorum check
Ejecuta un escenario local o de emergencia fuera del contenedor:```bash
export SUPERPOWERS_ROOT=/path/to/superpowers
export ANTHROPIC_API_KEY=...
bun run quorum run scenarios/triggering-writing-plans --coding-agent claude
bun run quorum show <run-dir>
El Gauntlet-Agent (controlador de QA) se autentica con Anthropic usando ANTHROPIC_API_KEY
de manera predeterminada. Para usarlo desde una suscripción activa de Claude en su lugar, establezca
CLAUDE_CODE_OAUTH_TOKEN (de claude setup-token) en el entorno (p. ej.
.env); el arnés lo pasa y gauntlet lo prefiere sobre la clave de API.
Nota: una suscripción tiene límites de uso diseñados para uso interactivo — los lotes
run-all de alta concurrencia pueden alcanzarlos, por lo que la clave de API sigue siendo la opción más adecuada para cargas pesadas.
Los nombres de agentes son claude, codex, antigravity, gemini, kimi,
opencode, pi y copilot. No todos los escenarios son válidos para cada agente.
RUPTURA (eje de credenciales): claude-haiku y claude-sonnet ya no
son nombres de agentes separados. Para ejecutar el arnés de Claude contra Sonnet o Haiku:```bash
bun run quorum run scenarios/ --coding-agent claude --credential sonnet
bun run quorum run scenarios/ --coding-agent claude --credential haiku
La credencial predeterminada del agente `claude` es `opus`.
## Aparato de Evaluación Compartido
Las evaluaciones en vivo remotas compartidas están diseñadas para ejecutarse desde un host del aparato de confianza con un paquete de credenciales autorizado, procedencia exacta de repo/ref, bloqueos de host y registros de trabajo recuperables. Los agentes deben usar el ayudante del aparato una vez que exista en el host configurado:```bash
evals-appliance doctor --json
evals-appliance prepare --json --superpowers-ref <branch-tag-or-sha>
evals-appliance run-all --json --detach \
--superpowers-ref <branch-tag-or-sha> \
-- --tier sentinel \
--coding-agents claude,codex,kimi \
--jobs 4
evals-appliance status --json <job-id>
evals-appliance show --json <job-id>
evals-appliance costs --json <job-id>
evals-appliance cancel --json <job-id>
La interfaz objetivo y las reglas de operación se encuentran en docs/appliance-runbook.md, respaldadas por docs/superpowers/specs/2026-06-18-shared-eval-appliance-design.md. doctor es de solo lectura. prepare devuelve lock_busy en lugar de cambiar las referencias mientras un trabajo en vivo está activo. El acceso al host y los procedimientos break-glass específicos del proveedor se mantienen intencionalmente fuera de este repositorio público; use el runbook privado de operaciones para esos detalles. Los comandos sin formato bun run quorum ... y scripts/evals-container exec quorum ... permanecen como flujos de trabajo break-glass locales o de confianza para evaluaciones en vivo compartidas.
El runtime de Docker es la receta principal para ejecuciones reales de suites. Mantiene el checkout de evals, el checkout de Superpowers bajo prueba, credenciales, fuentes de autenticación y todos los artefactos de ejecución en el host mientras quorum se ejecuta dentro de un contenedor de espacio de trabajo Ubuntu completo.
Cree .env.container o pase un archivo env explícito a up:```dotenv
ANTHROPIC_API_KEY=...
OPENAI_API_KEY=...
OPENROUTER_API_KEY=... # Pi default: OpenRouter GLM 5.2
GEMINI_API_KEY=... # or GEMINI_AUTH_TYPE=oauth-personal
KIMI_MODEL_API_KEY=... # unless using mounted Kimi OAuth
PI_PROVIDER=... # only for raw/custom Pi env auth outside the default credential
PI_MODEL=...
PI_API_KEY=...
COPILOT_GITHUB_TOKEN=...
Luego, construye, inicia y valida el contenedor:```bash
scripts/evals-container build
scripts/evals-container down || true
scripts/evals-container --env-file .env.container up
scripts/evals-container exec evals-tool-versions
scripts/evals-container exec quorum check
El wrapper monta este checkout de evals en /workspace/evals, el checkout padre de Superpowers en /workspace/superpowers, y el directorio results/ del host en /workspace/evals/results. Sobrescribe el checkout de Superpowers con --superpowers-root <dir> cuando la ruta padre por defecto no sea el sistema bajo prueba.
La construcción de la imagen necesita un checkout local de Gauntlet. El wrapper lo descubre desde GAUNTLET_ROOT o una instalación global de Bun bun link; usa --gauntlet-root <dir> con build para elegir explícitamente.
Las credenciales son montajes de solo lectura. Por defecto, up usa primero .env.container, luego .env, y monta el primer archivo encontrado en /run/evals/credentials.env. Pasa --env-file <file> antes de up para elegir explícitamente. El wrapper no pasa el entorno del host en su totalidad; solo el shim quorum dentro del contenedor carga el archivo dotenv, por lo que scripts/evals-container exec bash ... no recibe automáticamente las credenciales de eval activas. Usa down antes de cambiar el montaje del archivo env-file en un contenedor existente.
Las fuentes de autenticación OAuth/archivo también son de solo lectura. Los directorios existentes ~/.codex, ~/.gemini, ~/.kimi-code y ~/.pi se montan en /auth/codex, /auth/gemini, /auth/kimi-code y /auth/pi. Usa --auth codex=<dir>, --auth gemini=<dir>, --auth kimi=<dir> o --auth pi=<dir> para sobrescribir una fuente.
Comienza con la suite centinela:```bash
scripts/evals-container exec quorum run-all
--tier sentinel
--coding-agents claude,codex,kimi
--jobs 4
for agent in gemini opencode pi copilot; do
scripts/evals-container exec quorum run-all
--tier sentinel
--coding-agents "$agent"
--jobs 1
done
Ejecute los mismos comandos sin `--tier sentinel` para la suite completa lista.
`run-all` escribe cada lote bajo `results/batches/<batch-id>/` y cada ejecución
bajo `results/<scenario>-<agent>-<os>-<timestamp>-<nonce>/`; renderice un lote
con:```bash
scripts/evals-container exec quorum show <batch-id>
run-all imprime un latido de actividad periódico
(⋯ … · running N/jobs · done D · queued Q · [agent:scenario, …]); ajústelo con
--heartbeat-seconds <n> (0 lo desactiva). Interrumpir un lote — Ctrl-C, o el
cierre de la sesión exec — lo detiene de forma ordenada: la cola se cancela, las
ejecuciones en curso reciben SIGINT (y se registran como detenidas), y el pie de página
del lote aún se escribe, por lo que finished_at nunca queda nulo.
El tiempo de ejecución del contenedor no monta el socket de Docker, no publica puertos del panel
ni incluye IDEs de escritorio. La imagen omite el instalador de escritorio agy de Antigravity;
ejecute Antigravity en el lado del host hasta que exista una ruta de instalación headless:```bash
bun run quorum run-all --coding-agents antigravity --jobs 1
Para barridos de hosts agrupados de todos los agentes, credenciales por agente, detalles de montaje de autenticación y solución de problemas, use [docs/coding-agent-care-and-feeding.md](https://github.com/prime-radiant-inc/superpowers-evals/blob/main/docs/coding-agent-care-and-feeding.md).
## Tiempo de ejecución de Windows
Para evaluaciones en Windows 11, use `--os windows` (solo hosts Linux+KVM):```bash
bun run quorum run scenarios/<name> --coding-agent claude --os windows
Consulte docs/windows/eval-runtime.md para configuración e implementación.
Mantenga los actores claros; confundirlos es el error de triaje más común. Estos nombres se usan en todas partes — docs, salida de CLI, código, nombres de archivo, mensajes de commit.
| Actor | Qué es | Dónde reside / sus archivos |
|---|---|---|
| Gauntlet | Framework de QA de propósito general; la CLI gauntlet. Un probador de caja negra. | repo github.com/prime-radiant-inc/gauntlet; en PATH como gauntlet (vía bun link o GAUNTLET_ROOT) |
| Gauntlet-Agent | El LLM dentro de Gauntlet que impulsa el Coding-Agent y se autoevalúa según los AC de la historia. | modelo p.ej. claude-sonnet-4-6; flujo de eventos → <run>/gauntlet-agent/results/<runId>/run.jsonl; veredicto → result.{json,md} |
| Coding-Agent | El agente bajo prueba — el SUT. Instancias: Claude, Codex, Antigravity, Gemini, Kimi, OpenCode, Pi, Copilot. | configuración + registro de sesión bajo su $HOME desechable en <run>/home/…; los archivos que escribe → <run>/coding-agent-workdir/ |
| Quorum | El envoltorio de TypeScript/Bun. Posee la configuración, adaptación del Coding-Agent, verificaciones deterministas y el veredicto final. | repo superpowers-evals/src/; <run>/verdict.json |
Una ejecución involucra dos LLM — el Gauntlet-Agent (evaluador de QA) y el Coding-Agent (sujeto). Modelos separados, registros separados, costos de token separados.
La dimensión de evaluación es (escenario, coding-agent, credencial, os). credentials.yaml
en la raíz del repositorio define credenciales con nombre; cada entrada declara el modelo, protocolo
de cable (api: openai-chat, openai-responses, anthropic, o gemini),
base_url opcional para endpoints no predeterminados, tipo de autenticación (api-key,
subscription, o oauth), api_key_env opcional, las familias de tiempo de ejecución a las que sirve
(harnesses), y anulaciones de programador opcionales (max_concurrency,
launch_spacing_seconds) y un bloque compat (thinking_format,
max_tokens_field).
Cada YAML de agente declara un default_credential. Sobrescribir en tiempo de ejecución:```bash
bun run quorum run scenarios/ --coding-agent claude --credential sonnet
bun run quorum run-all --coding-agents claude,opencode --credentials sonnet,haiku,opencode_gpt5 --jobs 4
`quorum check` valida `credentials.yaml` y el `default_credential` de cada agente.
El planificador basa su límite de concurrencia y su pestillo de límite de velocidad en la **limiterKey** de la credencial: el `base_url` de la credencial si está establecido, o en caso contrario el nombre de la credencial, concatenado con su `api` (por ejemplo, `https://…/v1|openai-chat`, o `opus|anthropic` para una credencial nativa sin `base_url`). Las celdas que comparten una limiterKey comparten un límite de concurrencia y un pestillo de límite de velocidad: una respuesta de límite de velocidad en cualquier celda salta inmediatamente todas las celdas restantes en cola para ese endpoint.
Credenciales estándar con nombre (consulte `credentials.yaml`): `opus`, `sonnet`, `haiku` (Claude harness), `codex_sub` (Codex subscription), `kimi_default`, `openrouter_glm_5_2` (Pi default), `pi_default` (native Pi OAuth opt-in), `opencode_gpt5`, `gemini_default`, `serf_default`, `glm_5_2_chat`, `glm_5_2_responses`, `ollama_local`.
### Campañas externas de Serf
Las campañas de corta duración del modelo/proveedor Serf utilizan un archivo de credenciales externo, no el `credentials.yaml` canónico del repositorio. Páselo explícitamente con `--credentials-file` a `quorum run`, `quorum run-all`, o `quorum check`. Mantenga el YAML real de la campaña y todos los artefactos de ejecución sin procesar fuera de Git: el YAML contiene etiquetas de enrutamiento y el nombre de la variable de entorno de la clave API seleccionada, nunca un valor de clave.
Cada preset de campaña debe fijar exactamente un modelo y un proveedor, deshabilitar los fallbacks, y no contener anulaciones de prompt, muestreo, razonamiento, herramienta o límite de tokens. Proporcione su clave dedicada a través del paquete de credenciales de tiempo de ejecución de confianza. La clave debe cumplir con la política de datos prevista para la campaña, tener un límite de gasto de campaña y, para una campaña de capacidad compartida, no tener un enlace BYOK. Una comparación BYOK es una campaña separada con una clave separada y un archivo candidato.
Antes del envío, `run-all` analiza el archivo externo una vez y escribe su instantánea canónica en `results/batches/<batch-id>/credentials.snapshot.yaml`; cada hijo recibe esa instantánea inmutable. Un `quorum run` directo escribe la misma instantánea canónica en su directorio de ejecución. Editar el YAML de origen después de que un lote comience no puede cambiar celdas posteriores. Las instantáneas contienen metadatos de enrutamiento conocidos por el esquema y nombres de variables de entorno, no valores secretos, pero siguen siendo parte de los artefactos de ejecución sensibles.
Ejecute primero la prueba de humo neutral al agente, luego ejecute el escenario costoso solo para credenciales cuyo veredicto final de la prueba de humo sea `pass`:```bash
quorum run-all \
--scenarios 00-quorum-smoke-hello-world \
--include-drafts \
--coding-agents serf \
--credentials-file /secure/campaign.yaml \
--credentials serf_example_a \
--jobs 1
quorum run-all \
--scenarios serf-builder-fractals \
--coding-agents serf \
--credentials-file /secure/campaign.yaml \
--credentials serf_example_a \
--jobs 1
--jobs 1 es la línea base secuencial de latencia/costo. Una celda de matriz es un intento pagado; el programador de campañas no reintenta ni repite automáticamente una celda. Representa la comparación etiquetada con quorum costs <batch-id>. Solo las filas finales pass se marcan como comparables; fail e indeterminate permanecen visibles pero sin clasificar, y las mediciones faltantes se representan como faltantes en lugar de cero. Las columnas de cargo, estimado y delta son costos de Coding-Agent. Las columnas existentes --with-gauntlet son gastos generales separados del arnés de Gauntlet-Agent.
La aceptación en vivo es trabajo manual de mantenedores de confianza, nunca automatización de CI pública:
--jobs 1.verdict.json, trajectory.json, openrouter-generations.json, coding-agent-token-usage.json y quorum costs <batch-id>. Confirma modelo, proveedor, versión de preset, BYOK es falso, depósitos de token/caché, duración, costo cargado, estimación, delta y etiquetas de candidato, incluyendo cuantización y fecha de catálogo.--jobs 1; requiere pass final, cada verificación determinista, entrega confirmada de checkout principal y una fila de comparación completa.--jobs 2; confirma atribución distinta sin claves, generaciones, etiquetas o economía contaminadas de forma cruzada.Publica solo conclusiones revisadas y saneadas para la versión en una nota fechada docs/experiments/, registrando tanto fallos como éxitos. El YAML de campaña externo y los artefactos sin procesar permanecen fuera de Git.
bun run quorum list bun run quorum new my-new-scenario bun run quorum check my-new-scenario bun run quorum run scenarios/ --coding-agent bun run quorum run scenarios/ --coding-agent claude --credential sonnet bun run quorum run-all --coding-agents claude,codex --jobs 2 bun run quorum run-all --coding-agents claude --credentials sonnet,haiku --jobs 2 bun run quorum show bun run quorum costs
`quorum check` sin argumentos valida cada escenario y `credentials.yaml`.
`run-all` ejecuta cada escenario incluido contra cada Coding-Agent seleccionado, filtrado por la directiva `# coding-agents:` de cada escenario.
## Veredictos y Artefactos
quorum produce un veredicto de tres valores:
- `pass` - Gauntlet-Agent aprobó y todas las verificaciones posteriores aprobaron.
- `fail` - Gauntlet-Agent falló, o una verificación posterior falló.
- `indeterminate` - fallo de configuración/verificación previa/captura/quorum, Gauntlet `investigate`, o traza vacía cuando hay verificaciones de traza presentes.
Los códigos de salida son 0 para `pass`, 1 para `fail` y 2 para `indeterminate`.
Cada ejecución produce un directorio bajo `results/`:```text
results/<scenario>-<coding-agent>-<os>-<timestamp>-<nonce>/
|-- verdict.json composed result; start here
|-- gauntlet-agent/ Gauntlet-Agent evidence
|-- coding-agent-workdir/ files the Coding-Agent produced
|-- home/ throwaway Coding-Agent HOME
|-- trajectory.json normalized ATIF trace
`-- coding-agent-token-usage.json Coding-Agent token cost, when priced
results/ es ignorado por git porque los artefactos de ejecución pueden contener transcripciones sensibles, credenciales, llamadas a herramientas y estado del sistema de archivos.
Estos son los chequeos esperados en CI y en PRs rutinarios:```bash bun run check # biome ci . && tsc --noEmit && bun test — the full gate bun run quorum check # validate every scenario directory
`bun run check` es la única compuerta (Biome lint/format + full-strict `tsc` + `bun test`); los pasos individuales son `bun run lint`, `bun run typecheck` y `bun test`.
## Arquitectura
quorum es **TypeScript on Bun**. La consola es `bun run quorum <cmd>` (una CLI de [commander](https://github.com/tj/commander.js) en `src/cli/index.ts`, también expuesta como el binario `quorum`); la compuerta es `bun run check` (Biome + full-strict `tsc` + `bun test`).
Las formas que cruzan los límites de procesos y archivos — `verdict.json`, índices de lotes, economía, el resultado de Gauntlet, YAML del agente — son **esquemas zod** en `src/contracts/`, validados en cada límite, de modo que un archivo externo malformado falla ruidosamente en lugar de corromper un veredicto. La capa `cli/` analiza comandos y los despacha hacia el pipeline `runner/` (un escenario × un Coding-Agent) o `run-all/` (la matriz). Las diferencias por agente de codificación residen en dos abanicos paralelos clave por nombre de agente: `agents/` siembra la configuración del agente bajo el `$HOME` desechable por ejecución (`<run>/home`), y `normalize/` convierte el registro de sesión de ese agente en un rastro uniforme de llamadas a herramientas. Las llamadas en vivo agente-CLI y otros subprocesos no herméticos pasan por la costura `agents/command-runner.ts`, de modo que el conjunto de pruebas unitarias inyecta simulaciones y nunca lanza una CLI real. `scheduler/` es el motor de concurrencia compartido bajo `run-all/`. El panel es un paquete separado de solo lectura que escanea `results/` y `grid-manifest.json`. `env.ts` es el único módulo que lee `process.env`.```text
src/
cli/ commander CLI: run, list, new, check, show, costs, run-all, grid-manifest
index.ts command wiring + run / costs / run-all / grid-manifest actions
render.ts verdict renderer for triage (quorum show)
render-batch.ts batch-matrix renderer (quorum show <batch>)
resolve-target.ts run/batch target resolution; scenario.ts scenario loading
runner/ per-run orchestration (one scenario × one Coding-Agent)
index.ts setup → pre-checks → gauntlet drive → capture → post-checks → compose
context.ts populate the Gauntlet-Agent context dir (HOWTO + launch-agent shim)
phase.ts phase.json (setup/agent/checks) for the dashboard
stopped.ts SIGINT → stopped (indeterminate) verdict; errors.ts staged run-error stages
agents/ per-Coding-Agent provisioning (resolveAgent dispatch)
index.ts agent registry + dispatch (incl. the inline Claude/Default adapters)
command-runner.ts injectable subprocess seam (live CLIs faked in tests)
<agent>.ts codex/gemini/kimi/opencode/pi/copilot/antigravity adapters
normalize/ session-log → normalized tool-call trace, one module per dialect
capture/ session-log snapshot/diff + tool-call capture + token usage; cwd-filter
obol/ obol cost estimation (session-log + gauntlet sidecar)
economics.ts token-cost composition → coding-agent-token-usage.json
composer.ts three-valued verdict from the gauntlet + checks layers
checks/ sources prelude.sh + checks.sh, runs pre()/post(), collects check records
prelude.sh bare-verb DSL: defines each check verb as a bash function that
delegates to the TS dispatchers (no bin/ shims, no PATH prepend)
scheduler/ central concurrency dispatcher (one global slot pool, per-harness limits + spacing)
run-all/ scenario × Coding-Agent matrix over the scheduler; batch index
setup-helpers/ scenario fixture builders + the `setup-helpers` CLI (dispatch registry)
contracts/ zod schemas at the JSON boundaries (verdict, batch, economics, gauntlet, agent-config)
scaffold.ts `quorum new` / `quorum check`
setup-step.ts runs scenario setup.sh (sources prelude.sh via BASH_ENV so bare verbs resolve)
story-meta.ts story.md frontmatter (quorum_max_time, quorum_tier, status)
env.ts the single process.env boundary
paths.ts repo root, UTC stamps, nonces
invariant.ts assertNever exhaustiveness guard for closed unions
check/ typed check verbs: fs-verbs.ts (file/git/env + bootstrap),
dispatch.ts (table + `not`), transcript-dispatch.ts, record.ts (sole emitter)
cli/check-tool.ts the dispatcher behind every check verb function (file-exists,
file-contains, command-succeeds, git-*, assert-checkout-clean,
requires-tool, not, files-exist, the *-installed/hook/extension
checks); check-transcript.ts and setup-helpers/cli.ts are the
other two dispatchers the prelude delegates to
cli/list-check-verbs.ts prints the FS_VERBS verb set the prelude loops over (drift-proof)
coding-agents/ per-Coding-Agent material:
<name>.yaml CLI config
<name>-context/ HOWTO prose and launchers for the Gauntlet-Agent
scenarios/ scenarios (one directory each)
fixtures/ shared static fixture repos (e.g. template-repo/, sdd-*/)
test/ bun test suite
docs/ design notes, specs, plans, testing protocols, baselines
packages/dashboard/ read-only web matrix UI: scan/view, typed HTML templates, SSE bus, Bun.serve
El triaje de una ejecución no exitosa comienza con:```bash bun run quorum show []
Luego use [docs/superpowers/skills/triaging-a-failing-eval.md](https://github.com/prime-radiant-inc/superpowers-evals/blob/main/docs/superpowers/skills/triaging-a-failing-eval.md) para el atlas de atribución. Para comprobaciones de autenticación, aprovisionamiento y captura específicas del agente, use [docs/coding-agent-care-and-feeding.md](https://github.com/prime-radiant-inc/superpowers-evals/blob/main/docs/coding-agent-care-and-feeding.md).
Para la línea base actual conocida como buena, consulte [docs/baselines/](https://github.com/prime-radiant-inc/superpowers-evals/blob/main/docs/baselines).
## Reglas de Contribución
Este repositorio hereda el nivel de calidad de `superpowers`.
- Un problema por PR.
- No confíe artefactos de ejecución generados ni secretos.
- No agregue evaluaciones en vivo a CI público.
- Use la plantilla de PR y explique el riesgo de seguridad/laboratorio de evaluación para cambios que afecten configuraciones de Coding-Agent, ejecución de shell, ayudantes de configuración, herramientas de verificación o entrada de Gauntlet-Agent.
- Los cambios en la metodología de evaluación que moldean el comportamiento necesitan evidencia, no solo prosa.
## Actualización del Submódulo Padre
`superpowers-evals` es consumido por `superpowers` como el submódulo `evals`. Después de que cualquier PR se fusione con `main` aquí, abra un PR de seguimiento contra el repositorio padre `superpowers` que apunte a `dev` y que actualice el puntero del submódulo `evals` al commit fusionado de `superpowers-evals`.
No considere una fusión de `superpowers-evals` como completamente propagada hasta que exista ese PR de actualización del submódulo padre.
---
Reporte de seguridad → [SECURITY.md](https://github.com/prime-radiant-inc/superpowers-evals/blob/main/SECURITY.md).