Перейти к содержимому
DispatchAtlas
Поиск

Заголовки лицензии

Каждый комментируемый исходный файл в DispatchAtlas несёт однострочный заголовок SPDX-License-Identifier: MIT; всё остальное покрыто блоками аннотаций в REUSE.toml и проектным LICENSE. Эта страница — ратифицированная политика; машинная проекция, которую потребляет gate, — tools/license_header.toml, а tools/license_header.py обеспечивает её соблюдение (check проваливается в закрытую сторону в pre-commit и CI, inject добавляет отсутствующий заголовок в правильной позиции идемпотентно).

Формы inline-заголовка

Класс файлаСтрока заголовкаПозиция
.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 -->Первая строка, или первая непустая строка после закрывающего забора YAML frontmatter
.mdx{/* SPDX-License-Identifier: MIT */}Первая непустая строка после закрывающего забора frontmatter (HTML-комментарии недопустимы в телах MDX)
.xml<!-- SPDX-License-Identifier: MIT -->Первая строка, или непосредственно после декларации <?xml …?>

Классы под общим покрытием

Некомментируемые, данные, активы, lockfile, и маркерные классы не несут inline-заголовка; 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/ каждого пакета, плюс локальные слои рабочего пространства экспериментов. Gate там никогда не требует и не внедряет inline-заголовков.

Исключения и область действия

Тексты лицензий под LICENSES/ — это сами лицензии и не несут заголовка. Деревья зависимостей и кэша (.venv/, node_modules/, кэши байт-кода и инструментов) находятся вне политики: это не файлы DispatchAtlas. Класс файла, отсутствующий в этом реестре, сообщается gate как незарегистрированный и проваливает проверку — новые классы ратифицируются здесь до отгрузки.

Запуск gate

uv run python tools/license_header.py check
uv run python tools/license_header.py inject

check обходит каждое дерево — отслеживаемое, частное, и сгенерированное — и выходит не-ноль при любой отсутствующей или незарегистрированной находке. inject пишет канонический заголовок для класса файла в правильной позиции и ничего не меняет при втором прогоне.