Fix: Declare BSD-3-Clause in package.xml to match the repo LICENSE - #1
Merged
Conversation
davetcoleman
marked this pull request as ready for review
September 2, 2026 19:57
Also apply the repo's own pre-commit hooks, which had never been run against the tree: end-of-file-fixer, prettier (XML), and codespell. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EyWXfyZBDBJ61sSuumJKY4
davetcoleman
force-pushed
the
fix/license-metadata
branch
from
September 2, 2026 20:16
d3a4500 to
f3a56d8
Compare
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.
[written by AI]
Problem
All three packages declared
<license>Apache-2.0</license>while the repo's rootLICENSEis BSD-3-Clause,Copyright (c) 2025 PickNik Inc.A consumer reading one and not the other gets a different answer about what this code is licensed under, and automated SBOM tooling cannot resolve the conflict.Which one was wrong
BSD-3-Clause is correct and the
package.xmldeclarations were the error. Every other PickNik example workspace agrees, andexample_robot_wswas the only outlier:package.xmlLICENSEmoveit_pro_ur_ws(2 packages)moveit_pro_kinova_ws(4 packages)moveit_pro_franka_ws(4 packages)moveit_pro_xarm_ws(3 packages)moveit_pro_fanuc_ws(2 packages)moveit_pro_kuka_ws(2 packages)example_robot_ws(3 packages)Nothing in the repo's history suggests Apache-2.0 was deliberate. The declarations trace back to the tutorial's
Step 2/Step 8/Step 12commits and never matched theLICENSEadded inStep 1.The second change: declaring the vendored Robotiq model
example_robot_simvendors a third-party MJCF model atmjcf/assets/, the Robotiq 2F-85 gripper description derived fromros-industrial/robotiq. It is already well documented in place, with its ownLICENSE(Copyright (c) 2013, ROS-Industrial),README.md, andCHANGELOG.md, and the README states its license explicitly.That license is BSD-2-Clause, not BSD-3: the
LICENSEfile carries only the two redistribution clauses and no "Neither the name of the copyright holder..." clause, which matches what its README claims. So the package ships under two licenses, and now says so:This is the same dual-declaration pattern
moveit_pro_sam2andmoveit_pro_sam3already use for vendored third-party model files. The attribution was never missing here, it just was not machine-readable.The third change: the repo's own pre-commit hooks
CI runs
pre-commit run --all-files, and the hooks had never been run against this tree, so the job failed on three of them independently of the license edit:end-of-file-fixer: 17 files with no trailing newline (Dockerfile,docker-compose.yaml, launch files, MJCF assets, config YAMLs).codespell:overridentwice insrc/example_robot_mock/config/moveit/joint_limits.yaml. Fixed by hand, along withspeicyfingin the same comment block, which codespell does not carry in its dictionary.prettierwith@prettier/plugin-xml: 7 XML files, including two of the threepackage.xmlfiles this PR already touches.All of that is the hooks' own output, taken as-is.
pre-commit run -ais clean on the branch.Scope
Three
package.xmlfiles for the license change, plus automated formatter output across the tree. No code, no behavior, no build changes. The rootLICENSEand the vendoredmjcf/assets/LICENSEare both untouched, since both were already correct.The formatting diff is large because prettier reflows MJCF attribute lists onto separate lines, but it is not a semantic change: every reformatted
.xml,.urdf, and.xacrofile canonicalizes identically to its previous version (ElementTree.canonicalize(strip_text=True), all 15 files), and a numeric-token multiset comparison confirms no float or int value shifted in the MJCF models.Manual verification
None needed. The license edit changes ROS package manifests, where
<license>is metadata that no build step consumes. The rest is formatter output verified semantically inert by the canonicalization check above.Known follow-ups, not fixed here
src/example_robot_sim/mjcf/assets/MUJOCO_LOG.TXTis a committed MuJoCo runtime log recording aNaN/Infsimulation-instability warning. It should be deleted and gitignored. This PR only trims its trailing newline.example_robot_hwandexample_robot_mockdeclareBSD-3-Clausewith nofile=attribute pointing at the rootLICENSE. That matches the repo's existing convention and is not a regression, but REP 149 compliance would want it.Found during a licensing audit of all 109 PickNik-authored public repos. Tracked in PickNikRobotics/moveit_pro#22271.
🤖 Generated with Claude Code
https://claude.ai/code/session_01EyWXfyZBDBJ61sSuumJKY4