diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 1f18a05..296e9fe 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -19,14 +19,14 @@ The following files in `.machine_readable/` contain structured project metadata: | Language/Tool | Use Case | Notes | |---------------|----------|-------| -| **ReScript** | Primary application code | Compiles to JS, type-safe | +| **AffineScript** | Primary application code | Compiles to JS/WASM, linear/affine type system | | **Deno** | Runtime & package management | Replaces Node/npm/bun | | **Rust** | Performance-critical, systems, WASM | Preferred for CLI tools | | **Tauri 2.0+** | Mobile apps (iOS/Android) | Rust backend + web UI | | **Dioxus** | Mobile apps (native UI) | Pure Rust, React-like | | **Gleam** | Backend services | Runs on BEAM or compiles to JS | | **Bash/POSIX Shell** | Scripts, automation | Keep minimal | -| **JavaScript** | Only where ReScript cannot | MCP protocol glue, Deno APIs | +| **JavaScript** | Only where AffineScript cannot, or as per-language reference (examples/) | Avoid for new code unless integrating an external JS API | | **Nickel** | Configuration language | For complex configs | | **Guile Scheme** | State/meta files | STATE.scm, META.scm, ECOSYSTEM.scm | | **Julia** | Batch scripts, data processing | Per RSR | @@ -37,35 +37,38 @@ The following files in `.machine_readable/` contain structured project metadata: | Banned | Replacement | |--------|-------------| -| TypeScript | ReScript | +| TypeScript | AffineScript | +| ReScript | AffineScript | | Node.js | Deno | | npm | Deno | | Bun | Deno | | pnpm/yarn | Deno | | Go | Rust | -| Python | Julia/Rust/ReScript | +| Python | Julia/Rust/AffineScript | | Java/Kotlin | Rust/Tauri/Dioxus | | Swift | Tauri/Dioxus | | React Native | Tauri/Dioxus | | Flutter/Dart | Tauri/Dioxus | +| PMPL-1.0 / PMPL-1.0-or-later | MPL-2.0 | ### Mobile Development **No exceptions for Kotlin/Swift** - use Rust-first approach: -1. **Tauri 2.0+** - Web UI (ReScript) + Rust backend, MIT/Apache-2.0 +1. **Tauri 2.0+** - Web UI (AffineScript) + Rust backend, MIT/Apache-2.0 2. **Dioxus** - Pure Rust native UI, MIT/Apache-2.0 Both are FOSS with independent governance (no Big Tech). ### Enforcement Rules -1. **No new TypeScript files** - Convert existing TS to ReScript +1. **No new TypeScript or ReScript files** - Use AffineScript; meaningfully migrate existing TS/JS to AffineScript when touched (per-language `examples/` references may stay) 2. **No package.json for runtime deps** - Use deno.json imports 3. **No node_modules in production** - Deno caches deps automatically 4. **No Go code** - Use Rust instead -5. **No Python anywhere** - Use Julia for data/batch, Rust for systems, ReScript for apps +5. **No Python anywhere** - Use Julia for data/batch, Rust for systems, AffineScript for apps 6. **No Kotlin/Swift for mobile** - Use Tauri 2.0+ or Dioxus +7. **License**: MPL-2.0 only — never PMPL-1.0 / PMPL-1.0-or-later / MPL-2.0-or-later ### Package Management diff --git a/.clusterfuzzlite/Dockerfile b/.clusterfuzzlite/Dockerfile index 5bff7f2..7ad3ffd 100644 --- a/.clusterfuzzlite/Dockerfile +++ b/.clusterfuzzlite/Dockerfile @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 FROM gcr.io/oss-fuzz-base/base-builder-rust@sha256:73c1d5648db54100639339d411a5d192cbc8bf413ee91e843a07cf6f0e319dc7 COPY . $SRC/absolute-zero diff --git a/.clusterfuzzlite/build.sh b/.clusterfuzzlite/build.sh index 1c6785c..5e91113 100755 --- a/.clusterfuzzlite/build.sh +++ b/.clusterfuzzlite/build.sh @@ -1,7 +1,11 @@ #!/bin/bash -eu -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 cd "$SRC"/absolute-zero cargo +nightly fuzz build +# cargo-fuzz writes binaries to `fuzz/target//release/` +# (the fuzz crate's own target dir), not to the workspace root. The +# previous `./target/...` path was a vestige of an earlier layout where +# fuzz/ depended on the parent crate's `[lib]` (since removed). for target in $(cargo +nightly fuzz list); do - cp ./target/x86_64-unknown-linux-gnu/release/$target $OUT/ + cp fuzz/target/x86_64-unknown-linux-gnu/release/$target $OUT/ done diff --git a/.clusterfuzzlite/project.yaml b/.clusterfuzzlite/project.yaml index 1107456..311ed3d 100644 --- a/.clusterfuzzlite/project.yaml +++ b/.clusterfuzzlite/project.yaml @@ -1,2 +1,2 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 language: rust diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index e2d2971..688a442 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Funding platforms for hyperpolymath projects # See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d86a5a8..4be2afa 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 version: 2 updates: - package-ecosystem: "cargo" diff --git a/.github/workflows/cflite_batch.yml b/.github/workflows/cflite_batch.yml index 173d740..733d394 100644 --- a/.github/workflows/cflite_batch.yml +++ b/.github/workflows/cflite_batch.yml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 name: ClusterFuzzLite batch fuzzing on: schedule: diff --git a/.github/workflows/cflite_pr.yml b/.github/workflows/cflite_pr.yml index 8c94984..92a9381 100644 --- a/.github/workflows/cflite_pr.yml +++ b/.github/workflows/cflite_pr.yml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 name: ClusterFuzzLite PR fuzzing on: pull_request: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 76de23e..e71132c 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 name: CodeQL Security Analysis on: diff --git a/.github/workflows/governance.yml b/.github/workflows/governance.yml index 4bb50e9..653ef98 100644 --- a/.github/workflows/governance.yml +++ b/.github/workflows/governance.yml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # governance.yml — single wrapper calling the shared estate governance bundle # in hyperpolymath/standards instead of carrying per-repo copies. # diff --git a/.github/workflows/jekyll-gh-pages.yml b/.github/workflows/jekyll-gh-pages.yml deleted file mode 100644 index 328854f..0000000 --- a/.github/workflows/jekyll-gh-pages.yml +++ /dev/null @@ -1,52 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0-or-later -# Sample workflow for building and deploying a Jekyll site to GitHub Pages -name: Deploy Jekyll with GitHub Pages dependencies preinstalled - -on: - # Runs on pushes targeting the default branch - push: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - # Build job - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v6.0.2 - - name: Setup Pages - uses: actions/configure-pages@v6 - - name: Build with Jekyll - uses: actions/jekyll-build-pages@v1 - with: - source: ./ - destination: ./_site - - name: Upload artifact - uses: actions/upload-pages-artifact@v5 - - # Deployment job - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v5 diff --git a/.github/workflows/language-policy.yml b/.github/workflows/language-policy.yml index ad21af9..7d80741 100644 --- a/.github/workflows/language-policy.yml +++ b/.github/workflows/language-policy.yml @@ -1,6 +1,10 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 name: Language Policy Enforcement on: [push, pull_request] + +permissions: + contents: read + jobs: check: runs-on: ubuntu-latest @@ -11,7 +15,7 @@ jobs: # Block new Python files (except SaltStack) NEW_PY=$(git diff --name-only --diff-filter=A HEAD~1 2>/dev/null | grep -E '\.py$' | grep -v 'salt' || true) if [ -n "$NEW_PY" ]; then - echo "❌ New Python files detected. Use Rust or ReScript instead." + echo "❌ New Python files detected. Use Rust or AffineScript instead." echo "$NEW_PY" exit 1 fi diff --git a/.github/workflows/publish-container.yml b/.github/workflows/publish-container.yml index 8065670..f55889c 100644 --- a/.github/workflows/publish-container.yml +++ b/.github/workflows/publish-container.yml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 name: Publish Container on: diff --git a/.github/workflows/rescript-deno-ci.yml b/.github/workflows/rescript-deno-ci.yml deleted file mode 100644 index 24b82d0..0000000 --- a/.github/workflows/rescript-deno-ci.yml +++ /dev/null @@ -1,41 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0-or-later -name: ReScript/Deno CI -on: [push, pull_request] - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6.0.2 - - uses: denoland/setup-deno@v2 - with: - deno-version: v1.x - - - name: Deno lint - run: deno lint --config deno.json - - - name: Deno fmt check - run: deno fmt --check - - - name: Deno test - run: deno test --allow-all --coverage=coverage - - - name: ReScript build - run: | - if [ -f "rescript.json" ] || [ -f "bsconfig.json" ]; then - npm install - npx rescript - fi - - - name: Type check - run: deno check **/*.ts || true - - security: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6.0.2 - - uses: denoland/setup-deno@v2 - - name: Check permissions - run: | - # Audit for dangerous permissions - grep -rE "allow-run|allow-write|allow-env" . || echo "No dangerous permissions" diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml index b0d4690..309b45f 100644 --- a/.github/workflows/rust-ci.yml +++ b/.github/workflows/rust-ci.yml @@ -1,6 +1,10 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 name: Rust CI on: [push, pull_request] + +permissions: + contents: read + env: CARGO_TERM_COLOR: always RUSTFLAGS: -Dwarnings diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index f81e594..0e8348e 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 name: OSSF Scorecard on: push: diff --git a/.gitignore b/.gitignore index 5952091..bab56b5 100644 --- a/.gitignore +++ b/.gitignore @@ -81,3 +81,6 @@ htmlcov/ # Crash recovery artifacts ai-cli-crash-capture/ proofs/lean4/.lake/ + +# Rust build outputs in subdirectories (e.g. fuzz/target/) +**/target/ diff --git a/.machine_readable/6a2/AGENTIC.a2ml b/.machine_readable/6a2/AGENTIC.a2ml index 0fe86e6..1e388ba 100644 --- a/.machine_readable/6a2/AGENTIC.a2ml +++ b/.machine_readable/6a2/AGENTIC.a2ml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # # AGENTIC.a2ml — AI agent constraints and capabilities for absolute-zero @@ -22,7 +22,7 @@ can-create-files = true # - Never commit secrets or credentials # - Never use banned languages: TypeScript, Python (except SaltStack), Go, Node.js, Bun, npm # - Never place checkpoint files outside .machine_readable/ -# - Never use AGPL-3.0 license (use PMPL-1.0-or-later) +# - Never use AGPL-3.0 license (use MPL-2.0) # - Never run the full test suite without user approval (mathlib build is expensive) [proof-safety] diff --git a/.machine_readable/6a2/ECOSYSTEM.a2ml b/.machine_readable/6a2/ECOSYSTEM.a2ml index 65567f1..bbc4fc2 100644 --- a/.machine_readable/6a2/ECOSYSTEM.a2ml +++ b/.machine_readable/6a2/ECOSYSTEM.a2ml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # # ECOSYSTEM.a2ml — Absolute Zero ecosystem position diff --git a/.machine_readable/6a2/META.a2ml b/.machine_readable/6a2/META.a2ml index 442677b..4a80713 100644 --- a/.machine_readable/6a2/META.a2ml +++ b/.machine_readable/6a2/META.a2ml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # # META.a2ml — Absolute Zero meta-level information @@ -9,7 +9,7 @@ version = "1.0.0" last-updated = "2026-05-20" [project-info] -license = "PMPL-1.0-or-later" +license = "MPL-2.0" author = "Jonathan D.A. Jewell (hyperpolymath)" [architecture-decisions] diff --git a/.machine_readable/6a2/NEUROSYM.a2ml b/.machine_readable/6a2/NEUROSYM.a2ml index c062204..1af3239 100644 --- a/.machine_readable/6a2/NEUROSYM.a2ml +++ b/.machine_readable/6a2/NEUROSYM.a2ml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # # NEUROSYM.a2ml — Neurosymbolic integration metadata for absolute-zero diff --git a/.machine_readable/6a2/PLAYBOOK.a2ml b/.machine_readable/6a2/PLAYBOOK.a2ml index b31ecf9..a2f04d9 100644 --- a/.machine_readable/6a2/PLAYBOOK.a2ml +++ b/.machine_readable/6a2/PLAYBOOK.a2ml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # # PLAYBOOK.a2ml — Operational playbook for absolute-zero diff --git a/.machine_readable/6a2/STATE.a2ml b/.machine_readable/6a2/STATE.a2ml index a8af850..7a81062 100644 --- a/.machine_readable/6a2/STATE.a2ml +++ b/.machine_readable/6a2/STATE.a2ml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # # STATE.a2ml — Absolute Zero project state diff --git a/.machine_readable/AGENTIC.scm b/.machine_readable/AGENTIC.scm index f5f08ed..3131977 100644 --- a/.machine_readable/AGENTIC.scm +++ b/.machine_readable/AGENTIC.scm @@ -1,4 +1,4 @@ -;; SPDX-License-Identifier: PMPL-1.0-or-later +;; SPDX-License-Identifier: MPL-2.0 ;; AGENTIC.scm - AI agent interaction patterns for absolute-zero (define agentic-config diff --git a/.machine_readable/ECOSYSTEM.scm b/.machine_readable/ECOSYSTEM.scm index 0efa24b..8458f0c 100644 --- a/.machine_readable/ECOSYSTEM.scm +++ b/.machine_readable/ECOSYSTEM.scm @@ -1,4 +1,4 @@ -;; SPDX-License-Identifier: PMPL-1.0-or-later +;; SPDX-License-Identifier: MPL-2.0 ;; ECOSYSTEM.scm - Ecosystem position for absolute-zero ;; Media-Type: application/vnd.ecosystem+scm diff --git a/.machine_readable/META.scm b/.machine_readable/META.scm index 5a1b1a6..76f3a76 100644 --- a/.machine_readable/META.scm +++ b/.machine_readable/META.scm @@ -1,4 +1,4 @@ -;; SPDX-License-Identifier: PMPL-1.0-or-later +;; SPDX-License-Identifier: MPL-2.0 ;; META.scm - Meta-level information for absolute-zero ;; Media-Type: application/meta+scheme diff --git a/.machine_readable/NEUROSYM.scm b/.machine_readable/NEUROSYM.scm index 4cf8769..7d505de 100644 --- a/.machine_readable/NEUROSYM.scm +++ b/.machine_readable/NEUROSYM.scm @@ -1,4 +1,4 @@ -;; SPDX-License-Identifier: PMPL-1.0-or-later +;; SPDX-License-Identifier: MPL-2.0 ;; NEUROSYM.scm - Neurosymbolic integration config for absolute-zero (define neurosym-config diff --git a/.machine_readable/PLAYBOOK.scm b/.machine_readable/PLAYBOOK.scm index e2b96fc..6db4d05 100644 --- a/.machine_readable/PLAYBOOK.scm +++ b/.machine_readable/PLAYBOOK.scm @@ -1,4 +1,4 @@ -;; SPDX-License-Identifier: PMPL-1.0-or-later +;; SPDX-License-Identifier: MPL-2.0 ;; PLAYBOOK.scm - Operational runbook for absolute-zero (define playbook diff --git a/.machine_readable/contractiles/bust/Bustfile.a2ml b/.machine_readable/contractiles/bust/Bustfile.a2ml index a116959..fcda3df 100644 --- a/.machine_readable/contractiles/bust/Bustfile.a2ml +++ b/.machine_readable/contractiles/bust/Bustfile.a2ml @@ -1,5 +1,5 @@ // Bustfile.a2ml — meta-repo bust contractile (breakage / rollback) -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 Bust { name: "absolute-zero" diff --git a/.machine_readable/contractiles/bust/bust.ncl b/.machine_readable/contractiles/bust/bust.ncl index 3d9ab8b..fc8cb8c 100644 --- a/.machine_readable/contractiles/bust/bust.ncl +++ b/.machine_readable/contractiles/bust/bust.ncl @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Bust — error-handling / failure-recovery runner # # Pairs with: Bustfile.a2ml (same directory) diff --git a/.machine_readable/contractiles/trust/Trustfile.a2ml b/.machine_readable/contractiles/trust/Trustfile.a2ml index 9728933..bfb1b5b 100644 --- a/.machine_readable/contractiles/trust/Trustfile.a2ml +++ b/.machine_readable/contractiles/trust/Trustfile.a2ml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Trustfile — Integrity and provenance verification for absolute-zero # Author: Jonathan D.A. Jewell # diff --git a/.machine_readable/svc/k9/README.adoc b/.machine_readable/svc/k9/README.adoc index 1992752..657168a 100644 --- a/.machine_readable/svc/k9/README.adoc +++ b/.machine_readable/svc/k9/README.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = K9 Contractiles :toc: left :icons: font diff --git a/.machine_readable/svc/k9/examples/ci-config.k9.ncl b/.machine_readable/svc/k9/examples/ci-config.k9.ncl index c140589..4889743 100644 --- a/.machine_readable/svc/k9/examples/ci-config.k9.ncl +++ b/.machine_readable/svc/k9/examples/ci-config.k9.ncl @@ -1,5 +1,5 @@ K9! -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Example Yard-level K9 component: CI/CD configuration with validation # Security Level: Yard (Nickel evaluation, contract validation) # Signature recommended but not required diff --git a/.machine_readable/svc/k9/examples/project-metadata.k9.ncl b/.machine_readable/svc/k9/examples/project-metadata.k9.ncl index 859870c..5227fb5 100644 --- a/.machine_readable/svc/k9/examples/project-metadata.k9.ncl +++ b/.machine_readable/svc/k9/examples/project-metadata.k9.ncl @@ -1,5 +1,5 @@ K9! -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Example Kennel-level K9 component: Project metadata # Security Level: Kennel (pure data, no execution) # No signature required @@ -40,7 +40,7 @@ K9! organization = "The Open University", }, - license = "PMPL-1.0-or-later", + license = "MPL-2.0", keywords = [ "rhodium-standard", diff --git a/.machine_readable/svc/k9/examples/setup-repo.k9.ncl b/.machine_readable/svc/k9/examples/setup-repo.k9.ncl index c182db9..bcc51ce 100644 --- a/.machine_readable/svc/k9/examples/setup-repo.k9.ncl +++ b/.machine_readable/svc/k9/examples/setup-repo.k9.ncl @@ -1,5 +1,5 @@ K9! -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Example Hunt-level K9 component: Repository setup automation # Security Level: Hunt (full execution with Just recipes) # ⚠️ SIGNATURE REQUIRED - DO NOT RUN WITHOUT VERIFICATION @@ -130,7 +130,7 @@ K9! }, "add-license" = { - description = "Add PMPL-1.0 license", + description = "Add MPL-2.0 license", commands = [ "curl -sL https://raw.githubusercontent.com/hyperpolymath/pmpl/main/LICENSE -o LICENSE", "echo '✓ License added'", diff --git a/.machine_readable/svc/k9/template-hunt.k9.ncl b/.machine_readable/svc/k9/template-hunt.k9.ncl index db25742..39b4efb 100644 --- a/.machine_readable/svc/k9/template-hunt.k9.ncl +++ b/.machine_readable/svc/k9/template-hunt.k9.ncl @@ -1,5 +1,5 @@ K9! -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # K9 Hunt-level template: Full execution with Just recipes # Security Level: Hunt (full system access) # ⚠️ SIGNATURE REQUIRED - Review carefully before use diff --git a/.machine_readable/svc/k9/template-kennel.k9.ncl b/.machine_readable/svc/k9/template-kennel.k9.ncl index 4303558..eff35e1 100644 --- a/.machine_readable/svc/k9/template-kennel.k9.ncl +++ b/.machine_readable/svc/k9/template-kennel.k9.ncl @@ -1,5 +1,5 @@ K9! -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # K9 Kennel-level template: Pure data configuration # Security Level: Kennel (data-only, no execution) # No signature required - safe for any use diff --git a/.machine_readable/svc/k9/template-yard.k9.ncl b/.machine_readable/svc/k9/template-yard.k9.ncl index 4b49947..7115522 100644 --- a/.machine_readable/svc/k9/template-yard.k9.ncl +++ b/.machine_readable/svc/k9/template-yard.k9.ncl @@ -1,5 +1,5 @@ K9! -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # K9 Yard-level template: Configuration with validation # Security Level: Yard (Nickel evaluation with contracts) # Signature recommended but not required diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index a0f2f54..1f34e60 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: MPL-2.0-or-later +// SPDX-License-Identifier: MPL-2.0 = Contributing Guide == Getting Started diff --git a/CURRENT-STATUS.md b/CURRENT-STATUS.md index 5f9993f..96b9285 100644 --- a/CURRENT-STATUS.md +++ b/CURRENT-STATUS.md @@ -4,7 +4,7 @@ ### 1. License Standardization ✅ DONE - **Time**: ~30 minutes -- **Result**: Both repos (absolute-zero + echidna) use PMPL-1.0-or-later +- **Result**: Both repos (absolute-zero + echidna) use MPL-2.0 - **Commits**: 2 (absolute-zero: cbeb34a, echidna: 482892e) - **Files**: 79 files updated diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..8466f1e --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "absolute-zero" +version = "1.0.0" diff --git a/ECHIDNA-NEUROSYM-INTEGRATION.adoc b/ECHIDNA-NEUROSYM-INTEGRATION.adoc index 6f78c56..2642506 100644 --- a/ECHIDNA-NEUROSYM-INTEGRATION.adoc +++ b/ECHIDNA-NEUROSYM-INTEGRATION.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = ECHIDNA Neurosymbolic Integration for Absolute Zero Jonathan D. A. Jewell :toc: left diff --git a/INTEGRATION-STATUS-2026-02-05.adoc b/INTEGRATION-STATUS-2026-02-05.adoc index bcca656..f73257c 100644 --- a/INTEGRATION-STATUS-2026-02-05.adoc +++ b/INTEGRATION-STATUS-2026-02-05.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = Integration Status Report :toc: :sectnums: @@ -10,7 +10,7 @@ === ✅ 1. License Standardization **absolute-zero**: -* Added LICENSE file (PMPL-1.0-or-later) +* Added LICENSE file (MPL-2.0) * Updated README.adoc (removed AGPL references) * Fixed SPDX headers in all checkpoint files * Removed LICENSE-PALIMPS.md stub @@ -22,7 +22,7 @@ * Verified consistency across all files * Committed: 482892e -**Status**: Both repos now consistently use PMPL-1.0-or-later ✅ +**Status**: Both repos now consistently use MPL-2.0 ✅ --- @@ -77,14 +77,14 @@ ### Repository Health **absolute-zero**: -* License: ✅ PMPL-1.0-or-later +* License: ✅ MPL-2.0 * Checkpoint files: ✅ Up to date * Documentation: ✅ Comprehensive (5 new docs) * ECHIDNA integration: ✅ Working * Proofs: ⏳ 27 Admitted remaining **echidna**: -* License: ✅ PMPL-1.0-or-later +* License: ✅ MPL-2.0 * Build: ✅ Success (release mode) * Binary: ✅ ~/Documents/hyperpolymath-repos/echidna/target/release/echidna * Integration: ✅ Scripts created @@ -179,7 +179,7 @@ just echidna-verify # Run consensus check ## Success Criteria (v1.0) -* [x] ✅ License: PMPL-1.0-or-later +* [x] ✅ License: MPL-2.0 * [x] ✅ Documentation: Comprehensive * [x] ✅ ECHIDNA: Integrated * [ ] 🎯 Proofs: 27 → 0 Admitted diff --git a/LICENSE-AUDIT-2026-02-05.adoc b/LICENSE-AUDIT-2026-02-05.adoc index c64ae3b..a628444 100644 --- a/LICENSE-AUDIT-2026-02-05.adoc +++ b/LICENSE-AUDIT-2026-02-05.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = License Audit: Absolute Zero & ECHIDNA :toc: :sectnums: @@ -19,10 +19,10 @@ **Checkpoint files** (STATE.scm, ECOSYSTEM.scm, META.scm): ```scheme -;; SPDX-License-Identifier: MPL-2.0-or-later ⚠️ Should be PMPL-1.0-or-later +;; SPDX-License-Identifier: MPL-2.0 ⚠️ Should be MPL-2.0 ``` -**Expected**: PMPL-1.0-or-later (primary), MPL-2.0 (fallback) +**Expected**: MPL-2.0 (primary), MPL-2.0 (fallback) === Required Actions @@ -35,11 +35,11 @@ cp ~/Documents/hyperpolymath-repos/echidna/LICENSE . 2. **Update SPDX headers**: ```bash # Fix checkpoint files -sed -i 's/MPL-2.0-or-later/PMPL-1.0-or-later/' STATE.scm ECOSYSTEM.scm META.scm +sed -i 's/MPL-2.0/MPL-2.0/' STATE.scm ECOSYSTEM.scm META.scm # Add to all source files find proofs -name "*.v" -o -name "*.lean" | while read f; do - echo "// SPDX-License-Identifier: PMPL-1.0-or-later" | cat - "$f" > temp && mv temp "$f" + echo "// SPDX-License-Identifier: MPL-2.0" | cat - "$f" > temp && mv temp "$f" done ``` @@ -47,9 +47,9 @@ done ```adoc == License -SPDX-License-Identifier: PMPL-1.0-or-later +SPDX-License-Identifier: MPL-2.0 -Primary License: Palimpsest-MPL License 1.0 or later (PMPL-1.0-or-later) +Primary License: Palimpsest-MPL License 1.0 or later (MPL-2.0) Fallback (where required): Mozilla Public License 2.0 (MPL-2.0) @@ -69,7 +69,7 @@ rm LICENSE-PALIMPS.md # 0 bytes, not useful **LICENSE file** (line 1): ``` -SPDX-License-Identifier: PMPL-1.0-or-later ✅ CORRECT +SPDX-License-Identifier: MPL-2.0 ✅ CORRECT ``` **Cargo.toml** (line 4): @@ -80,8 +80,8 @@ license = "MIT OR Palimpsest-0.6" ❌ OUTDATED **Source files** (mixed): ```rust // SPDX-License-Identifier: MIT OR Palimpsest-0.6 ❌ OUTDATED (some files) -// SPDX-License-Identifier: PMPL-1.0-or-later ✅ CORRECT (other files) -// SPDX-License-Identifier: PMPL-1.0-or-later ✅ CORRECT (LICENSE) +// SPDX-License-Identifier: MPL-2.0 ✅ CORRECT (other files) +// SPDX-License-Identifier: MPL-2.0 ✅ CORRECT (LICENSE) ``` === Required Actions @@ -92,7 +92,7 @@ license = "MIT OR Palimpsest-0.6" ❌ OUTDATED license = "MIT OR Palimpsest-0.6" # After: -license = "PMPL-1.0-or-later" +license = "MPL-2.0" ``` 2. **Fix source file headers**: @@ -101,14 +101,14 @@ cd ~/Documents/hyperpolymath-repos/echidna # Replace old SPDX find . -name "*.rs" -o -name "*.jl" -o -name "*.res" | while read f; do - sed -i 's#MIT OR Palimpsest-0.6#PMPL-1.0-or-later#g' "$f" - sed -i 's#PMPL-1.0$#PMPL-1.0-or-later#g' "$f" + sed -i 's#MIT OR Palimpsest-0.6#MPL-2.0#g' "$f" + sed -i 's#MPL-2.0$#MPL-2.0#g' "$f" done ``` 3. **Verify consistency**: ```bash -# Should all return PMPL-1.0-or-later +# Should all return MPL-2.0 grep "SPDX-License-Identifier" LICENSE grep "license =" Cargo.toml grep -r "SPDX-License-Identifier" --include="*.rs" | head -5 @@ -118,14 +118,14 @@ grep -r "SPDX-License-Identifier" --include="*.rs" | head -5 == Hyperpolymath License Standard (Reminder) -### Primary: PMPL-1.0-or-later +### Primary: MPL-2.0 **Use for**: * All original hyperpolymath code * Research projects (absolute-zero, echidna) * Libraries and tools -**SPDX**: `PMPL-1.0-or-later` +**SPDX**: `MPL-2.0` ### Fallback: MPL-2.0 @@ -139,8 +139,8 @@ grep -r "SPDX-License-Identifier" --include="*.rs" | head -5 ### NEVER Use * ❌ AGPL-3.0 (old license, replaced) -* ❌ Palimpsest-0.5 (superseded by PMPL-1.0) -* ❌ Palimpsest-0.6 (superseded by PMPL-1.0) +* ❌ Palimpsest-0.5 (superseded by MPL-2.0) +* ❌ Palimpsest-0.6 (superseded by MPL-2.0) * ❌ MIT (unless third-party) --- @@ -149,22 +149,22 @@ grep -r "SPDX-License-Identifier" --include="*.rs" | head -5 ### absolute-zero -- [ ] LICENSE file created (PMPL-1.0-or-later full text) +- [ ] LICENSE file created (MPL-2.0 full text) - [ ] LICENSE-MPL-2.0 file created (fallback) - [ ] Remove LICENSE-PALIMPS.md (0 bytes) - [ ] Update README.adoc license section - [ ] Fix SPDX in STATE.scm, ECOSYSTEM.scm, META.scm - [ ] Add SPDX headers to all proof files - [ ] Update .machine_readable/META.scm with license info -- [ ] Commit with message: "fix: migrate to PMPL-1.0-or-later license" +- [ ] Commit with message: "fix: migrate to MPL-2.0 license" ### echidna - [ ] Fix Cargo.toml license field - [ ] Update all source file SPDX headers -- [ ] Verify LICENSE file is PMPL-1.0-or-later +- [ ] Verify LICENSE file is MPL-2.0 - [ ] Update README badges if any -- [ ] Commit with message: "fix: standardize to PMPL-1.0-or-later" +- [ ] Commit with message: "fix: standardize to MPL-2.0" ### echidnabot @@ -173,7 +173,7 @@ grep -r "SPDX-License-Identifier" --include="*.rs" | head -5 ### idris2-echidna -- [ ] Verify license consistency (checked: ✅ PMPL-1.0-or-later in README) +- [ ] Verify license consistency (checked: ✅ MPL-2.0 in README) - [ ] Update if needed --- diff --git a/MAINTAINERS.adoc b/MAINTAINERS.adoc index b5154a0..a1c6544 100644 --- a/MAINTAINERS.adoc +++ b/MAINTAINERS.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: MPL-2.0-or-later +// SPDX-License-Identifier: MPL-2.0 = Maintainers :toc: preamble diff --git a/PROOF-CLASSIFICATION-CNO-FOCUSED.adoc b/PROOF-CLASSIFICATION-CNO-FOCUSED.adoc index 810a77b..c9a2e30 100644 --- a/PROOF-CLASSIFICATION-CNO-FOCUSED.adoc +++ b/PROOF-CLASSIFICATION-CNO-FOCUSED.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = Proof Classification: CNO Core Theory Focus :toc: :sectnums: diff --git a/PROOF-COMPLETION-PLAN.adoc b/PROOF-COMPLETION-PLAN.adoc index 50db949..9e6f973 100644 --- a/PROOF-COMPLETION-PLAN.adoc +++ b/PROOF-COMPLETION-PLAN.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = Proof Completion Strategy :toc: :sectnums: diff --git a/PROOF-INSIGHTS.md b/PROOF-INSIGHTS.md index d8bb712..aa86f74 100644 --- a/PROOF-INSIGHTS.md +++ b/PROOF-INSIGHTS.md @@ -308,9 +308,9 @@ So the axiom is harmless — it exists only for conceptual completeness. ## License Status -All proof files now use PMPL-1.0-or-later headers. The old AGPL references +All proof files now use MPL-2.0 headers. The old AGPL references in StatMech.v were fixed in a previous session. LambdaCNO.v and -CNOCategory.v headers were updated to PMPL-1.0-or-later. +CNOCategory.v headers were updated to MPL-2.0. --- diff --git a/PROOF-VS-TEST-SUBJECTS.adoc b/PROOF-VS-TEST-SUBJECTS.adoc index 2011eeb..1923a97 100644 --- a/PROOF-VS-TEST-SUBJECTS.adoc +++ b/PROOF-VS-TEST-SUBJECTS.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = Proof Systems vs. Test Subject Languages Jonathan D. A. Jewell :toc: diff --git a/README.adoc b/README.adoc index 1327240..8b71f36 100644 --- a/README.adoc +++ b/README.adoc @@ -2,13 +2,13 @@ **Formal Verification of Certified Null Operations: When Doing Nothing Is Everything** -image:https://img.shields.io/badge/License-PMPL_1.0-blue.svg[PMPL-1.0-or-later] +image:https://img.shields.io/badge/License-MPL_2.0-blue.svg[MPL-2.0] == License -**SPDX-License-Identifier: PMPL-1.0-or-later** +**SPDX-License-Identifier: MPL-2.0** -Licensed under the Palimpsest-MPL License 1.0 or later. See `LICENSE` for full text. MPL-2.0 fallback where platform requires OSI-approved license. +Licensed under the Mozilla Public License 2.0. See `LICENSE` for full text. > *"The universe tends toward maximum entropy. A Certified Null Operation is a pocket of perfect computational order—a program that resists the Second Law. It does nothing, but in doing nothing, it says everything about the structure of computation itself."* @@ -322,9 +322,9 @@ GitLab CI automatically: ## License -**SPDX-License-Identifier: PMPL-1.0-or-later** +**SPDX-License-Identifier: MPL-2.0** -This project is licensed under the **Palimpsest-MPL License 1.0 or later** (PMPL-1.0-or-later). +This project is licensed under the **Palimpsest-MPL License 1.0 or later** (MPL-2.0). The Palimpsest-MPL extends Mozilla Public License 2.0 with provisions for ethical use, post-quantum cryptographic provenance, and emotional lineage protection. diff --git a/ROADMAP-UPDATED.adoc b/ROADMAP-UPDATED.adoc index 07ad949..af55322 100644 --- a/ROADMAP-UPDATED.adoc +++ b/ROADMAP-UPDATED.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = Absolute Zero: Updated Roadmap (v1.0 → v12.0) Jonathan D. A. Jewell :toc: left @@ -73,7 +73,7 @@ absolute-zero/ ==== Tasks * [x] ✅ **License Migration** (COMPLETED 2026-02-05) - - PMPL-1.0-or-later implemented + - MPL-2.0 implemented - SPDX headers updated - README corrected diff --git a/ROADMAP-V1-TO-V12.adoc b/ROADMAP-V1-TO-V12.adoc index 7c77273..9f352d7 100644 --- a/ROADMAP-V1-TO-V12.adoc +++ b/ROADMAP-V1-TO-V12.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = Absolute Zero: Roadmap to v12.0 Jonathan D. A. Jewell :toc: left @@ -27,7 +27,7 @@ This roadmap charts Absolute Zero's evolution from a research prototype (current === Technical Debt ⚠️ * Python interpreters (violates RSR language policy → migrate to Julia/Rust) * npm/package.json (violates Deno-only policy) -* License inconsistencies (AGPL references → PMPL-1.0-or-later) +* License inconsistencies (AGPL references → MPL-2.0) * Incomplete checkpoint files (ECOSYSTEM.scm needs detail) * Container verification not validated @@ -82,7 +82,7 @@ This roadmap charts Absolute Zero's evolution from a research prototype (current ==== Critical Tasks * [ ] **License Migration** - - Replace all AGPL-3.0 references with PMPL-1.0-or-later + - Replace all AGPL-3.0 references with MPL-2.0 - Update SPDX headers in all 500+ files - Create LICENSE and LICENSE-MPL-2.0 files - Remove LICENSE-PALIMPS.md stub diff --git a/ROADMAP.adoc b/ROADMAP.adoc index 7f8fb45..2d3c38d 100644 --- a/ROADMAP.adoc +++ b/ROADMAP.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = Absolute Zero Roadmap Jonathan D. A. Jewell :toc: @@ -9,7 +9,7 @@ Jonathan D. A. Jewell * **19 proofs remaining** (Admitted) across 6 modules * **4 modules fully complete**: CNO.v, CNOCategory.v, StatMech.v, StatMech_helpers.v * **6 proof systems**: Coq, Lean 4, Z3, Agda, Isabelle, Mizar (stub) -* **License**: PMPL-1.0-or-later (migration from AGPL complete) +* **License**: MPL-2.0 (migration from AGPL complete) == Immediate Priority: Proof Completion @@ -32,7 +32,7 @@ See link:PROOF-INSIGHTS.md[PROOF-INSIGHTS.md] for detailed proof strategies. === v0.8.0 - Compliance Sprint * [ ] Complete 12-15 of 19 remaining proofs -* [x] License migration to PMPL-1.0-or-later +* [x] License migration to MPL-2.0 * [ ] Migrate Python interpreters to Rust * [ ] Remove npm/package.json dependencies * [ ] Complete checkpoint files diff --git a/RSR_OUTLINE.adoc b/RSR_OUTLINE.adoc index 75296fd..94a49d8 100644 --- a/RSR_OUTLINE.adoc +++ b/RSR_OUTLINE.adoc @@ -209,7 +209,7 @@ This template is part of: == License -SPDX-License-Identifier: PMPL-1.0-or-later +SPDX-License-Identifier: MPL-2.0 == Links diff --git a/SESSION-COMPLETE-2026-02-05.adoc b/SESSION-COMPLETE-2026-02-05.adoc index d35c0b4..4dc9e70 100644 --- a/SESSION-COMPLETE-2026-02-05.adoc +++ b/SESSION-COMPLETE-2026-02-05.adoc @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 = Session Complete: All Three Tasks :toc: :sectnums: @@ -24,10 +24,10 @@ Successfully completed all three requested tasks: === absolute-zero Repository -**Commit**: `cbeb34a` - fix: migrate to PMPL-1.0-or-later license +**Commit**: `cbeb34a` - fix: migrate to MPL-2.0 license **Changes**: -* Added LICENSE file (PMPL-1.0-or-later full text) +* Added LICENSE file (MPL-2.0 full text) * Updated README.adoc license section * Fixed SPDX headers in 6 checkpoint files * Removed LICENSE-PALIMPS.md stub (0 bytes) @@ -39,7 +39,7 @@ Successfully completed all three requested tasks: === echidna Repository -**Commit**: `482892e` - fix: standardize to PMPL-1.0-or-later license +**Commit**: `482892e` - fix: standardize to MPL-2.0 license **Changes**: * Updated Cargo.toml license field @@ -55,20 +55,20 @@ Successfully completed all three requested tasks: ```bash # absolute-zero $ grep "SPDX-License-Identifier" LICENSE -SPDX-License-Identifier: PMPL-1.0-or-later +SPDX-License-Identifier: MPL-2.0 $ head -1 STATE.scm -;; SPDX-License-Identifier: PMPL-1.0-or-later +;; SPDX-License-Identifier: MPL-2.0 # echidna $ grep "license =" Cargo.toml -license = "PMPL-1.0-or-later" +license = "MPL-2.0" $ head -1 src/rust/main.rs -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 ``` -**Result**: Both repos consistently use PMPL-1.0-or-later ✅ +**Result**: Both repos consistently use MPL-2.0 ✅ --- @@ -114,7 +114,7 @@ $ head -1 src/rust/main.rs - Assists with proof completion * License CONSISTENT ✅ - - PMPL-1.0-or-later everywhere + - MPL-2.0 everywhere - No AGPL references - No version mismatches @@ -332,7 +332,7 @@ $ just echidna-suggest proofs/coq/physics/StatMech.v **Achieved**: 3/3 (100%) 🎉 **v1.0 Goals** (6 months): -* [x] ✅ License: PMPL-1.0-or-later +* [x] ✅ License: MPL-2.0 * [x] ✅ Documentation: Comprehensive * [x] ✅ ECHIDNA: Integrated * [ ] 🎯 Proofs: 27 → 0 Admitted diff --git a/contractiles/dust/Dustfile b/contractiles/dust/Dustfile index df42b13..314903c 100644 --- a/contractiles/dust/Dustfile +++ b/contractiles/dust/Dustfile @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Dustfile template - recovery and rollback semantics version: 1 diff --git a/contractiles/must/Mustfile b/contractiles/must/Mustfile index 5a97a60..dc7b3be 100644 --- a/contractiles/must/Mustfile +++ b/contractiles/must/Mustfile @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Mustfile - declarative state contract (template) # See: https://github.com/hyperpolymath/mustfile diff --git a/contractiles/trust/Trustfile.hs b/contractiles/trust/Trustfile.hs index 03c6d0d..00b313f 100644 --- a/contractiles/trust/Trustfile.hs +++ b/contractiles/trust/Trustfile.hs @@ -1,4 +1,4 @@ --- SPDX-License-Identifier: PMPL-1.0-or-later +-- SPDX-License-Identifier: MPL-2.0 -- Trustfile template - cryptographic and provenance verification module Trustfile where diff --git a/examples/SafeDOMExample.res b/examples/SafeDOMExample.res deleted file mode 100644 index 407d5bf..0000000 --- a/examples/SafeDOMExample.res +++ /dev/null @@ -1,109 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later -// Example: Using SafeDOM for formally verified DOM mounting - -open SafeDOM - -// Example 1: Basic mounting with error handling -let mountApp = () => { - mountSafe( - "#app", - "

