Skip to content

chore(license): relicense to Apache-2.0, retract SSPL-era tags - #389

Merged
David-Noble-at-work merged 2 commits into
developfrom
licensing-readme-plan
Aug 12, 2026
Merged

David-Noble-at-work merged 2 commits into
developfrom
licensing-readme-plan

Conversation

@David-Noble-at-work

@David-Noble-at-work David-Noble-at-work commented Aug 12, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • LICENSE → Apache-2.0 (was SSPL-1.0), NOTICE added, README and
    go.mod headers corrected in the same commit — resolves the four-way
    licence conflict (LICENSE=SSPL / README=MIT / go.mod=MIT / headers mixed)
  • 793-file SPDX header sweep via star lint copyright --fix; linter
    enabled in star/config.yaml with license: auto so headers are now
    derived from LICENSE and future files self-correct
  • Generated-config template fixed (defaultGolangciConfig stamped MIT
    into emitted .golangci.yaml) and workflow YAML headers corrected
    manually (the linter skips config files)
  • retract [v0.1.0-dev.20260127185200, v0.1.0-dev.20260812174759] in
    go.mod — every SSPL-era tag is retracted from version selection;
    proxy.golang.org's cache is immutable so removal is not possible
  • draft-llm-*.md removed from the repo root (strategy notes; content
    treated as disclosed since git history persists)
  • Plan updated to v0.2 (docs/plans/licensing-readme-plan.md)

Evidence base: business/05-licensing-model-research.md (noblefactor repo).

Test plan

  • go build ./... passes
  • go test ./cmd/star/... passes
  • star lint copyright reports all 793 files correct
  • gofmt -l clean over changed Go files
  • No SSPL/MIT SPDX headers remain outside testdata and test-fixture
    string literals
  • After merge: re-enable Release workflow; verify next tag renders
    Apache-2.0 on pkg.go.dev

Also in this PR: the #377 canonical-Rel fix (disclosed)

This commit additionally carries the #377 fsroot semantics change — in-flight in the same working tree when the licensing sweep was staged, entangled in three files, and merged here by explicit decision rather than split out:

  • pkg/fsroot/root.go — Path.rel is now canonical slash form on every platform, applied at every construction site and enforced at JSON/YAML decode; abs stays OS-native and carries all filesystem I/O. rel is the half that serializes, so equal logical paths now produce equal document bytes and checksums everywhere — the same rule the Merkle-root digest already followed. Decode normalizes documents written by pre-fix Windows builds; existing documents are greenfield per ruling (2026-08-12).
  • pkg/fsroot/root_test.go, internal/lorepackage/registry_test.go — Abs()-class expectations made platform-correct (filepath.FromSlash); Rel() expectations were already canonical and now pass on Windows.

Measured effect, this PR's own test (windows-latest) leg: 85 → 57 failures (baseline: PR #388). All fsroot/triad path tests and TestRegistry_FilePaths clear; zero packages fail to build. The surviving receipt/graph-resume failures (7) have a second cause beyond separator form and stay tracked under #373 phase 3e / #377 follow-up.

Plan: docs/plans/fsroot-canonical-rel.md (lands separately). Closes #377.

David Noble added 2 commits August 12, 2026 16:17
The repository asserted four different licences at once: LICENSE carried
SSPL-1.0, the README said MIT, go.mod's header said MIT plus "All rights
reserved", and ~620 source files carried SSPL SPDX headers against 59 MIT.
The decided licence (strategy revision 2026-08, licensing-readme-plan v0.2)
is Apache-2.0.

- Replace LICENSE with the Apache-2.0 text; add NOTICE
- Correct the README licence statement and the go.mod header
- Sweep all 793 source-file SPDX headers to Apache-2.0 via
  `star lint copyright --fix` (config enabled in star/config.yaml with
  license: auto, so headers now follow the LICENSE file)
- Fix the generated-.golangci.yaml template and workflow YAML headers,
  which the linter does not cover
- Add a `retract` directive covering every SSPL-era tag
  [v0.1.0-dev.20260127185200, v0.1.0-dev.20260812174759]; the proxy cache
  is immutable, so retraction is the strongest available remedy
- Remove draft-llm-*.md strategy notes from the repo root
- Update docs/plans/licensing-readme-plan.md to v0.2 (audit results,
  amended sequence)

The Release workflow was disabled before this change to stop minting
SSPL-era tags; it is re-enabled after merge. The next tag is the first
Apache-2.0 release.
…thub/scripts

