许可证头部
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 --> | 首行,或闭合 YAML frontmatter 围栏后的首个非空行 |
.mdx | {/* SPDX-License-Identifier: MIT */} | 闭合 frontmatter 围栏后的首个非空行(HTML 注释在 MDX 主体中无效) |
.xml | <!-- SPDX-License-Identifier: MIT --> | 首行,或直接位于 <?xml …?> 声明之后 |
整体覆盖的类别
不可注释、数据、资产、lockfile 与标记类别不携带内联头部;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 injectcheck 遍历每棵树——受跟踪、私有与生成——并在任何缺失或未注册发现时以非零退出。inject
在正确位置为文件类别写入规范头部,并在第二次运行时不更改任何内容。