
दोषों के साथ एम्बेडेड फिक्स-जैसे आर्टिफैक्ट्स
Fix Like Artifacts with Embedded Defects
AI एजेंट कितनी अच्छी तरह कमज़ोरियों को पैच करते हैं, इसे मापने के लिए एक शोध हार्नेस।
Quickstart · Datasets · Documentation · Security model · Contributing
FLAWED एक ओपन-सोर्स प्रोजेक्ट को ज्ञात-कमज़ोर कमिट पर चेकआउट करता है, एक AI एजेंट को बग का विवरण देता है, और उससे पैच लिखने के लिए कहता है। एजेंट कभी भी असली अपस्ट्रीम फ़िक्स नहीं देखता।
फिर हर पैच को अलग-अलग कंटेनरों में मान्य, ऑडिट और ग्रेड किया जाता है, ताकि आप देख सकें कि मॉडल ने बग ठीक किया या नहीं, बल्कि यह भी कि क्या इस दौरान नए बग पैदा हुए।
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]हर चरण अपने स्वयं के कंटेनर में चलता है। केवल clone के पास नेटवर्क एक्सेस है। बाद का हर चरण LLM प्रोवाइडर के API तक सीमित है, ताकि एजेंट रन के दौरान संकेत या अपस्ट्रीम फ़िक्स न ला सकें।
| विशेषता | यह आपको क्या देती है |
|---|---|
| बार-बार सैंपलिंग | एक रन एक ही इनपुट के N पुनरावृत्तियाँ निष्पादित करता है, इसलिए परिणाम वितरण होते हैं, किस्से नहीं। |
| कैंपेन | एक बग को पैचर वेरिएंट और प्रॉम्प्ट शैलियों में फैलाएँ, अस्पष्ट "fix this plz" से लेकर पूर्ण एडवाइज़री तक, और लाइव डैशबोर्ड पर परिणामों की तुलना करें। |
| परिणाम ग्रेडिंग | हर पैच पाँच परिदृश्यों में से एक में आता है, S1 (साफ़ फ़िक्स) से लेकर S5 (बग ठीक नहीं किया और एक नई कमज़ोरी पेश की) तक। |
| क्रॉस-वैलिडेशन | पैच को अन्य मॉडलों द्वारा दोबारा जाँचा जाता है, और मुख्य संख्याएँ स्व- और क्रॉस-वैलिडेशन दोनों दृष्टिकोणों का औसत लेती हैं ताकि किसी एक जज का पूर्वाग्रह हावी न हो। |
| चीट डिटेक्शन | एक ऑडिटर उन पुनरावृत्तियों को चिह्नित करता है जहाँ एजेंट ने बग को स्वयं हल करने के बजाय अपस्ट्रीम फ़िक्स ढूँढ लिया। |
FLAWED Claude, Codex, और Gemini CLIs को समान इनपुट के साथ आमने-सामने चलाता है।
[!WARNING] FLAWED Docker सॉकेट (होस्ट पर root-समकक्ष) माउंट करता है और अपने स्टेज कंटेनरों के अंदर अविश्वसनीय तृतीय-पक्ष कोड निष्पादित करता है। इसे उस मशीन पर चलाएँ जिस पर आप इस वर्कलोड को ले जाने का भरोसा करते हैं। देखें
docs/security-model.md।
आपको Docker चाहिए, जिसमें डेमन सॉकेट सुलभ हो।
# 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
फिर अपना पहला रन करें।
bugs/ के अंतर्गत आते हैं। एक को वेब UI के Bug Specs पेज में खींचें, या CLI का उपयोग करें।
./scripts/import-all-bugs.sh
[!NOTE] एक बड़े अपस्ट्रीम (जैसे Chromium) के विरुद्ध पहला रन धीमा होता है। validate स्टेज असली अपस्ट्रीम पैच के विरुद्ध diff करने के लिए पूरे रेपो को एक बार क्लोन करता है। क्लोन कैश हो जाता है और बाद में पुनः उपयोग किया जाता है।
आपको Docker, Node 20+, pnpm, uv, और @devcontainers/cli (npm i -g @devcontainers/cli) चाहिए। Nix उपयोगकर्ता Docker को छोड़कर सब कुछ के लिए nix-shell कर सकते हैं।
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
वेब डेव लूप के लिए, दूसरे टर्मिनल में make web-dev चलाएँ। यह UI को पोर्ट 5173 पर सर्व करता है और /api को flawed serve पर प्रॉक्सी करता है।
इस रेपो के विरुद्ध AI कोडिंग एजेंट को सुरक्षित रूप से चलाने के लिए एक पृथक devcontainer का दस्तावेज़ीकरण .devcontainer/README.md में है।
एक बग स्पेक इनपुट की इकाई है। इसमें एक रेपो, एक कमज़ोर कमिट, एक बग विवरण, एक वैकल्पिक रिप्रोड्यूसर, और प्रॉम्प्ट वेरिएंट का एक सेट होता है जो मॉडल करता है कि बग वास्तव में कैसे रिपोर्ट किया जा सकता है (SAST निष्कर्ष, बग-बाउंटी रिपोर्ट, एम्बार्गोड एडवाइज़री, कच्चा PoC, …)। स्पेक संस्करणित और अपरिवर्तनीय हैं, इसलिए एक ऐतिहासिक रन का प्रॉम्प्ट और निर्णय कभी चुपचाप नहीं बदलता।
JSON कॉन्ट्रैक्ट bugs.schema.json में रहता है और इसका दस्तावेज़ीकरण docs/bug-specs.md में है। सभी बंडल किए गए स्पेक सार्वजनिक रूप से प्रकट, अपस्ट्रीम-फ़िक्स्ड कमज़ोरियों का वर्णन करते हैं।
Postgres एकमात्र सत्य स्रोत है। रन मेटाडेटा और आर्टिफैक्ट बाइट्स (पैच, निर्णय, ट्रांसक्रिप्ट, लॉग) डेटाबेस में रहते हैं, इसलिए एक डिप्लॉयमेंट पूरी तरह से उसके DB द्वारा कैप्चर किया जाता है। data/ डायरेक्टरी अस्थायी स्क्रैच है जिसे स्टेज रनटाइम पर माउंट करते हैं।
scripts/export_dataset.py और scripts/import_dataset.py के साथ करें (वेब UI से भी उपलब्ध)।scripts/export_artifacts.py के साथ करें।uv run alembic upgrade head स्टार्टअप पर स्वचालित रूप से चलता है)।हम पूर्व-निर्मित डेटासेट प्रकाशित करते हैं ताकि आप सब कुछ स्वयं चलाने के बजाय पूर्ण कैंपेन लोड कर सकें। प्रत्येक डेटासेट एक पूर्ण स्नैपशॉट का .tar.gz है, जो https://flawed.s3.us-east-1.amazonaws.com पर होस्ट किया गया है।
एक ही बंडल में सभी कैंपेन।
| बंडल | आर्काइव |
|---|---|
| सभी कैंपेन | full.tar.gz |
| कैंपेन | पैचर मॉडल | आकार | आर्काइव |
|---|---|---|---|
| CVE-2026-22738 (Spring AI SpEL injection) | claude-opus-4-8 | 515.0 MB | .tar.gz |
| CVE-2026-22738 (Spring AI SpEL injection) | gpt-5.5 | 663.9 MB | .tar.gz |
CVE-2026-31431 (Linux algif_aead) | claude-opus-4-8 | 1.1 GB | .tar.gz |
CVE-2026-31431 (Linux algif_aead in-place) | gpt-5.5 | 966.9 MB | .tar.gz |
| CVE-2026-34197 (ActiveMQ Jolokia RCE) | claude-opus-4-8 | 645.2 MB | .tar.gz |
| CVE-2026-34197 (ActiveMQ Jolokia RCE) | gpt-5.5 | 819.0 MB | .tar.gz |
| CVE-2026-45185 (Exim BDAT use-after-free) | claude-opus-4-8 | 1.1 GB | .tar.gz |
| CVE-2026-45185 (Exim BDAT use-after-free) | gpt-5.5 | 1.0 GB | .tar.gz |
| CVE-2026-8512 (Chromium fsevents UAF) | claude-opus-4-8 | 500.7 MB | .tar.gz |
| CVE-2026-8512 (Chromium fsevents UAF) | gpt-5.5 | 342.7 MB | .tar.gz |
| freenginx-26 (Perl SV refcount UAF) | gpt-5.5 | 166.4 MB | .tar.gz |
| GHSA-wpqr-6v78-jr5g (Gemini CLI trust model) | claude-opus-4-8 | 1.2 GB | .tar.gz |
| GHSA-wpqr-6v78-jr5g (Gemini CLI trust model) | gpt-5.5 | 1.3 GB | .tar.gz |
Snapshots → Import datasets, ऊपर दिए गए आर्काइव लिंक में से एक पेस्ट करें, और Find archives पर क्लिक करें। FLAWED एक सीधे .tar.gz लिंक को जैसा है वैसा इम्पोर्ट करता है और इसे आपके स्नैपशॉट में अनपैक करता है। फिर इसे स्नैपशॉट सूची से रिस्टोर करें (रिस्टोर एक अलग, स्पष्ट रूप से पुष्टि किया गया चरण है)।
इम्पोर्ट एक साथ कई आर्काइव तभी खोजता है जब URL एक सूचीबद्ध बकेट या एक डायरेक्टरी इंडेक्स पेज हो। यहाँ दोनों में से कोई भी लागू नहीं होता, इसलिए लिंक को एक-एक करके इम्पोर्ट करें।
एक आर्काइव डाउनलोड करें, इसे स्नैपशॉट डायरेक्टरी (FLAWED_HOST_SNAPSHOT_DIR, या डिफ़ॉल्ट रूप से ./flawed-snapshots) में अनपैक करें, और यह स्नैपशॉट सूची में रिस्टोर के लिए तैयार दिखाई देगा।
curl -LO https://flawed.s3.us-east-1.amazonaws.com/compressed/campaigns/full/cve-2026-45185-exim-bdat-uaf_full_gpt-5.5_1782988292.tar.gz
mkdir -p "$FLAWED_HOST_SNAPSHOT_DIR"
tar -xzf cve-2026-45185-exim-bdat-uaf_full_gpt-5.5_1782988292.tar.gz -C "$FLAWED_HOST_SNAPSHOT_DIR"
इम्पोर्ट करना केवल बंडल को डिस्क पर स्टेज करता है। इसे रिस्टोर करना, जो वर्तमान डिप्लॉयमेंट को बदल देता है, स्नैपशॉट पेज से अलग से किया जाता है।
| दस्तावेज़ | इसमें क्या है |
|---|---|
docs/architecture.md | घटक, डेटा प्रवाह, स्टोरेज लेआउट |
docs/pipeline.md | चरण, पुनरावृत्ति अर्थशास्त्र, कंटेनर लेआउट |
docs/security-model.md | प्रति-चरण नेटवर्क नीति, सैंडबॉक्सिंग, खतरा मॉडल |
docs/bug-specs.md | इनपुट कॉन्ट्रैक्ट, प्रॉम्प्ट संरचना, संस्करणीकरण |
docs/cli.md | flawed कमांड संदर्भ + env वेरिएबल |
docs/webapp.md | UI टूर |
docs/notebook.md | JupyterLab एकीकरण + flawed हेल्पर मॉड्यूल |
packages/
flawed-core/ models, DB schema, settings
flawed-orchestrator/ run lifecycle, worker pool, devcontainer driver
flawed-stage-*/ the pipeline stages (clone, generate, validate, …)
flawed-agent-runner/ runs INSIDE the container (Claude / Codex / Gemini CLIs)
flawed-api/ FastAPI + SSE + notebook proxy
flawed-cli/ the `flawed` CLI
apps/web/ React + Vite + Tailwind webapp
containers/ base image, network lockdown, notebook container
bugs/ example bug specs
docs/ documentation (see above)
| कार्य | कमांड |
|---|---|
| सभी Python + Node डिपेंडेंसी सिंक करें | make dev |
| टेस्ट चलाएँ | make test |
| लिंट | make lint |
| ऑटो-फ़ॉर्मेट | make format |
| वेब डेव सर्वर (पोर्ट 5173) | make web-dev |
| E2E स्मोक टेस्ट | make e2e |
टेस्ट के लिए Docker चाहिए। वे testcontainers के माध्यम से अपना Postgres स्वयं शुरू करते हैं।
FLAWED MIT License के अंतर्गत जारी किया गया है। योगदान का स्वागत है। CONTRIBUTING.md देखें, और कृपया सुरक्षा समस्याओं की रिपोर्ट SECURITY.md के अनुसार निजी तौर पर करें।