विशाल मोनोलिथ में AI एजेंटों को गलत कोड छूने से रोकने के लिए डायरेक्टरी व्यवस्थित करने के तरीके
जब आप लाखों पंक्तियों वाली एक ही रिपॉजिटरी में Claude Code या Aider को जोड़ते हैं, तो वे गलत फ़ाइलों को पढ़ना शुरू कर देते हैं। मॉडल की कॉन्टेक्स्ट विंडो सीमित होती है, और जब यह असंबद्ध फ़ाइलों को इकट्ठा करती है, तो यह टोकन सीमा भर देती है और गलत कोड को संशोधित कर देती है.
यह समस्या लंबे प्रॉम्प्ट लिखने से हल नहीं होती है। आपको एजेंट द्वारा खोजी जाने वाली कोड की भौतिक परिधि को कम करना होगा और स्थानीय स्तर पर यांत्रिक रूप से सत्यापित करने वाले नियम स्थापित करने होंगे.
1. सर्कुलर रेफरेंस पैदा करने वाली डायरेक्टरी को अलग करना
मोनोलिथ रिपॉजिटरी में जहाँ एजेंट अनंत खोज में पड़ जाते हैं, वे आमतौर पर तीन बिंदु होते हैं: सामान्य सहायक फ़ंक्शन वाला कॉमन यूटिल फ़ोल्डर (src/utils/), व्यावसायिक तर्क से जुड़ा सर्विस लेयर (src/services/), और ग्लोबल मॉडल डायरेक्टरी (src/models/). जब ये तीन फ़ोल्डर एक-दूसरे को संदर्भित करना शुरू करते हैं, तो एजेंट कोड की एक पंक्ति को ठीक करने के लिए दर्जनों फ़ाइलों को पढ़ता है.
जब आप तकनीकी परतों द्वारा विभाजित फ़ोल्डरों को डोमेन इकाइयों में समूहित और पृथक करते हैं, तो खोज का दायरा कम हो जाता है.
| वर्गीकरण |
लेयर-केंद्रित संरचना |
डोमेन-पृथक्करण संरचना |
एजेंट के व्यवहार में परिवर्तन |
| फ़ोल्डर मानक |
तकनीकी परत पृथक्करण (/controllers, /services) |
डोमेन पृथक्करण (/domains/order) |
केवल एक फ़ोल्डर के भीतर आवश्यक फ़ाइलें खोजता है |
| निर्भरता कनेक्शन |
ग्लोबल एंटिटी को सीधे आयात करना |
डोमेन इंटरफ़ेस सीमाओं के माध्यम से संचार करना |
असंबद्ध फ़ाइलों को कैस्केड रूप से लोड करने से रोकना |
| सामान्य तर्क |
एकल src/utils/ में मिश्रित फ़ंक्शन |
डोमेन-विशिष्ट यूटिल और कॉमन पैकेज में विभाजित |
अनावश्यक ग्लोबल कॉन्टेक्स्ट संदूषण को रोकना |
कार्यरत सेवा को रोके बिना निर्देशिकाओं को स्थानांतरित करने का क्रम इस प्रकार है:
- उस डोमेन की पहचान करें जिसे अलग किया जाना है, उस निर्भरता संबंध की जाँच करके जिसे एजेंट अत्यधिक कॉल करता है.
- डोमेन के बीच सीधे संदर्भों को काटने के लिए एक सेवा सीमा इंटरफ़ेस बनाएँ.
- संबंधित व्यावसायिक तर्क को
src/domains/{domain_name}/ फ़ोल्डर में ले जाएँ और tsconfig.json के पथ उपनाम (path aliases) को अपडेट करें.
- अलग किए गए उप-निर्देशिका के भीतर उस डोमेन-विशिष्ट कॉन्फ़िगरेशन फ़ाइल (
CLAUDE.md) को रखें.
2. अस्पष्ट प्राकृतिक भाषा नियमों को संख्यात्मक बाधाओं में बदलना
प्राकृतिक भाषा में लंबी कोडिंग परंपराओं को एजेंट आसानी से अनदेखा कर देते हैं। निर्देशों का सटीक पालन करने के लिए कॉन्फ़िगरेशन फ़ाइल के शीर्ष पर स्पष्ट संख्याएँ और निषेध रखे जाने चाहिए.
`markdown
प्रोजेक्ट प्रतिबंध (CLAUDE.md शीर्ष पर रखा गया)
- सुरक्षा और अपवाद हैंडलिंग
- NEVER allow raw SQL string concatenation. ALWAYS use parameterized queries with ORM.
- NEVER throw generic Exception or Error. ALWAYS throw domain-specific exceptions inheriting from BaseDomainException.
- ALWAYS enforce tenant_id filtering in all database queries under src/domains/.
- कोड संरचना संख्यात्मक प्रतिबंध
- Functions MUST NOT exceed 40 lines of code.
- Cyclomatic complexity MUST be kept under 8 per function.
- ALWAYS return Result<T, E> pattern for business layer operations instead of null.
`
यदि कॉन्फ़िगरेशन फ़ाइल 200 पंक्तियों से अधिक हो जाती है, तो पीछे के निर्देशों को छोड़ना आम बात हो जाती है.
- रूट डायरेक्टरी के
CLAUDE.md में, केवल बिल्ड कमांड और ग्लोबल कमिट नियम 200 पंक्तियों के भीतर रखें.
src/domains/order/ जैसे उप-फ़ोल्डर नियमों को संबंधित निर्देशिका के भीतर समर्पित नियम फ़ाइलों में वितरित करें.
- डेवलपर की व्यक्तिगत सेटिंग
CLAUDE.local.md में लिखी जानी चाहिए और टकराव को रोकने के लिए .gitignore में पंजीकृत होनी चाहिए.
3. स्थानीय हुक के साथ एजेंट द्वारा संशोधित कोड का स्वचालित सत्यापन
एजेंट द्वारा बनाए गए कोड में सिंटैक्स त्रुटियों या रीग्रेशन बग को कमिट के समय स्वचालित रूप से पकड़ा जाना चाहिए। Lefthook का उपयोग करना, जो एक सिंगल Go बाइनरी के रूप में चलता है, Node.js-आधारित टूल की तुलना में हल्के समानांतर निरीक्षण की अनुमति देता है.
रूट पर lefthook.yml रखें और हल्के स्टेटिक निरीक्षण और भारी परीक्षण चरणों को अलग करें.
`yaml
pre-commit:
parallel: true
commands:
linter:
glob: ".{ts,tsx}"
run: npx eslint --fix {staged_files}
stage_fixed: true
formatter:
glob: ".{ts,tsx,json,md}"
run: npx prettier --write {staged_files}
stage_fixed: true
security-scan:
run: gitleaks git --staged --no-banner
pre-push:
parallel: false
commands:
typecheck:
run: npx tsc --noEmit
unit-tests:
run: npm run test:unit -- --passWithNoTests
`
कमिट चरण का pre-commit केवल 10 सेकंड के भीतर स्टेज की गई फ़ाइलों का निरीक्षण करता है, और संपूर्ण प्रकार जाँच और यूनिट परीक्षण पुश चरण pre-push में पारित किए जाते हैं.
.claude/hooks/block-no-verify.mjs इंटरसेप्टर को पंजीकृत करें ताकि एजेंट हुक को बायपास करने के लिए --no-verify विकल्प का उपयोग न कर सके.
`javascript
import fs from 'fs';
const input = fs.readFileSync(0, 'utf8');
const parsed = JSON.parse(input);
if (parsed.tool_input?.command?.includes('--no-verify')) {
console.error("Policy Violation: `--no-verify` flag is strictly prohibited.");
process.exit(1);
}
process.exit(0);
`
यदि हुक विफल हो जाता है, तो कंसोल त्रुटि आउटपुट अगले प्रॉम्प्ट में प्रवेश करता है और एजेंट स्वयं कोड को संशोधित करता है.
4. खोज दायरे को सीमित करके टोकन की बर्बादी को रोकना
यदि एजेंट बिल्ड आउटपुट या लॉक फ़ाइलों को पढ़ना शुरू कर देता है, तो टोकन जल्दी समाप्त हो जाते हैं। आप अनपेक्षित लागत発生 को रोकने के लिए फ़ाइल खोज श्रेणी को बंद कर सकते हैं.
प्रोजेक्ट रूट में .ignore या .aiderignore बनाएँ और बड़े पैमाने पर कलाकृतियों (artifacts) को पंजीकृत करें.
`text
node_modules/
dist/
build/
coverage/
*.min.js
*.svg
*.lock
package-lock.json
public/assets/
db/migrations/
`
टर्मिनल से निष्पादित करते समय, वैश्विक स्कैन को अवरुद्ध करने के लिए कार्य करने के लिए निर्देशिका निर्दिष्ट करें.
`bash
aider "Refactor Order validation logic" --path=src/domains/order/ --exclude=src/domains/order/tests/
`
कोड को संशोधित करने से पहले परिवर्तनों की जाँच योजना मोड में करना, असफल यूनिट परीक्षण लिखना, और फिर केवल उन कोडों को लिखना जो पास होते हैं, एजेंट के कार्य दायरे को सुरक्षित रखता है.