
Laboratoire d'évaluation comportementale (Quorum) pour le projet superpowers qui pilote des CLI d'agents de codage réels (Claude, Codex, Gemini, Kimi et plus) via un agent QA et les évalue en fonction de la conformité des flux de travail par rapport aux critères de scénario et aux vérifications postérieures déterministes.
Laboratoire d'évaluation comportementale pour superpowers. Quorum pilote les CLIs d'agents de codage réels (Claude, Codex, Antigravity, Gemini, Kimi, OpenCode, Pi et Copilot) via un agent QA Gauntlet et les évalue par rapport aux critères d'acceptation des scénarios et à des vérifications postérieures déterministes.
Le code, la CLI, les chemins et la prose en ligne utilisent tous le quorum en minuscules ;
la forme capitalisée Quorum apparaît dans les titres et le tableau des acteurs.
Ceci n'est pas une suite de benchmarks générique. Il s'agit d'un laboratoire d'évaluation pour la conformité des workflows : déclenchement de compétences, comportement de l'arbre de travail, coordination des sous-agents, réflexes de vérification, qualité de la revue et modèles de façonnage des coûts.
quorum possède deux modes d'exécution très différents :
biome, tsc et bun test. Elles n'appellent pas d'API de modèles et ne lancent pas de
CLI d'agents.L'IC publique doit rester du côté des vérifications statiques/unitaires de cette ligne.
N'ajoutez jamais de clés API, d'invocations quorum run … en direct ou de lancements d'agents
en mode dangereux à l'IC publique.
Les évaluations en direct exécutent l'agent de codage testé avec un large pouvoir d'exécution :
--dangerously-skip-permissions.--dangerously-bypass-approvals-and-sandbox.--dangerously-skip-permissions et repose sur l'authentification locale
par navigateur/trousseau pour agy.--skip-trust --approval-mode=yolo ; l'authentification par clé API est par
défaut, avec authentification OAuth facultative pour les exécutions locales de confiance.--yolo.--dangerously-skip-permissions.--allow-all.quorum fixe le HOME de chaque agent de codage (plus les répertoires de base XDG et TMPDIR)
à un répertoire personnel jetable par exécution à <run>/home — le lanceur insère le jeton
$QUORUM_HOME_ENV construit par src/agents/home-env.ts (xdgHomeEnv, la source unique de
vérité). Le répertoire de configuration de chaque agent est réduit sous ce répertoire
personnel (Claude .claude, Codex .codex, Gemini ., OpenCode ., Antigravity .,
Copilot .copilot, Kimi .kimi-code, Pi .pi/agent), de sorte que l'agent de codage trouve
sa configuration via sa propre valeur par défaut $HOME et ne voit jamais le
~/.claude, ~/.codex, ~/.gemini, ~/.kimi-code, ~/.pi, ~/.copilot, ~/.config
réel de l'hôte, ni d'autres états relatifs au répertoire personnel, plugins installés ou
sessions précédentes. Le provisionnement insère la configuration — et les identifiants OAuth
de l'hôte dont chaque agent a besoin — dans ce répertoire personnel jetable avant le lancement,
de sorte qu'il n'y a pas de connexion au moment de l'exécution. Copilot déploie également le
plugin local Superpowers sous le répertoire personnel isolé, utilise un environnement externe
autorisé et écrit un .copilot-env contenant un secret avec chmod 0600 dans le répertoire
d'exécution. Cela réduit le rayon d'explosion mais ce n'est pas un bac à sable. Les lanceurs
OpenCode et Copilot utilisent également des environnements autorisés, mais les agents de
codage en direct s'exécutent toujours avec un large accès au système de fichiers et des
capacités d'exécution de commandes.
Exécutez les évaluations en direct uniquement depuis un environnement local de confiance :
results/, les journaux de session bruts, les artefacts d'état de session/appels
d'outils et les entrées de l'agent Gauntlet comme sensibles.Installez et exécutez les vérifications statiques :```bash bun install bun run check bun run quorum check
Exécutez un scénario local ou d'urgence en dehors du conteneur:```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>
L'agent Gauntlet (driver QA) s'authentifie auprès d'Anthropic avec ANTHROPIC_API_KEY
par défaut. Pour l'utiliser à partir d'un abonnement Claude connecté à la place, définissez
CLAUDE_CODE_OAUTH_TOKEN (obtenu via claude setup-token) dans l'environnement (par ex.
.env); le harnais le transmet et gauntlet le préfère à la clé API.
Remarque : un abonnement a des limites d'utilisation adaptées à une utilisation interactive — les lots
run-all à haute concurrence peuvent les atteindre, donc la clé API reste le meilleur choix pour une charge lourde.
Les noms d'agents sont claude, codex, antigravity, gemini, kimi,
opencode, pi et copilot. Tous les scénarios ne sont pas valides pour tous les agents.
BREAKING (axe des identifiants) : claude-haiku et claude-sonnet ne sont plus
des noms d'agents distincts. Pour exécuter le harnais Claude contre Sonnet ou Haiku :```bash
bun run quorum run scenarios/ --coding-agent claude --credential sonnet
bun run quorum run scenarios/ --coding-agent claude --credential haiku
Le mot de passe par défaut de l'agent `claude` est `opus`.
## Appliance d'évaluation partagée
Les évaluations en direct distantes partagées sont conçues pour être exécutées à partir d'un hôte appliance de confiance avec un seul ensemble d'identifiants approuvés, une provenance exacte de dépôt/référence, des verrous d'hôte et des enregistrements de tâches récupérables. Les agents doivent utiliser l'assistant appliance une fois qu'il existe sur l'hôte configuré :```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>
L'interface cible et les règles d'exploitation sont dans
docs/appliance-runbook.md, soutenues par
docs/superpowers/specs/2026-06-18-shared-eval-appliance-design.md.
doctor est en lecture seule. prepare renvoie lock_busy plutôt que de modifier les références
pendant qu'un travail actif est en cours.
L'accès à l'hôte et les procédures de contournement spécifiques au fournisseur sont intentionnellement tenus
à l'écart de ce dépôt public ; utilisez le runbook opérationnel privé pour ces détails.
Les commandes brutes bun run quorum ... et scripts/evals-container exec quorum ... restent
des workflows locaux ou de contournement de confiance pour les évaluations partagées en direct.
Le runtime Docker est la recette principale pour les exécutions de suites réelles. Il conserve la copie de travail des évaluations, la copie de travail de Superpowers en cours de test, les identifiants, les sources d'authentification, et tous les artefacts d'exécution sur l'hôte tandis que quorum s'exécute à l'intérieur d'un conteneur Ubuntu riche en espace de travail.
Créez .env.container ou passez un fichier d'environnement explicite à 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=...
Ensuite, construisez, démarrez et validez le conteneur :```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
Le wrapper monte ce checkout evals dans /workspace/evals, le checkout parent Superpowers dans /workspace/superpowers, et le répertoire results/ de l'hôte dans /workspace/evals/results. Remplacez le checkout Superpowers avec --superpowers-root <dir> lorsque le chemin parent par défaut n'est pas le système testé.
La construction de l'image nécessite un checkout local de Gauntlet. Le wrapper le découvre via GAUNTLET_ROOT ou une installation globale Bun bun link ; utilisez --gauntlet-root <dir> avec build pour choisir explicitement.
Les credentials sont montés en lecture seule. Par défaut, up utilise d'abord .env.container, puis .env, et monte le premier trouvé dans /run/evals/credentials.env. Passez --env-file <file> avant up pour choisir explicitement. Le wrapper ne transmet pas l'intégralité de l'environnement hôte ; seul le shim quorum dans le conteneur source le fichier dotenv, donc scripts/evals-container exec bash ... ne reçoit pas automatiquement les credentials d'évaluation en direct. Utilisez down avant de modifier le montage du fichier env sur un conteneur existant.
Les sources d'authentification OAuth/fichier sont également en lecture seule. Les répertoires existants ~/.codex, ~/.gemini, ~/.kimi-code et ~/.pi sont montés dans /auth/codex, /auth/gemini, /auth/kimi-code et /auth/pi. Utilisez --auth codex=<dir>, --auth gemini=<dir>, --auth kimi=<dir> ou --auth pi=<dir> pour remplacer une source.
Commencez avec la suite sentinelle :```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
Exécutez les mêmes commandes sans `--tier sentinel` pour la suite complète prête. `run-all` écrit chaque lot sous `results/batches/<batch-id>/` et chaque exécution sous `results/<scenario>-<agent>-<os>-<timestamp>-<nonce>/` ; générez un lot avec :```bash
scripts/evals-container exec quorum show <batch-id>
run-all affiche un battement de cœur de liveness périodique
(⋯ … · running N/jobs · done D · queued Q · [agent:scenario, …]); réglez-le avec
--heartbeat-seconds <n> (0 désactive). Interrompre un lot — Ctrl-C, ou la
fermeture de la session exec — l'arrête proprement: la file d'attente est annulée, les exécutions
en cours reçoivent SIGINT (et sont enregistrées comme arrêtées), et le pied de batch est toujours
écrit, de sorte que finished_at n'est jamais laissé null.
Le runtime de conteneur ne monte pas le socket Docker, ne publie pas les ports du tableau de bord,
ni n'inclut les IDE de bureau. L'image omet l'installateur de bureau agy d'Antigravity;
exécutez Antigravity côté hôte jusqu'à ce qu'il y ait un chemin d'installation headless:```bash
bun run quorum run-all --coding-agents antigravity --jobs 1
Pour les balayages d'hôtes groupés de tous les agents, les identifiants par agent, les détails de montage d'authentification,
et le dépannage, utilisez [docs/coding-agent-care-and-feeding.md](https://github.com/prime-radiant-inc/superpowers-evals/blob/main/docs/coding-agent-care-and-feeding.md).
## Environnement d'exécution Windows
Pour les évaluations sur Windows 11, utilisez `--os windows` (hôtes Linux+KVM uniquement) :```bash
bun run quorum run scenarios/<name> --coding-agent claude --os windows
Voir docs/windows/eval-runtime.md pour la configuration et le déploiement.
Gardez les acteurs distincts ; les confondre est l'erreur de tri la plus courante. Ces noms sont utilisés partout — documentation, sortie CLI, code, noms de fichiers, messages de commit.
| Acteur | Ce que c'est | Où il se trouve / ses fichiers |
|---|---|---|
| Gauntlet | Framework QA à usage général ; la CLI gauntlet. Un testeur boîte noire. | dépôt github.com/prime-radiant-inc/gauntlet ; dans PATH sous gauntlet (via bun link ou GAUNTLET_ROOT) |
| Gauntlet-Agent | Le LLM à l'intérieur de Gauntlet qui pilote l'Agent de Codage et s'auto-évalue par rapport aux ACs de l'histoire. | modèle p. ex. claude-sonnet-4-6 ; flux d'événements → <run>/gauntlet-agent/results/<runId>/run.jsonl ; verdict → result.{json,md} |
| Coding-Agent | L'agent testé — le SUT. Instances : Claude, Codex, Antigravity, Gemini, Kimi, OpenCode, Pi, Copilot. | config + journal de session sous son $HOME temporaire à <run>/home/… ; les fichiers qu'il écrit → <run>/coding-agent-workdir/ |
| Quorum | Le wrapper TypeScript/Bun. Possède la configuration, l'adaptation du Coding-Agent, les vérifications déterministes et le verdict final. | dépôt superpowers-evals/src/ ; <run>/verdict.json |
Un run implique deux LLM — le Gauntlet-Agent (testeur QA) et le Coding-Agent (sujet). Modèles séparés, journaux séparés, coûts de tokens séparés.
La dimension d'évaluation est (scénario, coding-agent, identifiant, os). credentials.yaml à la racine du dépôt définit des identifiants nommés ; chaque entrée déclare le modèle, le protocole de communication (api : openai-chat, openai-responses, anthropic ou gemini), une base_url optionnelle pour les points de terminaison non par défaut, le type d'authentification (api-key, subscription ou oauth), un api_key_env optionnel, les familles d'exécution qu'il sert (harnesses), et des surcharges d'ordonnanceur optionnelles (max_concurrency, launch_spacing_seconds) ainsi qu'un bloc compat (thinking_format, max_tokens_field).
Chaque YAML d'agent déclare un default_credential. Remplacez au moment de l'exécution :```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` valide `credentials.yaml` et le `default_credential` de chaque agent.
Le planificateur base son plafond de concurrence et son verrou de limite de débit sur le **limiterKey** de la credential — le `base_url` de la credential s'il est défini, sinon le nom de la credential, joint à son `api` (par exemple `https://…/v1|openai-chat`, ou `opus|anthropic` pour une credential native sans `base_url`).
Les cellules partageant un même limiterKey partagent un plafond et un verrou de limite de débit : une réponse de limite de débit sur n'importe quelle cellule ignore immédiatement toutes les cellules restantes en file d'attente pour ce point de terminaison.
Credentials nommées standard (voir `credentials.yaml`) : `opus`, `sonnet`, `haiku` (harnais Claude), `codex_sub` (abonnement Codex), `kimi_default`, `openrouter_glm_5_2` (Pi par défaut), `pi_default` (adhésion OAuth Pi native), `opencode_gpt5`, `gemini_default`, `serf_default`, `glm_5_2_chat`, `glm_5_2_responses`, `ollama_local`.
### Campagnes Serf externes
Les campagnes éphémères de modèle/fournisseur Serf utilisent un fichier de credentials externe, et non le fichier canonique `credentials.yaml` du dépôt. Passez-le explicitement avec `--credentials-file` à `quorum run`, `quorum run-all` ou `quorum check`. Conservez le vrai YAML de campagne et tous les artefacts bruts d'exécution en dehors de Git : le YAML contient des étiquettes de routage et le nom de la variable d'environnement de la clé API sélectionnée, jamais une valeur de clé.
Chaque préréglage de campagne doit épingler exactement un modèle et un fournisseur, désactiver les replis, et ne contenir aucune substitution de prompt, d'échantillonnage, de raisonnement, d'outil ou de limite de jetons. Fournissez sa clé dédiée via le bundle de credentials d'exécution de confiance. La clé doit appliquer la politique de données prévue par la campagne, avoir un plafond de dépenses de campagne, et, pour une campagne à capacité partagée, ne pas avoir de liaison BYOK. Une comparaison BYOK est une campagne séparée avec une clé séparée et un fichier candidat.
Avant l'envoi, `run-all` analyse le fichier externe une fois et écrit son instantané canonique dans `results/batches/<batch-id>/credentials.snapshot.yaml` ; chaque enfant reçoit cet instantané immuable. Un `quorum run` direct écrit le même instantané canonique dans son répertoire d'exécution. Modifier le YAML source après le démarrage d'un lot ne peut pas modifier les cellules ultérieures. Les instantanés contiennent des métadonnées de routage connues du schéma et des noms de variables d'environnement, pas des valeurs secrètes, mais ils font toujours partie des artefacts d'exécution sensibles.
Exécutez d'abord le test de fumée neutre pour l'agent, puis exécutez le scénario coûteux uniquement pour les credentials dont le verdict final du test de fumée est `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 est la référence séquentielle latence/coût. Une cellule de matrice est une tentative payée ; le planificateur de campagne ne réessaie ni ne répète automatiquement une cellule. Affichez la comparaison étiquetée avec quorum costs <batch-id>. Seules les lignes finales pass sont marquées comme comparables ; les lignes fail et indeterminate restent visibles mais non classées, et les mesures manquantes sont affichées comme manquantes plutôt que zéro. Les colonnes chargé, estimé et delta sont les coûts de Coding-Agent. Les colonnes existantes --with-gauntlet sont des frais généraux distincts du harnais Gauntlet-Agent.
L'acceptation en direct est un travail manuel de mainteneur de confiance, jamais une automatisation CI publique :
--jobs 1.verdict.json, trajectory.json, openrouter-generations.json, coding-agent-token-usage.json et quorum costs <batch-id>. Confirmez le modèle, le fournisseur, la version du preset, BYOK est faux, les buckets de jetons/cache, la durée, le coût facturé, l'estimation, le delta, et les étiquettes des candidats, y compris la quantification et la date du catalogue.--jobs 1 ; exigez un pass final, chaque vérification déterministe, une livraison validée sur la branche principale, et une ligne de comparaison complète.--jobs 2 ; confirmez une attribution distincte sans clés, générations, étiquettes ou économies croisées.Publiez uniquement des conclusions examinées lors de la version et nettoyées dans une note datée docs/experiments/, en enregistrant les échecs ainsi que les succès. Le YAML de campagne externe et les artefacts bruts restent en dehors 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` sans argument valide chaque scénario et `credentials.yaml`.
`run-all` exécute chaque scénario inclus contre chaque Coding-Agent sélectionné,
filtré par la directive `# coding-agents:` de chaque scénario.
## Verdicts et Artéfacts
quorum produit un verdict à trois valeurs :
- `pass` - Gauntlet-Agent réussi et chaque post-vérification réussie.
- `fail` - Gauntlet-Agent échoué, ou une post-vérification échouée.
- `indeterminate` - échec de configuration/pré-vérification/capture/quorum, Gauntlet
`investigate`, ou trace vide lorsque des vérifications de trace sont présentes.
Les codes de sortie sont 0 pour `pass`, 1 pour `fail` et 2 pour `indeterminate`.
Chaque exécution produit un répertoire sous `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/ est ignoré par git car les artefacts d'exécution peuvent contenir des transcriptions sensibles, des identifiants, des appels d'outils et l'état du système de fichiers.
Voici les vérifications attendues en CI et sur les PRs de routine :```bash bun run check # biome ci . && tsc --noEmit && bun test — the full gate bun run quorum check # validate every scenario directory
`bun run check` est la porte unique (Biome lint/format + full-strict `tsc` +
`bun test`) ; les étapes individuelles sont `bun run lint`, `bun run typecheck`, et
`bun test`.
## Architecture
quorum est **TypeScript sur Bun**. La console est `bun run quorum <cmd>` (une
CLI [commander](https://github.com/tj/commander.js) dans `src/cli/index.ts`,
également exposée en tant que binaire `quorum`) ; la porte est `bun run check`
(Biome + full-strict `tsc` + `bun test`).
Les formes qui traversent les frontières entre processus et fichiers —
`verdict.json`, les index de lots, les économies, le résultat du Gauntlet, le
YAML d'agent — sont des **schémas zod** dans `src/contracts/`, validés à chaque
frontière, de sorte qu'un fichier externe malformé échoue bruyamment au lieu de
corrompre un verdict. La couche `cli/` analyse les commandes et les distribue
dans le pipeline `runner/` (un scénario × un Coding-Agent) ou `run-all/` (la
matrice). Les différences par Coding-Agent résident dans deux éventails
parallèles indexés par nom d'agent : `agents/` alimente la configuration de
l'agent sous le `$HOME` jetable par exécution (`<run>/home`), et `normalize/`
transforme le journal de session de cet agent en une trace uniforme d'appels
d'outils. Les appels en direct agent-CLI et autres sous-processus non hermétiques
passent par la couture `agents/command-runner.ts`, de sorte que la suite de
tests unitaires injecte des simulations et ne lance jamais une véritable CLI.
`scheduler/` est le moteur de concurrence partagé sous `run-all/`. Le tableau
de bord est un paquet séparé en lecture seule qui scanne `results/` et
`grid-manifest.json`. `env.ts` est le seul module qui lit `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
Le triage d'un run non réussi commence par :```bash bun run quorum show []
Ensuite, utilisez [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) pour l'atlas d'attribution. Pour les vérifications d'authentification, de provisionnement et de capture spécifiques à l'agent, utilisez [docs/coding-agent-care-and-feeding.md](https://github.com/prime-radiant-inc/superpowers-evals/blob/main/docs/coding-agent-care-and-feeding.md).
Pour la base de référence actuelle connue, voir [docs/baselines/](https://github.com/prime-radiant-inc/superpowers-evals/blob/main/docs/baselines).
## Règles de contribution
Ce dépôt hérite du niveau de qualité de `superpowers`.
- Un problème par PR.
- Ne pas commiter les artefacts d'exécution générés ou les secrets.
- Ne pas ajouter d'évaluations en direct dans l'IC publique.
- Utilisez le modèle de PR et expliquez le risque de sécurité/évaluation-lab pour les modifications qui touchent aux configurations de Coding-Agent, à l'exécution de shell, aux helpers de configuration, aux outils de vérification ou à l'entrée Gauntlet-Agent.
- Les modifications apportées à la méthodologie d'évaluation qui modifient le comportement nécessitent des preuves, pas seulement du texte.
## Mise à jour du sous-module parent
`superpowers-evals` est consommé par `superpowers` en tant que sous-module `evals`.
Après toute fusion de PR vers `main` ici, ouvrez une PR de suivi vers le dépôt parent `superpowers` ciblant `dev` qui met à jour le pointeur du sous-module `evals` vers le commit `superpowers-evals` fusionné.
Ne considérez pas une fusion `superpowers-evals` comme totalement propagée tant que cette PR de mise à jour du sous-module parent n'existe pas.
---
Signalement de sécurité → [SECURITY.md](https://github.com/prime-radiant-inc/superpowers-evals/blob/main/SECURITY.md).