ترويسات الترخيص
يحمل كل ملف مصدر قابل للتعليق في DispatchAtlas ترويسة أحادية-السطر
SPDX-License-Identifier: MIT؛ وكل ما عداه تُغطّيه كتل التوصيف في REUSE.toml
وLICENSE المشروع. هذه الصفحة هي السياسة المُصادَقة؛ والإسقاط الآلي الذي تستهلكه
البوّابة هو tools/license_header.toml، ويفرضه tools/license_header.py (يفشل check
إلى الإغلاق في pre-commit وCI، ويُضيف inject ترويسة مفقودة في الموضع الصحيح بشكل
خامل التكرار).
صيغ الترويسة المضمَّنة
| فئة الملف | سطر الترويسة | الموضع |
|---|---|---|
.py .toml .yml .yaml .sh .ps1 .cff .editorconfig .gitattributes .gitignore CODEOWNERS | # SPDX-License-Identifier: MIT | السطر الأول؛ بعد الـ shebang عند وجوده |
.ts .tsx .mjs | // SPDX-License-Identifier: MIT | السطر الأول |
.js | // SPDX-License-Identifier: MIT (وتُقبَل أيضًا صيغة الكتلة /* SPDX-License-Identifier: MIT */) | السطر الأول |
.css | /* SPDX-License-Identifier: MIT */ | السطر الأول |
.md | <!-- SPDX-License-Identifier: MIT --> | السطر الأول، أو أول سطر غير فارغ بعد سياج frontmatter YAML الختامي |
.mdx | {/* SPDX-License-Identifier: MIT */} | أول سطر غير فارغ بعد سياج frontmatter الختامي (تعليقات HTML غير صالحة في متون MDX) |
.xml | <!-- SPDX-License-Identifier: MIT --> | السطر الأول، أو مباشرة بعد إعلان <?xml …?> |
الفئات المُغطّاة شمولًا
الفئات غير القابلة للتعليق، والبيانات، والأصول، وملفات القفل، والعلامات لا تحمل ترويسة
مضمَّنة؛ يؤكّد REUSE.toml ترخيصها وحقوق نشرها مركزيًّا:
.json .svg .csv .gz .whl .ttf .woff2 .pdf .png .ico
.log .hash .map .tsbuildinfo .txt .html .lock .typed وفئات فهرس
pagefind، إضافةً إلى الأسماء الأساسية LICENSE وCNAME و.nojekyll وpy.typed
و.gitkeep.
أشجار المخرجات المُولَّدة
كل ملف تحت شجرة مخرجات مُولَّدة هو دليل مُنبعِث-آليًّا أو مخرج بناء ومُغطّى شمولًا بصرف
النظر عن الامتداد: site/out/ وdist/ لكل حزمة، إضافةً إلى الطبقات المحلية لمساحة عمل
التجارب. ولا تطلب البوّابة هناك ترويسات مضمَّنة ولا تحقنها أبدًا.
الإعفاءات والنطاق
نصوص التراخيص تحت LICENSES/ هي التراخيص نفسها ولا تحمل ترويسة. وأشجار الاعتماديات
والتخزين المؤقّت (.venv/، وnode_modules/، وذواكر البايت-كود والأدوات) خارج السياسة:
فهي ليست ملفات DispatchAtlas. وأي فئة ملف غائبة عن هذا السجلّ تُبلِّغ عنها البوّابة
كغير مسجَّلة وتُفشِل الفحص — وتُصادَق الفئات الجديدة هنا قبل شحنها.
تشغيل البوّابة
uv run python tools/license_header.py check
uv run python tools/license_header.py injectيمشي check عبر كل شجرة — متعقَّبة، وخاصة، ومُولَّدة — ويخرج بغير-صفر عند أي اكتشاف
مفقود أو غير مسجَّل. ويكتب inject الترويسة المعيارية لفئة الملف في الموضع الصحيح ولا
يُغيِّر شيئًا في التشغيل الثاني.