schema.yaml
किसी स्कीमा परिभाषा का हर फ़ील्ड—चाहे उसे पढ़ा जा रहा हो या लिखा जा रहा हो।
schema.yaml उन योजना फ़ाइलों को सूचीबद्ध करता है जिन्हें कोई वर्कफ़्लो बनाता है। यह उनका क्रम और कार्यान्वयन को हैंडऑफ़ भी परिभाषित करता है।
स्थान
कोई प्रोजेक्ट स्कीमा openspec/schemas/<name>/ के अंतर्गत रहता है:
openspec/schemas/review-first/
├── schema.yaml
└── templates/
├── proposal.md
└── tasks.mdOpenSpec उस निर्देशिका के लिए तीन स्थानों की जाँच करता है। पहला मिलान चुना जाता है।
| प्रति | निर्देशिका |
|---|---|
| 1. प्रोजेक्ट | <project>/openspec/schemas/<name>/ |
| 2. उपयोगकर्ता, macOS और Linux | ~/.local/share/openspec/schemas/<name>/ |
| 2. उपयोगकर्ता, Windows | %LOCALAPPDATA%\openspec\schemas\<name>\ |
| 3. पैकेज | CLI के साथ इंस्टॉल किए गए स्कीमा |
यदि XDG_DATA_HOME सेट है, तो हर प्लेटफ़ॉर्म पर उपयोगकर्ता निर्देशिका $XDG_DATA_HOME/openspec/schemas/<name>/ पर चली जाती है।
निर्देशिका का नाम वह लुकअप कुंजी है जिसका उपयोग --schema, config.yaml, और .openspec.yaml करते हैं। यदि name फ़ील्ड निर्देशिका के नाम से भिन्न है, तो भी OpenSpec लुकअप के लिए निर्देशिका का नाम ही उपयोग करता है।
openspec schema which <name> सक्रिय निर्देशिका और उन कम-प्राथमिकता वाली प्रतियों को प्रिंट करता है जिन्हें वह छिपाता है।
शीर्ष-स्तरीय फ़ील्ड
| फ़ील्ड | कॉन्ट्रैक्ट |
|---|---|
name | आवश्यक। स्कीमा नाम के रूप में संग्रहीत एक गैर-खाली स्ट्रिंग। लुकअप अभी भी निर्देशिका का नाम उपयोग करता है। |
version | आवश्यक। स्कीमा रिवीज़न के रूप में संग्रहीत एक धनात्मक पूर्णांक। यह मान OpenSpec के व्यवहार को नहीं बदलता। |
description | openspec schemas द्वारा प्रिंट की जाने वाली एक वैकल्पिक स्ट्रिंग। कोई मान न होने पर स्कीमा में कोई विवरण नहीं होता। |
artifacts | आवश्यक। आर्टिफ़ैक्ट प्रविष्टियों की एक गैर-खाली सूची। |
apply | वैकल्पिक apply सेटिंग्स। कोई ब्लॉक न होने पर, OpenSpec apply डिफ़ॉल्ट का उपयोग करता है। |
आर्टिफ़ैक्ट फ़ील्ड
artifacts के अंतर्गत प्रत्येक प्रविष्टि एक योजना फ़ाइल या फ़ाइलों के समूह को परिभाषित करती है।
| फ़ील्ड | कॉन्ट्रैक्ट |
|---|---|
id | आवश्यक। निर्भरताओं, प्रोजेक्ट नियमों, कमांडों और apply सेटिंग्स में उपयोग की जाने वाली एक अद्वितीय, गैर-खाली स्ट्रिंग। |
generates | आवश्यक। एक सापेक्ष पथ या ग्लोब जो एजेंट को बताता है कि चेंज फ़ोल्डर के अंदर आर्टिफ़ैक्ट कहाँ लिखना है। |
description | आवश्यक। एक स्ट्रिंग जो एजेंट को भेजे गए निर्देशों में आर्टिफ़ैक्ट को लेबल करती है। |
template | आवश्यक। स्कीमा के templates/ फ़ोल्डर में आर्टिफ़ैक्ट के प्रारूप का सापेक्ष पथ। |
instruction | वैकल्पिक मार्गदर्शन जो एजेंट को बताता है कि कौन-सी सामग्री तैयार करनी है। |
requires | उन आर्टिफ़ैक्ट ID की सूची जो पहले पूर्ण होनी चाहिए। डिफ़ॉल्ट: []। |
generates
पथ चेंज फ़ोल्डर से शुरू होता है। add-auth नामक चेंज के लिए:
generates: proposal.mdआर्टिफ़ैक्ट यहाँ जाता है:
openspec/changes/add-auth/proposal.mdएक ग्लोब कई फ़ाइलों से मेल खा सकता है:
generates: specs/**/*.mdयह openspec/changes/add-auth/specs/ के नीचे के Markdown फ़ाइलों से मेल खाता है।
OpenSpec generates में इन ग्लोब रूपों को पहचानता है:
- वाइल्डकार्ड और कैरेक्टर क्लासेस:
*,?, या[वाले मान, जैसेspecs/**/*.mdऔरreview-[ab].md। - ब्रेस एक्सपैन्शन: विकल्प जैसे
review-{api,ui}.mdऔर रेंज जैसेfile-{1..3}.md। - एक्स्टग्लोब्स: पैटर्न जैसे
@(proposal|design).md,+(proposal|design).md, और!(proposal|design).md।
शाब्दिक फ़ाइलनाम: केवल अग्रणी ! किसी मान को ग्लोब नहीं बनाता। उस फ़ाइल का नाम देने के लिए generates: '!review.md' का उपयोग करें। सामान्य कोष्ठक जैसे (proposal|design).md और एकल-तत्व ब्रेस जैसे review-{api}.md भी शाब्दिक ही रहते हैं।
OpenSpec निरपेक्ष पथों, .. खंड वाले पथों, और उन ग्लोब्स को अस्वीकार करता है जो ब्रेस या कोष्ठकों को 16 से अधिक स्तरों की गहराई तक नेस्ट करते हैं, जैसे {a,{b,{c,...}}}। वास्तविक पैटर्नों में एक या दो स्तर ही चाहिए। यह ऐसे ग्लोब को भी अस्वीकार करता है जिसके ब्रेस 1,024 से अधिक पैटर्नों तक विस्तारित होते हैं, जैसे ग्यारह बार दोहराया गया {a,b} या file-{1..5000}.md जैसी रेंज। त्रुटि में लिखा होता है Artifact output pattern expands to more than 1024 patterns। वास्तविक पैटर्न मुट्ठी भर पैटर्नों तक ही विस्तारित होते हैं।
पूर्णता
OpenSpec जाँचता है कि आउटपुट मौजूद है या नहीं। यह तय करने के लिए कि आर्टिफ़ैक्ट पूर्ण है या नहीं, फ़ाइल को पढ़ता नहीं है।
generates मान | पूर्ण होता है जब |
|---|---|
proposal.md | वह फ़ाइल मौजूद है। |
specs/**/*.md | ग्लोब कम से कम एक फ़ाइल से मेल खाता है। |
template
पथ स्कीमा के templates/ फ़ोल्डर से शुरू होता है। review-first स्कीमा में:
template: proposal.mdOpenSpec इस फ़ाइल को पढ़ता है:
openspec/schemas/review-first/templates/proposal.mdOpenSpec टेम्पलेट की सामग्री को आउटपुट प्रारूप के रूप में एजेंट को देता है। यह टेम्पलेट को चेंज फ़ोल्डर में कॉपी नहीं करता।
OpenSpec निरपेक्ष पथों और .. खंड वाले पथों को अस्वीकार करता है।
requires
- निर्भरताएँ:
requiresमें प्रत्येक ID को उसी स्कीमा में किसी अन्य आर्टिफ़ैक्ट का नाम देना चाहिए। - तैयार स्थिति: कोई आर्टिफ़ैक्ट अपनी सभी निर्भरताओं के पूर्ण होने के बाद तैयार होता है।
- अमान्य ग्राफ़: अनुपस्थित ID, डुप्लिकेट ID, और निर्भरता चक्र सत्यापन में विफल होते हैं।
- बराबरी की स्थिति: जब कई आर्टिफ़ैक्ट तैयार हों, तो
artifactsमें उनका क्रम तय करता है कि OpenSpec पहले किसे लौटाता है।
Apply फ़ील्ड
apply परिभाषित करता है कि कार्यान्वयन शुरू होने से पहले क्या मौजूद होना चाहिए।
| फ़ील्ड | कॉन्ट्रैक्ट |
|---|---|
requires | आवश्यक। उन आर्टिफ़ैक्ट की गैर-खाली सूची जो apply निर्देशों के तैयार होने से पहले मौजूद होने चाहिए। |
tracks | चेंज फ़ोल्डर में Markdown कार्य फ़ाइलों के लिए एक वैकल्पिक सापेक्ष पथ या ग्लोब। डिफ़ॉल्ट: null। |
instruction | जब apply तैयार होता है तो एजेंट को भेजा जाने वाला वैकल्पिक मार्गदर्शन। OpenSpec डिफ़ॉल्ट रूप से अंतर्निहित मार्गदर्शन का उपयोग करता है। |
आर्टिफ़ैक्ट का requires योजना क्रम को नियंत्रित करता है। apply.requires नियंत्रित करता है कि apply निर्देश कब तैयार होते हैं।
tracks
पथ चेंज फ़ोल्डर से शुरू होता है। add-auth नामक चेंज के लिए, tracks: tasks.md यह पढ़ता है:
openspec/changes/add-auth/tasks.mdtracks: "**/tasks.md" जैसा ग्लोब हर मेल खाने वाली फ़ाइल को पढ़ता है, जैसे backend/tasks.md और frontend/tasks.md। OpenSpec उनके कार्यों और प्रगति को जोड़ता है। किसी आर्टिफ़ैक्ट के generates फ़ील्ड के लिए वही मान उपयोग करें ताकि status और list उन्हीं फ़ाइलों को ट्रैक करें। generates की ब्रेस सीमाएँ (16 स्तर गहरी, 1,024 विस्तारित पैटर्न) यहाँ भी लागू होती हैं।
यदि कोई फ़ाइल मेल नहीं खाती या मेल खाने वाली फ़ाइलों में कार्य पाठ वाला कोई चेकबॉक्स नहीं है, तो apply ब्लॉक रहता है। OpenSpec इन चेकबॉक्स रूपों को गिनता है:
- [ ] Pending task
- [x] Completed task
* [X] Completed task
+ [ ] Pending task
1. [ ] Pending task
2) [x] Completed taskकोई भी Markdown सूची मार्कर काम करता है: -, *, +, या . या ) के बाद अधिकतम नौ अंकों तक की संख्या। अग्रणी स्पेस की अनुमति है। spec-driven पेज का tasks.md अनुभाग डिफ़ॉल्ट स्कीमा द्वारा उत्पादित सख्त प्रारूप को परिभाषित करता है।
ट्रैक की गई फ़ाइलें apply स्थिति को निर्धारित करती हैं:
blocked: कोई फ़ाइल मेल नहीं खाती, या किसी पठनीय फ़ाइल में कार्य पाठ वाला चेकबॉक्स नहीं है।ready: कम से कम एक कार्य लंबित है, या कोई मेल खाने वाली फ़ाइल पढ़ी नहीं जा सकी, जबकि कोई अन्य फ़ाइल कार्य प्रदान करती हो।all_done: हर ट्रैक किया गया कार्य चेक किया गया है और हर मेल खाने वाली फ़ाइल पढ़ी गई है।
यदि कोई मेल खाने वाली फ़ाइल पढ़ी नहीं जा सकती, तो apply पठनीय फ़ाइलों के कार्यों और प्रगति को बनाए रखता है, लेकिन चेंज को all_done चिह्नित नहीं करता। Apply JSON आउटपुट प्रत्येक अनुपलब्ध फ़ाइल और कारण की पहचान करता है।
OpenSpec निरपेक्ष पथों और .. खंड वाले पथों को अस्वीकार करता है।
Apply डिफ़ॉल्ट
| व्यवहार | डिफ़ॉल्ट |
|---|---|
| आवश्यक आर्टिफ़ैक्ट | स्कीमा का हर आर्टिफ़ैक्ट |
| प्रगति ट्रैकिंग | कोई ट्रैक की गई फ़ाइल नहीं |
| एजेंट मार्गदर्शन | अंतर्निहित apply मार्गदर्शन |
पूर्ण उदाहरण
name: review-first
version: 1
description: Proposal and implementation checklist
artifacts:
- id: proposal
generates: proposal.md
description: Why the change is needed and what it affects
template: proposal.md
instruction: |
Explain the problem, the proposed change, and its impact.
requires: []
- id: tasks
generates: tasks.md
description: Trackable implementation checklist
template: tasks.md
instruction: |
Break the approved proposal into ordered implementation tasks.
requires:
- proposal
apply:
requires:
- tasks
tracks: tasks.md
instruction: |
Work through the pending tasks and mark each one complete.सत्यापन
openspec schema validate <name> इनकी जाँच करता है:
- फ़ील्ड प्रकार और आवश्यक फ़ील्ड
- सापेक्ष पथ
- आर्टिफ़ैक्ट ID, निर्भरताएँ, और चक्र
apply.requiresID: प्रत्येक को स्कीमा में एक आर्टिफ़ैक्ट होना चाहिए- टेम्पलेट फ़ाइलें
अज्ञात apply.requires ID वाला स्कीमा लोड नहीं होता, इसलिए इसका उपयोग करने वाला प्रत्येक कमांड उस त्रुटि की रिपोर्ट करता है।
जब apply.tracks किसी आर्टिफ़ैक्ट के generates मान के बिल्कुल बराबर नहीं होता, तो सत्यापन विफल हुए बिना चेतावनी देता है। OpenSpec उन दो स्ट्रिंग्स की तुलना करके ट्रैक किए गए आर्टिफ़ैक्ट को ढूँढता है, इसलिए कोई भी अन्य अंतर उसे यह बताने में असमर्थ छोड़ देता है कि फ़ाइल किस आर्टिफ़ैक्ट की प्रगति से संबंधित है। इसमें task.md जैसा टाइपो शामिल है, और tracks: tasks/main.md बनाम generates: tasks/*.md भी, जहाँ ग्लोब फ़ाइल को उत्पन्न तो करता है, लेकिन स्ट्रिंग्स फिर भी भिन्न रहती हैं। apply किसी भी स्थिति में फ़ाइल पढ़ता रहता है, लेकिन openspec list और openspec status इसके बजाय tasks.md को गिनते हैं।
सत्यापन इन गलतियों को नहीं पकड़ता:
| गलती | क्या होता है |
|---|---|
किसी फ़ील्ड की वर्तनी गलत है, जैसे instrution | OpenSpec इसे अनदेखा करता है। सत्यापन टाइपो की रिपोर्ट नहीं करता। |
name स्कीमा निर्देशिका से भिन्न है | सत्यापन पास हो जाता है। OpenSpec फिर भी लुकअप के लिए निर्देशिका का नाम उपयोग करता है। |