En-têtes de licence
Chaque fichier source commentable de DispatchAtlas porte un en-tête d'une ligne
SPDX-License-Identifier: MIT ; tout le reste est couvert par les blocs d'annotation
dans REUSE.toml et le LICENSE du projet. Cette page est la politique ratifiée ; la
projection machine que le gate consomme est tools/license_header.toml, et
tools/license_header.py l'applique (check échoue en position fermée en pre-commit
et CI, inject ajoute un en-tête manquant à la position correcte de manière
idempotente).
Formes d'en-tête inline
| Classe de fichier | Ligne d'en-tête | Position |
|---|---|---|
.py .toml .yml .yaml .sh .ps1 .cff .editorconfig .gitattributes .gitignore CODEOWNERS | # SPDX-License-Identifier: MIT | Première ligne ; après le shebang lorsqu'il y en a un |
.ts .tsx .mjs | // SPDX-License-Identifier: MIT | Première ligne |
.js | // SPDX-License-Identifier: MIT (la forme de bloc /* SPDX-License-Identifier: MIT */ est aussi acceptée) | Première ligne |
.css | /* SPDX-License-Identifier: MIT */ | Première ligne |
.md | <!-- SPDX-License-Identifier: MIT --> | Première ligne, ou première ligne non vide après la clôture de frontmatter YAML |
.mdx | {/* SPDX-License-Identifier: MIT */} | Première ligne non vide après la clôture de frontmatter (les commentaires HTML sont invalides dans les corps MDX) |
.xml | <!-- SPDX-License-Identifier: MIT --> | Première ligne, ou directement après la déclaration <?xml …?> |
Classes couvertes globalement
Les classes non commentables, de données, d'actifs, de lockfile, et de marqueur ne
portent pas d'en-tête inline ; REUSE.toml affirme leur licence et copyright de
manière centralisée : .json .svg .csv .gz .whl .ttf .woff2 .pdf .png
.ico .log .hash .map .tsbuildinfo .txt .html .lock .typed et les
classes de l'index pagefind, plus les basenames LICENSE, CNAME, .nojekyll,
py.typed, et .gitkeep.
Arbres de sortie générée
Chaque fichier sous un arbre de sortie générée est une preuve émise par machine ou une
sortie de compilation et est couvert globalement quelle que soit l'extension :
site/out/ et le dist/ de chaque paquet, plus les couches locales de l'espace de
travail des expériences. Le gate n'exige ni n'injecte jamais d'en-têtes inline là.
Exemptions et portée
Les textes de licence sous LICENSES/ sont les licences elles-mêmes et ne portent pas
d'en-tête. Les arbres de dépendances et de cache (.venv/, node_modules/, caches de
byte-code et d'outils) sont hors de la politique : ce ne sont pas des fichiers
DispatchAtlas. Une classe de fichier absente de ce registre est rapportée par le gate
comme non enregistrée et échoue à la vérification — les nouvelles classes sont
ratifiées ici avant d'être livrées.
Exécuter le gate
uv run python tools/license_header.py check
uv run python tools/license_header.py injectcheck parcourt chaque arbre — suivi, privé, et généré — et sort non-zéro sur tout
constat manquant ou non enregistré. inject écrit l'en-tête canonique pour la classe
du fichier à la position correcte et ne change rien lors d'une seconde exécution.