लेखकत्व हेडर — प्रति-फ़ाइल SPDX लाइसेंस लाइन
प्रत्येक फ़ाइलप्रकार के लिए उपयुक्त टिप्पणी सिंटैक्स में कैनोनिकल एकल-लाइन हेडर का उपयोग करते हुए प्रति-फ़ाइल SPDX लाइसेंस आइडेंटिफ़ायर मार्कर परिभाषित और प्रवर्तित करें।
डाउनस्ट्रीम योगदानकर्ताओं के लिए कैनोनिकल मानक संदर्भ। यह दस्तावेज़ प्रोजेक्ट विनिर्देश के Authorship & File-Header अनुभागों (Spec §0.5 + §4.6) को प्रतिबिंबित करता है; यह प्रकाशित रिपॉज़िटरी के साथ शिप होने वाला स्वतंत्र संदर्भ है। वास्तुशिल्पीय औचित्य ADR-0002 में दर्ज है।
1. कैनोनिकल हेडर लाइन
ईकोसिस्टम में प्रत्येक लागू फ़ाइल को अपने फ़ाइलप्रकार परिवार के टिप्पणी सिंटैक्स में एक एकल कैनोनिकल SPDX लाइसेंस-आइडेंटिफ़ायर लाइन से अवश्य आरंभ होना चाहिए। यह लाइन फ़ाइल का मशीन-पठनीय लाइसेंस मार्कर है; गैर-छूट प्राप्त फ़ाइलों के लिए इसकी उपस्थिति अपरिवर्तनीय है, और इसकी सामग्री एकल सत्य-स्रोत द्वारा शासित होती है, प्रति-फ़ाइल तदर्थ रूप से नहीं रची जाती। पूर्ण कॉपीराइट उपकरण रिपॉज़िटरी-रूट LICENSE फ़ाइल में एक बार रहता है — इसे प्रत्येक स्रोत फ़ाइल में नकल नहीं किया जाता।
1.1 सूचना सामग्री (अपरिवर्तनीय)
कैनोनिकल सामग्री ठीक एक लाइन है:
SPDX-License-Identifier: MIT— FSFE द्वारा अनुरक्षित REUSE विनिर्देश के अनुसार मशीन-पठनीय लाइसेंस मार्कर; SPDX टूलचेन (reuse lint,scancode), Linux-कर्नेल टूलिंग, और डाउनस्ट्रीम लाइसेंस-स्कैनर द्वारा अस्पष्टता के बिना पार्स किया जाता है। इसमें कोई दृश्य सीमा नहीं और कोई प्रति-फ़ाइल कॉपीराइट, वेबसाइट, ईमेल, या GitHub लाइन नहीं है — प्रति-फ़ाइल मूल-स्रोत डिज़ाइन के अनुसार एकल SPDX लाइन है (§4 देखें)।
1.2 संदर्भ रूप (#-टिप्पणी परिवार)
कैनोनिकल पाठ — यहाँ इसके #-टिप्पणी-सिंटैक्स रूप में लिखा गया — का सत्य-स्रोत src/apothem/schemas/authorship-header.txt में है:
# SPDX-License-Identifier: MITयह पाठ एकमात्र आधिकारिक स्रोत है। file-header सत्यापक (§7) इस बाइट-सटीक फ़िक्स्चर के विरुद्ध चलता है। फ़ाइल की हेडर लाइन और इस फ़िक्स्चर के बीच कोई भी विचलन (§2 के अनुसार सिंटैक्स प्रतिस्थापन के तहत) एक CI विफलता है।
2. प्रति-फ़ाइलप्रकार वैरिएंट (बाइट-सटीक)
लाइन की सूचना सामग्री अपरिवर्तनीय है; केवल इसका टिप्पणी सिंटैक्स प्रति फ़ाइलप्रकार बदलता है। पूर्ण प्रति-फ़ाइलप्रकार वैरिएंट तालिका:
| फ़ाइलप्रकार परिवार | टिप्पणी सिंटैक्स | वैरिएंट रेंडरिंग |
|---|---|---|
# परिवार — .sh, .bash, .zsh, .py, .rb, .pl, .ps1, .yml, .yaml, .toml, .cff, .gitignore, .gitattributes, .editorconfig, .shellcheckrc, .env.example, Makefile, Dockerfile, Procfile, CODEOWNERS, PKGBUILD, बिना-एक्सटेंशन शेल एंट्रीपॉइंट जैसे scripts/apothem | # लाइन-टिप्पणी | # SPDX-License-Identifier: MIT |
// परिवार — .js, .jsx, .mjs, .cjs, .ts, .tsx, .go, .rs, .java, .kt, .swift, .c, .cc, .cpp, .h, .hpp, .cs, .scala, .dart, .jsonc | // लाइन-टिप्पणी | // SPDX-License-Identifier: MIT |
ब्लॉक-टिप्पणी परिवार — .html, .htm, .md, .markdown, .xml, .vue (टेम्पलेट क्षेत्र), .php (टेम्पलेट क्षेत्र) | <!-- ... --> | <!-- SPDX-License-Identifier: MIT --> |
MDX (.mdx) | {/* ... */} (JSX अभिव्यक्ति टिप्पणी) | {/* SPDX-License-Identifier: MIT */} |
C-ब्लॉक परिवार — .css, .scss, .less, .sql (/* */) | /* ... */ | /* SPDX-License-Identifier: MIT */ |
; परिवार — .ini, .cfg, कुछ .lisp/.scm | ; लाइन-टिप्पणी | ; SPDX-License-Identifier: MIT |
-- परिवार — .sql, .lua, .hs, .elm, .ada | -- लाइन-टिप्पणी | -- SPDX-License-Identifier: MIT |
| लॉकफ़ाइल / जनरेटेड / JSON | कोई नहीं / अनुपयुक्त | छूट प्राप्त। §3 अपवाद सूची देखें। |
Markdown वैरिएंट (कैनोनिकल रेंडरिंग):
<!-- SPDX-License-Identifier: MIT -->HTML-टिप्पणी (या MDX {/* */}) रैपर अदृश्य रूप से रेंडर होता है, इसलिए रेंडर किया गया तल स्वच्छ रहता है जबकि इन-सोर्स लाइसेंस मार्कर फ़ाइलप्रकारों के पार मशीन-पठनीय बना रहता है।
3. अपवाद सूची (श्रेणीबद्ध रूप से छूट प्राप्त)
निम्नलिखित वर्ग SPDX हेडर लाइन से छूट प्राप्त हैं। file-header सत्यापक की प्रयोज्यता जाँच इनके लिए not-applicable लौटाती है:
LICENSE— स्वयं विधिक उपकरण; आधिकारिक कॉपीराइट लाइन वहन करता है जिसकी उपस्थिति की पुष्टिlicense-author-consistencyसत्यापक करता है।*.svgएसेट — लाइन-टिप्पणी मार्कर के लिए XML टिप्पणियाँ भंगुर हैं, इसलिए SVG मूल-स्रोत एसेट README और जनरेटेड रास्टर आउटपुट द्वारा वहन किया जाता है।CHANGELOG.md— प्रारूप-बद्ध रिलीज़-नोट्स दस्तावेज़; SPDX लाइन changelog हेडर के ऊपर एकल HTML-टिप्पणी के रूप में प्रकट होती है, प्रारूप में अंतर्वेशित नहीं।- JSON फ़ाइलें (
.json) — JSON में कोई टिप्पणी सिंटैक्स नहीं है। जहाँ JSON कॉन्फ़िग के लिए श्रेय आवश्यक हो, एक सहोदर<file>.NOTICE.mdरखें। - लॉकफ़ाइलें —
package-lock.json,yarn.lock,pnpm-lock.yaml,Cargo.lock,Pipfile.lock,poetry.lock,go.sum, इत्यादि (मशीन-प्रबंधित)। - जनरेटेड फ़ाइलें —
# Generated by ...या// Generated by ...मार्कर वाली कोई भी, या.gitattributeslinguist-generated=trueसे मेल खाती कोई भी। - वेंडर्ड तृतीय-पक्ष सामग्री —
vendor/,third_party/,node_modules/के अंतर्गत फ़ाइलें। ये अपस्ट्रीम के अपने लाइसेंस/नोटिस वहन करती हैं; अपस्ट्रीम श्रेय के ऊपर हमारा मार्कर अंतःक्षेपित करना एक लाइसेंस उल्लंघन है। .audit/फ़ाइलें — gitignore की गई क्षणभंगुर सामग्री; प्रकाशित वृक्ष के दायरे से बाहर।- प्लान फ़ाइलें (
<project-root>/.apothem/plans/**, और लीगेसी<project-root>/.plans/**) — gitignore की गई क्षणभंगुर सामग्री; मूल-स्रोत प्लान का frontmatter है (plans-discipline.md§3 देखें)। - रिक्त मार्कर —
.keep,.gitkeep, इत्यादि (अर्थगत रूप से शून्य-बाइट)। - किसी भी प्रकार की बाइनरी फ़ाइलें।
अपवाद सूची स्वयं src/apothem/schemas/header-exceptions.txt में एक regex/glob सूची के रूप में एनकोड की गई है और सत्यापक की प्रयोज्यता जाँच का इनपुट है। संशोधनों के लिए एक संरचित पूछताछ और एक नए ADR की आवश्यकता होती है।
4. लाइसेंस अन्योन्यक्रिया
SPDX लाइन प्रोजेक्ट के लाइसेंस को मशीन-पठनीय रूप से घोषित करती है; LICENSE फ़ाइल इसे आधिकारिक रूप से घोषित करती है:
SPDX-License-Identifier: MIT— REUSE विनिर्देश और SPDX मानक के अनुसार मशीन-पठनीय लाइसेंस मार्कर। स्वचालित लाइसेंस स्कैनर इस लाइन को सीधे पार्स करते हैं; SPDX अभिव्यक्ति सिंटैक्सreuse lint, scancode-toolkit, FOSSology, और Linux-कर्नेल लाइसेंस-टूलिंग के साथ क्रॉस-संगत है।
- रिपॉज़िटरी-रूट
LICENSE— पूर्ण MIT शर्तें और कॉपीराइट धारक वहन करने वाला आधिकारिक विधिक उपकरण। यह कॉपीराइट कथन का एकल घर है; प्रति-फ़ाइल हेडर हर फ़ाइल में कॉपीराइट को पुनः कहने के बजाय साझा SPDX आइडेंटिफ़ायर के माध्यम से इसे अंतर्निहित रूप से संदर्भित करते हैं।
एकल-लाइन रूप। प्रति-फ़ाइल मूल-स्रोत एकल SPDX लाइन है; कॉपीराइट उपकरण रूट LICENSE में एक बार रहता है। सीमायुक्त बहु-लाइन बैनर बॉक्स (एक रेखांकित फ़्रेम में लिपटी कॉपीराइट, वेबसाइट, ईमेल, संपर्क लाइनें) सत्यापक द्वारा अस्वीकृत हैं: वे प्रत्येक फ़ाइल में संपर्क और कॉपीराइट मेटाडेटा की नकल करती हैं बिना कुछ भी जोड़े जो मशीन-पठनीय लाइसेंस मार्कर पहले से ही REUSE/SPDX/SBOM टूलिंग को प्रदान नहीं करता। src/apothem/schemas/authorship-header.txt पर बाइट-सटीक फ़िक्स्चर एकल-लाइन रूप वहन करता है; सत्यापक इस फ़िक्स्चर के विरुद्ध चलता है।
क्रॉस-संदर्भ। LICENSE फ़ाइल (MIT) — विवाद की स्थिति में विधिक उपकरण नियंत्रण करता है। ADR-0006 बैनर-संकुचन अनुसमर्थन औचित्य का दस्तावेज़ीकरण करता है।
5. सम्मिलन स्थिति
- SPDX लाइन फ़ाइल की पहली सामग्री है, एक और केवल एक अपवाद के साथ: एक शेबैंग लाइन (
#!/usr/bin/env bash,#!/usr/bin/env python3, इत्यादि), जो सदैव लाइन 1 पर रहती है; SPDX लाइन लाइन 2 पर आरंभ होती है। - YAML frontmatter वाली Markdown / MDX फ़ाइलों के लिए, SPDX टिप्पणी बिलकुल शीर्ष पर बैठती है, YAML frontmatter अनुसरण करता है, फिर H1 और बॉडी। रेंडर किया गया आउटपुट एक अदृश्य टिप्पणी से आरंभ होता है, फिर frontmatter टूलिंग द्वारा पार्स होता है, फिर दृश्यमान सामग्री प्रवाहित होती है।
- एक अकेली रिक्त लाइन SPDX लाइन को अगली सामग्री (frontmatter
---, शेबैंग का उत्तरवर्ती, H1, इत्यादि) से पृथक करती है।
6. हेडर दृश्यता नीति
विशेष रूप से Markdown फ़ाइलों के लिए, SPDX लाइन डिफ़ॉल्ट रूप से अदृश्य है — <!-- ... --> (या MDX के लिए {/* */}) में लिपटी, केवल स्रोत-दृश्यमान। यह README, CONTRIBUTING, CLAUDE.md, समर्थित कोडिंग-सहायक निर्देश फ़ाइलों, स्किल SKILL.md, कमांड बॉडी, आउटपुट-स्टाइल, और दस्तावेज़ पृष्ठों के लिए सही नीति है। एक दृश्यमान रेंडरिंग (आउटपुट के शीर्ष पर सादे-पाठ या फ़ेंस ब्लॉक के रूप में SPDX लाइन) उन स्वतंत्र संदर्भ दस्तावेज़ों के लिए अनुमत है जिन्हें तुरंत पठनीय मूल-स्रोत से लाभ होता है; नीति src/apothem/schemas/header-visibility.yaml में प्रति फ़ाइल वर्ग सेट की जाती है (डिफ़ॉल्ट invisible), लाइन के तुरंत बाद एक फ़ाइल-स्कोप ओवरराइड मार्कर <!-- header-visibility: visible --> अनुमत है।
7. इंजेक्टर — scripts/inject-header.{sh,py}
एक नियतात्मक CLI जो:
- एक या अधिक फ़ाइल पथ (या glob) लेता है।
- अपवाद सूची (§3) के माध्यम से प्रयोज्यता निर्धारित करता है।
- मौजूदा हेडर स्थिति (कैनोनिकल / विकृत / अनुपस्थित) का पता लगाता है, मिलने वाले किसी भी गैर-कैनोनिकल बैनर ब्लॉक को हटाता है ताकि पुनः-चलन निष्क्रिय रहे।
- प्रति फ़ाइलप्रकार सही SPDX वैरिएंट (§2) रेंडर करता है।
- शेबैंग और frontmatter का सम्मान करते हुए सही स्थिति (§5) पर सम्मिलित करता है।
- तीन मोड में संचालित होता है:
fix-in-place(लिखता है),emit-patch(एकीकृत diff प्रिंट करता है),check(किसी भी विचलन पर exit-non-zero — CI द्वारा प्रयुक्त)। - निष्क्रिय: दो बार चलाना no-op है।
इंजेक्टर को उन Make लक्ष्यों द्वारा आह्वान किया जाता है जो नई फ़ाइलों को पूर्व-सम्मिलित SPDX लाइन के साथ स्कैफ़ोल्ड करते हैं (make headers-fix और make new-* स्कैफ़ोल्ड) और --fix मोड में pre-commit हुक द्वारा।
8. सत्यापक — file-header (CI)
src/apothem/conformity/file_header_grep.py में रहता है। वर्किंग ट्री में प्रत्येक फ़ाइल के लिए, सत्यापक इसकी प्रयोज्यता (§3 के अनुसार) देखता है और, यदि लागू हो, तो दृढ़ता से कहता है कि कैनोनिकल SPDX लाइन फ़ाइल के शीर्ष पर उपस्थित है — अन्य समस्त सामग्री से आगे, केवल अनुमत पूर्व-लाइन सामग्री एक शेबैंग (§5) है।
src/apothem/schemas/authorship-header.txt पर बाइट-सटीक फ़िक्स्चर द्वारा समर्थित। CI सारांश में प्रति-फ़ाइल diff और समुच्चय कवरेज % रिपोर्ट करता है। किसी भी विचलन पर बिल्ड को विफल करता है।
9. स्व-प्रवर्तन तंत्र
यह अनुशासन प्रत्येक भावी सत्र और प्रत्येक भावी योगदानकर्ता से अवश्य जीवित रहना चाहिए। अनिवार्य प्रवर्तन तल:
src/apothem/schemas/authorship-header.txt— बाइट-सटीक कैनोनिकल फ़िक्स्चर; एकल सत्य-स्रोत।scripts/inject-header.{sh,py}— यांत्रिक इंजेक्टर (§7)।file-headerCI सत्यापक (§8) — किसी भी विचलन पर बिल्ड को विफल करता है।- Pre-commit हुक — इंजेक्टर से वायर्ड, स्टेज की गई फ़ाइलों पर
--fixके साथ सत्यापक चलाता है। CLAUDE.mdअनिवार्य-व्यवहार ब्लॉक — सहायक को कोई भी लागू फ़ाइल बनाते समय कैनोनिकल SPDX लाइन अंतःक्षेपित करने का निर्देश देता है।- कैनोनिकल
.github/पथ पर समर्थित कोडिंग-सहायक निर्देश फ़ाइल — फ़ाइल जनरेशन पर वही करने के लिए कोडिंग-सहायक रनटाइम को निर्देश देती है। src/apothem/hooks/messages/pretooluse-{write,edit}-header-guard.mdपर PreToolUse हुक — लागू पथों पर Write/Edit टूल कॉल को रोकते हैं ताकि SPDX लाइन बाद में CI विफलता के रूप में खोजे जाने के बजाय फ़ाइल निर्माण पर अंतःक्षेपित हो।- PR टेम्पलेट चेकबॉक्स — योगदानकर्ता-सम्मुख दृढ़ कथन कि प्रत्येक नई फ़ाइल कैनोनिकल SPDX लाइन वहन करती है।
- यह दस्तावेज़ (
site/content/docs/reference/authorship-header.mdx) — कैनोनिकल, मानक व्याख्याकार।
यह भी देखें
- ADR-0002 — वास्तुशिल्पीय औचित्य, विचारित विकल्प।
- ADR-0006 — बैनर-संकुचन अनुसमर्थन।
src/apothem/schemas/authorship-header.txt— बाइट-सटीक कैनोनिकल फ़िक्स्चर।src/apothem/schemas/header-exceptions.txt— अपवाद सूची (regex/glob रूप)।scripts/inject-header.pyऔरscripts/inject-header.sh— इंजेक्टर।src/apothem/conformity/file_header_grep.py— सत्यापक।- प्रोजेक्ट विनिर्देश §0.5 + §4.6 — यहाँ प्रतिबिंबित कैनोनिकल पाठ।
बहु-सतह हार्नेस अभिसमय
चैट, IDE पूर्णता और PR समीक्षा रनटाइम में बहु-सतह कोडिंग सहायक कॉन्फ़िगरेशन एवं संगति के लिए कैनोनिकल मानक संदर्भ।
डिपेंडेंसी पिनिंग मैनिफ़ेस्ट
डिपेंडेंसी घोषणा नीति, जो Python रनटाइम रेंज, डेवलपमेंट टूलिंग, रिलीज़-टूल लॉक फ़ाइलों, और प्रत्येक बिल्ड सतह के लिए अनुमोदित संस्करण निचली सीमाओं को कवर करती है।