Skip to content

[campaign] PMPL-1.0 → MPL-2.0 SPDX licence header sweep (~12,000 files) #308

Closed

Description

@hyperpolymath

Finding

A 2026-05-30 estate-wide grep shows 12,223 files still carry `SPDX-License-Identifier: PMPL-1.0-or-later` (predecessor estate licence) vs 55,245 files on the target `SPDX-License-Identifier: MPL-2.0`. `MPL-1.0` is already at zero — that conversion completed.

Per estate language policy

Per [[feedback_estate_lang_policy_2026_05_25]] memory:

MPL-1.0/PMPL-1.0 → MPL-2.0

PMPL-1.0 is the predecessor estate licence; MPL-2.0 is the target.

Top hotspots by repo

Repo PMPL-1.0 files Notes
iser-tools 1,517 Likely all estate-authored
.claude (worktrees?) 1,310 Probably ephemeral worktree shadows
v-ecosystem 1,159 Vendored upstream V-lang — exempt
rescript-ecosystem 882 Vendored upstream ReScript — exempt
.github (workflows) 845 Mostly workflow files
asdf-augmenters 820 Estate-authored
asdf-plugin-collection 706 Estate-authored
docs (various) 495 Documentation
verification-ecosystem 453 Estate-authored
a2ml 325 Estate-authored
k9-svc 293 Estate-authored
affinescript-ecosystem 272 Estate-authored
... ... ...

Standards repo itself: 2,382 PMPL-1.0 vs 350 MPL-2.0 — the canonical-policy repo is itself ~87% on the predecessor licence.

