chore(license): declare copyright and license on every file (REUSE) - #354
Merged
Minipada merged 1 commit intoAug 17, 2026
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## jazzy #354 +/- ##
=======================================
Coverage 67.20% 67.20%
=======================================
Files 96 96
Lines 5981 5981
=======================================
Hits 4019 4019
Misses 1962 1962
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Minipada
force-pushed
the
feature/301-add-spdx-license-headers-to-all-source-f
branch
2 times, most recently
from
August 17, 2026 22:55
55824dd to
50250ba
Compare
Owner
Author
|
Reopening to re-trigger PR checks: the force-push landed but GitHub created no runs for the new head. |
MPL-2.0 is a file-level license, but nothing in the tree carried a notice: the license attached only through LICENSE.md. The repo now follows REUSE 3.3 -- `reuse lint` reports 728/728 files with copyright and license info, and the fsfe/reuse-tool prek hook keeps it that way. Files that can hold a comment carry an SPDX header; images, meshes, fonts, JSON and prose are covered by path in REUSE.toml. No `**` catch-all there, on purpose: an undeclared file must fail the hook rather than be silently claimed. Writing the annotations meant establishing provenance, and the tree is not single-licensed. dc_lifecycle_manager is a port of nav2_lifecycle_manager and dc_common's cmake files are verbatim nav2_common copies (0.87-1.00 normalised similarity) -- those seven are Apache-2.0 now, with Intel's and Samsung's copyright alongside. The TurtleBot3 xacro and world, the nav2-derived rviz config and Intel's RealSense URDF likewise. dc_util's base64 is zlib-licensed, and the sim models carry CC-BY-3.0/4.0 -- except MOV.AI's warehouse mesh, which Gazebo Fuel lists as CC-BY-NC-ND-4.0. That one is declared, not fixed: #357. Closes #301 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y1UHyNzZp8VhB4ii3kDRhg Signed-off-by: David Bensoussan <d.bensoussan@proton.me>
Minipada
force-pushed
the
feature/301-add-spdx-license-headers-to-all-source-f
branch
from
August 17, 2026 23:46
b7fca2e to
e85a8b7
Compare
Minipada
deleted the
feature/301-add-spdx-license-headers-to-all-source-f
branch
September 2, 2026 12:45
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
MPL-2.0 is a file-level license — its Exhibit A is meant to travel with each file — but
nothing in the tree carried a notice, so the license attached only through
LICENSE.md.The repo now follows REUSE 3.3.
uvx reuse lintreports728/728 files with copyright and license information, and the
fsfe/reuse-toolprekhook keeps it that way.
Two mechanisms, one rule
Anything that can hold a comment carries the header — 405 files, in whatever syntax the
format uses (
//,#,<!-- -->,/* */,--,;,{# #}), above everything but ashebang:
The rest — images, meshes, fonts, JSON, byte-exact test fixtures, prose — is covered by path
in
REUSE.toml.There is deliberately no
**catch-all inREUSE.toml. The first draft had one, and thenegative test then passed on a headerless new file: a catch-all silently claims anything
that appears in the tree as ours. That's the opposite of a gate — and it's how a
CC-BY-NC-ND-4.0 asset got in unnoticed in the first place (below). Without it, an undeclared
file fails
reuse lint.What the provenance audit turned up
Writing the annotations meant establishing provenance, and the tree is not single-licensed:
dc_lifecycle_manager(5 files),dc_common's two cmake filesturtlebot3_waffle_qrcodes.xacro,worlds/waffle.modeldc_simulation/rviz/qrcodes.rvizdc_description/urdf/realsense_d455.urdf.xacrodc_util'sbase64.{hpp,cpp}Chair,MonitorAndKeyboardmodelsbag,cutout_wall,europallet,europallet_10modelswarehousemodelMIT AND (Apache-2.0 OR MPL-2.0)/ MIT / MITdc_simulation/models/warehouseis MOV.AI's Fuel model, and Fuel lists it asCC-BY-NC-ND-4.0 — non-commercial, no derivatives, inside an MPL-2.0 repo whose
model.sdfhas been modified locally. This PR declares it honestly; replacing it is #357.
The
aws_robomaker_*anddrc_practice_*models are not third-party — #268 alreadyreplaced them with local primitive-geometry placeholders.
package.xmlfollows the files:dc_lifecycle_manager,dc_commonanddc_descriptiondeclare
Apache-2.0next toMPL-2.0;dc_simulationdeclares the four asset licenses itships.
How the derivation audit was run
"Looks like nav2" isn't evidence. navigation2/humble, turtlebot3/humble and
turtlebot3_simulations/humble were cloned; both sides normalised (comments stripped,
nav2_/dc_/turtlebot3_prefixes removed so a rename can't hide a copy); then comparedtwo ways —
difflibratio against hand-picked counterparts, and a 3-line-shingle sweep ofevery C++/Python/CMake/URDF/world/rviz file in the tree against every such file upstream, to
catch pairs nobody thought to guess. Both passes name the same files and nothing else:
lifecycle_manager*.{hpp,cpp}0.87–1.00,dc_package.cmake/dc_common-extras.cmake1.00,the tb3 xacro 0.74, the rviz config 0.66.
dc_lifecycle_manager's tests score 0.04–0.09,and
dc_measurements,dc_bridge,dc_util,dc_group,dc_triggersanddc_coredon'tregister at all — original work, still MPL-2.0.
One thing worth knowing for future bulk runs:
reuse annotatereplaced the RealSenseURDF's existing comment block rather than prepending to it, deleting Intel's
"License: Apache 2.0" line. It was the only file in the tree with an upstream notice in a
format the tool recognised, and reviewing the diff caught it; that header is hand-written now,
sitting above the restored original.
Verification
uvx reuse lint— compliant, 728/728, 0 bad licenses, 0 invalid expressions.prek run --all-files --skip build-doc— green, all 24 hooks including the newreuseone.LICENSES/is added to the globalexclude:because codespell "fixed" the upstream typosin the CC and BSD texts (
MERCHANTIBILITY); license texts stay verbatim.exclude:in.pre-commit-config.yaml, replaced by a longer one. Everything else is an insertion.python3 -m compileallover every tracked.py— passes.colcon build --packages-select dc_util dc_core dc_common dc_lifecycle_manager dc_interfacesin the cached
localhost/dc-workspace:latestimage with this worktree bind-mounted — clean.dc_interfacesmatters: the.msg/.srvfiles gained headers and the IDL generator parsesthem.
.cppwith no header fails (no license identifier/no copyright notice) — which the catch-all draft did not.Not run:
build-doc(docs container, owned bydoc.yamlin CI).Closes #301
🤖 Generated with Claude Code
https://claude.ai/code/session_01Y1UHyNzZp8VhB4ii3kDRhg