Skip to content

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

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)#69
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): 18. 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 05805d0 into main Jun 24, 2026
18 checks passed
@hyperpolymath
hyperpolymath deleted the chore/licence-normalisation-2026-06-24 branch June 24, 2026 15:17
hyperpolymath added a commit that referenced this pull request Jul 27, 2026
)

Closes the two remaining red workflows on `main` and removes a stray
licence
file. Three independent defects, each root-caused against the live runs.

## 1. `comprehensive-quality.yml` — duplicate top-level key (parse-dead)

The file declared `permissions: read-all` **twice**, at lines 4 and 12.
GitHub
Actions rejects a workflow with duplicate top-level keys, so it never
parsed.

The tell: the run reported as the raw path
`.github/workflows/comprehensive-quality.yml`
instead of its `name:` (`Comprehensive Quality Gates`) — GitHub never
read far
enough to find the name — with **zero jobs** and `log not found`.

Removed the second occurrence. Both were `read-all`, so **no semantic
change**.

> **Linting note worth keeping:** `yaml.safe_load` reports this file as
> perfectly valid, because PyYAML applies last-wins on duplicate keys.
Any
> workflow linter built on a stock YAML parser is blind to this entire
class of
> defect. Detection needs a loader with an explicit duplicate-key
constructor.

## 2. `scorecard.yml` — reusable permission escalation
(`startup_failure`)

A job-level `permissions:` block **replaces** the default grant rather
than
extending it. Granting only `security-events: write` + `id-token: write`
therefore
left `contents` at **none**.

The reusable
(`standards/.github/workflows/scorecard-reusable.yml@81dbf2dd`)
declares `permissions: contents: read` at `workflow_call` level, and a
reusable
may not request more permission than its caller holds — so the job never
started.

Added `contents: read`, with an inline comment so it doesn't regress.

This is the estate-wide pattern tracked in standards#527. Note that #75
aimed at
this symptom and did not clear it; this addresses the actual grant.

## 3. `LICENSES/AGPL-3.0-or-later.txt` — removed

Nothing in the repo declares `AGPL-3.0`. The canonical pair is
**MPL-2.0 + CC-BY-SA-4.0**, normalised deliberately in #69, and every
manifest
agrees (`Cargo.toml`, `codemeta.json`, `CITATION.cff`; `LICENSE` is the
MPL-2.0
text). The repo's own machine-readable policy is explicit:

```
.machine_readable/6a2/AGENTIC.a2ml:23
# - Never use AGPL license (use MPL-2.0)
```

Sweep residue from `b9aaa6b`, landed on `main` via #83.

## Verification

- Strict duplicate-key scan passes across **all 19** workflow files (was
1 failing).
- `comprehensive-quality.yml` parses to `Comprehensive Quality Gates`,
11 jobs.
- `scorecard.yml` job `analysis` resolves to
  `{contents: read, security-events: write, id-token: write}`.
- The real test is CI on this PR — please confirm both workflows now
start.

## Out of scope, but found — worth a follow-up

- `RSR_COMPLIANCE.adoc:56` and `RSR_OUTLINE.adoc:74,162` describe the
licensing
as **"LICENSE.txt (AGPL + Palimpsest)"**. That contradicts the repo's
actual
MPL-2.0 licensing *and* its own no-AGPL policy, and `LICENSE.txt` does
not
exist (the file is `LICENSE`). Looks like unedited RSR template
boilerplate.
Left alone deliberately — rewriting compliance docs is a judgement call.
- Three Pages workflows (`pages.yml`, `casket-pages.yml`,
`jekyll-gh-pages.yml`)
all deploy on push to `main` — three deployers racing for one
environment.

Draft pending CI. Context: `dev-notes/betlang-sitrep-2026-07-27.md`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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