chore(license): reconcile residual PMPL prose to canonical MPL-2.0 + CC-BY-SA-4.0#172
Merged
Merged
Conversation
…CC-BY-SA-4.0 The estate already normalised this repo to the canonical pair — MPL-2.0 (code/config) + CC-BY-SA-4.0 (docs) — in #138/#156/#161/#163. The #156 pass flipped SPDX *header* stamps only, so stray PMPL-1.0-or-later strings survived in prose/metadata bodies. This is the loose end PR #167 flagged "for owner" (verisimiser is not a PMPL carve-out repo; LICENSE, LICENSES/, Cargo.toml and every SPDX header are MPL-2.0). Reconciled (own license declarations): - .machine_readable/compliance/reuse/dep5 — REUSE/DEP5 default + config stanzas PMPL → MPL-2.0; CC-BY-SA-4.0 docs override (last-match) kept - .well-known/ai.txt — code-license line → MPL-2.0; dropped the "Emotional Lineage per PMPL Section 3" clause (no such obligation in MPL-2.0) - .well-known/humans.txt — License line → MPL-2.0 (code) + CC-BY-SA-4.0 (docs) - docs/attribution/CITATION.cff — license → MPL-2.0 - .machine_readable/ai/{.cursorrules,.clinerules,.windsurfrules} — license policy block → MPL-2.0 canonical pair (kept "Never AGPL-3.0") - .machine_readable/svc/k9/examples/{project-metadata,setup-repo}.k9.ncl — example license string/recipe → MPL-2.0 (recipe no longer curls a PMPL LICENSE) Deliberately left (not own self-declarations): - docs/legal/EXHIBIT-{A,B}-*.txt — bodies of the Palimpsest-MPL license itself - contractile.just — generic multi-license recognizer ('MIT|Apache|PMPL|MPL') Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JdqVWGSSv36Ph8ZWvizGMp
10 tasks
hyperpolymath
added a commit
that referenced
this pull request
Jun 27, 2026
…#174) ## Summary Clears the one pre-existing red on the estate's `governance / Language / package anti-pattern policy` check. `scripts/abi-ffi-gate.py` was the repo's **last Python file** (RSR-H4 bans Python — Julia for scripts/data, Rust for systems), and the whole-tree scanner flags it. Rather than suppress the scanner, this **ports the gate to Julia** and removes the `.py`, so the check goes green *and* the ABI↔FFI conformance gate keeps doing its job. (Follow-up to #173 — this is the cleanup of the lone pre-existing failure carried on #172/#173.) ## Changes - **`scripts/abi-ffi-gate.jl`** (new) — a 1:1 Julia port of the former Python gate (Julia PCRE maps directly onto Python `re`). Same three checks, same messages, same exit codes: 1. the Zig FFI carries no unrendered `{{...}}` template tokens; 2. every `%foreign "C:<name>"` symbol in the ABI `.idr` sources is `export fn`-ed by the Zig FFI; 3. the Idris `resultToInt` map and the Zig `Result = enum(c_int)` agree on **names and values** (`Error`/`err` unified). - **`.github/workflows/abi-ffi-gate.yml`** — the `ABI ↔ FFI structural conformance` job now installs the pinned **Julia 1.11.5** release tarball (mirroring the adjacent `zig-build` job's pinned-tarball pattern) and runs `julia scripts/abi-ffi-gate.jl`. - **`scripts/abi-ffi-gate.py`** (removed) — the last Python file in the repo. ## RSR Quality Checklist ### Required - [x] Tests pass — gate runs clean locally (julia 1.11.5); `cargo`/Zig/Idris surfaces untouched - [x] Code is formatted — idiomatic Julia - [x] Linter is clean - [x] **No banned language patterns — this PR *removes* the last Python file** (RSR-H4) - [x] No `unsafe` blocks without `// SAFETY:` — n/a - [x] No banned functions - [x] SPDX license header present on `abi-ffi-gate.jl` (MPL-2.0) - [x] No secrets, credentials, or `.env` files ### As Applicable - [x] ABI/FFI changes validated — the conformance gate's behaviour is preserved (verified below) - [ ] State files / CHANGELOG — no released-version change ## Testing Verified locally with **julia 1.11.5** against this tree: ``` # OK path is byte-identical to the Python it replaces: $ diff <(python3 abi-ffi-gate.py) <(julia abi-ffi-gate.jl) → identical ABI-FFI GATE: OK (verisimiser) — 24 ABI functions exported, 8 result codes match (exit 0) ``` Adversarial (the gate must **fail** on drift) — each returns exit 1 with the right diagnosis: | Injected drift | Result | |---|---| | `null_pointer = 4` → `9` in the Zig enum | ❌ "Result-code map differs (name or value)" | | remove an `export fn` | ❌ "1 ABI function(s) not exported by the Zig FFI" | | add a `{{PROJECT_NAME}}` token to the Zig | ❌ "Zig FFI has unrendered template tokens" | So the port is behaviour-equivalent **and** non-vacuous. ## Screenshots n/a (script + workflow) --- 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- _Generated by [Claude Code](https://claude.ai/code/session_01JdqVWGSSv36Ph8ZWvizGMp)_ Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to #167 (already merged). #167 flagged a license-classification drift "🚩 for owner (no action taken)": stray
PMPL-1.0-or-laterstrings survived in prose/metadata even though this repo's canonical license is MPL-2.0 (code/config) + CC-BY-SA-4.0 (docs). The estate already normalised to that pair in #138/#156/#161/#163; the #156 pass flipped SPDX header stamps only, leaving the bodies behind. This PR clears the residue.verisimiser is not a PMPL carve-out repo, and
LICENSE,LICENSES/,Cargo.tomland every SPDX header are MPL-2.0 — so the remaining PMPL prose was drift, not intent.Changes
Reconciled (the repo's own license declarations):
.machine_readable/compliance/reuse/dep5— REUSE/DEP5 default + config stanzasPMPL-1.0-or-later→MPL-2.0; theCC-BY-SA-4.0docs override (last-match-wins) is kept intact..well-known/ai.txt— code-license line → MPL-2.0; dropped theEmotional Lineage per PMPL Section 3clause (no such obligation exists in MPL-2.0)..well-known/humans.txt—License:→MPL-2.0 (code) + CC-BY-SA-4.0 (docs).docs/attribution/CITATION.cff—license:→MPL-2.0..machine_readable/ai/{.cursorrules,.clinerules,.windsurfrules}— license-policy block → MPL-2.0 canonical pair (kept theNever AGPL-3.0estate rule)..machine_readable/svc/k9/examples/{project-metadata,setup-repo}.k9.ncl— example license string/recipe → MPL-2.0 (the scaffolding recipe no longercurls a PMPLLICENSE).Deliberately left untouched (not the repo's own self-declarations — flagged for owner):
docs/legal/EXHIBIT-A-ETHICAL-USE.txt,docs/legal/EXHIBIT-B-QUANTUM-SAFE.txt— these are bodies of the Palimpsest-MPL license itself, not a verisimiser license claim. Whether an MPL-2.0 repo should ship them at all is a removal decision for the owner, not a find-replace.contractile.just— the'SPDX|License|MIT|Apache|PMPL|MPL'grep is a generic multi-license recognizer, not a declaration; PMPL is a valid alternative to keep matching.RSR Quality Checklist
Required
cargobuild/test surface unaffectedunsafeblocks without// SAFETY:comments — none addedbelieve_me,unsafeCoerce,Obj.magic,Admitted,sorry).envfilesAs Applicable
Testing
Verified by inspection +
git grep: after the change, the only remainingPMPL/Palimpsestreferences are the three deliberately-preserved cases above (the two license exhibits + the generic recognizer). Thedep5CC-BY-SA-4.0docs override is preserved. Canonical MPL-2.0 source URL used in the k9 example was confirmed reachable (HTTP 200).Screenshots
n/a (text-only diff)
🤖 Generated with Claude Code
Generated by Claude Code