Hello, World!

Mounted safely with proofs.

", - ~onSuccess=el => { - Console.log("✓ App mounted successfully!") - Console.log("Element:", el) - }, - ~onError=err => { - Console.error("✗ Mount failed:", err) - } - ) -} - -// Example 2: Wait for DOM ready before mounting -let mountWhenDOMReady = () => { - mountWhenReady( - "#app", - "

App Title

", - ~onSuccess=_ => Console.log("✓ Mounted after DOM ready"), - ~onError=err => Console.error("✗ Failed:", err) - ) -} - -// Example 3: Batch mounting (atomic - all or nothing) -let mountMultiple = () => { - let specs = [ - {selector: "#header", html: "

Site Title

"}, - {selector: "#nav", html: ""}, - {selector: "#main", html: "

Content here

"}, - {selector: "#footer", html: "
© 2026
"} - ] - - switch mountBatch(specs) { - | Ok(elements) => { - Console.log(`✓ Successfully mounted ${Array.length(elements)} elements`) - elements->Array.forEach(el => Console.log(" -", el)) - } - | Error(err) => { - Console.error("✗ Batch mount failed:", err) - Console.error(" (None were mounted - atomic operation)") - } - } -} - -// Example 4: Explicit validation before mounting -let mountWithValidation = () => { - // Validate selector first - switch ProvenSelector.validate("#my-app") { - | Error(e) => Console.error(`Invalid selector: ${e}`) - | Ok(validSelector) => { - // Validate HTML - switch ProvenHTML.validate("
Content
") { - | Error(e) => Console.error(`Invalid HTML: ${e}`) - | Ok(validHtml) => { - // Now mount with proven safety - switch mount(validSelector, validHtml) { - | Mounted(el) => Console.log("✓ Mounted with validated inputs:", el) - | MountPointNotFound(s) => Console.error(`✗ Element not found: ${s}`) - | InvalidSelector(_) => Console.error("Impossible - already validated") - | InvalidHTML(_) => Console.error("Impossible - already validated") - } - } - } - } -} - -// Example 5: Integration with TEA -module MyApp = { - type model = {message: string} - type msg = NoOp - - let init = () => {message: "Hello from TEA"} - let update = (model, _msg) => model - let view = model => `

