Repository navigation
chore: relicense cli/LICENSE to Apache 2.0 + add NOTICE attribution - #2594
Conversation
cli/LICENSE was the MIT license inherited from Tom King's standalone wheels-cli CommandBox module (2016) before the monorepo merge. The root LICENSE is Apache 2.0, so the repo presented as dual-licensed to SCA tools and created legally ambiguous inbound-equals-outbound assumptions for cli/ contributors. - cli/LICENSE: replace with byte-for-byte copy of root Apache 2.0 text. - NOTICE: new root file capturing Tom King's 2016 copyright assertion per Apache 2.0 Section 4(c), satisfying the MIT notice-retention clause without preserving the conflicting license grant. No cli/box.json or cli/package.json exists declaring "license": "MIT" (verified). The only remaining MIT mentions in cli/ are (a) third-party JAR attribution for sshj transitives + slf4j in cli/lucli/lib/deploy/README.md, and (b) the user-pickable default value in the plugin scaffold command — neither is a project-level license claim. Closes #2572
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: This is a well-scoped, legally sound change that resolves the dual-licensing ambiguity for SCA tooling and correctly uses the Apache 2.0 §4(c) NOTICE mechanism to preserve Tom King's 2016 copyright without keeping a conflicting MIT license grant. The two changed files (cli/LICENSE and NOTICE) do exactly what the PR claims — diff -q LICENSE cli/LICENSE is clean, the NOTICE text is accurate, and the commit message is clean. One follow-up observation worth noting before merge: tools/vscode-ext/LICENSE is still MIT (2025, "Wheels"), which puts the VSCode extension outside the stated uniform licensing surface. This PR's stated scope is cli/, so it is not a blocker, but it should be tracked as a follow-up (similar to the open sibling issues #2573 and #2574).
Correctness
The stated verification claims all check out:
diff -q LICENSE cli/LICENSE— confirmed byte-identical ✓- No
cli/box.jsonorcli/package.json— confirmed neither exists;cli/lucli/module.jsonalready declares"license": "Apache-2.0"✓ - Remaining MIT mentions in
cli/are scoped to (a) third-party JAR attribution incli/lucli/lib/deploy/README.md(sshj transitives + slf4j) and (b) the user-selectable default in the plugin-scaffold command (cli/src/commands/wheels/plugins/init.cfcline ~15) — neither is a project-level license claim ✓ NOTICEfile correctly invokes Apache 2.0 §4(c) to retain the copyright assertion without carrying forward the MIT license grant ✓
Minor observations (non-blocking)
tools/vscode-ext/LICENSE is still MIT
tools/vscode-ext/LICENSE contains MIT License / Copyright (c) 2025 Wheels. This is a separate sub-artifact from cli/, so it falls outside this PR's declared scope, but an SCA tool scanning the repo will still report mixed licensing. Tracking alongside #2573/#2574 would complete the unified licensing surface.
No DCO Signed-off-by: trailer on the commit
CONTRIBUTING.md requires a DCO Signed-off-by: trailer on every commit. The commit 407fd50c does not carry one. The DCO GitHub App status check does not appear to have fired yet on this PR, but if it runs as a required check it will block merge. Consider amending with git commit --amend -s or adding a follow-up commit with the sign-off before merge.
Sections with nothing to flag
- Wheels conventions: N/A (no CFML code changed)
- Cross-engine compatibility: N/A
- Test coverage: N/A (docs/legal-only change, no executable code)
- Security: N/A
- Commit message:
chore: relicense cli/LICENSE to Apache 2.0 and add NOTICE attribution— valid type, well under 100 chars, passes commitlint ✓
Wheels Bot — Reviewer B (round 1)A's review is thorough and well-evidenced for a docs/legal-only PR. No sycophancy, and the factual claims all verify. One legal nuance A missed is worth addressing before this merges, and A's verdict state is slightly soft given the DCO finding. SycophancyNone detected. A's positive assessment is backed by specific verification steps (byte-identical diff confirmed, module.json license field checked, remaining MIT mentions identified and explained). False positivesNone detected. All factual claims I could independently verify are accurate:
Missed issuesMIT notice-retention clause covers both copyright notice and permission notice The MIT license says: "Permission notice" is typically interpreted as the full license grant text, not just the The full MIT permission notice (the grant paragraph and warranty disclaimer) does not appear anywhere in the repo after this change. Whether retaining only the copyright line satisfies the MIT notice-retention clause — or whether the Apache 2.0 §4(c) NOTICE mechanism fully displaces that obligation — is a legal question A did not address. The PR asserts it is sufficient but does not examine that claim. Given the PR's entire purpose is licensing compliance, this deserves explicit acknowledgment or a pointer to where Tom King's consent to relicensing is documented. If there was explicit permission from Tom King, stating that would close the question entirely. Verdict alignmentA's verdict is ConvergenceNot aligned. A should address the missed issue: either explain why retaining only the copyright line (and not the full MIT permission notice) is legally sufficient, or confirm that Tom King explicitly consented to the relicensing (which would supersede the notice-retention question). The DCO verdict-alignment issue is minor and can be addressed in the same response. |
There was a problem hiding this comment.
Wheels Bot — Reviewer A response (round 1)
B's critique is correct on both counts. After re-reading the diff and the MIT license text, I concede the missed issue about the permission notice, and B is right that identifying a merge-blocking finding while issuing a COMMENT verdict is inconsistent. My updated position is request-changes for two items: (1) the MIT permission notice gap in the NOTICE file or documentation of Tom King's explicit relicensing consent, and (2) the missing DCO trailer.
Conceded points
-
MIT permission notice not retained. Re-reading the diff: the NOTICE file retains only
Copyright (c) 2016 Tom King. The MIT license requires both "the above copyright notice and this permission notice" be included in copies. "This permission notice" is the full grant-and-disclaimer block (Permission is hereby granted...through...DEALINGS IN THE SOFTWARE.), which does not appear anywhere in the repo aftercli/LICENSEis replaced with Apache 2.0. Apache 2.0 §4(c) covers "copyright, patent, trademark, and attribution notices" — it does not discharge the obligation imposed by MIT's own permission-notice clause. The PR text asserts the NOTICE mechanism satisfies the obligation but does not explain why omitting the grant text is permissible. Either the full MIT permission notice should appear in NOTICE (or a file referenced from it), or the PR description should document that Tom King explicitly consented to the relicensing, which would supersede the notice-retention requirement entirely. -
DCO verdict alignment. My initial review described the missing
Signed-off-by:trailer as something that "will block merge" if the DCO App runs as a required check, but I submitted COMMENT rather than request-changes. That is internally inconsistent. If a finding is merge-blocking, the verdict must be request-changes. B is right.
Defended points
- None. B identified no false positives and I have no new defenses to add.
Updated verdict
Request-changes. Two items need resolution before merge: (a) either include the full MIT permission notice text in the NOTICE file or document Tom King's explicit consent to relicensing, and (b) add the DCO Signed-off-by: trailer to the commit.
Apache License 2.0 §4(c) provides for a NOTICE file to carry attribution that must propagate to downstream redistributions. PR #2594 added an initial NOTICE focused on the cli/LICENSE MIT→Apache reconciliation. This change extends the same file with the broader contributor attribution called for in #2573 — original CFWheels authors (Per Djurner et al.), the named long-running contributors, and a pointer to git log for the full list — while preserving the Tom King / wheels-cli MIT relicensing section as a dedicated subsection. Also updates tools/build/scripts/prepare-base.sh to bundle NOTICE alongside LICENSE in the base template build artifact, so the ForgeBox-published scaffold (and anything redistributing it) carries the attribution forward per Apache 2.0 §4(d). LICENSE itself is intentionally not modified; keeping the verbatim Apache 2.0 text intact preserves the fingerprint that license-detection tooling (FOSSA, ScanCode, GitHub linguist) relies on. Closes #2573. Signed-off-by: Peter Amiri <peter@alurium.com> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Apache License 2.0 §4(d) requires NOTICE attribution to propagate to derivative works. PR #2594 added an initial NOTICE focused on the cli/LICENSE MIT→Apache reconciliation; this change extends the same file with the broader contributor attribution called for in #2573 — original CFWheels authors (Per Djurner et al.), the named long-running contributors, and a pointer to git log for the full list — while preserving the Tom King / wheels-cli MIT relicensing section as a dedicated subsection. Also updates tools/build/scripts/prepare-base.sh to bundle NOTICE alongside LICENSE in the base template build artifact, so the ForgeBox-published scaffold (and anything redistributing it) carries the attribution forward. Footer of NOTICE references LICENSE rather than restating the full Apache 2.0 boilerplate, matching the ASF canonical template convention (NOTICE is for attribution; license terms live in LICENSE). LICENSE itself is intentionally not modified; keeping the verbatim Apache 2.0 text intact preserves the fingerprint that license-detection tooling (FOSSA, ScanCode, GitHub linguist) relies on. Closes #2573. Signed-off-by: Peter Amiri <peter@alurium.com> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… (#2593) Apache License 2.0 §4(d) requires NOTICE attribution to propagate to derivative works. PR #2594 added an initial NOTICE focused on the cli/LICENSE MIT→Apache reconciliation; this change extends the same file with the broader contributor attribution called for in #2573 — original CFWheels authors (Per Djurner et al.), the named long-running contributors, and a pointer to git log for the full list — while preserving the Tom King / wheels-cli MIT relicensing section as a dedicated subsection. Also updates tools/build/scripts/prepare-base.sh to bundle NOTICE alongside LICENSE in the base template build artifact, so the ForgeBox-published scaffold (and anything redistributing it) carries the attribution forward. Footer of NOTICE references LICENSE rather than restating the full Apache 2.0 boilerplate, matching the ASF canonical template convention (NOTICE is for attribution; license terms live in LICENSE). LICENSE itself is intentionally not modified; keeping the verbatim Apache 2.0 text intact preserves the fingerprint that license-detection tooling (FOSSA, ScanCode, GitHub linguist) relies on. Closes #2573. Signed-off-by: Peter Amiri <peter@alurium.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
cli/LICENSE(MIT, inherited from Tom King's standalone wheels-cli, 2016) with a byte-for-byte copy of the root Apache 2.0 license text.NOTICEfile that preserves Tom King's 2016 copyright attribution per Apache 2.0 §4(c), satisfying the MIT notice-retention clause without preserving the conflicting MIT license grant.Why
The repo presented as dual-licensed (Apache-2.0 + MIT) to SCA tools (Snyk, FOSSA, GitHub dependency graph) scanning subdirectories. Contributors to
cli/since the monorepo merge have been submitting under inbound-equals-outbound assuming Apache 2.0 (perCONTRIBUTING+ repo metadata), not MIT. This pass aligns the licensing surface so downstream consumers and SCA tooling get a deterministic answer.The Apache 2.0 §4(c) NOTICE mechanism is the canonical way to keep the original author's copyright assertion intact while shifting the license grant. This is Option 1 from the issue (recommended path).
Verification
Issue checklist:
cli/LICENSEwith Apache 2.0 text — done,diff -q LICENSE cli/LICENSEis cleanNOTICE— done at repo rootcli/box.jsonorcli/package.jsonclaims"license": "MIT"— neither file exists;cli/src/ModuleConfig.cfchas no license declaration; remaining MIT mentions incli/are unrelated (third-party sshj/slf4j JAR attribution incli/lucli/lib/deploy/README.mdand a user-facing plugin-scaffold default incli/src/commands/wheels/plugins/init.cfc)Composition with sibling issues
package.jsonfiles) — independent surface, no overlap.Test plan
diff -q LICENSE cli/LICENSE— confirms byte-identical copy"license"\s*:\s*"MIT"incli/— no project-level claimsCloses #2572