Skip to content

chore(licence): normalise to MPL-2.0 + CC-BY-SA-4.0 (canonical pair)#41

Merged
hyperpolymath merged 1 commit into
mainfrom
chore/licence-normalisation-2026-06-24
Jun 24, 2026
Merged

chore(licence): normalise to MPL-2.0 + CC-BY-SA-4.0 (canonical pair)#41
hyperpolymath merged 1 commit into
mainfrom
chore/licence-normalisation-2026-06-24

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Estate licence normalisation. LICENSES/={MPL-2.0,CC-BY-SA-4.0}; root LICENSE=verbatim MPL-2.0 (GitHub display); code->MPL-2.0, docs(.md/.adoc)->CC-BY-SA-4.0; vendored untouched. Residual mentions (mostly legitimate anti-AGPL rules): 22. Manual-review licence PR.

- LICENSES/ = {MPL-2.0.txt, CC-BY-SA-4.0.txt}; root LICENSE = verbatim MPL-2.0 (GitHub display)
- SPDX: code -> MPL-2.0, docs (.md/.adoc) -> CC-BY-SA-4.0; metadata/badge fixes; vendored untouched

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@hyperpolymath
hyperpolymath merged commit 84c74fb into main Jun 24, 2026
7 of 16 checks passed
@hyperpolymath
hyperpolymath deleted the chore/licence-normalisation-2026-06-24 branch June 24, 2026 16:07
hyperpolymath added a commit that referenced this pull request Jul 21, 2026
…ed (#55)

Follows #53 and #54.

The Dogfood Gate **could not parse** before #53, so it never ran. Now
that it parses, it runs — and immediately reported **2 A2ML errors and 4
K9 errors** on `main`. That's the gate working as intended; this PR
clears what it found.

Each fix was verified by running the **actual validator** locally, not
by reading its source.

## A2ML: 2 errors → 0

### `docs/governance/TSDM.a2ml` was not defective — the pin was stale

This is the
[SHA-pinning-defeats-upstream-fixes](https://github.com/hyperpolymath/krl)
pattern, caught red-handed:

| | |
|---|---|
| Pinned | `6bff6ec` — PR **#26**, *"recognise s-expression
identity/version fields"* |
| Fix needed | `6c47174` — PR **#41**, *"recognise colon/brace-block
identity"* |

TSDM.a2ml declares `id: "tsdm-standard"`, the colon/brace-block form.
The validator's own source comment **names this exact file** as the
motivating case — so the fix existed upstream, and the pin predated it.

Confirmed before changing anything: running the newer validator locally
drops the count **2 → 1**. Bumped to current main (`5468b7f`).

### `docs/governance/MAINTENANCE-CHECKLIST.a2ml` genuinely lacked
identity

The validator exempts four categories — `*AI-MANIFEST*` files,
`.machine_readable/` (structural identity), contractile `@directive`
shape, and named typed manifests. **None applies here**, and the file
has no `name`/`project`/`agent-id`. Added `name` to its `[metadata]`
block.

## K9: 4 errors → 0

Unlike the A2ML case, these are **genuine file defects** — the current
validator reports the same 4 errors as the pinned one, so pin staleness
is ruled out.

- Both `container/deploy.k9.ncl` and
`.machine_readable/self-validating/methodology-guard.k9.ncl` were
missing the mandatory **`K9!` magic number** on line 1.
- `deploy.k9.ncl` had `pedigree = component_pedigree,` where the
canonical template (`rsr-julia-library-template-repo`) has `pedigree =
component_pedigree & { name = "…" },`. Without the merge the pedigree
carries no name. Matched to the template.
- `methodology-guard.k9.ncl` had **no pedigree block at all**. Added
one.

> This is template rot with a measurable blast radius:
`container/deploy.k9.ncl` is missing the `K9!` line in **6 repos**
(lucidscript, pandoc-k9, pseudoscript, squeakwell, stateful-artefacts,
systemet) while the newer template has it.

## ⚠️ `K9!` and Nickel contradict each other, estate-wide

Worth recording, and **not** changed here:

```console
$ nickel typecheck container/deploy.k9.ncl
error: unexpected token
1 │ K9!
  │   ^
```

The magic number **is not valid Nickel**, so `nickel typecheck` fails on
*every* `.k9.ncl` in the estate that carries it — including the
canonical template and every currently-passing file. `k9-svc` evidently
strips the line before parsing. The consequence is that the `nickel
typecheck container/deploy.k9.ncl` usage line **in these files' own
headers can never succeed as written**.

Pre-existing and estate-wide, so left alone. But I used it as a check:
both files were typechecked with the magic line stripped, and **that
caught a real error in my first draft**, where the new pedigree block
sat at top level in a file whose body is `let … in …` — invalid Nickel.
Moved inside the record; the validator matches at any indent.

## Verified

| Check | Result |
|---|---|
| K9 validator | **0 errors** (8 files) |
| A2ML validator | **0 errors** (121 files) |
| `actionlint` | **0 errors** |
| `tests/aspect_tests.sh` | 4/4 |
| `tests/e2e.sh` | 4/4 |
| `tests/smoke/grammar_smoke.sh` | 20/20 |
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.

1 participant