${model.message}

` -} - -let mountTEAApp = () => { - let model = MyApp.init() - let html = MyApp.view(model) - - mountWhenReady( - "#tea-app", - html, - ~onSuccess=el => { - Console.log("✓ TEA app mounted") - // Set up event handlers, subscriptions here - }, - ~onError=err => Console.error(`✗ TEA mount failed: ${err}`) - ) -} - -// Entry point -let main = () => { - Console.log("SafeDOM Examples") - Console.log("================\n") - - // Choose which example to run - mountWhenDOMReady() // Run on DOM ready -} - -// Auto-execute when module loads -main() diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock new file mode 100644 index 0000000..432f2fe --- /dev/null +++ b/fuzz/Cargo.lock @@ -0,0 +1,155 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "absolute_zero-fuzz" +version = "0.0.0" +dependencies = [ + "arbitrary", + "libfuzzer-sys", +] + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "cc" +version = "1.2.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "derive_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom", + "libc", +] + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libfuzzer-sys" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" +dependencies = [ + "arbitrary", + "cc", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "wasip2" +version = "1.0.3+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 4327f83..6486cc5 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: MPL-2.0-or-later +# SPDX-License-Identifier: MPL-2.0 [package] name = "absolute_zero-fuzz" version = "0.0.0" @@ -13,9 +13,6 @@ cargo-fuzz = true libfuzzer-sys = "0.4" arbitrary = { version = "1", features = ["derive"] } -[dependencies.absolute_zero] -path = ".." - [[bin]] name = "fuzz_input" path = "fuzz_targets/fuzz_input.rs" diff --git a/fuzz/fuzz_targets/fuzz_input.rs b/fuzz/fuzz_targets/fuzz_input.rs index 847ecbf..aefae70 100644 --- a/fuzz/fuzz_targets/fuzz_input.rs +++ b/fuzz/fuzz_targets/fuzz_input.rs @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 //! Generic fuzz target for arbitrary input processing #![no_main] diff --git a/interpreters/rescript/malbolgeInterpreter.res b/interpreters/rescript/malbolgeInterpreter.res deleted file mode 100644 index c5a9f54..0000000 --- a/interpreters/rescript/malbolgeInterpreter.res +++ /dev/null @@ -1,256 +0,0 @@ -// Malbolge Interpreter in ReScript -// -// Malbolge is one of the hardest programming languages to use. -// This interpreter implements the Malbolge specification for CNO verification. -// -// Author: Jonathan D. A. Jewell -// Project: Absolute Zero -// License: AGPL-3.0 / Palimpsest 0.5 - -type ternary = int // Base-3 numbers - -// Malbolge constants -let memorySize = 59049 // 3^10 -let maxCycles = 1000000 - -// Malbolge operations -type operation = - | Jmp - | Out - | In - | Rot - | Mov - | Crz // Crazy operation - | Nop - | Hlt - -// Malbolge state -type state = { - memory: array, - a: int, // Accumulator - c: int, // Code pointer - d: int, // Data pointer - input: list, - output: list, - halted: bool, - cycles: int, -} - -// Create initial state -let makeState = (~program: string): state => { - let memory = Array.make(memorySize, 0) - - // Load program into memory - String.toArray(program)->Array.forEachWithIndex((i, char) => { - memory[i] = Char.code(char) - }) - - { - memory: memory, - a: 0, - c: 0, - d: 0, - input: list{}, - output: list{}, - halted: false, - cycles: 0, - } -} - -// Crazy operation lookup table (simplified) -// In real Malbolge, this is a complex ternary operation -let crazyOp = (a: int, b: int): int => { - // Simplified implementation - // Real Malbolge uses: [i]'th element of crz table where i = (a - b) mod 3^10 - mod(a + b, 3) -} - -// Rotation in ternary -let rotateRight = (n: int): int => { - // Simplified: rotate 10-trit ternary number right - let lower = mod(n, 3) - let upper = n / 3 - lower * 19683 + upper // 19683 = 3^9 -} - -// Decode operation at position c -let decodeOp = (mem: array, c: int): option => { - let opCode = mod(mem[c] - c, 94) - - switch opCode { - | 4 => Some(Jmp) - | 5 => Some(Out) - | 23 => Some(In) - | 39 => Some(Rot) - | 40 => Some(Mov) - | 62 => Some(Crz) - | 68 => Some(Nop) - | 81 => Some(Hlt) - | _ => None // Invalid instruction - } -} - -// Encrypt (modify) instruction after execution -let encrypt = (mem: array, c: int): unit => { - // Malbolge self-modifies by encrypting executed instructions - // Simplified encryption: rotate the value - mem[c] = mod(mem[c] + 1, 256) -} - -// Execute single step -let step = (state: state): state => { - if state.halted || state.cycles >= maxCycles { - {...state, halted: true} - } else { - let {memory, a, c, d, input, output, cycles} = state - - switch decodeOp(memory, c) { - | None => {...state, halted: true} // Invalid instruction - - | Some(Hlt) => {...state, halted: true} - - | Some(Nop) => { - encrypt(memory, c) - {...state, c: mod(c + 1, memorySize), cycles: cycles + 1} - } - - | Some(Jmp) => { - encrypt(memory, c) - {...state, c: memory[d], cycles: cycles + 1} - } - - | Some(Out) => { - encrypt(memory, c) - let char = mod(a, 256) - { - ...state, - c: mod(c + 1, memorySize), - output: list{char, ...output}, - cycles: cycles + 1, - } - } - - | Some(In) => { - encrypt(memory, c) - switch input { - | list{} => {...state, a: 0, c: mod(c + 1, memorySize), cycles: cycles + 1} - | list{val, ...rest} => { - {...state, a: val, input: rest, c: mod(c + 1, memorySize), cycles: cycles + 1} - } - } - } - - | Some(Rot) => { - encrypt(memory, c) - { - ...state, - a: rotateRight(a), - c: mod(c + 1, memorySize), - d: mod(d + 1, memorySize), - cycles: cycles + 1, - } - } - - | Some(Mov) => { - encrypt(memory, c) - { - ...state, - a: memory[d], - c: mod(c + 1, memorySize), - d: mod(d + 1, memorySize), - cycles: cycles + 1, - } - } - - | Some(Crz) => { - encrypt(memory, c) - let result = crazyOp(a, memory[d]) - memory[d] = result - { - ...state, - a: result, - c: mod(c + 1, memorySize), - d: mod(d + 1, memorySize), - cycles: cycles + 1, - } - } - } - } -} - -// Run program until halt or max cycles -let rec run = (state: state): state => { - if state.halted || state.cycles >= maxCycles { - state - } else { - run(step(state)) - } -} - -// Execute program and return output -let execute = (program: string): string => { - let initialState = makeState(~program) - let finalState = run(initialState) - - // Convert output list to string - finalState.output - ->List.reverse - ->List.map(Char.chr) - ->List.toArray - ->String.fromCharArray -} - -// Check if program is a CNO -let isCNO = (program: string): bool => { - let initialState = makeState(~program) - let finalState = run(initialState) - - // A program is a CNO if: - // 1. It terminates (not at max cycles) - // 2. No output produced - // 3. Memory unchanged (difficult to check due to encryption) - - finalState.cycles < maxCycles && - List.length(finalState.output) == 0 -} - -// CNO Examples - -// Empty program - the simplest CNO -let emptyProgram = "" - -// Single Nop (if we could encode it properly) -// Note: Actual Malbolge encoding is complex -let nopProgram = " " // Simplified - -// Test function -let testCNO = (program: string, name: string): unit => { - let result = if isCNO(program) { - "is a CNO ✓" - } else { - "is NOT a CNO ✗" - } - - Console.log(`${name}: ${result}`) -} - -// Run tests -testCNO(emptyProgram, "Empty program") -testCNO(nopProgram, "Nop program") - -// Export for external use -type exports = { - execute: string => string, - isCNO: string => bool, - makeState: (~program: string) => state, - run: state => state, - step: state => state, -} - -let exports: exports = { - execute: execute, - isCNO: isCNO, - makeState: makeState, - run: run, - step: step, -} diff --git a/license/PMPL-1.0.txt b/license/PMPL-1.0.txt index 13d072a..711e372 100644 --- a/license/PMPL-1.0.txt +++ b/license/PMPL-1.0.txt @@ -1,4 +1,4 @@ -SPDX-License-Identifier: MPL-2.0-or-later +SPDX-License-Identifier: MPL-2.0 SPDX-FileCopyrightText: 2025 Palimpsest Stewardship Council ================================================================================ diff --git a/proofs/coq/category/CNOCategory.v b/proofs/coq/category/CNOCategory.v index 703c22a..d3d569e 100644 --- a/proofs/coq/category/CNOCategory.v +++ b/proofs/coq/category/CNOCategory.v @@ -13,7 +13,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 *) Require Import Coq.Logic.FunctionalExtensionality. diff --git a/proofs/coq/common/CNO.v b/proofs/coq/common/CNO.v index 3cd0893..312512f 100644 --- a/proofs/coq/common/CNO.v +++ b/proofs/coq/common/CNO.v @@ -5,7 +5,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 *) Require Import Coq.Init.Nat. diff --git a/proofs/coq/filesystem/FilesystemCNO.v b/proofs/coq/filesystem/FilesystemCNO.v index 71a067a..f8d81f8 100644 --- a/proofs/coq/filesystem/FilesystemCNO.v +++ b/proofs/coq/filesystem/FilesystemCNO.v @@ -15,7 +15,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero (integrating Valence Shell) - License: PMPL-1.0-or-later + License: MPL-2.0 *) Require Import Coq.Lists.List. diff --git a/proofs/coq/lambda/LambdaCNO.v b/proofs/coq/lambda/LambdaCNO.v index 6d7b4d8..655f3a1 100644 --- a/proofs/coq/lambda/LambdaCNO.v +++ b/proofs/coq/lambda/LambdaCNO.v @@ -8,7 +8,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 *) Require Import Coq.Lists.List. diff --git a/proofs/coq/malbolge/MalbolgeCore.v b/proofs/coq/malbolge/MalbolgeCore.v index 4502fc2..b9d0638 100644 --- a/proofs/coq/malbolge/MalbolgeCore.v +++ b/proofs/coq/malbolge/MalbolgeCore.v @@ -7,7 +7,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 *) Require Import CNO.CNO. diff --git a/proofs/coq/physics/LandauerDerivation.v b/proofs/coq/physics/LandauerDerivation.v index 4601a0a..06866c6 100644 --- a/proofs/coq/physics/LandauerDerivation.v +++ b/proofs/coq/physics/LandauerDerivation.v @@ -7,7 +7,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - Phase 1 Complete Derivation - License: PMPL-1.0-or-later + License: MPL-2.0 *) Require Import Coq.Reals.Reals. diff --git a/proofs/coq/physics/StatMech.v b/proofs/coq/physics/StatMech.v index 23a7ccb..159a175 100644 --- a/proofs/coq/physics/StatMech.v +++ b/proofs/coq/physics/StatMech.v @@ -6,7 +6,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 *) Require Import Coq.Reals.Reals. diff --git a/proofs/coq/physics/StatMech_helpers.v b/proofs/coq/physics/StatMech_helpers.v index 0275092..2aec05f 100644 --- a/proofs/coq/physics/StatMech_helpers.v +++ b/proofs/coq/physics/StatMech_helpers.v @@ -5,7 +5,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 *) Require Import CNO. diff --git a/proofs/coq/quantum/QuantumCNO.v b/proofs/coq/quantum/QuantumCNO.v index 2cd34b1..890f99b 100644 --- a/proofs/coq/quantum/QuantumCNO.v +++ b/proofs/coq/quantum/QuantumCNO.v @@ -12,7 +12,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 *) Require Import Coq.Reals.Reals. diff --git a/proofs/coq/quantum/QuantumMechanicsExact.v b/proofs/coq/quantum/QuantumMechanicsExact.v index 9dcf6ea..b5cca3a 100644 --- a/proofs/coq/quantum/QuantumMechanicsExact.v +++ b/proofs/coq/quantum/QuantumMechanicsExact.v @@ -8,7 +8,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - Exact Quantum Formulation - License: PMPL-1.0-or-later + License: MPL-2.0 *) Require Import Coq.Reals.Reals. diff --git a/proofs/lean4/CNO.lean b/proofs/lean4/CNO.lean index 2ae04d7..117a08d 100644 --- a/proofs/lean4/CNO.lean +++ b/proofs/lean4/CNO.lean @@ -5,7 +5,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 -/ -- Std.Data.{List,Nat}.Basic were vestigial: Std was renamed to Batteries diff --git a/proofs/lean4/CNOCategory.lean b/proofs/lean4/CNOCategory.lean index c92bbb0..9331378 100644 --- a/proofs/lean4/CNOCategory.lean +++ b/proofs/lean4/CNOCategory.lean @@ -5,7 +5,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 -/ import CNO diff --git a/proofs/lean4/FilesystemCNO.lean b/proofs/lean4/FilesystemCNO.lean index f83b14a..ef8d4aa 100644 --- a/proofs/lean4/FilesystemCNO.lean +++ b/proofs/lean4/FilesystemCNO.lean @@ -5,7 +5,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero (integrating Valence Shell) - License: PMPL-1.0-or-later + License: MPL-2.0 -/ -- Std.Data.List.Basic was vestigial in pre-Batteries layouts. The List diff --git a/proofs/lean4/LambdaCNO.lean b/proofs/lean4/LambdaCNO.lean index 4bbaa13..a5f7d32 100644 --- a/proofs/lean4/LambdaCNO.lean +++ b/proofs/lean4/LambdaCNO.lean @@ -7,7 +7,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 -/ namespace LambdaCNO diff --git a/proofs/lean4/QuantumCNO.lean b/proofs/lean4/QuantumCNO.lean index af0978e..8e7322c 100644 --- a/proofs/lean4/QuantumCNO.lean +++ b/proofs/lean4/QuantumCNO.lean @@ -5,7 +5,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 -/ import Mathlib.Data.Real.Basic diff --git a/proofs/lean4/StatMech.lean b/proofs/lean4/StatMech.lean index 7f5b173..e0f489a 100644 --- a/proofs/lean4/StatMech.lean +++ b/proofs/lean4/StatMech.lean @@ -5,7 +5,7 @@ Author: Jonathan D. A. Jewell Project: Absolute Zero - License: PMPL-1.0-or-later + License: MPL-2.0 -/ import CNO diff --git a/scripts/use-echidna.sh b/scripts/use-echidna.sh index 879d302..4d38b97 100755 --- a/scripts/use-echidna.sh +++ b/scripts/use-echidna.sh @@ -1,5 +1,5 @@ #!/bin/bash -# SPDX-License-Identifier: PMPL-1.0-or-later +# SPDX-License-Identifier: MPL-2.0 # Use ECHIDNA to assist with CNO proof completion set -e diff --git a/src/AuditTrail.res b/src/AuditTrail.res deleted file mode 100644 index b80e91e..0000000 --- a/src/AuditTrail.res +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later -// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) - -// AuditTrail.res - DOM annotation for debugging -// Injects data-audit paths into the DOM - -@val @scope("document") -external querySelectorAll: string => array = "querySelectorAll" - -@val @scope("document") -external createElement: string => Dom.element = "createElement" - -@set external setTextContent: (Dom.element, string) => unit = "textContent" -@set external setCssText: ({..}, string) => unit = "cssText" -@get external getStyle: Dom.element => {..} = "style" -@get external getDataset: Dom.element => {..} = "dataset" -@get external getAudit: {..} => Js.nullable = "audit" -@send external appendChild: (Dom.element, Dom.element) => unit = "appendChild" -@set external setPosition: ({..}, string) => unit = "position" - -let annotateAudits = () => { - let elements = querySelectorAll("[data-audit]") - - elements->Array.forEach(el => { - let dataset = el->getDataset - let auditValue = dataset->getAudit - - switch auditValue->Js.Nullable.toOption { - | Some(audit) => { - let tag = createElement("span") - tag->setTextContent(audit) - - let tagStyle = tag->getStyle - tagStyle->setCssText( - "position:absolute; top:0; right:0; font-size:0.6rem; opacity:0.3;", - ) - - let elStyle = el->getStyle - elStyle->setPosition("relative") - - el->appendChild(tag) - } - | None => () - } - }) -} - -// Initialize on DOMContentLoaded -@val @scope("window") -external addEventListener: (string, unit => unit) => unit = "addEventListener" - -let () = addEventListener("DOMContentLoaded", annotateAudits) diff --git a/src/abi/Foreign.idr b/src/abi/Foreign.idr index 86a6595..f7d2293 100644 --- a/src/abi/Foreign.idr +++ b/src/abi/Foreign.idr @@ -6,7 +6,7 @@ ||| All functions are declared here with type signatures and safety proofs. ||| Implementations live in ffi/zig/ --- SPDX-License-Identifier: PMPL-1.0-or-later +-- SPDX-License-Identifier: MPL-2.0 module AbsoluteZero.ABI.Foreign diff --git a/src/abi/Layout.idr b/src/abi/Layout.idr index c9084f3..ff91344 100644 --- a/src/abi/Layout.idr +++ b/src/abi/Layout.idr @@ -6,7 +6,7 @@ ||| ||| @see https://github.com/hyperpolymath/absolute-zero --- SPDX-License-Identifier: PMPL-1.0-or-later +-- SPDX-License-Identifier: MPL-2.0 module AbsoluteZero.ABI.Layout diff --git a/src/abi/Proofs/DivMod.idr b/src/abi/Proofs/DivMod.idr index 957c769..1d69551 100644 --- a/src/abi/Proofs/DivMod.idr +++ b/src/abi/Proofs/DivMod.idr @@ -17,7 +17,7 @@ ||| ||| @see https://github.com/hyperpolymath/absolute-zero/issues/27 --- SPDX-License-Identifier: PMPL-1.0-or-later +-- SPDX-License-Identifier: MPL-2.0 module AbsoluteZero.ABI.Proofs.DivMod diff --git a/src/abi/Types.idr b/src/abi/Types.idr index 9ac3415..8488dda 100644 --- a/src/abi/Types.idr +++ b/src/abi/Types.idr @@ -6,7 +6,7 @@ ||| ||| @see https://github.com/hyperpolymath/absolute-zero --- SPDX-License-Identifier: PMPL-1.0-or-later +-- SPDX-License-Identifier: MPL-2.0 module AbsoluteZero.ABI.Types diff --git a/src/brainfuck/src/main.rs b/src/brainfuck/src/main.rs index d198720..60b8c7e 100644 --- a/src/brainfuck/src/main.rs +++ b/src/brainfuck/src/main.rs @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 // Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) //! Brainfuck CNO Detection CLI diff --git a/src/main.rs b/src/main.rs index 18a2719..6f79c5d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: PMPL-1.0-or-later +// SPDX-License-Identifier: MPL-2.0 // Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) //! Certified Null Operation in Rust