
दोषों के साथ एम्बेडेड फिक्स-जैसे आर्टिफैक्ट्स
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 |