Scope considerations

  • Vendored exclusions: v-ecosystem, rescript-ecosystem, hyperpolymath-archive/*, linguist, repos-monorepo — these are upstream forks and should keep their original headers per upstream-fidelity policy.
  • Realistic remaining scope: ~8,000 files across ~40 estate-authored repos.
  • Bulk-replace tractability: Mechanical sed substitution; per-PR scope = per-repo would be ~40 PRs.

Recommended approach

Phase 1 — standards itself

Convert standards' own files (2,032 estimated after carve-outs). Single large PR or 3-4 smaller PRs split by directory (workflows/, docs/, scripts/, lib/). Establishes the pattern.

Phase 2 — top-10 hotspots

Per-repo PRs for iser-tools, asdf-augmenters, asdf-plugin-collection, verification-ecosystem, a2ml, k9-svc, affinescript-ecosystem, container-stack, etc. Mechanical sed -i 's|PMPL-1.0-or-later|MPL-2.0|' plus header-only MPL-1.0 variants.

Phase 3 — long-tail

Subagent fan-out across remaining repos, paced for rate-limit. ~6-8 hours total.

Out of scope

  • Code-level licence changes (just SPDX headers)
  • Upstream-vendored content
  • Files where PMPL is INTENTIONAL (none currently identified)

Owner decision needed

  • (a) Approve Phase 1 (standards itself) now
  • (b) Defer — PMPL-1.0-or-later is contractually equivalent to MPL-2.0 in practice; cosmetic
  • (c) Trigger full sweep — would consume ~6-8 hours of CI/Actions budget

Refs [[feedback_estate_lang_policy_2026_05_25]] (policy source)

Activity

  1. hyperpolymath commented on May 30, 2026

    @hyperpolymath
    OwnerAuthor

    Status sweep 2026-05-30 — refresh + reality check.

    Count refresh

    Re-ran inventory against current estate:

    Metric At filing 2026-05-30 (now) Δ
    PMPL-1.0 files ~12,223 ~21,108 +8,885
    MPL-2.0 files 55,245 (not re-measured) n/a
    MPL-1.0 (word-boundary, excl. PMPL substrings) 0 0 estate-authored 0

    The PMPL-1.0 count grew, not shrank — likely from the in-flight CLAUDE.md docs flip (65-PR background script per memory) propagating fresh PMPL-1.0 stamps before this sweep approves. The MPL-1.0 conversion claim in the body remains accurate (only matches are license/PMPL-1.0.txt filename hits, not estate-authored content).

    Progress since filing

    PR Title Status
    standards#249 chore(spdx): migrate 25 workflow SPDX headers PMPL-1.0-or-later → MPL-2.0 MERGED 2026-05-28
    standards#201 feat(governance): add licence-consistency CI check MERGED 2026-05-27
    standards#196 docs(audits): estate-wide licence-debt audit 2026-05-26 MERGED 2026-05-27

    The "Phase 1 — standards itself" candidate (2,032 files at filing → ~3,822 now) has had only the 25-file workflow precursor merged. Owner decision (a/b/c) still pending.

    Owner-decision options (re-stated for clarity)

    • (a) Approve Phase 1 (standards itself) now — pattern-establishing, ~3,800-file PR or 3-4 split PRs.
    • (b) Defer — PMPL-1.0-or-later is contractually equivalent to MPL-2.0; cosmetic-only.
    • (c) Trigger full sweep — ~21,000 files, ~6-8 hours of Actions budget, ~40 PRs.

    This is a genuinely-open campaign awaiting owner decision, not a stale-claim closure candidate. Keeping open. No per-phase sub-issues exist yet — they'd be filed once option (a) or (c) is approved.

    Cross-ref: also note [[feedback_echidna_license_docs_mpl_intentional.md]] memory — echidna's CLAUDE.md+FAQ.md AGPL reconciliation PR #149 was reverted 2026-05-30, so echidna docs intentionally stay MPL-2.0 despite AGPL LICENSE; do not sweep that repo's SPDX headers unprompted.

  2. hyperpolymath commented on Jun 2, 2026

    @hyperpolymath
    OwnerAuthor

    Status update — 2026-06-02 sweep complete

    This campaign is largely complete. Sweep executed across 28 repos with category-aware targets (sole-owner → MPL-2.0, son-shared → AGPL-3.0-or-later, palimpsest carve-out kept PMPL, third-party/fork excluded).

    Total swept: ~14,000 files across 28 repos

    Per-repo PR table

    Repo PR(s) Files Target
    neurophone #102 (canonical revert, already merged), #120 (docs reintro) 100 + 8 MPL-2.0
    developer-ecosystem #103/#104/#105/#106/#107 7,129 MPL-2.0
    nextgen-databases #29/#30 226 MPL-2.0
    standards #344/#345/#349/#350 3,456 + docs AGPL-3.0-or-later + consent-aware-http hybrid
    stapeln #86/#87 875 MPL-2.0
    reposystem #90 (Phase 1) 401 MPL-2.0
    ephapax #285/#286 343 + badge MPL-2.0
    sanctify-php #47/#48 123 + badge MPL-2.0
    ubicity #73/#74 131 + badge MPL-2.0
    zerotier-k8s-link #63/#64 110 + badge MPL-2.0
    verisimiser #156 274 MPL-2.0
    squisher-corpus #26 126 MPL-2.0
    rattlescript #29 240 AGPL-3.0-or-later (newly-discovered category 3)
    pimcore-fortress #22 87 MPL-2.0
    tree-navigator #41 75 MPL-2.0
    snapcreate #29 65 MPL-2.0
    php-aegis #43 92 MPL-2.0
    nafa-app #26 103 MPL-2.0
    vscode-k9 #22 219 MPL-2.0
    supernorma #38/#39 72 + badge MPL-2.0
    sdp-hkdf-deployment #26 81 MPL-2.0
    robot-vacuum-cleaner #64 81 MPL-2.0
    gitbot-fleet #250 148 MPL-2.0
    vcl-ut #46 32 AGPL-3.0-or-later (newly-discovered category 3)
    resource-record-fluctuator #38 55 MPL-2.0
    proof-of-work #83/#84 118 + badge MPL-2.0
    project-wharf #49 68 MPL-2.0
    julia-professional-registry #25 16 MPL-2.0
    hypatia #423 (governance recipe + script + exclude_repos update) 3 –

    Audit correction vs original framing

    Original (2026-05-30) audit's "vendored exclusions" assumption was wrong for v-ecosystem and rescript-ecosystem — both are owner-authored ecosystem subdirs, not upstream vendored.

    Actual correct exclusions discovered during execution:

    • Submodule paths (per .gitmodules) — e.g., v-ecosystem/v-{graphql,grpc,rest}/, satellites/*, julia-ecosystem/, scaffoldia/
    • Possible upstream forks — rescript-tea/, affinescript-vite/ (precautionary skip pending fork-vs-local classification)
    • AGPL inheritance — idaptik-rescript13-staging/ (son-shared idaptik content)
    • Check-in copies of standalone repos — cadre-router/, cadre-tea-router/, rescript-evangeliser/, rattlescript/ under dev-ecosystem
    • Carve-out subdirs — consent-aware-http/ (special hybrid; see standards#350)

    Newly-confirmed AGPL category-3 repos (son-shared)

    • standards (this repo)
    • rattlescript
    • vcl-ut

    These join previously-confirmed idaptik, burble. All carry AGPL-3.0-or-later, not MPL-2.0.

    New deliverables

    1. docs/LICENSE-POLICY.md (standards#349) — canonical estate policy reference
    2. recipe-fix-pmpl-drift.json + fix-pmpl-drift.sh (hypatia#423) — auto-classifier for future drift
    3. Memory — 5 new always-on entries in MEMORY.md (estate-license-policy-umbrella + per-repo AGPL confirmations + consent-aware-http hybrid)

    consent-aware-http special handling (standards#350)

    Per owner directive 2026-06-02, consent-aware-http uses a hybrid licensing model:

    • Source files → MPL-2.0
    • Spec/doc files → CC-BY-4.0 (IETF-compatible)
    • In-text reference → PMPL-2.0-or-later for cultural/ethical/post-quantum framing (NOT applied as SPDX)

    Known deferred work

    • reposystem Phase 2 — 7 sub-projects (scaffoldia, recon-silly-ation, bitfuckit, gui, git-morph, contractiles, stateful-artefacts) need standalone-vs-local classification
    • panll — owner-managed per memory, never sweep without explicit per-touch greenlight
    • llm-grace#2 — owner-manual file-by-file (199 files) per its own issue body
    • echidnabot#83 — owner-manual (2 trivial edits) per its own issue body
    • Tail repos with 1-2 PMPL stamps each not surfaced by the original gh search cap

    Suggested next state

    Once the ~50 draft PRs above land, this campaign is closeable. Suggest one of:

    • Close as superseded by hypatia#423 (the governance recipe takes over from here)
    • Mark status:waiting-on-merge and close after all PRs are merged
    • Keep open as the audit-trail anchor — let hypatia#423 reference it

    🤖 Generated with Claude Code

  3. hyperpolymath commented on Jun 2, 2026

    @hyperpolymath
    OwnerAuthor

    Campaign CLOSED — 2026-06-02 19:50Z

    All 30 PRs across this campaign are now MERGED to main. Final tally:

    • Source-SPDX sweep: 19 repos / ~14,000 files swept (MPL-2.0 for sole-owner, AGPL-3.0-or-later for the 5 confirmed category-3 son-shared repos)
    • Governance: hypatia#423 (recipe + script) + gitbot-fleet#256 (wire-up) — hypatia → gitbot-fleet → .git-private-farm loop CLOSED for PMPL drift detection
    • Docs: standards#349 (canonical LICENSE-POLICY.md) + standards#350 (consent-aware-http hybrid: MPL source + CC-BY-4.0 spec + PMPL-2.0-or-later in-text reference)
    • License-inconsistency adjacent campaign: 7 manifest-vs-LICENSE fixes merged (chimichanga#38, conflow#35, zerostep#54, januskey#52, poly-observability-mcp#23, poly-k8s-mcp#17, vcs-ircd#49) + 2 stale-issue comments (boj-server#186, hypatia#417 — LICENSE has flipped to AGPL since those issues were filed, both stale)

    Newly-confirmed category-3 (AGPL-3.0-or-later, son-shared) repos

    Added to memory + estate-license-policy-umbrella table:

    • standards (this repo)
    • rattlescript
    • vcl-ut

    Join previously-confirmed: idaptik, burble.

    Suggested closure

    Close this issue as SUPERSEDED-BY hypatia#423 (going-forward automation now in place; any new drift gets auto-routed via the recipe + script).

    🤖 Generated with Claude Code

  4. hyperpolymath commented on Aug 24, 2026

    @hyperpolymath
    OwnerAuthor

    Closing as completed/superseded after stale-open audit. The 2026-06-02 close-out records all 30 campaign PRs merged, approximately 14,000 source headers reconciled with category-aware licensing, and the going-forward detector/recipe handed to hyperpolymath/hypatia#423 (with gitbot-fleet#256 wiring). The issue’s own final recommendation was to close as superseded by that automation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions