Skip to content

Commit b222a50

Browse files
Licence policy: additive clarifications (007, no-automation, variant cleanup) — Rules 1–3 unchanged (#138)
**Re-scoped.** An earlier push on this branch wrongly *superseded* the policy. A read-only estate audit then established the original three Rules are correct: `PMPL-1.0-or-later` is the disciplined estate standard, and **PMPL = Palimpsest-MPL v1.0** which incorporates MPL-2.0 by reference with the Rule 2 MPL-2.0 fallback. The model was always coherent. This PR is now **purely additive** — Rules 1–3 verbatim from `main`, plus an addendum: - **A1** `007` out of scope (full commercial dual-use, hazardous to declare) - **A2** no automated licence edits (manual, owner-only) - **A3** the only debt: manual normalisation of `PMPL-1.0` / `PMPL-1.0-or-later-or-later` → `PMPL-1.0-or-later` - **A4** son `AGPL-3.0-or-later` vs canonical `PAGPL-1.0-or-later` — flagged as an OPEN owner question, not asserted - Enforcement references the reframed `spdx-policy-guard` - `.machine_readable/licensing-policy.toml` rewritten to the TRUE policy Diff vs main: +99, **0 deletions**. Pairs with rsr-template-repo#63. Merge is your call. --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 5f2f8b2 commit b222a50

2 files changed

Lines changed: 99 additions & 0 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# SPDX-FileCopyrightText: 2026 Jonathan Jewell (hyperpolymath)
3+
#
4+
# Machine-readable form of LICENCE-POLICY.adoc. Tools enforce from this;
5+
# humans read the .adoc (the .adoc is the source of truth — keep in
6+
# sync, do not diverge). NOT a REUSE per-file dep5 map: this encodes
7+
# the RULES, not per-file claims.
8+
9+
schema = "hyperpolymath.licensing-policy/1"
10+
revised = "2026-05-18"
11+
note = "Rules 1-3 are the standing lawyer-backed policy; addendum is additive (007, no-automation, variant cleanup)."
12+
13+
[default] # Rule 1
14+
spdx = "PMPL-1.0-or-later"
15+
meaning = "Palimpsest-MPL v1.0 — incorporates MPL-2.0 by reference"
16+
scope = "all hyperpolymath original code, docs, config, scripts"
17+
status = "the disciplined estate standard (audit-confirmed ~75% of files)"
18+
19+
[fallback] # Rule 2
20+
spdx = "MPL-2.0"
21+
rule = "automatic operative legal fallback for PMPL-1.0-or-later; no separate declaration needed (lawyer-confirmed)"
22+
23+
[platform_exception] # Rule 2, registries
24+
spdx = "MPL-2.0"
25+
applies = "crates.io / Hackage / npm and other OSI-only registries"
26+
note = "explicit MPL-2.0 + comment '(PMPL-1.0-or-later preferred; MPL-2.0 required for [platform])'; compliance, not preference"
27+
28+
[exceptions.son] # Rule 3
29+
spdx = "AGPL-3.0-or-later"
30+
instances = ["IDApTIK", "Airborne Submarine Squadron (ASS)"]
31+
permanent = true
32+
open_question = "possible move to PAGPL-1.0-or-later (Palimpsest-AGPL) — owner ruling pending, not asserted"
33+
34+
[exceptions.repo_007] # Addendum A1 (overrides Rules 1-3 for 007)
35+
handling = "OUT-OF-SCOPE"
36+
reason = "full commercial dual-use; potentially dangerous to declare (export-control / hazardous-tech sensitive)"
37+
rule = "never touch/normalise/label/add-SPDX/scan/report; surface to owner only"
38+
39+
[third_party]
40+
rule = "preserve original SPDX exactly; never relicense; flag-not-edit"
41+
42+
[automation] # Addendum A2
43+
allowed = false
44+
rule = "no bulk/sed/script/agent licence-SPDX changes ever; remediation is manual, per-file, owner-only"
45+
exception = "an agent may author NEW files with correct SPDX; a brand-new repo's own top-level LICENSE may be set"
46+
47+
[debt] # Addendum A3 — the ONLY licence debt
48+
type = "variant normalisation (manual, owner-driven)"
49+
fix = "PMPL-1.0 and PMPL-1.0-or-later-or-later -> PMPL-1.0-or-later"
50+
51+
[guard]
52+
location = "rsr-template-repo/.github/workflows/spdx-policy-guard.yml"
53+
edits_files = false
54+
tolerates = ["PMPL-*"]
55+
fails_on = ["contradictory multi-SPDX in one file", "foreign licences outside the estate family"]

LICENCE-POLICY.adoc

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,50 @@ compatibility with other licences, clear modern language.
9595
* CI: `hypatia-scan.yml` checks SPDX headers on all files
9696
* Pre-commit: `panic-attack assail` catches missing or wrong SPDX identifiers
9797
* New repos: rsr-template-repo defaults to `PMPL-1.0-or-later`
98+
* CI: `rsr-template-repo/.github/workflows/spdx-policy-guard.yml` —
99+
report-only drift-guard (never edits); fails on foreign SPDX and
100+
contradictory multi-SPDX files; tolerates the `PMPL-*` family
101+
102+
== Addendum — 2026-05-18 clarifications (additive; Rules 1–3 unchanged)
103+
104+
These refine, they do not supersede. The three Rules above are correct
105+
and remain in force (a read-only estate audit confirmed PMPL-1.0-or-later
106+
is the disciplined estate standard, and PMPL = Palimpsest-MPL v1.0,
107+
which incorporates MPL-2.0 by reference with the MPL-2.0 fallback of
108+
Rule 2 — i.e. the model is internally coherent).
109+
110+
=== A1 — `007` is out of scope entirely
111+
112+
`007` carries a full commercial, dual-use licence where *dual-use means
113+
potentially dangerous to declare* (export-control / hazardous-tech
114+
sensitive). Labelling or asserting its licence is itself a sensitive
115+
act. Never touch, normalise, label, add SPDX to, scan, or include 007
116+
in any report or sweep. Surface to the owner only. This overrides
117+
Rules 1–3 for 007.
118+
119+
=== A2 — Licence edits are manual, owner-only, never automated
120+
121+
No automated or bulk SPDX/licence change (sed sweep, script, agent
122+
pass) on any estate repo, ever. Prior automated attempts falsified
123+
third-party licence authorship — a legal-integrity hazard. Remediation
124+
is manual, per-file, by the owner. An agent may author *new* files with
125+
the correct SPDX from birth, and may set a brand-new repo's own
126+
top-level LICENSE — that is authoring, not relicensing.
127+
128+
=== A3 — Variant normalisation is the only standing debt
129+
130+
A few files carry malformed variants — `PMPL-1.0` (missing
131+
`-or-later`) and `PMPL-1.0-or-later-or-later` (doubled suffix). These
132+
should read `PMPL-1.0-or-later`. This is the *only* licence debt, and
133+
it is owner-driven manual cleanup (per A2) — not a drift to auto-fix.
134+
135+
=== A4 — Open question (owner ruling pending)
136+
137+
Rule 3 uses `AGPL-3.0-or-later` for the son's co-developed projects.
138+
The Palimpsest family has a canonical member `PAGPL-1.0-or-later`
139+
(Palimpsest-AGPL). Whether the son's work should move to
140+
`PAGPL-1.0-or-later` is an *open owner decision* — not yet ruled, not
141+
asserted here.
98142

99143
== See Also
100144

0 commit comments

Comments
 (0)