fix(template): emit the project's licence, once, instead of a literal MPL-2.0 - #64
hyperpolymath wants to merge 1 commit into
Conversation
… MPL-2.0
The launcher template carried `# SPDX-License-Identifier: MPL-2.0` as a
literal -- twice (line 2 and the header proper) -- and never read
`app_license`, which template.rs computed from `[project].license` and then
discarded. Realigning a launcher in an AGPL repo therefore silently
relicensed it: game-server-admin#102 (6152bda) replaced the launcher's
AGPL-3.0-or-later header, set deliberately in game-server-admin#62 under
that repo's docs/legal/LICENSE-POLICY.adoc, with two MPL-2.0 lines.
- The script header and the embedded deed's `;;` header both emit
`{{ app_license }}` (default MPL-2.0 unchanged).
- The duplicate literal line is gone; the template's own licence remains in
its Tera doc comment. The tag name is a Tera string so a licence scanner
reading the template sees only the template's own header.
- Tests: a non-default licence must appear exactly once per header and
directly under the shebang; the no-licence default stays MPL-2.0.
Mutant (restore the literal) kills the first test with the expected diff.
- Fixture minted-2026-09-23 re-minted from the emitter per its README:
the diff is exactly the one deleted duplicate line.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136eszqrQ53Kj7aBH1D4rXK
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (3)
💤 Files with no reviewable changes (1)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. 📜 Recent review details⏰ Context from checks skipped due to timeout. (13)
🔇 Additional comments (2)
📝 SummarySummary by CodeRabbit
WalkthroughThe launcher template now uses ChangesLauncher licence rendering
Priority: ➖ Normal Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix Merge Risk: ⚪ Minimal · up to The generated launcher now reflects the project licence consistently, preserves the default, and removes the duplicate header. No merge-blocking issue was identified. Architecture SummaryArchitecture risk: 🔵 Low · up to The change affects 2 systems. Changed systems: Architecture concerns Review detailsSystems and components
Before / after behavior
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. A rabbit checks the header line Comment |
…realign (#105) ## What Restores `game-server-admin-launcher.sh`'s **AGPL-3.0-or-later** header, which #102 (6152bda, merged 2026-09-30) replaced with two `MPL-2.0` lines. ## Why `docs/legal/LICENSE-POLICY.adoc` (#62, 309accc) puts code — including `.sh` — under AGPL-3.0-or-later and keeps config under an MPL-2.0 carve-out. #102's realign used a launch-scaffolder generator that hard-coded `MPL-2.0` and never read `[project].license`, so it relicensed a shipped file without anyone deciding to. That generator defect is fixed in **hyperpolymath/launch-scaffolder#64**. ## Change - `game-server-admin.launcher.a2ml`: `[project].license = "AGPL-3.0-or-later"` (the app's licence). The config file's own SPDX header stays MPL-2.0 per the carve-out. - `game-server-admin-launcher.sh`: re-realigned from launch-scaffolder#64 at 1ddf146. The diff is the header only: one `AGPL-3.0-or-later` script header, one matching `;;` deed header, duplicate removed. `CONFIG_FILE` and the body are byte-identical. `bash -n` ok; `shellcheck -S warning` clean. No CI here depends on realign, so this can merge before or after launch-scaffolder#64. Until #64 merges, a realign from the old generator would revert this header again. Not armed for automerge: armed PRs on this repo merge on the spot (#104, #102), so this is left for your review. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_0136eszqrQ53Kj7aBH1D4rXK Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
What
The launcher template hard-coded
# SPDX-License-Identifier: MPL-2.0— twice — and never usedapp_license, whichtemplate.rs:122computes from[project].licenseand then throws away. This PR makes both emitted headers (script header + the embedded deed's;;header) use the project's licence, and removes the duplicate line.Why — a landed regression
game-server-admin#102(merged 2026-09-30, 6152bda) realigned that repo's launcher and replaced itsAGPL-3.0-or-laterheader with twoMPL-2.0lines. The AGPL header was deliberate: game-server-admin#62 (309accc) set a tri-licence policy (docs/legal/LICENSE-POLICY.adoc: code → AGPL-3.0-or-later, config → MPL-2.0 carve-out). The realign could not honour it because the template never read the licence. A follow-up game-server-admin PR sets its[project].licenseand re-realigns from this branch.Evidence
cargo check --all-targetsrc=0;cargo test --workspacerc=0 (124 tests).# SPDX-License-Identifier: MPL-2.0.minted-2026-09-23_stapeln-launcher-deed.shre-minted from the emitter per its README (never hand-edited); the 09-22 fixture is untouched.rendered_licence_is_the_projects_and_appears_once_per_headerwithleft: [MPL-2.0 ×2]/right: [AGPL-3.0-or-later ×2]; restored tree green.Chosen arm — override in one word if you disagree
The embedded deed block's
;;SPDX line also takes the project licence, so a launcher is one file, one licence. The alternative (deed block always MPL-2.0 as "machine-readable config", per game-server-admin's carve-out) would make every AGPL launcher dual-headedAGPL AND MPLto a REUSE reader.Not in this PR
The open realign PRs aerie#98, nextgen-databases#107, panll#136 and boj-server-mk2#48 carry the duplicate line (all MPL repos, so no licence change). They self-heal on the next realign after this merges; not re-minting them from an unmerged generator.
🤖 Generated with Claude Code
https://claude.ai/code/session_0136eszqrQ53Kj7aBH1D4rXK