feat(license): §4.3 v1.38 LICENSE layout — canonical text at root, LICENSES/ links to it - #1
Conversation
…CENSES/ links to it The repo had a root LICENSE but no LICENSES/ directory at all, so it could not be REUSE-compliant (§4.3) and there was nowhere for the SPDX-named license text to live. LICENSES/ is now created with GPL-3.0-or-later.txt as a symlink to the root LICENSE, which carries the canonical FSF GPL-3.0 text. Standard §4.3 (v1.38): the root LICENSE is a regular file holding the verbatim canonical license text; LICENSES/<SPDX-id>.txt for that license symlinks back to it. GitHub's detector reads git blobs, so a symlinked root LICENSE reports NOASSERTION; reuse reads the filesystem and follows the link. The text exists exactly once. Only LICENSE and LICENSES/ are touched. Secondary licenses in LICENSES/ stay regular files. reuse lint: fail -> fail. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2e9bb7d823
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -0,0 +1 @@ | |||
| ../LICENSE No newline at end of file | |||
There was a problem hiding this comment.
Keep the SPDX license file valid without symlink support
On any checkout configured with core.symlinks=false—notably Windows environments without symlink support—Git materializes this entry as a regular 10-byte file containing only ../LICENSE, rather than the GPL text. Git explicitly documents that in this mode symlinks are checked out as small plain files (core.symlinks); consequently, the required LICENSES/GPL-3.0-or-later.txt license text is absent and the intended REUSE layout is invalid in those checkouts. Store a regular copy of the canonical text here instead of relying on a filesystem symlink.
Useful? React with 👍 / 👎.
Brings this repo into compliance with The Steelbore Standard §4.3 as amended in v1.38.
Audit finding
The repo had a root LICENSE but no LICENSES/ directory at all, so it could not be REUSE-compliant (§4.3) and there was nowhere for the SPDX-named license text to live. LICENSES/ is now created with GPL-3.0-or-later.txt as a symlink to the root LICENSE, which carries the canonical FSF GPL-3.0 text.
Change
LICENSE: regular file (mode100644) holding the canonical, unmodifiedGPL-3.0-or-latertext.LICENSES/GPL-3.0-or-later.txt: symlink to../LICENSE(mode120000).LICENSES/is untouched — secondary licenses (§4.2 upstream texts, other artifact classes per §4.1.1) stay regular files.Why this direction
GitHub's license detector reads git blobs, and a symlink's blob is the target path, not the license text — a symlinked root
LICENSEis reported asNOASSERTION.reusereads the working tree through the filesystem, so it follows the link inLICENSES/and lints clean. The text exists exactly once, with no drift.Verification
reuse lint:fail→failGPL-3.0(expectedGPL-3.0after merge)LICENSE/LICENSES/paths changed🤖 Generated with Claude Code