star lint copyright --fix rewrites files without preserving the mode bit,
which broke CI (Test-GuideFrontmatter.sh: Permission denied). Restore +x on
the four affected scripts and include .github/scripts/shell-lint.sh, which
the previous commit's staging list missed.
@David-Noble-at-work
David-Noble-at-work merged commit 33f7635 into develop Aug 12, 2026
7 of 8 checks passed
@David-Noble-at-work
David-Noble-at-work deleted the licensing-readme-plan branch August 12, 2026 23:40
David-Noble-at-work added a commit that referenced this pull request Aug 12, 2026
… root (#390)

* chore(license): complete Apache-2.0 sweep; root-document triage

Complete the sweep PR #389 missed: 127 tracked *.gen.go files, whose
headers come from the go.render templates in
star/extensions/.../templates/*.gen.go.template (skipped by the copyright
linter due to the .template extension). Fix the seven templates so
regeneration emits Apache-2.0, sweep the generated files to match, and
correct the two extensionless stragglers (.githooks/pre-commit,
.pre-commit-config.yaml). Remaining SSPL mentions are intentional: the
go.mod retract rationale and a linter test fixture.

Also lands the root-document triage (staged earlier by script): stale
snapshots deleted (GITHUB-ISSUES, CODE-CONSOLIDATION-ANALYSIS,
TEST_BREAKS, commit_msg.txt), sketches moved to docs/sketches/,
ARCHITECTURE-STATUS to docs/architecture/STATUS.md.

Assisted-by: Claude
Signed-off-by: David Noble <[email protected]>

* docs: rewrite README, add CONTRIBUTING with AI disclosure

README rewritten per licensing-readme-plan v0.2 §5.3: DevLore-first
framing (onboarding and roles above the fold, the Docker iceberg second),
honest current-binary naming with the devlore unification noted, install
paths that exist today, the genuine cross-platform statement including
the PowerShell provider, the registry relationship, Apache-2.0 stated
once, devlore.org links.

CONTRIBUTING.md added: Apache-2.0 §5 inbound terms with DCO sign-off,
and the AI-disclosure policy — assistance is welcome, must be announced
via Assisted-by trailer, is acknowledged never credited, and undisclosed
use is a permanent ban. go-style-guidelines.md mirrored from
noblefactor-ops (header rule corrected to Apache-2.0) so public
contributors can read the rules star lint enforces.

Assisted-by: Claude
Signed-off-by: David Noble <[email protected]>

---------

Signed-off-by: David Noble <[email protected]>
Co-authored-by: David Noble <[email protected]>
David-Noble-at-work added a commit that referenced this pull request Aug 13, 2026
Two plan documents, landing after the work they describe.

docs/plans/fsroot-canonical-rel.md is issue #377's plan: rel canonical slash
form at every construction and decode site, abs OS-native, every non-test
Rel() consumer audited (two of them — walkDir and merkleRoot — were handing
native-form rel to io/fs APIs whose contract requires slash paths, so the fix
repaired them rather than risking them). Both rulings are recorded: existing
serialized documents are greenfield, and Abs()-class test expectations are
platform-correct rather than slash literals.

Its Outcome section records what actually happened: the implementation landed
inside PR #389 (the Apache-2.0 relicense) rather than as its own PR — it was
in-flight in the same working tree when the licensing sweep staged whole
directories, and the ruling was to merge with the entanglement disclosed in
the PR body rather than split commits or rewrite a shared branch. Issue #377
closed by that merge. Measured on #389's own windows test leg: 85 -> 57
failures, every fsroot/triad path assertion and TestRegistry_FilePaths
cleared, zero build failures. The attribution correction is recorded too: the
earlier ~50-of-85 estimate was wrong (the separator-direct share was 28), and
the surviving receipt/graph-resume round-trips have a second cause beyond
separator form — the first thing to read in the remaining-57 triage.

docs/plans/platform-test-matrix.md gains the corrected phase-2 baseline: with
the three formerly-[build failed] packages compiling on Windows (PR #388), the
honest count was 85, not 34 — the FAIL-line counting had silently excluded
three entire suites.

Documentation only; no code changes.
Issues: #377 (closed), #373

Co-authored-by: David Noble <[email protected]>
David-Noble-at-work added a commit that referenced this pull request Aug 13, 2026
Issue #396. The relicense (#389) stamped Apache-2.0 headers onto the two
inventory.gen.go files, but make generate runs the generator under every build
and test, and the generator did not emit a header — so any make invocation
rewrote both files headerless, and the next commit that staged them would have
silently undone the relicense on those files. Observed in practice minutes
after #389 merged, and twice more since: every local build left both files
modified with exactly the header lines deleted, repaired by hand each time.

writeInventory now emits the SPDX and copyright lines itself, matching the
repository convention exactly so star lint copyright accepts regenerated
output unchanged. Same defect class, same remedy as the defaultGolangciConfig
template #389 already fixed: a generator whose output must carry the header
emits it from the template rather than relying on a one-time sweep.

Proven by regeneration: make generate now produces output byte-identical to
the committed files — the strip-restore cycle is dead. The committed
inventory.gen.go files need no change in this commit.

Verified: make vet, make lint-all, full make test green — zero FAIL or panic
lines by count; gofmt clean.
Issue: #396

Co-authored-by: David Noble <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fsroot.Path.Rel() returns OS-native separators, making serialized documents and checksums platform-dependent

1 participant