Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions .machine_readable/licensing-policy.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# SPDX-License-Identifier: PMPL-1.0-or-later
# SPDX-FileCopyrightText: 2026 Jonathan Jewell (hyperpolymath)
#
# Machine-readable form of LICENCE-POLICY.adoc. Tools enforce from this;
# humans read the .adoc (the .adoc is the source of truth — keep in
# sync, do not diverge). NOT a REUSE per-file dep5 map: this encodes
# the RULES, not per-file claims.

schema = "hyperpolymath.licensing-policy/1"
revised = "2026-05-18"
note = "Rules 1-3 are the standing lawyer-backed policy; addendum is additive (007, no-automation, variant cleanup)."

[default] # Rule 1
spdx = "PMPL-1.0-or-later"
meaning = "Palimpsest-MPL v1.0 — incorporates MPL-2.0 by reference"
scope = "all hyperpolymath original code, docs, config, scripts"
status = "the disciplined estate standard (audit-confirmed ~75% of files)"

[fallback] # Rule 2
spdx = "MPL-2.0"
rule = "automatic operative legal fallback for PMPL-1.0-or-later; no separate declaration needed (lawyer-confirmed)"

[platform_exception] # Rule 2, registries
spdx = "MPL-2.0"
applies = "crates.io / Hackage / npm and other OSI-only registries"
note = "explicit MPL-2.0 + comment '(PMPL-1.0-or-later preferred; MPL-2.0 required for [platform])'; compliance, not preference"

[exceptions.son] # Rule 3
spdx = "AGPL-3.0-or-later"
instances = ["IDApTIK", "Airborne Submarine Squadron (ASS)"]
permanent = true
open_question = "possible move to PAGPL-1.0-or-later (Palimpsest-AGPL) — owner ruling pending, not asserted"

[exceptions.repo_007] # Addendum A1 (overrides Rules 1-3 for 007)
handling = "OUT-OF-SCOPE"
reason = "full commercial dual-use; potentially dangerous to declare (export-control / hazardous-tech sensitive)"
rule = "never touch/normalise/label/add-SPDX/scan/report; surface to owner only"

[third_party]
rule = "preserve original SPDX exactly; never relicense; flag-not-edit"

[automation] # Addendum A2
allowed = false
rule = "no bulk/sed/script/agent licence-SPDX changes ever; remediation is manual, per-file, owner-only"
exception = "an agent may author NEW files with correct SPDX; a brand-new repo's own top-level LICENSE may be set"

[debt] # Addendum A3 — the ONLY licence debt
type = "variant normalisation (manual, owner-driven)"
fix = "PMPL-1.0 and PMPL-1.0-or-later-or-later -> PMPL-1.0-or-later"

[guard]
location = "rsr-template-repo/.github/workflows/spdx-policy-guard.yml"
edits_files = false
tolerates = ["PMPL-*"]
fails_on = ["contradictory multi-SPDX in one file", "foreign licences outside the estate family"]
44 changes: 44 additions & 0 deletions LICENCE-POLICY.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,50 @@ compatibility with other licences, clear modern language.
* CI: `hypatia-scan.yml` checks SPDX headers on all files
* Pre-commit: `panic-attack assail` catches missing or wrong SPDX identifiers
* New repos: rsr-template-repo defaults to `PMPL-1.0-or-later`
* CI: `rsr-template-repo/.github/workflows/spdx-policy-guard.yml` —
report-only drift-guard (never edits); fails on foreign SPDX and
contradictory multi-SPDX files; tolerates the `PMPL-*` family

== Addendum — 2026-05-18 clarifications (additive; Rules 1–3 unchanged)

These refine, they do not supersede. The three Rules above are correct
and remain in force (a read-only estate audit confirmed 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 MPL-2.0 fallback of
Rule 2 — i.e. the model is internally coherent).

=== A1 — `007` is out of scope entirely

`007` carries a full commercial, dual-use licence where *dual-use means
potentially dangerous to declare* (export-control / hazardous-tech
sensitive). Labelling or asserting its licence is itself a sensitive
act. Never touch, normalise, label, add SPDX to, scan, or include 007
in any report or sweep. Surface to the owner only. This overrides
Rules 1–3 for 007.

=== A2 — Licence edits are manual, owner-only, never automated

No automated or bulk SPDX/licence change (sed sweep, script, agent
pass) on any estate repo, ever. Prior automated attempts falsified
third-party licence authorship — a legal-integrity hazard. Remediation
is manual, per-file, by the owner. An agent may author *new* files with
the correct SPDX from birth, and may set a brand-new repo's own
top-level LICENSE — that is authoring, not relicensing.

=== A3 — Variant normalisation is the only standing debt

A few files carry malformed variants — `PMPL-1.0` (missing
`-or-later`) and `PMPL-1.0-or-later-or-later` (doubled suffix). These
should read `PMPL-1.0-or-later`. This is the *only* licence debt, and
it is owner-driven manual cleanup (per A2) — not a drift to auto-fix.

=== A4 — Open question (owner ruling pending)

Rule 3 uses `AGPL-3.0-or-later` for the son's co-developed projects.
The Palimpsest family has a canonical member `PAGPL-1.0-or-later`
(Palimpsest-AGPL). Whether the son's work should move to
`PAGPL-1.0-or-later` is an *open owner decision* — not yet ruled, not
asserted here.

== See Also

Expand Down