
Artefatos semelhantes a correções com defeitos incorporados
Fix Like Artifacts with Embedded Defects
Um harness de pesquisa para medir quão bem agentes de IA corrigem vulnerabilidades.
Quickstart · Datasets · Documentation · Security model · Contributing
FLAWED faz o checkout de um projeto open-source em um commit sabidamente vulnerável, entrega a um agente de IA uma descrição do bug e pede que ele escreva um patch. O agente nunca vê a correção real do upstream.
Cada patch é então validado, auditado e avaliado em containers isolados, para que você possa ver não apenas se o modelo corrigiu o bug, mas se introduziu novos no processo.
flowchart LR
spec[bug spec] --> clone
clone["clone<br/>(open net)"] --> generate
generate["generate<br/>(offline)"] --> validate
validate["validate<br/>(offline)"] --> ast["ast<br/>(offline)"]
generate -.->|"patch.diff"| store[(Postgres)]
validate -.->|"verdict"| store
ast -.->|"summary"| store
store --> ui[web UI + notebook]
Cada estágio roda em seu próprio container. Apenas o clone tem acesso à rede. Todo estágio posterior é restrito à API do provedor de LLM, para que os agentes não possam buscar dicas ou a correção do upstream durante a execução.
| Recurso | O que ele oferece |
|---|---|
| Amostragem repetida | Uma execução realiza N iterações da mesma entrada, então os resultados são distribuições, não anedotas. |
| Campanhas | Varra um bug por variantes de patcher e estilos de prompt, desde um vago "corrige isso pfv" até um advisory completo, e compare os resultados em um dashboard ao vivo. |
| Avaliação de resultados | Cada patch cai em um de cinco cenários, de S1 (correção limpa) a S5 (não corrigiu o bug e introduziu uma nova vulnerabilidade). |
| Validação cruzada | Os patches são reavaliados por outros modelos, e os números principais fazem a média das lentes de autovalidação e validação cruzada, para que o viés de um único juiz não domine. |
| Detecção de trapaça | Um auditor sinaliza iterações em que o agente encontrou a correção do upstream em vez de resolver o bug por conta própria. |
FLAWED coloca as CLIs Claude, Codex e Gemini frente a frente com as mesmas entradas.
[!WARNING] FLAWED monta o socket do Docker (equivalente a root no host) e executa código de terceiros não confiável dentro de seus containers de estágio. Execute-o em uma máquina em que você confie para suportar essa carga de trabalho. Veja
docs/security-model.md.
Você precisa do Docker, com o socket do daemon acessível.
# 1. Configure. Writes .env for you (data dir + provider API keys)
./setup.sh
# 2. Bring up the stack (Postgres, API + worker, web UI, notebook)
docker compose up --build
# 3. Open http://127.0.0.1:8080
Depois faça sua primeira execução.
bugs/. Arraste um para a página Bug Specs da web UI, ou use a CLI.
./scripts/import-all-bugs.sh
[!NOTE] A primeira execução contra um upstream grande (por exemplo, Chromium) é lenta. O estágio de validação clona o repositório inteiro uma vez para comparar com o patch real do upstream. O clone é armazenado em cache e reutilizado depois.
Você precisa do Docker, Node 20+, pnpm, uv e @devcontainers/cli (npm i -g @devcontainers/cli). Usuários de Nix podem usar nix-shell para tudo, exceto Docker.
make dev # uv sync + web deps
docker compose up -d postgres # FLAWED needs a Postgres to talk to
cp .env.example .env # points FLAWED_DB_URL at it
uv run flawed init # builds base images, creates the schema
uv run flawed serve # API + worker + webapp on port 8080
Para o ciclo de desenvolvimento web, execute make web-dev em um segundo terminal. Ele serve a UI na porta 5173 e faz proxy de /api para flawed serve.
Um devcontainer isolado para executar agentes de codificação de IA contra este repositório com segurança está documentado em .devcontainer/README.md.
Um bug spec é a unidade de entrada. Ele carrega um repositório, um commit vulnerável, uma descrição do bug, um reprodutor opcional e um conjunto de variantes de prompt que modelam como o bug poderia realisticamente ser reportado (achado de SAST, relatório de bug bounty, advisory embargado, PoC bruto, …). Specs são versionados e imutáveis, então o prompt e o veredito de uma execução histórica nunca mudam silenciosamente.
O contrato JSON está em bugs.schema.json e está documentado em docs/bug-specs.md. Todos os specs incluídos descrevem vulnerabilidades divulgadas publicamente e corrigidas no upstream.
O Postgres é a única fonte de verdade. Metadados de execução e bytes de artefatos (patches, vereditos, transcrições, logs) ficam no banco de dados, então uma implantação é totalmente capturada por seu DB. O diretório data/ é um espaço de rascunho transitório que os estágios montam em tempo de execução.
scripts/export_dataset.py e scripts/import_dataset.py (também disponíveis na web UI).scripts/export_artifacts.py.uv run alembic upgrade head roda automaticamente na inicialização).Publicamos datasets pré-construídos para que você possa carregar campanhas concluídas em vez de executar tudo por conta própria. Cada dataset é um .tar.gz de um snapshot completo, hospedado em https://flawed.s3.us-east-1.amazonaws.com.
Todas as campanhas em um único pacote.
| Pacote | Arquivo |
|---|---|
| Todas as campanhas | full.tar.gz |