इस प्रोजेक्ट के बारे में
testgraph एक जर्नी-लेवल टेस्ट सेलेक्टर है। git diff दिए जाने पर, यह बताता है कि किसी बदलाव ने किन यूजर-फेसिंग फ्लो को तोड़ा होगा और उन्हें किस क्रम में टेस्ट किया जाना चाहिए, जिससे हर चीज़ को फिर से चलाने के बजाय एक छोटी रैंक वाली सूची मिलती है। यह जानबूझकर ब्राउज़र नहीं चलाता, टेस्ट जेनरेट नहीं करता या सेल्फ-हील नहीं करता; इसका काम मौजूदा ड्राइवरों के ऊपर की लेयर के रूप में यह तय करना है कि किसे टेस्ट करना सार्थक है।
यह कैसे काम करता है
एक जर्नी रजिस्ट्री प्रत्येक यूजर जर्नी और उसके एंट्री सिम्बल्स (जैसे रूट हैंडलर्स या शेड्यूलर स्वीप) को नाम देती है। propose मॉड्यूल इंडेक्स के विरुद्ध Python रूट डेकोरेटर्स और Next.js कन्वेंशन को स्कैन करके एक नए रेपो के लिए रजिस्ट्री का ड्राफ्ट तैयार करता है, और इसे तब तक 'approved false' मार्क करता है जब तक कोई इंसान इसे पढ़ न ले, ताकि एक अन-अप्रूव्ड रजिस्ट्री शोर मचाए लेकिन चुपचाप न चले। एक diff के लिए, testgraph बदले हुए लाइन रेंज को उन सिम्बल्स से मैप करता है जिनके वे मालिक हैं (seeds); फिर यह CodeGraph एज ग्राफ में रिवर्स दिशा में ट्रांजिटिवली उन सभी सिम्बल्स तक जाता है जो सीड पर निर्भर हैं (impacted set); और उन जर्नीज़ की रिपोर्ट करता है जिनके एंट्री सिम्बल्स उस सेट में आते हैं, जिन्हें fan-in के आधार पर रैंक किया जाता है, और प्रत्येक में उस सबसे मजबूत एज पाथ का कॉन्फिडेंस होता है जिसने उसे पहुँचाया। कॉन्फिडेंस, पाथ्स के अधिकतम (maximum) और एडजेस के न्यूनतम (minimum) का परिणाम है, इसलिए एक चेन केवल अपने सबसे कमजोर हॉप जितनी भरोसेमंद होती है, जबकि एक ठोस रूट पर्याप्त होता है। केवल कमजोर या सिंथेसाइज्ड एडजेस के माध्यम से पहुँची गई जर्नी को चुपचाप भरोसा करने के बजाय मैनुअल वेरिफिकेशन के लिए फ्लैग किया जाता है, और इसे चयन से कभी नहीं हटाया जाता। यह टूल recall-first है: यह किसी ऐसी जर्नी को चुपचाप छोड़ने के बजाय ओवर-सिलेक्शन को प्राथमिकता देता है जिसे बदलाव ने वास्तव में प्रभावित किया हो। जवाब देने से पहले, एक integrity guard दूषित या पुराने CodeGraph इंडेक्स पर चलने से इनकार कर देता है, क्योंकि एक गलत ग्राफ आत्मविश्वास के साथ गलत जवाब देता है।
रजिस्ट्री रिज़ॉल्यूशन सर्च में, पहला हिट जीतता है: पहले एक एनवायरनमेंट वेरिएबल एस्केप हैच, फिर रेपो के अंदर एक .testgraph/journeys डायरेक्टरी (जिसे अनुशंसित स्थान बताया गया है), और फिर प्रोजेक्ट के अपने चेकआउट में पैकेज के बगल में एक journeys डायरेक्टरी। एक रजिस्ट्री को उसके फ़ाइल नाम के बजाय उसके स्वयं-घोषित टारगेट पर मैच किया जाता है, और किसी अन्य प्रोजेक्ट से कॉपी की गई और बिना एडिट की गई रजिस्ट्री को अस्वीकार कर दिया जाता है।
पूर्वापेक्षाएँ और इंस्टाल
केवल स्टैंडर्ड लाइब्रेरी का उपयोग करने वाला Python 3.11 या नया वर्ज़न, बिना किसी थर्ड-पार्टी डिपेंडेंसी के; diff इनपुट के लिए git; और codegraph init द्वारा निर्मित CodeGraph इंडेक्स वाला एक टारगेट रेपो। PyPI से pip install testgraph के साथ इंस्टॉल करें। व्हील केवल पैकेज भेजता है, जबकि मेजरमेंट हार्नेस और डॉगफूड रजिस्ट्रियाँ रिपॉजिटरी में रहती हैं।
CLI और MCP
कमांड-लाइन एंट्री पॉइंट्स में select शामिल है, जिसका ह्यूमन-रीडेबल या JSON आउटपुट CI गेट या किसी अन्य एजेंट के लिए होता है; export, जो एक स्टैटिक जर्नी मैप लिखता है जिसे एजेंट प्री-कमिट पढ़ता है; propose; record; और एक समरी मोड। MCP stdio सर्वर दो टूल्स, testgraph_impact और testgraph_journeys को एक्सपोज़ करता है, और प्रति रेपो रजिस्टर्ड होता है। यह stdlib-only है और एनालिसिस मॉड्यूल्स को लेज़ीली इम्पोर्ट करता है, इसलिए एक आइडल सर्वर ने sqlite3 लोड नहीं किया होता, कोई डेटाबेस कनेक्शन नहीं रखता और मेमोरी में कोई इंडेक्स नहीं रखता। README एक फुल हैंडशेक के बाद 15.2 MB RSS रिपोर्ट करता है, जबकि एक विशिष्ट Python MCP SDK सर्वर के लिए यह 62 से 69 MB होता है।
वायरिंग और लेजर
hooks/install.sh एक अप्रूव्ड रजिस्ट्री वाले हर रेपो में एक प्री-पुश हुक इंस्टॉल करता है, ताकि प्रत्येक पुश उन जर्नीज़ को प्रिंट करे जिन्हें उसने तोड़ा होगा। हुक पहले codegraph sync चलाता है, क्योंकि सीड्स लाइन रेंज से आते हैं और कोड हिलने से पहले बना इंडेक्स पुराने स्पैन के विरुद्ध diff रिज़ॉल्व करेगा; यदि किसी बदले हुए फ़ाइल के बाइट्स अभी भी इंडेक्स की गई कॉपी से असहमत हैं, तो जवाब खराब हो जाता है और फ़ाइल का नाम बताता है। हुक कभी पुश को फेल नहीं करता, हर पाथ जीरो एग्जिट करता है, और इसे git config सेटिंग के साथ प्रति रेपो डिसेबल किया जा सकता है या uninstall फ्लैग के साथ हटाया जा सकता है। प्रत्येक रन एक JSONL लेजर में एक सिलेक्शन रो जोड़ता है; record कमांड दूसरा हिस्सा लिखता है कि जर्नी चलाने पर क्या मिला, ताकि रेपो और कमिट पर जॉइन किए गए दोनों रिकॉर्ड उस जर्नी की गिनती कर सकें जो उस कमिट पर फेल हुई जिसका सिलेक्शन उसे नाम नहीं देता था, जिसे 'silent under-selection' कहा गया है।
स्थिति
इसे फेज-1 स्पाइक और कॉन्फिडेंस-वेटेड पाथ्स के रूप में वर्णित किया गया है, जो एक डॉगफूड टारगेट पर काम कर रहा है और वैलिडेट किया गया है: पांच हैंड-लेबलled कमिट्स में 1.00 रिकॉल और 0.68 मीन प्रिसिजन, और एक स्वतंत्र AST ओरेकल के विरुद्ध स्कोर किए गए बीस सीडेड म्यूटेशन साइट्स में 1.00 रिकॉल, जिसमें integrity guard टेस्टेड और स्कीमा-पिन किया गया है। इसका स्कोप उस सिंगल टारगेट तक है, जो बैकएंड और फ्रंटएंड फ़ाइलों का विश्लेषण करता है और बैकएंड एंट्री पॉइंट्स पर रजिस्टर्ड जर्नीज़ का उपयोग करता है। README यह भी रिकॉर्ड करता है कि बिना रजिस्ट्री वाले दो रेपो पर बाद के माप ने पहले के बचत दावे को गलत साबित किया: 23 जर्नीज़ पर एक रेपो ने 38 कमिट्स के लिए शून्य जर्नीज़ और 2 कमिट्स के लिए 23 का हिस्टोग्राम दिया, और 207 जर्नीज़ पर दूसरे ने केवल 54.1 प्रतिशत जर्नी-रन्स से बचाव किया एक बार जब उन कमिट्स को बाहर कर दिया गया जिन्होंने किसी रजिस्टर्ड सरफेस को नहीं छुआ था, इसलिए सिलेक्शन नंबरों को बचत के वादे के बजाय कपलिंग के फ्लोर के रूप में पढ़ा जाना चाहिए। उसी माप ने रैंकिंग की पुष्टि की, जिसमें 0.3 कॉन्फिडेंस पर एक फॉल्स-पॉजिटिव होल-रजिस्ट्री सिलेक्शन को मैनुअल वेरिफिकेशन के लिए फ्लैग किया गया, जबकि एक वास्तविक बड़े ब्लास्ट रेडियस का परिणाम 0.9 पर क्लीन आया।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.