diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..3a3b7f20 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,34 @@ +# SPDX-License-Identifier: MPL-2.0 +# CODEOWNERS - Define code review assignments for GitHub +# See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners + +# Default: sole maintainer for all files +* @hyperpolymath + +# Security-sensitive files require explicit ownership +SECURITY.md @hyperpolymath +.github/workflows/ @hyperpolymath +.machine_readable/ @hyperpolymath +contractiles/ @hyperpolymath + +# License files +LICENSE @hyperpolymath +LICENSES/ @hyperpolymath + +# Configuration +.gitignore @hyperpolymath +.github/ @hyperpolymath + +# Documentation +README* @hyperpolymath +CONTRIBUTING* @hyperpolymath +CODE_OF_CONDUCT* @hyperpolymath +GOVERNANCE* @hyperpolymath +MAINTAINERS* @hyperpolymath +CHANGELOG* @hyperpolymath +ROADMAP* @hyperpolymath + +# Build and CI +Justfile @hyperpolymath +Makefile @hyperpolymath +*.sh @hyperpolymath diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 7dd97651..02e4b8db 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,3 +1,7 @@ + --- name: Bug report about: Create a report to help us improve diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md index babf9b2c..972d11ed 100644 --- a/.github/ISSUE_TEMPLATE/custom.md +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -1,3 +1,7 @@ + --- name: Custom issue template about: Describe this issue template's purpose here. diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md index f8b786bf..0c0f7a18 100644 --- a/.github/ISSUE_TEMPLATE/documentation.md +++ b/.github/ISSUE_TEMPLATE/documentation.md @@ -1,3 +1,7 @@ + --- name: Documentation about: Report unclear, missing, or incorrect documentation diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 6a308c54..1a3e01c7 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,3 +1,7 @@ + --- name: Feature request about: Suggest an idea for this project diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 37d86f1f..01de5456 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -1,3 +1,7 @@ + --- name: Question about: Ask a question about usage or behaviour diff --git a/.github/copilot/coding-agent.yml b/.github/copilot/coding-agent.yml new file mode 100644 index 00000000..a719a773 --- /dev/null +++ b/.github/copilot/coding-agent.yml @@ -0,0 +1,6 @@ +mcp_servers: + boj-server: + command: npx + args: ["-y", "@hyperpolymath/boj-server@latest"] + env: + BOJ_URL: http://localhost:7700 diff --git a/.github/workflows/boj-build.yml b/.github/workflows/boj-build.yml index 712beb31..fc979918 100644 --- a/.github/workflows/boj-build.yml +++ b/.github/workflows/boj-build.yml @@ -1,3 +1,4 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 name: BoJ Server Build Trigger on: @@ -7,6 +8,7 @@ on: jobs: trigger-boj: runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 diff --git a/.github/workflows/casket-pages.yml b/.github/workflows/casket-pages.yml index 1839b7bd..928441c0 100644 --- a/.github/workflows/casket-pages.yml +++ b/.github/workflows/casket-pages.yml @@ -1,39 +1,34 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 name: GitHub Pages - on: push: branches: [main, master] workflow_dispatch: - permissions: contents: read pages: write id-token: write - concurrency: group: "pages" cancel-in-progress: false - jobs: build: runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4 - - name: Checkout casket-ssg uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4 with: repository: hyperpolymath/casket-ssg path: .casket-ssg - - name: Setup GHCup uses: haskell-actions/setup@cd0d9bdd65b20557f41bea4dbe43d0b5fbbfe553 # v2 with: ghc-version: '9.8.2' cabal-version: '3.10' - - name: Cache Cabal uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: @@ -42,11 +37,9 @@ jobs: ~/.cabal/store .casket-ssg/dist-newstyle key: ${{ runner.os }}-casket-${{ hashFiles('.casket-ssg/casket-ssg.cabal') }} - - name: Build casket-ssg working-directory: .casket-ssg run: cabal build - - name: Prepare site source shell: bash run: | @@ -89,26 +82,23 @@ jobs: echo "Project-specific site content can be added later under site/." } > .site-src/index.md fi - - name: Build site run: | mkdir -p _site cd .casket-ssg && cabal run casket-ssg -- build ../.site-src ../_site touch ../_site/.nojekyll - - name: Setup Pages uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0 - - name: Upload artifact uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0 with: path: '_site' - deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest + timeout-minutes: 15 needs: build steps: - name: Deploy to GitHub Pages diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index ed4a3805..5542846a 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,3 +1,4 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: PMPL-1.0 name: CodeQL Security Analysis @@ -23,6 +24,7 @@ permissions: jobs: analyze: runs-on: ubuntu-latest + timeout-minutes: 10 permissions: contents: read security-events: write diff --git a/.github/workflows/dogfood-gate.yml b/.github/workflows/dogfood-gate.yml index 29f0d7f9..fe8f403a 100644 --- a/.github/workflows/dogfood-gate.yml +++ b/.github/workflows/dogfood-gate.yml @@ -5,16 +5,13 @@ # Validates that the repo uses hyperpolymath's own formats and tools. # Companion to static-analysis-gate.yml (security) — this is for format compliance. name: Dogfood Gate - on: pull_request: branches: ['**'] push: branches: [main, master] - permissions: contents: read - jobs: # --------------------------------------------------------------------------- # Job 1: A2ML manifest validation @@ -22,11 +19,10 @@ jobs: a2ml-validate: name: Validate A2ML manifests runs-on: ubuntu-latest - + timeout-minutes: 15 steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Check for A2ML files id: detect run: | @@ -35,14 +31,12 @@ jobs: if [ "$COUNT" -eq 0 ]; then echo "::warning::No .a2ml manifest files found. Every RSR repo should have 0-AI-MANIFEST.a2ml" fi - - name: Validate A2ML manifests if: steps.detect.outputs.count > 0 uses: hyperpolymath/a2ml-validate-action@59145c7d1039fa3059b3ecacdb50ee23d7505898 # main with: path: '.' strict: 'false' - - name: Write summary run: | A2ML_COUNT="${{ steps.detect.outputs.count }}" @@ -59,18 +53,16 @@ jobs: echo "" >> "$GITHUB_STEP_SUMMARY" echo "Scanned **${A2ML_COUNT}** .a2ml file(s). See step output for details." >> "$GITHUB_STEP_SUMMARY" fi - # --------------------------------------------------------------------------- # Job 2: K9 contract validation # --------------------------------------------------------------------------- k9-validate: name: Validate K9 contracts runs-on: ubuntu-latest - + timeout-minutes: 15 steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Check for K9 files id: detect run: | @@ -83,14 +75,12 @@ jobs: if [ "$COUNT" -eq 0 ] && [ "$CONFIG_COUNT" -gt 0 ]; then echo "::warning::Found $CONFIG_COUNT config files but no K9 contracts. Run k9iser to generate contracts." fi - - name: Validate K9 contracts if: steps.detect.outputs.k9_count > 0 uses: hyperpolymath/k9-validate-action@2d96f43c538964b097d159ed3a56ba5b5ceca227 # main with: path: '.' strict: 'false' - - name: Write summary run: | K9_COUNT="${{ steps.detect.outputs.k9_count }}" @@ -108,18 +98,16 @@ jobs: echo "" >> "$GITHUB_STEP_SUMMARY" echo "Validated **${K9_COUNT}** K9 contract(s) against **${CFG_COUNT}** config file(s)." >> "$GITHUB_STEP_SUMMARY" fi - # --------------------------------------------------------------------------- # Job 3: Empty-linter — invisible character detection # --------------------------------------------------------------------------- empty-lint: name: Empty-linter (invisible characters) runs-on: ubuntu-latest - + timeout-minutes: 15 steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Scan for invisible characters id: lint run: | @@ -153,7 +141,6 @@ jobs: REL_PATH="${filepath#$GITHUB_WORKSPACE/}" echo "::warning file=${REL_PATH}::Invisible Unicode characters detected (zero-width space, BOM, NBSP, etc.)" done < /tmp/empty-lint-results.txt - - name: Write summary run: | if [ "${{ steps.lint.outputs.ready }}" = "true" ]; then @@ -172,18 +159,16 @@ jobs: echo "" >> "$GITHUB_STEP_SUMMARY" echo "Skipped: empty-linter not available." >> "$GITHUB_STEP_SUMMARY" fi - # --------------------------------------------------------------------------- # Job 4: Groove manifest check (for repos that should expose services) # --------------------------------------------------------------------------- groove-check: name: Groove manifest check runs-on: ubuntu-latest - + timeout-minutes: 15 steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Check for Groove manifest id: groove run: | @@ -220,7 +205,6 @@ jobs: if [ "$HAS_SERVER" = "true" ] && [ "$HAS_MANIFEST" = "false" ] && [ "$HAS_GROOVE_CODE" = "false" ]; then echo "::warning::This repo has server code but no Groove endpoint. Add .well-known/groove/manifest.json for service discovery." fi - - name: Write summary run: | echo "## Groove Protocol Check" >> "$GITHUB_STEP_SUMMARY" @@ -230,20 +214,18 @@ jobs: echo "| Static manifest (.well-known/groove/manifest.json) | ${{ steps.groove.outputs.has_manifest }} |" >> "$GITHUB_STEP_SUMMARY" echo "| Groove endpoint in code | ${{ steps.groove.outputs.has_groove_code }} |" >> "$GITHUB_STEP_SUMMARY" echo "| Has HTTP server code | ${{ steps.groove.outputs.has_server }} |" >> "$GITHUB_STEP_SUMMARY" - # --------------------------------------------------------------------------- # Job 5: Dogfooding summary # --------------------------------------------------------------------------- dogfood-summary: name: Dogfooding compliance summary runs-on: ubuntu-latest + timeout-minutes: 15 needs: [a2ml-validate, k9-validate, empty-lint, groove-check] if: always() - steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Generate dogfooding scorecard run: | SCORE=0 @@ -306,4 +288,3 @@ jobs: *Generated by the [Dogfood Gate](https://github.com/hyperpolymath/rsr-template-repo) workflow.* *Dogfooding is guinea pig fooding — we test our tools on ourselves.* EOF - diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 64766661..c5f963c6 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -12,7 +12,6 @@ # the install pipeline end-to-end. name: E2E — OPSM Package Resolution - on: push: branches: [main, master, develop] @@ -24,78 +23,61 @@ on: paths: - 'opsm_ex/**' workflow_dispatch: - permissions: read-all - concurrency: group: e2e-${{ github.ref }} cancel-in-progress: true - jobs: e2e-opsm: name: E2E — Dependency Resolution + Lockfile + Trust runs-on: ubuntu-latest timeout-minutes: 15 - steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Erlang/Elixir - uses: erlef/setup-beam@fc68ffb90438ef2936bbb3251622353b3dcb2f93 # v1.24.0 + uses: erlef/setup-beam@fc68ffb90438ef2936bbb3251622353b3dcb2f93 # v1.24.0 with: otp-version: '27.0' elixir-version: '1.17' - - name: Restore Mix cache - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v4 with: path: | opsm_ex/deps opsm_ex/_build key: ${{ runner.os }}-mix-${{ hashFiles('opsm_ex/mix.lock') }} - - name: Install dependencies run: cd opsm_ex && mix deps.get - - name: Compile run: cd opsm_ex && mix compile --warnings-as-errors - - name: Run E2E tests (includes error-handling + workspace audit scenarios) run: cd opsm_ex && mix test test/integration/e2e_test.exs --include e2e --include integration --trace - - name: Run all tests (unit + integration, excluding e2e/external_api/requires_nif) run: cd opsm_ex && mix test --trace - runtime-api: name: Runtime — live version API integration (external_api, no downloads) runs-on: ubuntu-latest timeout-minutes: 10 - steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Erlang/Elixir - uses: erlef/setup-beam@fc68ffb90438ef2936bbb3251622353b3dcb2f93 # v1.24.0 + uses: erlef/setup-beam@fc68ffb90438ef2936bbb3251622353b3dcb2f93 # v1.24.0 with: otp-version: '27.0' elixir-version: '1.17' - - name: Restore Mix cache - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v4 with: path: | opsm_ex/deps opsm_ex/_build key: ${{ runner.os }}-mix-${{ hashFiles('opsm_ex/mix.lock') }} - - name: Install dependencies run: cd opsm_ex && mix deps.get - - name: Compile run: cd opsm_ex && mix compile --warnings-as-errors - - name: Run runtime API integration tests (versions fetch + URL validation, no downloads) run: | cd opsm_ex && mix test test/opsm/runtime/integration_test.exs \ diff --git a/.github/workflows/echidna-validation.yml b/.github/workflows/echidna-validation.yml index ef538083..05ce458d 100644 --- a/.github/workflows/echidna-validation.yml +++ b/.github/workflows/echidna-validation.yml @@ -1,6 +1,6 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 name: ECHIDNA Validation - on: push: paths: @@ -14,27 +14,23 @@ on: - 'cli/**' - 'opsm_ex/native/**' schedule: - - cron: '0 6 * * 1' # Weekly on Monday at 06:00 UTC - + - cron: '0 6 * * 1' # Weekly on Monday at 06:00 UTC permissions: contents: read - jobs: echidna-audit: name: ECHIDNA Safety Audit runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Checkout code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@4be9e76fd7c4901c61fb841f559994984270fce7 # stable + uses: dtolnay/rust-toolchain@4be9e76fd7c4901c61fb841f559994984270fce7 # stable with: components: clippy - - name: Cache Rust dependencies - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2 - + uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2 - name: Unsafe audit run: | echo "=== Unsafe Code Audit ===" @@ -51,7 +47,6 @@ jobs: done echo "Total unsafe without SAFETY comment: $UNSAFE_COUNT" echo "unsafe_count=$UNSAFE_COUNT" >> $GITHUB_OUTPUT - - name: Dangerous pattern scan run: | echo "=== Dangerous Pattern Scan ===" @@ -68,7 +63,6 @@ jobs: if [ "$ISSUES" -gt 0 ]; then echo "WARNING: Dangerous patterns detected — review required" fi - - name: Clippy strict analysis run: | for dir in services/*/; do @@ -79,7 +73,6 @@ jobs: cd "$GITHUB_WORKSPACE" fi done - - name: Summary run: | echo "## ECHIDNA Validation Results" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/gitbot-fleet.yml b/.github/workflows/gitbot-fleet.yml index 29ae30bb..2412417e 100644 --- a/.github/workflows/gitbot-fleet.yml +++ b/.github/workflows/gitbot-fleet.yml @@ -1,26 +1,24 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 name: Gitbot Fleet on: push: pull_request: - permissions: contents: read - jobs: fleet-scan: runs-on: ubuntu-latest + timeout-minutes: 15 permissions: contents: read steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Clone gitbot-fleet + hypatia run: | mkdir -p _bot git clone https://github.com/hyperpolymath/gitbot-fleet.git _bot/gitbot-fleet git clone https://github.com/hyperpolymath/hypatia.git _bot/hypatia - - name: Run gitbot-fleet scan env: GITBOT_FLEET_DIR: ${{ github.workspace }}/_bot/gitbot-fleet diff --git a/.github/workflows/governance.yml b/.github/workflows/governance.yml index 653ef982..febd5bcf 100644 --- a/.github/workflows/governance.yml +++ b/.github/workflows/governance.yml @@ -1,3 +1,4 @@ +# // Copyright (c) Jonathan D.A. Jewell # 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. @@ -11,13 +12,11 @@ # (rust-ci, codeql, dependabot, release, scan/mirror/pages plumbing). name: Governance - on: push: branches: [main, master] pull_request: workflow_dispatch: - # Estate guardrail: cancel superseded runs so re-pushes / rebased PR # updates do not pile up queued runs against the shared account-wide # Actions concurrency pool. Applied only to read-only check workflows @@ -25,10 +24,9 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true - permissions: contents: read - jobs: governance: - uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@main + uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@861b5e911d9e5dcfb3c0ab3dd2a9a3c8fd0a1613 + timeout-minutes: 10 diff --git a/.github/workflows/hypatia-scan.yml b/.github/workflows/hypatia-scan.yml index 1d6417e2..111b2adc 100644 --- a/.github/workflows/hypatia-scan.yml +++ b/.github/workflows/hypatia-scan.yml @@ -1,9 +1,9 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 # Thin wrapper around hyperpolymath/standards hypatia-scan-reusable.yml. # See standards#191 for the reusable's purpose and design. name: Hypatia Security Scan - on: push: branches: [main, master, develop] @@ -12,18 +12,16 @@ on: schedule: - cron: '0 0 * * 0' workflow_dispatch: - # Estate guardrail: cancel superseded runs so re-pushes don't pile up. concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true - permissions: contents: read security-events: write pull-requests: write - jobs: hypatia: - uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@97df762107501909f50bb770e9bc200b6c415600 + uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@6cd3772824e59c8c9affeab66061e25383544242 + timeout-minutes: 10 secrets: inherit diff --git a/.github/workflows/instant-sync.yml b/.github/workflows/instant-sync.yml index 228dc438..95867cff 100644 --- a/.github/workflows/instant-sync.yml +++ b/.github/workflows/instant-sync.yml @@ -1,19 +1,18 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 # Instant Forge Sync - Triggers propagation to all forges on push/release name: Instant Sync - on: push: branches: [main, master] release: types: [published] - permissions: contents: read - jobs: dispatch: runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Trigger Propagation uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v3 @@ -28,6 +27,5 @@ jobs: "sha": "${{ github.sha }}", "forges": "" } - - name: Confirm run: echo "::notice::Propagation triggered for ${{ github.event.repository.name }}" diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml index 2083ca60..280df2a0 100644 --- a/.github/workflows/mirror.yml +++ b/.github/workflows/mirror.yml @@ -1,15 +1,14 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 name: Mirror to Git Forges - on: push: branches: [main] workflow_dispatch: - permissions: contents: read - jobs: mirror: uses: hyperpolymath/standards/.github/workflows/mirror-reusable.yml@e6b2884722350515934d443daf23442f2195796f + timeout-minutes: 10 secrets: inherit diff --git a/.github/workflows/nif-build.yml b/.github/workflows/nif-build.yml index b167d3ad..f12d7913 100644 --- a/.github/workflows/nif-build.yml +++ b/.github/workflows/nif-build.yml @@ -1,10 +1,10 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 # Compile the opsm_pq_nif Rust NIF and run :requires_nif tests. # Separate from the main Elixir test job so NIF compilation doesn't # block the standard unit test suite. name: NIF Build + PQ Tests - on: push: branches: [main] @@ -14,34 +14,27 @@ on: - "opsm_ex/test/opsm/crypto/**" - ".github/workflows/nif-build.yml" workflow_dispatch: - permissions: contents: read - jobs: nif-build: name: Compile opsm_pq_nif + run PQ tests runs-on: ubuntu-latest timeout-minutes: 30 - steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Install Rust toolchain uses: dtolnay/rust-toolchain@4be9e76fd7c4901c61fb841f559994984270fce7 # stable - - name: Cache Rust build uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2 with: workspaces: opsm_ex/native/opsm_pq_nif -> target - - name: Setup Erlang/Elixir uses: erlef/setup-beam@fc68ffb90438ef2936bbb3251622353b3dcb2f93 # v1.24.0 with: otp-version: "27.0" elixir-version: "1.17" - - name: Restore Mix cache uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v4 with: @@ -49,10 +42,8 @@ jobs: opsm_ex/deps opsm_ex/_build key: ${{ runner.os }}-mix-nif-${{ hashFiles('opsm_ex/mix.lock') }} - - name: Install Elixir dependencies run: cd opsm_ex && mix deps.get - - name: Build NIF (cargo build --release) run: | cd opsm_ex/native/opsm_pq_nif @@ -61,9 +52,7 @@ jobs: mkdir -p ../../priv/native cp target/release/libopsm_pq_nif.so ../../priv/native/libopsm_pq_nif.so 2>/dev/null || \ cp target/release/libopsm_pq_nif.dylib ../../priv/native/libopsm_pq_nif.so 2>/dev/null || true - - name: Compile Elixir with NIF run: cd opsm_ex && mix compile - - name: Run PQ NIF tests run: cd opsm_ex && mix test --include requires_nif --only requires_nif --trace diff --git a/.github/workflows/scorecard-enforcer.yml b/.github/workflows/scorecard-enforcer.yml index a5de43da..04ba44ee 100644 --- a/.github/workflows/scorecard-enforcer.yml +++ b/.github/workflows/scorecard-enforcer.yml @@ -1,14 +1,13 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 # Prevention workflow - runs OpenSSF Scorecard and fails on low scores name: OpenSSF Scorecard Enforcer - on: push: branches: [main] schedule: - - cron: '0 6 * * 1' # Weekly on Monday + - cron: '0 6 * * 1' # Weekly on Monday workflow_dispatch: - # Estate guardrail: cancel superseded runs so re-pushes / rebased PR # updates do not pile up queued runs against the shared account-wide # Actions concurrency pool. Applied only to read-only check workflows @@ -16,10 +15,8 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true - permissions: contents: read - jobs: # The OSSF Scorecard publish endpoint enforces a hard contract: the job that # runs `ossf/scorecard-action` with `publish_results: true` must contain @@ -33,36 +30,34 @@ jobs: # uses-only; `check-score` is the gating job that emits the error. scorecard: runs-on: ubuntu-latest + timeout-minutes: 15 permissions: security-events: write - id-token: write # For OIDC + id-token: write # For OIDC steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - name: Run Scorecard uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3 with: results_file: results.sarif results_format: sarif publish_results: true - - name: Upload SARIF uses: github/codeql-action/upload-sarif@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4 with: sarif_file: results.sarif - - name: Persist SARIF for downstream score-gate job uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: scorecard-results path: results.sarif retention-days: 1 - check-score: needs: scorecard runs-on: ubuntu-latest + timeout-minutes: 15 permissions: contents: read steps: @@ -70,7 +65,6 @@ jobs: uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v5.0.0 with: name: scorecard-results - - name: Check minimum score run: | SCORE=$(jq -r '.runs[0].tool.driver.properties.score // 0' results.sarif 2>/dev/null || echo "0") @@ -84,20 +78,18 @@ jobs: echo "::error::Scorecard score $SCORE is below minimum $MIN_SCORE" exit 1 fi - # Check specific high-priority items check-critical: runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Check SECURITY.md exists run: | if [ ! -f "SECURITY.md" ]; then echo "::error::SECURITY.md is required" exit 1 fi - - name: Check for pinned dependencies run: | # Check workflows for unpinned actions diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 8a718f49..62fb4b85 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -1,19 +1,18 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: PMPL-1.0 name: Scorecards supply-chain security - on: branch_protection_rule: schedule: - cron: '23 4 * * 1' push: branches: [main] - permissions: read-all - jobs: analysis: permissions: security-events: write id-token: write uses: hyperpolymath/standards/.github/workflows/scorecard-reusable.yml@e0caf11508a3989574713c78f5f444f2ce5e33ef + timeout-minutes: 10 secrets: inherit diff --git a/.github/workflows/secret-scanner.yml b/.github/workflows/secret-scanner.yml index 586cdc0f..e205ad87 100644 --- a/.github/workflows/secret-scanner.yml +++ b/.github/workflows/secret-scanner.yml @@ -1,19 +1,27 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: PMPL-1.0 name: Secret Scanner - on: pull_request: push: branches: [main] - concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true - permissions: contents: read - jobs: scan: uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@3e4bd4c93911750727e2e4c66dff859e00079da0 + timeout-minutes: 10 secrets: inherit + trufflehog: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + with: + fetch-depth: 0 + - name: TruffleHog Secret Scan + uses: trufflesecurity/trufflehog@main + with: + extra_args: --only-verified --fail diff --git a/.github/workflows/trust-pipeline-e2e.yml b/.github/workflows/trust-pipeline-e2e.yml index add35fa0..e092ceaa 100644 --- a/.github/workflows/trust-pipeline-e2e.yml +++ b/.github/workflows/trust-pipeline-e2e.yml @@ -11,7 +11,6 @@ # sources change. Not on every push — service startup adds ~90s overhead. name: Trust Pipeline — Live-Service E2E - on: workflow_dispatch: push: @@ -23,63 +22,54 @@ on: - 'opsm_ex/test/integration/trust_pipeline_live_e2e_test.exs' - 'selur-compose.yml' - '.github/workflows/trust-pipeline-e2e.yml' - permissions: read-all - concurrency: group: trust-pipeline-e2e-${{ github.ref }} cancel-in-progress: true - jobs: trust-pipeline-e2e: name: Trust Pipeline Live E2E runs-on: ubuntu-24.04 - + timeout-minutes: 15 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: submodules: false - # ----------------------------------------------------------------------- # Elixir / BEAM setup # ----------------------------------------------------------------------- - name: Install Elixir and OTP - uses: erlef/setup-beam@fc68ffb90438ef2936bbb3251622353b3dcb2f93 # v1.24.0 + uses: erlef/setup-beam@fc68ffb90438ef2936bbb3251622353b3dcb2f93 # v1.24.0 with: otp-version: '26.2' elixir-version: '1.16.0' - - name: Cache Mix dependencies - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v4 with: path: | opsm_ex/deps opsm_ex/_build key: mix-${{ runner.os }}-${{ hashFiles('opsm_ex/mix.lock') }} restore-keys: mix-${{ runner.os }}- - - name: Install Mix dependencies working-directory: opsm_ex run: mix deps.get - - name: Compile working-directory: opsm_ex run: mix compile --warnings-as-errors - - # ----------------------------------------------------------------------- - # Start trust pipeline services via selur-compose.yml - # ----------------------------------------------------------------------- - # GHCR images are public — no registry login required for pulls. - name: Pull trust pipeline images + # ----------------------------------------------------------------------- + # Start trust pipeline services via selur-compose.yml + # ----------------------------------------------------------------------- + run: | docker pull ghcr.io/hyperpolymath/claim-forge:latest docker pull ghcr.io/hyperpolymath/checky-monkey:latest docker pull ghcr.io/hyperpolymath/palimpsest-license:latest docker pull ghcr.io/hyperpolymath/cicd-hyper-a:latest docker pull ghcr.io/hyperpolymath/oikos:latest - - name: Start trust pipeline (claim-forge, checky-monkey, palimpsest, cicd-hyper-a, oikos) run: | # Start only the 5 trust-tier services (not the optional container-security profile) @@ -89,7 +79,6 @@ jobs: palimpsest \ cicd-hyper-a \ oikos - - name: Wait for all services to be healthy # Polls each /health endpoint; aborts if any service fails to start within 3 minutes run: | @@ -116,7 +105,6 @@ jobs: done echo " OK" done - # ----------------------------------------------------------------------- # Run live-service E2E tests # ----------------------------------------------------------------------- @@ -135,7 +123,6 @@ jobs: --include integration \ --trace \ --timeout 30000 - # ----------------------------------------------------------------------- # Diagnostics on failure # ----------------------------------------------------------------------- @@ -146,7 +133,6 @@ jobs: echo "=== $svc logs ===" docker compose -f selur-compose.yml logs "$svc" --tail=50 || true done - - name: Stop services if: always() run: docker compose -f selur-compose.yml down --remove-orphans --volumes diff --git a/.github/workflows/trust-pipeline-images.yml b/.github/workflows/trust-pipeline-images.yml index 2c979592..b8a895f3 100644 --- a/.github/workflows/trust-pipeline-images.yml +++ b/.github/workflows/trust-pipeline-images.yml @@ -1,3 +1,4 @@ +# // Copyright (c) Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 # Build and push all OPSM trust pipeline + container security service images to GHCR. # @@ -8,7 +9,6 @@ # svalinn, selur, vordr, cerro-torre name: Trust Pipeline Images - on: push: branches: [main] @@ -16,16 +16,14 @@ on: - "services/**" - ".github/workflows/trust-pipeline-images.yml" workflow_dispatch: - permissions: contents: read packages: write - jobs: build-push: name: Build ${{ matrix.service }} runs-on: ubuntu-latest - + timeout-minutes: 15 strategy: fail-fast: false matrix: @@ -41,21 +39,17 @@ jobs: - service: selur - service: vordr - service: cerro-torre - steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Set up Docker Buildx uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0 - - name: Log in to GHCR uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Extract metadata id: meta uses: docker/metadata-action@80c7e94dd9b9319bd5eb7a0e0fe9291e23a2a2e9 # v6.1.0 @@ -64,7 +58,6 @@ jobs: tags: | type=raw,value=latest,enable={{is_default_branch}} type=sha - - name: Build and push ${{ matrix.service }} uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf # v6 with: diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7309fa90..8dafd33c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell # Primary CI/CD - GitLab is the source of truth stages: @@ -6,20 +7,16 @@ stages: - lint - test - build - variables: CARGO_HOME: ${CI_PROJECT_DIR}/.cargo - cache: key: ${CI_COMMIT_REF_SLUG} paths: - .cargo/ - target/ - # ================== # Security Scanning # ================== - trivy: stage: security image: aquasec/trivy:latest @@ -27,21 +24,12 @@ trivy: - trivy fs --exit-code 0 --severity HIGH,CRITICAL --format table . - trivy fs --exit-code 1 --severity CRITICAL . allow_failure: false - -gitleaks: - stage: security - image: zricethezav/gitleaks:latest - script: - - gitleaks detect --source . --verbose --redact - allow_failure: false - semgrep: stage: security image: returntocorp/semgrep script: - semgrep --config auto --error . allow_failure: true - cargo-audit: stage: security image: rust:latest @@ -51,7 +39,6 @@ cargo-audit: rules: - exists: - Cargo.toml - cargo-deny: stage: security image: rust:latest @@ -62,7 +49,6 @@ cargo-deny: - exists: - Cargo.toml allow_failure: true - mix-audit: stage: security image: elixir:latest @@ -75,11 +61,9 @@ mix-audit: - exists: - mix.exs allow_failure: true - # ================== # Linting # ================== - rustfmt: stage: lint image: rust:latest @@ -89,7 +73,6 @@ rustfmt: rules: - exists: - Cargo.toml - clippy: stage: lint image: rust:latest @@ -100,7 +83,6 @@ clippy: - exists: - Cargo.toml allow_failure: true - mix-format: stage: lint image: elixir:latest @@ -109,7 +91,6 @@ mix-format: rules: - exists: - mix.exs - credo: stage: lint image: elixir:latest @@ -121,11 +102,9 @@ credo: - exists: - mix.exs allow_failure: true - # ================== # Testing # ================== - cargo-test: stage: test image: rust:latest @@ -134,7 +113,6 @@ cargo-test: rules: - exists: - Cargo.toml - mix-test: stage: test image: elixir:latest @@ -145,11 +123,9 @@ mix-test: rules: - exists: - mix.exs - # ================== # Build # ================== - cargo-build: stage: build image: rust:latest @@ -162,7 +138,6 @@ cargo-build: rules: - exists: - Cargo.toml - mix-build: stage: build image: elixir:latest @@ -173,3 +148,8 @@ mix-build: rules: - exists: - mix.exs +trufflehog: + stage: security + image: trufflesecurity/trufflehog:latest + script: + - trufflehog git file://. --only-verified --fail diff --git a/.machine_readable/6a2/0-AI-MANIFEST.a2ml b/.machine_readable/6a2/0-AI-MANIFEST.a2ml new file mode 100644 index 00000000..6bf1f8c7 --- /dev/null +++ b/.machine_readable/6a2/0-AI-MANIFEST.a2ml @@ -0,0 +1,31 @@ +# AI Manifest for 6a2 Directory + +## Purpose + +This manifest declares the AI-assistant context for the 6a2 machine-readable metadata directory. + +## Canonical Locations + +The 6 core A2ML files MUST exist in this directory: +1. AGENTIC.a2ml +2. ECOSYSTEM.a2ml +3. META.a2ml +4. NEUROSYM.a2ml +5. PLAYBOOK.a2ml +6. STATE.a2ml + +## Invariants + +- No duplicate files in root directory +- Single source of truth: this directory is authoritative +- No stale metadata + +## Protocol + +When multiple agents may write to A2ML files concurrently: +1. Read file and record git-sha-at-read in [provenance] section +2. Lock by creating .lock- +3. Write updated file with new [provenance] metadata +4. Release by removing lock file +5. On conflict: re-read and retry if git-sha-at-read does not match HEAD + diff --git a/.machine_readable/6a2/README.adoc b/.machine_readable/6a2/README.adoc new file mode 100644 index 00000000..bc033d70 --- /dev/null +++ b/.machine_readable/6a2/README.adoc @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell +# A2ML 6a2 Directory + +This directory contains the 6 core A2ML machine-readable metadata files for this repository. + +## Files + +- `AGENTIC.a2ml` - AI agent operational gating, safety controls +- `ECOSYSTEM.a2ml` - Project ecosystem position, relationships, explicit boundaries +- `META.a2ml` - Architecture decisions (ADRs), development practices, design rationale +- `NEUROSYM.a2ml` - Symbolic semantics, composition algebra +- `PLAYBOOK.a2ml` - Executable plans, operational runbooks +- `STATE.a2ml` - Project state, phase, milestones, session history + +## Standards Compliance + +These files follow the A2ML Format Family specification from: +https://github.com/hyperpolymath/standards/tree/main/a2ml + +## Generation + +These files may be generated from .scm source files using transpilation tools. +Source .scm files should be removed after successful transpilation. + +## See Also + +- [A2ML Repository Template](https://github.com/hyperpolymath/standards/blob/main/A2ML-REPO-TEMPLATE.adoc) +- [6A2 Format Family](https://github.com/hyperpolymath/standards#a2ml-format-family-7-formats) + diff --git a/.machine_readable/6a2/anchor/0-AI-MANIFEST.a2ml b/.machine_readable/6a2/anchor/0-AI-MANIFEST.a2ml new file mode 100644 index 00000000..0dd6825b --- /dev/null +++ b/.machine_readable/6a2/anchor/0-AI-MANIFEST.a2ml @@ -0,0 +1,21 @@ +# AI Manifest for Anchor Directory + +## Purpose + +This manifest declares the AI-assistant context for the anchor machine-readable metadata directory. + +## Canonical Locations + +ANCHOR.a2ml files MUST exist in this directory. + +## Multiple Versions + +Unlike other A2ML files, multiple versions of ANCHOR.a2ml with different dates MAY exist. +Each version represents a specific recalibration point. + +## Invariants + +- Multiple versions with different dates are permitted +- No other A2ML files in this directory +- Single source of truth for anchor documents + diff --git a/.machine_readable/anchors/ANCHOR.a2ml b/.machine_readable/6a2/anchor/ANCHOR.a2ml similarity index 100% rename from .machine_readable/anchors/ANCHOR.a2ml rename to .machine_readable/6a2/anchor/ANCHOR.a2ml diff --git a/.machine_readable/6a2/anchor/README.adoc b/.machine_readable/6a2/anchor/README.adoc new file mode 100644 index 00000000..bd23e359 --- /dev/null +++ b/.machine_readable/6a2/anchor/README.adoc @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell +# A2ML Anchor Directory + +This directory contains ANCHOR.a2ml files for project recalibration and scope intervention. + +## Files + +- `ANCHOR.a2ml` - Project recalibration, scope intervention, canonical authority + +## Multiple Versions + +Unlike other A2ML files, multiple versions of ANCHOR.a2ml with different dates may exist. +Each version represents a specific recalibration point in the project history. + +## Standards Compliance + +These files follow the ANCHOR.a2ml specification from: +https://github.com/hyperpolymath/standards/tree/main/anchor-a2ml + +## See Also + +- [A2ML Repository Template](https://github.com/hyperpolymath/standards/blob/main/A2ML-REPO-TEMPLATE.adoc) +- [Anchor A2ML Spec](https://github.com/hyperpolymath/standards/tree/main/anchor-a2ml) + diff --git a/.machine_readable/TRUST.contractile b/.machine_readable/TRUST.contractile deleted file mode 100644 index 4df77c87..00000000 --- a/.machine_readable/TRUST.contractile +++ /dev/null @@ -1,80 +0,0 @@ -; SPDX-License-Identifier: MPL-2.0 -; TRUST.contractile — Trust boundaries for odds-and-sods-package-manager -; Defines what LLM/SLM agents are trusted to do without asking. -; -; Part of the contractile family: MUST, TRUST, DUST, INTENT, ADJUST - -; ── Definitions ────────────────────────────────────────────────── -; -; TRUST (noun/verb) -; The permission contractile. Defines the boundary between what an AI -; agent may do autonomously and what requires human approval. Trust is -; graduated — not binary — with four levels from minimal to maximal. -; -; Trust levels: -; - maximal: Agent may read, build, test, lint, format, heal freely. -; Only destructive/external actions require approval. -; - standard: Agent may read and build. Test/lint need approval. -; - restricted: Agent may read only. All modifications need approval. -; - minimal: Agent may read specific files only. Everything else blocked. -; -; Scope: -; TRUST governs AI agent behaviour only. It does not affect human -; contributors — humans follow CONTRIBUTING.md and GOVERNANCE.adoc. -; -; Relationship to other contractiles: -; - MUST: Trust never overrides MUST. Even at maximal trust, MUST -; violations are blocked. -; - ADJUST: Trust does not exempt from ADJUST. All trust tiers must -; produce accessible output. -; - INTENT: TRUST.trust-deny protects the sensitive areas listed in -; INTENT.ask-before-touching. -; - DUST: Deprecated features have the same trust rules as active ones. -; -; ── End Definitions ────────────────────────────────────────────── - -(trust-contractile - (version "1.0.0") - (repo "odds-and-sods-package-manager") - - (trust-level "maximal") ; maximal | standard | restricted | minimal - - ; === Maximal Trust (default) === - ; LLM may freely do these without asking: - (trust-actions - "read" ; Read any file in the repo - "build" ; Run build commands - "test" ; Run test suites - "lint" ; Run linters and formatters - "format" ; Auto-format code - "doctor" ; Run self-diagnostics - "heal" ; Attempt automatic repair - "git-status" ; Check git status - "git-diff" ; View diffs - "git-log" ; View history - ) - - ; === Denied Actions (always require human approval) === - (trust-deny - "delete-branch" ; Could lose work - "force-push" ; Overwrites history - "modify-ci-secrets" ; Security sensitive - "publish" ; External visibility - "push-to-main" ; Protected branch - "delete-files-bulk" ; More than 5 files at once - "modify-license" ; Legal implications - "modify-security-policy" ; Security implications - "remove-proofs" ; Formal verification regression - "disable-ci-checks" ; Safety regression - ) - - ; === Trust Boundary === - (trust-boundary "repo") ; LLM confined to this repo unless explicitly told otherwise - - ; === Override === - ; Repos requiring tighter trust override these settings with justification: - ; (override - ; (trust-level "restricted") - ; (reason "Contains production secrets / handles PII / etc.") - ; ) -) diff --git a/.machine_readable/agent_instructions/README.adoc b/.machine_readable/bot_directives/README.adoc similarity index 88% rename from .machine_readable/agent_instructions/README.adoc rename to .machine_readable/bot_directives/README.adoc index 9bc2e24b..a5315c7d 100644 --- a/.machine_readable/agent_instructions/README.adoc +++ b/.machine_readable/bot_directives/README.adoc @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +// Copyright (c) Jonathan D.A. Jewell = Agent Instructions :toc: preamble @@ -32,7 +32,7 @@ Methodology-aware configuration for AI agents. Read by any AI agent == Relationship to Other Files * `AGENTIC.a2ml` says WHAT agents can do (permissions, gating) -* `agent_instructions/` says HOW agents should work (methodology) +* `bot_directives/` says HOW agents should work (methodology) * `bot_directives/` says what the gitbot-fleet does (fleet-specific) * `CLAUDE.md` says how Claude specifically should work (Claude-specific) diff --git a/.machine_readable/agent_instructions/coverage.a2ml b/.machine_readable/bot_directives/coverage.a2ml similarity index 100% rename from .machine_readable/agent_instructions/coverage.a2ml rename to .machine_readable/bot_directives/coverage.a2ml diff --git a/.machine_readable/agent_instructions/debt.a2ml b/.machine_readable/bot_directives/debt.a2ml similarity index 100% rename from .machine_readable/agent_instructions/debt.a2ml rename to .machine_readable/bot_directives/debt.a2ml diff --git a/.machine_readable/agent_instructions/methodology.a2ml b/.machine_readable/bot_directives/methodology.a2ml similarity index 100% rename from .machine_readable/agent_instructions/methodology.a2ml rename to .machine_readable/bot_directives/methodology.a2ml diff --git a/.machine_readable/contractiles/Adjustfile.a2ml b/.machine_readable/contractiles/Adjustfile.a2ml new file mode 100644 index 00000000..6f01e89f --- /dev/null +++ b/.machine_readable/contractiles/Adjustfile.a2ml @@ -0,0 +1,72 @@ +# SPDX-License-Identifier: MPL-2.0 +# Adjustfile — Drift-tolerance contract for rsr-template-repo +# Author: Jonathan D.A. Jewell +# +# Cumulative-drift catchment: tolerance bands + corrective actions. +# Authority: advisory (Yard) — continue-with-warnings; auto_fix where deterministic. +# Run with: adjust check +# Fix with: adjust fix (applies deterministic patches; advisory otherwise) + +@abstract: +Drift tolerances and corrective actions for rsr-template-repo. Unlike +MUST (hard gate), ADJUST tracks cumulative drift against tolerance bands +and proposes corrective actions. Advisory — it warns and trends, it does +not block. +@end + +## Template Drift + +### placeholder-drift +- description: Template placeholders should be replaced when copied +- tolerance: 0 placeholder markers in copied repos +- corrective: Search and replace all {{PLACEHOLDER}} markers +- severity: advisory +- notes: This check only applies to repos that copied from this template + +### template-version-drift +- description: Template version should match RSR spec version +- tolerance: Template version matches current RSR spec +- corrective: Update template to match latest RSR spec +- severity: advisory + +## Documentation Drift + +### readme-completeness +- description: README should document all template features +- tolerance: README covers all contractiles and directory structure +- corrective: Update README.adoc with missing sections +- severity: advisory + +### example-accuracy +- description: Examples in documentation should match actual template content +- tolerance: All code examples in docs are accurate +- corrective: Audit and fix examples in documentation +- severity: advisory + +## Structural Drift + +### contractile-sync +- description: All contractiles should have matching a2ml and ncl implementations +- tolerance: Every .a2ml has a corresponding .ncl +- corrective: Generate missing .ncl files from .a2ml +- severity: advisory + +### no-broken-symlinks +- description: No broken symbolic links in template structure +- tolerance: 0 broken symlinks +- corrective: Run symlink-check script +- severity: advisory + +## Accessibility Drift + +### adoc-not-md +- description: Template docs should prefer AsciiDoc +- tolerance: New prose docs are *.adoc +- corrective: Convert any new *.md to *.adoc +- severity: advisory + +### spdx-header-consistency +- description: All template files have correct SPDX headers +- tolerance: 0 files missing SPDX-License-Identifier +- corrective: Add SPDX headers to files that need them +- severity: advisory diff --git a/.machine_readable/contractiles/Intentfile.a2ml b/.machine_readable/contractiles/Intentfile.a2ml new file mode 100644 index 00000000..ef74f452 --- /dev/null +++ b/.machine_readable/contractiles/Intentfile.a2ml @@ -0,0 +1,99 @@ +# SPDX-License-Identifier: MPL-2.0 +# Intentfile (A2ML Canonical) — north-star contractile for rsr-template-repo +# Author: Jonathan D.A. Jewell +# +# Paired runner: intend.ncl +# Verb: intend +# +# Semantics: North-star contractile. Declares BOTH concrete committed +# next-actions AND horizon aspirations the project wishes to +# become. Two sections share one file because they answer +# the same question at different ranges: +# [[intents]] — "we WILL do this; track progress" +# status: declared → in_progress → done | +# deferred | retired +# [[wishes]] — "we WISH this were true; revisit later" +# status: declared → in_progress → achieved | +# abandoned +# grouped by horizon: near / mid / far. +# Non-gating — this is a report, not a gate. See the `must` +# contractile for hard gates. + +@abstract: +North-star contractile for rsr-template-repo. This repository is the +canonical template for Rhodium Standard Repository compliance. It provides +the scaffold that all hyperpolymath repos should copy and customize. +@end + +## Purpose + +The rsr-template-repo serves as the master template for all hyperpolymath +repositories. It contains the complete set of contractile files, machine-readable +specifications, and governance documentation that define the Rhodium Standard. + +Every new repository in the hyperpolymath estate should be initialized by +copying this template and substituting the placeholder values with +repo-specific content. + +## Anti-Purpose + +This repository is NOT: +- A general-purpose project scaffold for external use (hyperpolymath-only) +- A replacement for per-repo customization (all files must be bespoke) +- A static template that never changes (evolves with RSR spec) +- A runtime library or framework (build-time only) + +## If In Doubt + +If you are unsure whether a change is in scope, ask. Sensitive areas: +- .machine_readable/ contractile definitions +- RSR specification files +- Governance templates +- License policy documents + +## Committed Next-Actions + +### repo-initialization +- description: Provide just copy-and-substitute template for new repos +- probe: test -f scripts/init-repo.sh +- status: done +- notes: Run with source scripts/init-repo.sh + +### contractile-completeness +- description: Every RSR contractile has an a2ml and ncl implementation +- probe: ls .machine_readable/contractiles/*.a2ml | wc -l | grep -q "^6$" +- status: in_progress +- notes: Currently 6 contractile verbs: intend, must, trust, adjust, bust, dust + +### automation-scripts +- description: All repetitive tasks have just recipes +- probe: grep -c "^# " Justfile | grep -q "^[6-9][0-9]*$" +- status: in_progress + +## Wishes + +### Near Horizon + +#### cross-repo-validation +- description: Tooling to validate all repos against RSR spec +- horizon: near +- status: declared + +#### automated-substitution +- description: Script to automate repo-specific substitution in template +- horizon: near +- status: declared + +### Mid Horizon + +#### formal-verification +- description: Idris2 proofs for all critical contractile invariants +- horizon: mid +- status: declared + +### Far Horizon + +#### ecosystem-visualization +- description: Interactive graph of all hyperpolymath repos and dependencies +- horizon: far +- status: declared diff --git a/.machine_readable/contractiles/Justfile b/.machine_readable/contractiles/Justfile new file mode 100644 index 00000000..6152344f --- /dev/null +++ b/.machine_readable/contractiles/Justfile @@ -0,0 +1,294 @@ +# SPDX-License-Identifier: MPL-2.0 +# OPSM - Odds and Sods Package Manager +# https://just.systems/man/en/ + +set shell := ["bash", "-uc"] +set dotenv-load := true +set positional-arguments := true + +import? "contractile.just" + +project := "opsm" +version := "1.2.0" + +# ═══════════════════════════════════════════════════════════════════════════════ +# DEFAULT & HELP +# ═══════════════════════════════════════════════════════════════════════════════ + +default: + @just --list --unsorted + +# ═══════════════════════════════════════════════════════════════════════════════ +# BUILD +# ═══════════════════════════════════════════════════════════════════════════════ + +# Build ReScript CLI +build-cli: + deno task build + +# Build ReScript CLI in watch mode +build-cli-watch: + deno task build:watch + +# Build Elixir escript (standalone binary) +build-escript: + cd opsm_ex && mix deps.get && mix escript.build + +# Build Tauri mobile app (debug) +build-mobile: + cd opsm_mobile/src-tauri && cargo build + +# Build Tauri mobile app (release) +build-mobile-release: + cd opsm_mobile/src-tauri && cargo build --release + +# Build a specific Rust microservice +build-service name: + cd services/{{name}} && cargo build + +# Build all Rust microservices +build-services: + #!/usr/bin/env bash + for svc in services/*/; do + svc_name=$(basename "$svc") + echo "Building $svc_name..." + (cd "$svc" && cargo build) || exit 1 + done + +# Build everything +build: build-cli build-escript + +# Clean all build artifacts +clean: + deno task clean + cd opsm_ex && mix clean + rm -rf opsm_ex/opsm + +# ═══════════════════════════════════════════════════════════════════════════════ +# TEST +# ═══════════════════════════════════════════════════════════════════════════════ + +# Run Elixir tests +test *args: + cd opsm_ex && mix test {{args}} + +# Run Elixir tests with verbose output +test-verbose: + cd opsm_ex && mix test --trace + +# Run Deno tests +test-cli: + deno task test + +# Run all tests +test-all: test test-cli + +# ═══════════════════════════════════════════════════════════════════════════════ +# LINT & FORMAT +# ═══════════════════════════════════════════════════════════════════════════════ + +# Format Elixir code +fmt-ex: + cd opsm_ex && mix format + +# Format with Deno +fmt-deno: + deno fmt + +# Lint ReScript output with Deno +lint: + deno lint cli/*.res.js cli/clients/*.res.js + +# Check Elixir format +fmt-check: + cd opsm_ex && mix format --check-formatted + +# Format all code +fmt: fmt-ex fmt-deno + +# ═══════════════════════════════════════════════════════════════════════════════ +# RUN +# ═══════════════════════════════════════════════════════════════════════════════ + +# Run OPSM via escript (primary CLI) +opsm *args: + cd opsm_ex && ./opsm {{args}} + +# Run OPSM via Deno (ReScript CLI — trust pipeline) +opsm-cli *args: + deno task opsm -- {{args}} + +# Run OPSM Elixir in dev mode with IEx +repl: + cd opsm_ex && iex -S mix + +# ═══════════════════════════════════════════════════════════════════════════════ +# PACKAGE OPERATIONS (shortcuts) +# ═══════════════════════════════════════════════════════════════════════════════ + +# Install a package (dry-run) +install-dry forth pkg: + cd opsm_ex && ./opsm install @{{forth}} {{pkg}} --dry-run + +# Search across all registries +search query: + cd opsm_ex && ./opsm search {{query}} + +# Show package info +info forth pkg: + cd opsm_ex && ./opsm info @{{forth}} {{pkg}} + +# Check for updates +check-updates: + cd opsm_ex && ./opsm check-update + +# Verify lockfile integrity +verify: + cd opsm_ex && ./opsm check + +# ═══════════════════════════════════════════════════════════════════════════════ +# DEPENDENCIES +# ═══════════════════════════════════════════════════════════════════════════════ + +# Install Elixir dependencies +deps-ex: + cd opsm_ex && mix deps.get + +# Install all dependencies +deps: deps-ex + @echo "Deno deps auto-resolved via import maps" + +# Audit Elixir dependencies +deps-audit: + cd opsm_ex && mix hex.audit + +# ═══════════════════════════════════════════════════════════════════════════════ +# CONTAINERS +# ═══════════════════════════════════════════════════════════════════════════════ + +# Build a service container image +container-build service tag="latest": + podman build -t {{project}}-{{service}}:{{tag}} -f services/{{service}}/Containerfile services/{{service}}/ + +# Start all OPSM services +compose-up *args: + #!/usr/bin/env bash + if command -v selur-compose >/dev/null 2>&1; then + selur-compose -f selur-compose.yml up {{args}} + elif command -v podman-compose >/dev/null 2>&1; then + podman-compose -f selur-compose.yml up {{args}} + else + echo "Install selur-compose or podman-compose" + exit 1 + fi + +# Stop all OPSM services +compose-down: + #!/usr/bin/env bash + if command -v selur-compose >/dev/null 2>&1; then + selur-compose -f selur-compose.yml down + elif command -v podman-compose >/dev/null 2>&1; then + podman-compose -f selur-compose.yml down + fi + +# ═══════════════════════════════════════════════════════════════════════════════ +# CI & QUALITY +# ═══════════════════════════════════════════════════════════════════════════════ + +# Run full CI pipeline locally +ci: deps build test lint fmt-check + @echo "CI pipeline complete!" + +# ═══════════════════════════════════════════════════════════════════════════════ +# UTILITIES +# ═══════════════════════════════════════════════════════════════════════════════ + +# Count lines of code +loc: + @echo "=== OPSM Lines of Code ===" + @echo -n "Elixir: " && find opsm_ex/lib -name "*.ex" | xargs wc -l 2>/dev/null | tail -1 + @echo -n "ReScript: " && find cli -name "*.res" | xargs wc -l 2>/dev/null | tail -1 + @echo -n "Rust (services): " && find services -name "*.rs" | xargs wc -l 2>/dev/null | tail -1 + @echo -n "Rust (mobile): " && find opsm_mobile -name "*.rs" | xargs wc -l 2>/dev/null | tail -1 + +# Show TODO comments +todos: + @grep -rn "TODO\|FIXME" --include="*.ex" --include="*.res" --include="*.rs" . 2>/dev/null | grep -v node_modules | grep -v _build | grep -v target || echo "No TODOs" + +# Show git status +status: + @git status --short + +# Show recent commits +log count="20": + @git log --oneline -{{count}} + +# Run panic-attacker pre-commit scan +assail: + @command -v panic-attack >/dev/null 2>&1 && panic-attack assail . || echo "panic-attack not found — install from https://github.com/hyperpolymath/panic-attacker" + +# Self-diagnostic — checks dependencies, permissions, paths +doctor: + @echo "Running diagnostics for odds-and-sods-package-manager..." + @echo "Checking required tools..." + @command -v just >/dev/null 2>&1 && echo " [OK] just" || echo " [FAIL] just not found" + @command -v git >/dev/null 2>&1 && echo " [OK] git" || echo " [FAIL] git not found" + @echo "Checking for hardcoded paths..." + @grep -rn '$HOME\|$ECLIPSE_DIR' --include='*.rs' --include='*.ex' --include='*.res' --include='*.gleam' --include='*.sh' . 2>/dev/null | head -5 || echo " [OK] No hardcoded paths" + @echo "Diagnostics complete." + +# Auto-repair common issues +heal: + @echo "Attempting auto-repair for odds-and-sods-package-manager..." + @echo "Fixing permissions..." + @find . -name "*.sh" -exec chmod +x {} \; 2>/dev/null || true + @echo "Cleaning stale caches..." + @rm -rf .cache/stale 2>/dev/null || true + @echo "Repair complete." + +# Guided tour of key features +tour: + @echo "=== odds-and-sods-package-manager Tour ===" + @echo "" + @echo "1. Project structure:" + @ls -la + @echo "" + @echo "2. Available commands: just --list" + @echo "" + @echo "3. Read README.adoc for full overview" + @echo "4. Read EXPLAINME.adoc for architecture decisions" + @echo "5. Run 'just doctor' to check your setup" + @echo "" + @echo "Tour complete! Try 'just --list' to see all available commands." + +# Open feedback channel with diagnostic context +help-me: + @echo "=== odds-and-sods-package-manager Help ===" + @echo "Platform: $(uname -s) $(uname -m)" + @echo "Shell: $SHELL" + @echo "" + @echo "To report an issue:" + @echo " https://github.com/hyperpolymath/odds-and-sods-package-manager/issues/new" + @echo "" + @echo "Include the output of 'just doctor' in your report." + + +# Print the current CRG grade (reads from READINESS.md '**Current Grade:** X' line) +crg-grade: + @grade=$$(grep -oP '(?<=\*\*Current Grade:\*\* )[A-FX]' READINESS.md 2>/dev/null | head -1); \ + [ -z "$$grade" ] && grade="X"; \ + echo "$$grade" + +# Generate a shields.io badge markdown for the current CRG grade +# Looks for '**Current Grade:** X' in READINESS.md; falls back to X +crg-badge: + @grade=$$(grep -oP '(?<=\*\*Current Grade:\*\* )[A-FX]' READINESS.md 2>/dev/null | head -1); \ + [ -z "$$grade" ] && grade="X"; \ + case "$$grade" in \ + A) color="brightgreen" ;; B) color="green" ;; C) color="yellow" ;; \ + D) color="orange" ;; E) color="red" ;; F) color="critical" ;; \ + *) color="lightgrey" ;; esac; \ + echo "[![CRG $$grade](https://img.shields.io/badge/CRG-$$grade-$$color?style=flat-square)](https://github.com/hyperpolymath/standards/tree/main/component-readiness-grades)" + +secret-scan-trufflehog: + @command -v trufflehog >/dev/null && trufflehog filesystem . --only-verified || true diff --git a/.machine_readable/contractiles/Mustfile.a2ml b/.machine_readable/contractiles/Mustfile.a2ml new file mode 100644 index 00000000..55f8ab48 --- /dev/null +++ b/.machine_readable/contractiles/Mustfile.a2ml @@ -0,0 +1,102 @@ +# SPDX-License-Identifier: MPL-2.0 +# Mustfile — Physical state contract for rsr-template-repo +# Author: Jonathan D.A. Jewell +# +# What MUST be true about this repository. Hard requirements. +# Run with: must check +# Fix with: must fix (where a deterministic fix exists) + +@abstract: +Physical-state invariants for rsr-template-repo. This is the canonical +RSR template repository. These are hard requirements — CI and pre-commit +hooks fail if any check fails. +@end + +## File Presence + +### license-present +- description: LICENSE file must exist +- run: test -f LICENSE +- severity: critical + +### readme-present +- description: README.adoc must exist +- run: test -f README.adoc +- severity: critical + +### security-policy +- description: SECURITY.md must exist +- run: test -f SECURITY.md +- severity: critical + +### ai-manifest +- description: 0-AI-MANIFEST.a2ml must exist +- run: test -f 0-AI-MANIFEST.a2ml +- severity: critical + +### governance-docs +- description: GOVERNANCE.adoc, MAINTAINERS.adoc, CODEOWNERS must exist +- run: test -f GOVERNANCE.adoc && test -f MAINTAINERS.adoc && test -f .github/CODEOWNERS +- severity: critical + +### machine-readable-dir +- description: .machine_readable/ directory must exist +- run: test -d .machine_readable +- severity: critical + +## Directory Structure + +### contractiles-complete +- description: All required contractile directories exist +- run: test -d .machine_readable/contractiles && test -d .machine_readable/contractiles/bust && test -d .machine_readable/contractiles/dust +- severity: critical + +### contractiles-files-present +- description: All four primary contractile files exist +- run: test -f .machine_readable/contractiles/Intentfile.a2ml && test -f .machine_readable/contractiles/Mustfile.a2ml && test -f .machine_readable/contractiles/Trustfile.a2ml && test -f .machine_readable/contractiles/Adjustfile.a2ml +- severity: critical + +### bust-dust-files-present +- description: Bustfile and Dustfile exist in their directories +- run: test -f .machine_readable/contractiles/bust/Bustfile.a2ml && test -f .machine_readable/contractiles/dust/Dustfile.a2ml +- severity: critical + +### six-directory-present +- description: 6a2 directory exists with required files +- run: test -d .machine_readable/6a2 && test -f .machine_readable/6a2/META.a2ml && test -f .machine_readable/6a2/ECOSYSTEM.a2ml && test -f .machine_readable/6a2/STATE.a2ml && test -f .machine_readable/6a2/PLAYBOOK.a2ml && test -f .machine_readable/6a2/AGENTIC.a2ml && test -f .machine_readable/6a2/NEUROSYM.a2ml +- severity: critical + +### anchors-directory +- description: anchors directory exists in 6a2 +- run: test -d .machine_readable/6a2/anchors +- severity: warning + +### self-validating-structure +- description: self-validating directory has k9-svc and examples +- run: test -d .machine_readable/self-validating && test -d .machine_readable/self-validating/k9-svc && test -d .machine_readable/self-validating/examples +- severity: warning + +## Template Integrity + +### no-placeholder-values +- description: No placeholder values remain in template files +- run: test -z "$(grep -r '{{' .machine_readable/contractiles/ 2>/dev/null)" +- severity: critical +- notes: All placeholders must be substituted when copying this template + +### template-readonly +- description: Template marker files are not modified +- run: grep -q 'RSR_TEMPLATE_DO_NOT_EDIT' .machine_readable/0.1-AI-MANIFEST.a2ml +- severity: warning + +## Git State + +### no-untracked-contractiles +- description: All contractile files are tracked in git +- run: test -z "$(git ls-files -o --exclude-standard .machine_readable/contractiles/ 2>/dev/null)" +- severity: critical + +### signed-commits +- description: All commits must be signed +- run: git verify-commit HEAD +- severity: critical diff --git a/.machine_readable/contractiles/Trustfile.a2ml b/.machine_readable/contractiles/Trustfile.a2ml new file mode 100644 index 00000000..e2028b56 --- /dev/null +++ b/.machine_readable/contractiles/Trustfile.a2ml @@ -0,0 +1,88 @@ +# SPDX-License-Identifier: MPL-2.0 +# Trustfile — Trust boundaries and integrity invariants for rsr-template-repo +# Author: Jonathan D.A. Jewell +# +# Defines what LLM/SLM agents are trusted to do without asking, and +# integrity invariants that verify the repo has not been tampered with. + +@abstract: +Trust boundaries and integrity checks for rsr-template-repo. This file +combines the trust-level definitions from the original TRUST.contractile +with the integrity invariants from the old Trustfile.a2ml. It defines +what AI agents may do autonomously and what requires human approval, +plus checks that verify repository integrity. +@end + +## Trust Levels + +The rsr-template-repo operates at trust level: maximal + +Trust levels: +- maximal: Agent may read, build, test, lint, format, heal freely. + Only destructive/external actions require approval. +- standard: Agent may read and build. Test/lint need approval. +- restricted: Agent may read only. All modifications need approval. +- minimal: Agent may read specific files only. Everything else blocked. + +Current trust level: maximal + +## Integrity Invariants + +### Secrets + +#### no-secrets-committed +- description: No credential files in repo +- run: test ! -f .env && test ! -f credentials.json && test ! -f .env.local && test ! -f .env.production +- severity: critical + +#### no-private-keys +- description: No private key files committed +- run: "! find . -name '*.pem' -o -name '*.key' -o -name 'id_rsa' -o -name 'id_ed25519' 2>/dev/null | grep -v node_modules | head -1 | grep -q ." +- severity: critical + +#### no-tokens-in-source +- description: No hardcoded API tokens in source +- run: "! grep -rE '(api[_-]?key|secret|token|password)\s*[:=]\s*[\"'\\''][A-Za-z0-9]{16,}' --include='*.js' --include='*.ts' --include='*.res' --include='*.py' . 2>/dev/null | grep -v node_modules | head -1 | grep -q ." +- severity: critical + +## Provenance + +#### author-correct +- description: Git author matches expected identity +- run: "git log -1 --format='%ae' | grep -qE '(hyperpolymath|j\\.d\\.a\\.jewell)'" +- severity: warning + +#### license-content +- description: LICENSE contains expected identifier +- run: grep -q 'PMPL\|MPL\|MIT\|Apache\|LGPL' LICENSE +- severity: warning + +## Template-Specific Trust + +### template-files-readonly +- description: Template scaffold files should not be modified except by maintainer +- run: test -z "$(git status --short .machine_readable/ 2>/dev/null | grep -v '^??' || true)" +- severity: advisory +- notes: Changes to template files require careful review + +### trust-deny-areas +- description: Sensitive areas from INTENT.contractile require explicit approval +- run: echo "Check .machine_readable/ contractiles and governance docs" +- severity: advisory +- areas: + - .machine_readable/ + - GOVERNANCE.adoc + - MAINTAINERS.adoc + - .github/CODEOWNERS + +## Container Security + +#### container-images-pinned +- description: Containerfile uses pinned base images +- run: test ! -f Containerfile || grep -q 'cgr.dev\|@sha256:' Containerfile +- severity: warning + +#### no-dockerfile +- description: No Dockerfile (use Containerfile) +- run: test ! -f Dockerfile +- severity: warning diff --git a/.machine_readable/contractiles/adjust/Adjustfile.a2ml b/.machine_readable/contractiles/adjust/Adjustfile.a2ml deleted file mode 100644 index 4a83cf0c..00000000 --- a/.machine_readable/contractiles/adjust/Adjustfile.a2ml +++ /dev/null @@ -1,128 +0,0 @@ -; SPDX-License-Identifier: MPL-2.0 -; ADJUST.contractile — Accessibility invariants for odds-and-sods-package-manager -; "ADJUST" = Accessibility & Digital Justice for Universal Software & Technology -; -; Part of the contractile family: MUST, TRUST, DUST, INTENT, ADJUST -; This file is machine-readable. LLM/SLM agents MUST NOT violate these invariants. - -; ── Definitions ────────────────────────────────────────────────── -; -; ADJUST (noun/verb) -; The accessibility contractile. Defines how software must adapt to serve -; all users regardless of ability, device, or context. Named for the verb -; "adjust" — to make suitable, to adapt, to accommodate — which is the -; core action of accessible design. -; -; Scope: -; ADJUST governs all user-facing interfaces: GUI, TUI, CLI, web, mobile, -; documentation, error messages, and installation flows. It applies to -; both human users and assistive technologies (screen readers, switch -; devices, braille displays, voice control). -; -; Relationship to other contractiles: -; - MUST: ADJUST invariants are a subset of MUST — violating ADJUST -; is a MUST violation. ADJUST exists separately because accessibility -; rules are numerous enough to warrant their own file, and because -; LLMs frequently forget accessibility unless explicitly reminded. -; - TRUST: ADJUST does not affect trust levels. All trust tiers must -; respect ADJUST invariants equally. -; - DUST: Deprecating a feature does not exempt it from ADJUST until -; it is fully removed. Deprecated UI must remain accessible. -; - INTENT: ADJUST supports the anti-purpose "this software is NOT -; only for able-bodied users with modern hardware." -; -; Standard: WCAG 2.2 Level AA (minimum) -; https://www.w3.org/WAI/WCAG22/quickref/?levels=aaa -; -; Why a separate file: -; Experience shows LLMs and developers alike treat accessibility as an -; afterthought. By placing invariants in a contractile that is loaded -; at session start, we make it structurally impossible to forget. -; -; ── End Definitions ────────────────────────────────────────────── - -project = "odds-and-sods-package-manager" - -(adjust-contractile - (version "1.0.0") - (full-name "Accessibility & Digital Justice for Universal Software & Technology") - (standard "WCAG-2.2-AA") - (repo "odds-and-sods-package-manager") - - (invariants - ; ── Visual ── - (adjust "colour-contrast-ratio >= 4.5:1 for normal text") - (adjust "colour-contrast-ratio >= 3:1 for large text (18pt+ or 14pt+ bold)") - (adjust "no information conveyed by colour alone") - (adjust "no flashing or strobing content (3 flashes/second max)") - (adjust "text resizable to 200% without loss of content or function") - (adjust "focus indicators visible on all interactive elements") - - ; ── Keyboard ── - (adjust "all interactive elements reachable via keyboard (Tab/Shift+Tab)") - (adjust "no keyboard traps — user can always Tab away") - (adjust "skip navigation link present on pages with repeated blocks") - (adjust "logical focus order follows visual reading order") - - ; ── Screen reader ── - (adjust "all images have meaningful alt text (or alt='' if decorative)") - (adjust "all form inputs have associated labels") - (adjust "ARIA landmarks used for page regions (main, nav, banner, etc.)") - (adjust "dynamic content updates announced via aria-live regions") - (adjust "semantic HTML used (headings, lists, tables) — not div soup") - - ; ── Interactive ── - (adjust "touch targets minimum 44x44px on mobile/touch interfaces") - (adjust "error messages identify the field and describe the error") - (adjust "error messages not conveyed by colour or position alone") - (adjust "form validation provides suggestions for correction") - - ; ── Media ── - (adjust "video has captions (closed or open)") - (adjust "audio-only content has text transcript") - (adjust "no autoplay of media with sound") - - ; ── Motion ── - (adjust "animations respect prefers-reduced-motion media query") - (adjust "no content depends on motion to convey meaning") - - ; ── CLI/TUI ── - (adjust "CLI output must not rely solely on colour (use symbols: [OK] [FAIL])") - (adjust "TUI must support high-contrast mode") - (adjust "all CLI commands support --help with plain-text output") - (adjust "error messages written in plain language, not jargon or codes alone") - - ; ── Documentation ── - (adjust "docs use clear language, short sentences, logical structure") - (adjust "code examples include comments explaining non-obvious steps") - (adjust "diagrams have text descriptions or alt text") - - ; ── Internationalisation (i18n) ── - (adjust "all user-facing strings externalisable for translation") - (adjust "no hardcoded English in error messages — use message keys") - (adjust "date/time/number formats locale-aware") - (adjust "RTL (right-to-left) layout support where applicable") - (adjust "Unicode handled correctly throughout (UTF-8 everywhere)") - ) - - (related-resources - ; LOL — super-parallel corpus crawler for 1500+ languages - ; Use for linguistic data, translation coverage, and i18n validation - (lol "standards/lol — multilingual NLP corpus, see README.adoc") - (polyglot-i18n "polyglot-i18n — i18n framework and WASM translation engine") - ) - - (enforcement - (ci "accessibility linting in quality.yml workflow") - (pr-block "PR blocked if accessibility regression detected") - (tool "axe-core or pa11y for automated checks on web UI") - (tool "CLI output inspected for colour-only signalling") - (manual "manual screen reader test before major releases") - ) - - (notes - "These are MINIMUM requirements. Exceeding them (AAA) is encouraged." - "When in doubt about an accessibility decision, ask — don't guess." - "Accessibility is not optional polish — it is a structural requirement." - ) -) diff --git a/.machine_readable/contractiles/adjust/adjust.ncl b/.machine_readable/contractiles/adjust/adjust.ncl deleted file mode 100644 index f9956814..00000000 --- a/.machine_readable/contractiles/adjust/adjust.ncl +++ /dev/null @@ -1,58 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Adjust — accessibility and digital justice runner -# -# Pairs with: Adjustfile.a2ml (same directory) -# Verb: adjust -# Semantics: every declared accessibility invariant must hold. Runner -# checks WCAG 2.2 AA compliance, CLI colour-only signalling, -# and i18n requirements. Hard gate on any regression. -# ADJUST invariants are a subset of MUST — any ADJUST violation -# is also a MUST violation. -# CLI: `contractile adjust check` → list invariants + compliance status -# `contractile adjust audit` → run accessibility audit tools -# -# Anything else in this directory is human-only notes/archive; machines ignore. -# See: docs/CONTRACTILE-SPEC.adoc - -{ - pedigree = { - contractile_verb = "adjust", - semantics = "accessibility + digital justice enforcement", - security = { - leash = 'Leash, - trust_level = "read-only audit; no write access", - allow_network = true, # may call axe-core, pa11y, or remote validators - allow_filesystem_write = false, - allow_subprocess = true, - network_allowlist = ["localhost"], - }, - metadata = { - name = "adjust-runner", - version = "1.0.0", - description = "Enforces WCAG 2.2 AA and CLI accessibility invariants. Any regression blocks merge — accessibility is structural, not optional polish.", - paired_xfile = "Adjustfile.a2ml", - author = "Jonathan D.A. Jewell ", - }, - }, - - schema = { - accessibility_invariants - | Array { - id | String, - description | String, - category | [| 'visual, 'keyboard, 'screen_reader, 'interactive, 'media, 'motion, 'cli_tui, 'documentation, 'i18n |], - standard | String | default = "WCAG-2.2-AA", - check_command | String, # command that verifies invariant (exit 0 = compliant) - status | [| 'declared, 'passing, 'failing, 'exempt |] | default = 'declared, - notes | String | optional, - }, - }, - - run = { - on_any_fail = "exit-nonzero", # accessibility regression blocks merge - report_format = "a2ml", - emit_summary = true, - minimum_standard = "WCAG-2.2-AA", - encourage_aaa = true, - }, -} diff --git a/.machine_readable/contractiles/bust/Bustfile.a2ml b/.machine_readable/contractiles/bust/Bustfile.a2ml deleted file mode 100644 index ab4d166f..00000000 --- a/.machine_readable/contractiles/bust/Bustfile.a2ml +++ /dev/null @@ -1,28 +0,0 @@ -// Bustfile.a2ml — meta-repo bust contractile (breakage / rollback) -// SPDX-License-Identifier: MPL-2.0 - -Bust { - name: "odds-and-sods-package-manager" - version: "1.0.0" - description: "Rollback procedures when something breaks in the meta-repo" - - scenarios: { - "bad-pointer-bump": "git revert in meta-repo; child repo itself untouched" - "submodule-pointer-points-at-missing-sha": "git submodule update --init --checkout resets child to parent-recorded SHA; OR revert the stale bump commit" - "submodule-orphan-after-local-only-commit": "roll back locally with git reset to before the stranded commit; fix remote situation before re-attempting" - "accidental-private-repo-content-leaked-to-public-submodule": "hard-rotate the leaked secret immediately; git-filter-repo or BFG on the submodule's own history; public re-publication only after rotation complete" - } - - escalation-ladder: [ - "1. revert the meta-repo commit (reversible, low blast radius)", - "2. reset the local submodule clone (affects only local workspace)", - "3. force-push to main — PROHIBITED without explicit user confirmation (violates branch protection)", - "4. registry-level (delete/archive the GitHub repo) — human-only action, never by AI" - ] - - backup-points: [ - "GitHub serves as the durable backup for every submodule's own history", - "Meta-repo history on origin/main is the durable backup for pointer state", - "Local backup tags (backup/pre--) retained on risky rewrites" - ] -} diff --git a/.machine_readable/contractiles/bust/bust.ncl b/.machine_readable/contractiles/bust/bust.ncl deleted file mode 100644 index fc8cb8cd..00000000 --- a/.machine_readable/contractiles/bust/bust.ncl +++ /dev/null @@ -1,66 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Bust — error-handling / failure-recovery runner -# -# Pairs with: Bustfile.a2ml (same directory) -# Verb: bust -# Semantics: every declared failure mode must have a recovery path that has -# been exercised. Runner injects failures (via declared probes) -# and verifies the recovery path works. Hard gate on any -# failure-mode with missing or broken recovery. -# CLI: `contractile bust check` → list failure modes + recovery status -# `contractile bust drill` → inject declared failures, verify recovery -# -# Anything else in this directory is human-only notes/archive; machines ignore. -# -# Base: ../_base.ncl provides pedigree_schema, run_defaults, probe_schema. -# See: docs/CONTRACTILE-SPEC.adoc - -let base = import "../_base.ncl" in - -{ - pedigree = base.pedigree_schema & { - contractile_verb = "bust", - semantics = "error handling + failure recovery", - security = { - leash = 'Kennel, - trust_level = "controlled failure injection; scoped to system-under-test", - allow_network = false, - allow_filesystem_write = true, # drills may write transient state (tmp dirs, test DBs) - allow_subprocess = true, - injection_scope = "system-under-test-only", - }, - metadata = { - name = "bust-runner", - version = "1.0.0", - description = "Exercises declared failure modes and verifies recovery paths. Hard-gates on any failure mode without working recovery.", - paired_xfile = "Bustfile.a2ml", - author = "Jonathan D.A. Jewell ", - }, - }, - - schema = { - failure_modes - | Array { - id | String, - description | String, - class | [| 'network, 'disk_full, 'oom, 'timeout, 'partial_write, 'panic, 'crash, 'rollback, 'concurrency |], - # TODO: migrate to base.probe_schema (structured probe) when CLI supports it - injection_probe | String, # command that deterministically causes this failure - # TODO: migrate to base.probe_schema (structured probe) when CLI supports it - recovery_probe | String, # command that verifies recovery (exit 0 = recovered) - expected_recovery_time_seconds | Number | default = 30, - # status_core values: 'declared, 'verified, 'failing; bust adds 'drilled - status | [| 'declared, 'drilled, 'verified, 'failing |] | default = 'declared, - notes | String | optional, - }, - }, - - # Runner behaviour — inherits from base.run_defaults. - # bust adds record_recovery_times for performance tier feeding. - run = base.run_defaults & { - on_any_fail = "exit-nonzero", # missing or broken recovery blocks merge - report_format = "a2ml", - emit_summary = true, - record_recovery_times = true, # feeds the performance tier - }, -} diff --git a/.machine_readable/contractiles/dust/Dustfile.a2ml b/.machine_readable/contractiles/dust/Dustfile.a2ml deleted file mode 100644 index 684749f5..00000000 --- a/.machine_readable/contractiles/dust/Dustfile.a2ml +++ /dev/null @@ -1,24 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Dustfile — Cleanup and Hygiene Contract - -project = "odds-and-sods-package-manager" - -[dustfile] -version = "1.0.0" -format = "a2ml" - -[cleanup] -stale-branch-policy = "delete-after-merge" -artifact-retention = "90-days" -cache-policy = "clear-on-release" - -[hygiene] -linting = "required" -formatting = "required" -dead-code-removal = "encouraged" -todo-tracking = "tracked-in-issues" - -[reversibility] -backup-before-destructive = true -rollback-mechanism = "git-revert" -data-retention-policy = "preserve-30-days" diff --git a/.machine_readable/contractiles/dust/dust.ncl b/.machine_readable/contractiles/dust/dust.ncl deleted file mode 100644 index 7eb8a40b..00000000 --- a/.machine_readable/contractiles/dust/dust.ncl +++ /dev/null @@ -1,57 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Dust — cleanup and hygiene runner -# -# Pairs with: Dustfile.a2ml (same directory) -# Verb: dust -# Semantics: everything declared as needing periodic cleanup must be -# cleaned up on schedule. Runner checks for stale branches, -# aged artefacts, and dead code past their retention window. -# Hard gate if any retention policy is breached. -# CLI: `contractile dust check` → list items past retention deadline -# `contractile dust sweep` → execute declared cleanup actions -# -# Anything else in this directory is human-only notes/archive; machines ignore. -# See: docs/CONTRACTILE-SPEC.adoc - -{ - pedigree = { - contractile_verb = "dust", - semantics = "cleanup + hygiene", - security = { - leash = 'Kennel, - trust_level = "scheduled cleanup; read-write on declared targets only", - allow_network = false, - allow_filesystem_write = true, # sweeps delete stale artefacts - allow_subprocess = true, - scope = "declared-cleanup-targets-only", - }, - metadata = { - name = "dust-runner", - version = "1.0.0", - description = "Checks and enforces cleanup schedules. Hard-gates on any retention-policy breach.", - paired_xfile = "Dustfile.a2ml", - author = "Jonathan D.A. Jewell ", - }, - }, - - schema = { - cleanup_targets - | Array { - id | String, - description | String, - category | [| 'stale_branch, 'artefact, 'cache, 'dead_code, 'todo |], - retention_days | Number, - sweep_command | String, # command that performs the cleanup - check_command | String, # command that reports what is overdue (exit 0 = clean) - status | [| 'scheduled, 'overdue, 'swept, 'exempt |] | default = 'scheduled, - notes | String | optional, - }, - }, - - run = { - on_any_fail = "exit-nonzero", # retention breach blocks merge - report_format = "a2ml", - emit_summary = true, - require_backup_before_destructive = true, - }, -} diff --git a/.machine_readable/contractiles/intend/Intentfile.a2ml b/.machine_readable/contractiles/intend/Intentfile.a2ml deleted file mode 100644 index 478f84f0..00000000 --- a/.machine_readable/contractiles/intend/Intentfile.a2ml +++ /dev/null @@ -1,74 +0,0 @@ -; SPDX-License-Identifier: MPL-2.0 -; INTENT.contractile — Purpose and scope for odds-and-sods-package-manager -; Helps LLM/SLM agents understand what this repo IS and IS NOT. -; -; Part of the contractile family: MUST, TRUST, DUST, INTENT, ADJUST - -; ── Definitions ────────────────────────────────────────────────── -; -; INTENT (noun) -; The purpose contractile. Defines what this repository IS, what it is -; NOT (anti-purpose), and which architectural decisions are load-bearing. -; Without INTENT, LLMs drift into scope creep, reverse key decisions, -; or add features that belong in a different repo. -; -; Scope: -; INTENT governs the conceptual boundaries of the project — its reason -; for existing, its domain, and its relationship to the ecosystem. -; It does NOT specify implementation details (that's MUST and code). -; -; Relationship to other contractiles: -; - MUST: INTENT explains WHY certain MUSTs exist. If you don't -; understand a MUST, read INTENT first. -; - TRUST: The "ask-before-touching" section in INTENT maps directly -; to TRUST.trust-deny for the most sensitive areas. -; - ADJUST: INTENT's anti-purpose should include "this software is -; NOT only for users with perfect vision/hearing/mobility." -; - DUST: When INTENT changes (repo pivots), related DUST entries -; should be created for the abandoned direction. -; -; ── End Definitions ────────────────────────────────────────────── - -project = "odds-and-sods-package-manager" - -(intent-contractile - (version "1.0.0") - (repo "odds-and-sods-package-manager") - - ; === Purpose (what this repo IS) === - (purpose - "{{ONE_PARAGRAPH_PURPOSE}}" - ) - - ; === Anti-Purpose (what this repo is NOT — prevents scope creep) === - (anti-purpose - "{{ONE_PARAGRAPH_ANTI_PURPOSE}}" - ; Examples: - ; "This is NOT a general-purpose database — it solves one specific problem." - ; "This is NOT a framework — it is a library with a focused API." - ; "This does NOT handle authentication — that is delegated to [other repo]." - ) - - ; === Key Architectural Decisions That Must Not Be Reversed === - (architectural-invariants - ; *REMINDER: List the foundational decisions* - ; ("Idris2 for ABI definitions — dependent types prove interface correctness") - ; ("Zig for FFI — zero-cost C ABI compatibility") - ; ("Elixir for supervision — OTP fault tolerance") - ) - - ; === Sensitive Areas (if in doubt, ask) === - (ask-before-touching - ; *REMINDER: List areas where LLMs should check before modifying* - ; "src/abi/ — formal proofs, changes require re-verification" - ; "ffi/zig/ — C ABI boundary, changes affect all language bindings" - ; ".machine_readable/ — checkpoint files, format is specified" - ) - - ; === Ecosystem Position === - (ecosystem - (belongs-to "{{MONOREPO_OR_STANDALONE}}") - (depends-on ("{{DEP1}}" "{{DEP2}}")) - (depended-on-by ("{{CONSUMER1}}" "{{CONSUMER2}}")) - ) -) diff --git a/.machine_readable/contractiles/intend/intend.ncl b/.machine_readable/contractiles/intend/intend.ncl deleted file mode 100644 index f3285069..00000000 --- a/.machine_readable/contractiles/intend/intend.ncl +++ /dev/null @@ -1,55 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Intend — purpose and scope runner -# -# Pairs with: Intentfile.a2ml (same directory) -# Verb: intend -# Semantics: validates that proposed changes stay within the declared -# purpose and do not violate anti-purpose constraints. -# Runner checks for scope creep, reversed architectural decisions, -# and features that belong in a different repository. -# CLI: `contractile intend check` → report drift from declared purpose -# `contractile intend validate` → verify architectural invariants -# -# Anything else in this directory is human-only notes/archive; machines ignore. -# See: docs/CONTRACTILE-SPEC.adoc - -{ - pedigree = { - contractile_verb = "intend", - semantics = "purpose + scope validation", - security = { - leash = 'Leash, - trust_level = "read-only analysis; no write access", - allow_network = false, - allow_filesystem_write = false, - allow_subprocess = true, - }, - metadata = { - name = "intend-runner", - version = "1.0.0", - description = "Validates that changes respect declared purpose, anti-purpose, and architectural invariants. Flags scope creep and reversed decisions.", - paired_xfile = "Intentfile.a2ml", - author = "Jonathan D.A. Jewell ", - }, - }, - - schema = { - purpose_checks - | Array { - id | String, - description | String, - category | [| 'in_scope, 'out_of_scope, 'architectural_invariant, 'ecosystem_boundary |], - check_command | String, # command that verifies scope compliance - status | [| 'declared, 'passing, 'failing, 'warn |] | default = 'declared, - notes | String | optional, - }, - }, - - run = { - on_any_fail = "warn", # scope drift warns; architectural reversals block - on_architectural_violation = "exit-nonzero", - report_format = "a2ml", - emit_summary = true, - wishes_included = true, # intend ⊃ wishes (north-star aspirations) - }, -} diff --git a/.machine_readable/contractiles/must/Mustfile.a2ml b/.machine_readable/contractiles/must/Mustfile.a2ml deleted file mode 100644 index 8b77eb0a..00000000 --- a/.machine_readable/contractiles/must/Mustfile.a2ml +++ /dev/null @@ -1,93 +0,0 @@ -; SPDX-License-Identifier: MPL-2.0 -; MUST.contractile — Baseline invariants for odds-and-sods-package-manager -; These constraints MUST NOT be violated. K9 validators enforce them. -; -; Part of the contractile family: MUST, TRUST, DUST, INTENT, ADJUST - -; ── Definitions ────────────────────────────────────────────────── -; -; MUST (noun/verb) -; The hard-constraint contractile. Defines invariants that are structurally -; required for the repository to function correctly and safely. Violating -; a MUST is always a bug — there are no "soft" MUSTs. -; -; Scope: -; MUST governs code, configuration, CI, and structure. It does NOT govern -; style, preference, or approach — those belong in CLAUDE.md or coding -; standards. MUST is for things that break the project if violated. -; -; Relationship to other contractiles: -; - TRUST: MUST is enforced regardless of trust level. Even maximal-trust -; agents cannot violate MUST constraints. -; - ADJUST: All ADJUST invariants are implicitly MUST invariants too. -; ADJUST exists separately for visibility. -; - INTENT: MUST protects the architectural decisions described in INTENT. -; - DUST: When a feature enters DUST (deprecation), its MUST constraints -; remain active until the feature is fully removed. -; -; Enforcement: -; K9 validators in contractiles/k9/ machine-check MUST constraints. -; CI runs these on every PR. Violations block merge. -; -; ── End Definitions ────────────────────────────────────────────── - -project = "odds-and-sods-package-manager" - -(must-contractile - (version "1.0.0") - (repo "odds-and-sods-package-manager") - - ; === Universal Invariants (apply to ALL repos) === - - (invariants - ; Paths - (must "no hardcoded absolute paths (/home/*, /mnt/*, /var/mnt/*)") - (must "all paths use env vars, XDG dirs, or relative references") - - ; Language policy - (must "no new TypeScript files") - (must "no new Python files") - (must "no new Go files") - (must "no npm/bun/yarn/pnpm dependencies — Deno only") - - ; Dangerous patterns - (must "no believe_me (Idris2)") - (must "no assert_total (Idris2)") - (must "no Admitted (Coq)") - (must "no sorry (Lean)") - (must "no unsafeCoerce (Haskell)") - (must "no Obj.magic (OCaml)") - (must "no unsafe {} blocks without safety comment (Rust)") - - ; License - (must "SPDX-License-Identifier header on every source file") - (must "no removal or modification of LICENSE file") - - ; Structure - (must ".machine_readable/ directory preserved") - (must "0-AI-MANIFEST.a2ml preserved") - (must "no SCM files in repo root — only in .machine_readable/") - - ; CI - (must "no removal of CI workflows without explicit approval") - (must "all GitHub Actions SHA-pinned") - - ; Code quality - (must "tests must not be deleted or weakened") - (must "generated code in generated/ directory only") - (must "no introduction of OWASP top 10 vulnerabilities") - - ; ABI/FFI (if applicable) - (must "no modification of ABI contracts without proof update") - (must "no removal of formal verification proofs") - ) - - ; === Project-Specific Invariants === - ; *REMINDER: Add invariants specific to this repo* - ; (must "# Add project-specific invariants here") - - (enforcement - (k9-validator "contractiles/k9/must-check.k9.ncl") - (ci "quality.yml runs must-check on every PR") - ) -) diff --git a/.machine_readable/contractiles/must/must.ncl b/.machine_readable/contractiles/must/must.ncl deleted file mode 100644 index 5d910795..00000000 --- a/.machine_readable/contractiles/must/must.ncl +++ /dev/null @@ -1,53 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Must — hard-constraint enforcement runner -# -# Pairs with: Mustfile.a2ml (same directory) -# Verb: must -# Semantics: every declared invariant must hold at all times. Runner -# machine-checks each MUST constraint and hard-gates on any -# violation. There are no soft MUSTs — all violations block merge. -# CLI: `contractile must check` → list invariants + current status -# `contractile must enforce` → run all constraint checks -# -# Anything else in this directory is human-only notes/archive; machines ignore. -# See: docs/CONTRACTILE-SPEC.adoc - -{ - pedigree = { - contractile_verb = "must", - semantics = "hard-constraint enforcement", - security = { - leash = 'Leash, - trust_level = "read-only structural checks; no write access", - allow_network = false, - allow_filesystem_write = false, - allow_subprocess = true, - }, - metadata = { - name = "must-runner", - version = "1.0.0", - description = "Machine-checks all declared MUST invariants. Any violation blocks merge — no exceptions.", - paired_xfile = "Mustfile.a2ml", - author = "Jonathan D.A. Jewell ", - }, - }, - - schema = { - invariants - | Array { - id | String, - description | String, - category | [| 'path, 'language_policy, 'dangerous_pattern, 'licence, 'structure, 'ci, 'quality, 'abi_ffi |], - check_command | String, # command that verifies invariant holds (exit 0 = ok) - status | [| 'declared, 'passing, 'failing |] | default = 'declared, - notes | String | optional, - }, - }, - - run = { - on_any_fail = "exit-nonzero", # all invariant violations block merge - report_format = "a2ml", - emit_summary = true, - trust_override_allowed = false, # even max-trust agents cannot bypass MUST - }, -} diff --git a/.machine_readable/contractiles/trust/Trustfile.a2ml b/.machine_readable/contractiles/trust/Trustfile.a2ml deleted file mode 100644 index 552f8c9d..00000000 --- a/.machine_readable/contractiles/trust/Trustfile.a2ml +++ /dev/null @@ -1,24 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Trustfile — Integrity and Provenance Contract - -project = "odds-and-sods-package-manager" - -[trustfile] -version = "1.0.0" -format = "a2ml" - -[provenance] -source-control = "git" -forge = "github" -ci-verified = true -signing-policy = "commit-signing-preferred" - -[integrity] -spdx-compliant = true -license-audit = "required" -dependency-pinning = "sha-pinned" - -[verification] -reproducible-builds = "goal" -sbom-generation = "required" -attestation = "sigstore-preferred" diff --git a/.machine_readable/contractiles/trust/trust.ncl b/.machine_readable/contractiles/trust/trust.ncl deleted file mode 100644 index a32eac08..00000000 --- a/.machine_readable/contractiles/trust/trust.ncl +++ /dev/null @@ -1,55 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Trust — integrity and provenance runner -# -# Pairs with: Trustfile.a2ml (same directory) -# Verb: trust -# Semantics: every declared trust assertion (provenance, signing, licence audit, -# SHA-pinning) must be verified before merge. Runner checks supply -# chain, dependency provenance, and signing posture. -# Hard gate on any unmet trust assertion. -# CLI: `contractile trust check` → list assertions + verification status -# `contractile trust verify` → run all verification probes -# -# Anything else in this directory is human-only notes/archive; machines ignore. -# See: docs/CONTRACTILE-SPEC.adoc - -{ - pedigree = { - contractile_verb = "trust", - semantics = "integrity + provenance verification", - security = { - leash = 'Leash, - trust_level = "read-only verification; no write access except reporting", - allow_network = true, # provenance checks may hit registries - allow_filesystem_write = false, - allow_subprocess = true, - network_allowlist = ["api.github.com", "registry.npmjs.org", "crates.io"], - }, - metadata = { - name = "trust-runner", - version = "1.0.0", - description = "Verifies supply-chain trust assertions: provenance, signing, SHA-pinning, licence compliance. Hard-gates on any unmet assertion.", - paired_xfile = "Trustfile.a2ml", - author = "Jonathan D.A. Jewell ", - }, - }, - - schema = { - trust_assertions - | Array { - id | String, - description | String, - category | [| 'provenance, 'signing, 'licence, 'sha_pinning, 'spdx, 'reproducible |], - verify_command | String, # command that verifies the assertion (exit 0 = trusted) - status | [| 'declared, 'verified, 'failing, 'exempt |] | default = 'declared, - notes | String | optional, - }, - }, - - run = { - on_any_fail = "exit-nonzero", # unmet trust assertion blocks merge - report_format = "a2ml", - emit_summary = true, - cache_results = false, # always re-verify; no stale trust cache - }, -} diff --git a/CHANGELOG.md b/CHANGELOG.md index ea6ad1f5..695a7e38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,7 @@ - # Changelog All notable changes to `odds-and-sods-package-manager` will be documented in this file. diff --git a/CHARTER.adoc b/CHARTER.adoc index 3d242282..b350e1bc 100644 --- a/CHARTER.adoc +++ b/CHARTER.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Charter :revdate: 2026-01-18 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index a4662f5c..1d432721 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,3 +1,7 @@ + # Code of Conduct # Clone the repository git clone https://github.com/hyperpolymath/odds-and-sods-package-manager.git cd odds-and-sods-package-manager diff --git a/EXPLAINME.adoc b/EXPLAINME.adoc index a4b1bd96..27e1b286 100644 --- a/EXPLAINME.adoc +++ b/EXPLAINME.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM (Odds and Sods Package Manager) — Show Me The Receipts :toc: :icons: font diff --git a/GOVERNANCE.adoc b/GOVERNANCE.adoc new file mode 100644 index 00000000..8bbf167d --- /dev/null +++ b/GOVERNANCE.adoc @@ -0,0 +1,162 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell += Governance Model +:toc: preamble + +This document describes the governance model for this repository. + +== Overview + +This repository follows a **Sole Maintainer Governance Model**: + +* Single maintainer (@hyperpolymath) has full authority over the project +* All contributions are welcome and reviewed by the maintainer +* Decisions are made transparently through GitHub issues and discussions +* The project adheres to the hyperpolymath estate policies where applicable + +== Core Principles + +[cols="1,2"] +|=== +| Principle | Description + +| **Benevolent Dictatorship** | Maintainer has final decision authority but seeks community input + +| **Meritocracy** | Contributions are judged on technical merit, not contributor identity + +| **Transparency** | All significant decisions are documented publicly + +| **Consensus-Seeking** | Maintainer prefers consensus but will decide when necessary + +| **Open Contribution** | Anyone can contribute via fork and pull request + +|=== + +== Roles and Permissions + +[cols="1,2,2"] +|=== +| Role | Permissions | Assignment + +| **Maintainer** | Write access, merge rights, admin | @hyperpolymath +| **Contributors** | Read access, fork, submit PRs | All GitHub users +| **Users** | Use the software, report issues | All GitHub users + +|=== + +== Decision Making Framework + +=== Routine Decisions + +* Bug fixes +* Documentation improvements +* Minor feature additions +* Dependency updates + +**Process**: Maintainer reviews and merges PRs that meet quality standards. + +=== Significant Changes + +* New major features +* API changes +* Architecture modifications +* Breaking changes + +**Process**: +. Open issue describing the change +. Discuss with community (minimum 72 hours) +. Maintainer makes final decision +. Document rationale in issue/PR + +=== Structural Decisions + +* Repository purpose/renaming +* License changes +* Ownership transfer +* Deprecation/archival + +**Process**: +. Extended discussion (minimum 1 week) +. Maintainer makes final decision +. Document in CHANGELOG and governance docs + +== Contribution Lifecycle + +[cols="1,2"] +|=== +| Stage | Process + +| **Ideation** | Open issue, discuss feasibility + +| **Development** | Fork, implement, test thoroughly + +| **Review** | Submit PR, maintainer reviews within 7 days + +| **Merge** | Maintainer merges or requests changes + +| **Release** | Maintainer publishes according to project conventions + +|=== + +== Conflict Resolution + +In case of disagreements: + +. Discuss in the relevant GitHub issue or PR +. Provide technical justification for positions +. Maintainer mediates and makes final decision +. Decision is documented and can be revisited later + +== Project Policies + +This repository adheres to hyperpolymath estate-wide policies: + +* **License**: MPL-2.0 for code, CC-BY-SA-4.0 for prose (per standards/LICENCE-POLICY.adoc) +* **Code of Conduct**: Follows hyperpolymath CODE_OF_CONDUCT.md +* **Security**: Follows hyperpolymath SECURITY.md +* **Contributing**: Follows hyperpolymath CONTRIBUTING.adoc conventions + +== Repository-Specific Conventions + +[cols="1,2"] +|=== +| Convention | Description + +| **Signing** | All commits must be signed (SSH or GPG) + +| **SPDX Headers** | All source files must have SPDX license identifiers + +| **Contractiles** | Mustfile, Trustfile, Intendfile, Adjustfile in root + +| **Machine Readable** | META.a2ml in .machine_readable/6a2/ + +| **CI/CD** | GitHub Actions workflows in .github/workflows/ + +|=== + +== Governance Evolution + +As the project grows, this governance model may evolve: + +* **Adding Co-Maintainers**: When contribution volume warrants it +* **Forming a Team**: For complex multi-maintainer projects +* **Adopting TPCF**: For large, multi-repository projects (see rhodium-standard-repositories) + +Changes to this document require the same process as Significant Changes above. + +== See Also + +* link:MAINTAINERS.adoc[Maintainers] +* link:CODE_OF_CONDUCT.md[Code of Conduct] +* link:CONTRIBUTING.adoc[Contributing Guide] +* link:https://github.com/hyperpolymath/standards/blob/main/LICENCE-POLICY.adoc[Estate License Policy] +* link:https://github.com/hyperpolymath/standards[rhodium-standard-repositories (TPCF)] + +== Changelog + +[cols="1,1,1"] +|=== +| Date | Change | By + +| 2026-06-07 | Initial governance model established | @hyperpolymath +|=== diff --git a/Justfile b/Justfile index 1d991155..64822826 100644 --- a/Justfile +++ b/Justfile @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell # OPSM - Odds and Sods Package Manager # https://just.systems/man/en/ @@ -289,3 +290,6 @@ crg-badge: D) color="orange" ;; E) color="red" ;; F) color="critical" ;; \ *) color="lightgrey" ;; esac; \ echo "[![CRG $$grade](https://img.shields.io/badge/CRG-$$grade-$$color?style=flat-square)](https://github.com/hyperpolymath/standards/tree/main/component-readiness-grades)" + +secret-scan-trufflehog: + @command -v trufflehog >/dev/null && trufflehog filesystem . --only-verified || true diff --git a/LICENSE b/LICENSE index 4a7f1aa6..d0a1fa14 100644 --- a/LICENSE +++ b/LICENSE @@ -1,38 +1,3 @@ -SPDX-License-Identifier: MPL-2.0 -SPDX-FileCopyrightText: 2024-2026 Jonathan D.A. Jewell (hyperpolymath) - ------------------------------------------------------------------------- -PREFERRED LICENCE: Palimpsest License (MPL-2.0) ------------------------------------------------------------------------- - -This work is governed by the Palimpsest License (MPL-2.0) as -its primary intended licence. MPL-2.0 extends the Mozilla -Public License 2.0 (MPL-2.0) with additional provisions for ethical use, -post-quantum cryptographic provenance, and emotional lineage protection. -The canonical PMPL text and stewardship information are maintained at: - https://github.com/hyperpolymath/palimpsest-license - ------------------------------------------------------------------------- -FALLBACK LICENCE: Mozilla Public License 2.0 (MPL-2.0) ------------------------------------------------------------------------- - -Because MPL-2.0 is not yet recognised by the Open Source -Initiative (OSI) or equivalent bodies, this work also carries MPL-2.0 -as its legally-recognised fallback licence. - -In any jurisdiction, platform, or context where MPL-2.0 is -not accepted as a valid licence, or where an OSI-approved licence is -required, this work is instead governed by the Mozilla Public License, -Version 2.0. - -MPL-2.0 was chosen as the fallback because MPL-2.0 is -explicitly based on and extends MPL-2.0; it is therefore the closest -recognised equivalent to the intended licence. - -The complete MPL-2.0 text follows below. - ------------------------------------------------------------------------- - Mozilla Public License Version 2.0 ================================== @@ -109,17 +74,17 @@ Mozilla Public License Version 2.0 means the form of the work preferred for making modifications. 1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under - this License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. - For the purposes of this definition, "control" means (a) the power, - direct or indirect, to cause the direction or management of such - entity, whether by contract or otherwise, or (b) ownership of more - than fifty percent (50%) of the outstanding shares or beneficial + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants and Conditions ---------------------------------- +-------------------------------- 2.1. Grants @@ -144,11 +109,11 @@ distributes such Contribution. 2.3. Limitations on Grant Scope -The licenses granted in this Section 2 are the only rights granted -under this License. No additional rights or licenses will be implied -from the distribution or licensing of Covered Software under this -License. Notwithstanding Section 2.1(b) above, no patent license is -granted by a Contributor: +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: (a) for any code that a Contributor has removed from Covered Software; or @@ -158,19 +123,19 @@ granted by a Contributor: Contributions with other software (except as part of its Contributor Version); or -(c) under Patent Claims infringed by Covered Software in the absence - of its Contributions. +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. -This License does not grant any rights in the trademarks, service -marks, or logos of any Contributor (except as may be necessary to -comply with the notice requirements in Section 3.4). +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). 2.4. Subsequent Licenses No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License -(if permitted under the terms of Section 3.3). +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). 2.5. Representation @@ -186,11 +151,11 @@ equivalents. 2.7. Conditions -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses -granted in Section 2.1. +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. 3. Responsibilities --------------------- +------------------- 3.1. Distribution of Source Form @@ -207,10 +172,10 @@ Form. If You distribute Covered Software in Executable Form then: (a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients - of the Executable Form how they can obtain a copy of such Source - Code Form by reasonable means in a timely manner, at a charge no - more than the cost of distribution to the recipient; and + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and (b) You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the @@ -222,8 +187,8 @@ If You distribute Covered Software in Executable Form then: You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and -the Covered Software is not Incompatible With Secondary Licenses, this +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered @@ -241,28 +206,28 @@ the extent required to remedy known factual inaccuracies. 3.5. Application of Additional Terms You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of -Covered Software. However, You may do so only on Your own behalf, and -not on behalf of any Contributor. You must make it absolutely clear -that any such warranty, support, indemnity, or liability obligation is -offered by You alone, and You hereby agree to indemnify every -Contributor for any liability incurred by such Contributor as a result -of warranty, support, indemnity or liability terms You offer. You may -include additional disclaimers of warranty and limitations of liability -specific to any jurisdiction. +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. 4. Inability to Comply Due to Statute or Regulation ------------------------------------------------------ +--------------------------------------------------- If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description -must be placed in a text file included with all distributions of the -Covered Software under this License. Except to the extent prohibited -by statute or regulation, such description must be sufficiently -detailed for a recipient of ordinary skill to be able to understand it. +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. 5. Termination -------------- @@ -271,27 +236,27 @@ detailed for a recipient of ordinary skill to be able to understand it. if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on -an ongoing basis, if such Contributor fails to notify You of the +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is -the first time You have received notice of non-compliance with this -License from such Contributor, and You become compliant prior to 30 -days after Your receipt of the notice. +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. -5.2. If You initiate litigation against any entity by asserting a -patent infringement claim (excluding declaratory judgment actions, +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. 5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) -which have been validly granted by You or Your distributors under this -License prior to termination shall survive termination. +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. ************************************************************************ * * @@ -346,7 +311,7 @@ Nothing in this Section shall prevent a party's ability to bring cross-claims or counter-claims. 9. Miscellaneous ------------------ +---------------- This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be @@ -356,14 +321,14 @@ that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. 10. Versions of the License ----------------------------- +--------------------------- 10.1. New Versions -Mozilla Foundation is the license steward. Except as provided in -Section 10.3, no one other than the license steward has the right to -modify or publish new versions of this License. Each version will be -given a distinguishing version number. +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. 10.2. Effect of New Versions @@ -392,17 +357,17 @@ Exhibit A - Source Code Form License Notice This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. + file, You can obtain one at https://mozilla.org/MPL/2.0/. If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to -look for such a notice. +file in a relevant directory) where a recipient would be likely to look +for such a notice. You may add additional accurate notices of copyright ownership. Exhibit B - "Incompatible With Secondary Licenses" Notice ----------------------------------------------------------- +--------------------------------------------------------- This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0. diff --git a/MAINTAINERS.adoc b/MAINTAINERS.adoc index a1c65443..becaa3ea 100644 --- a/MAINTAINERS.adoc +++ b/MAINTAINERS.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Maintainers :toc: preamble diff --git a/PROOF-NEEDS.md b/PROOF-NEEDS.md index b9a119d3..d759785f 100644 --- a/PROOF-NEEDS.md +++ b/PROOF-NEEDS.md @@ -1,3 +1,7 @@ + # PROOF-NEEDS.md — odds-and-sods-package-manager (OPSM) ## Current State diff --git a/QUICKSTART-DEV.adoc b/QUICKSTART-DEV.adoc index 96d0aeb1..8760fb1a 100644 --- a/QUICKSTART-DEV.adoc +++ b/QUICKSTART-DEV.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Template: QUICKSTART-DEV.adoc — clone → build → test → PR // Replace odds-and-sods-package-manager, {{BUILD_CMD}}, {{TEST_CMD}}, {{LANG_STACK}} with actuals = odds-and-sods-package-manager — Quick Start for Developers diff --git a/QUICKSTART-MAINTAINER.adoc b/QUICKSTART-MAINTAINER.adoc index fa20b8cb..92b2785a 100644 --- a/QUICKSTART-MAINTAINER.adoc +++ b/QUICKSTART-MAINTAINER.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Template: QUICKSTART-MAINTAINER.adoc — packaging, deploying, and maintaining // Replace odds-and-sods-package-manager, {{PACKAGE_NAME}}, {{DEPS}} with actuals = odds-and-sods-package-manager — Quick Start for Platform Maintainers diff --git a/QUICKSTART-USER.adoc b/QUICKSTART-USER.adoc index 0b59d057..870ab8c7 100644 --- a/QUICKSTART-USER.adoc +++ b/QUICKSTART-USER.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Template: QUICKSTART-USER.adoc — 5-minute path to working software // Replace odds-and-sods-package-manager, Odds And Sods Package Manager — See README.adoc for details., just run, Odds And Sods Package Manager started successfully. with actuals = odds-and-sods-package-manager — Quick Start for Users diff --git a/READINESS.md b/READINESS.md index c13b6d4b..5b54e71a 100644 --- a/READINESS.md +++ b/READINESS.md @@ -1,3 +1,7 @@ + # SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) diff --git a/README.adoc b/README.adoc index e04f5049..946b4a15 100644 --- a/README.adoc +++ b/README.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM (Odds and Sods Package Manager) :revdate: 2026-03-08 :version: 2.0.0 diff --git a/ROADMAP.adoc b/ROADMAP.adoc index d1b97457..e503ce9b 100644 --- a/ROADMAP.adoc +++ b/ROADMAP.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Roadmap :revdate: 2026-02-05 :version: 2.0 @@ -129,6 +130,10 @@ Each major version below lists explicit remedies for these concerns. **Implementation:** Elixir/BEAM (fault-tolerant, concurrent, distributed) +**Key Policies:** +* **SNIFs Only:** Raw NIFs are forbidden. All native extensions MUST use the **SNIF** (Safe Native Implemented Function) pattern via WebAssembly sandboxing. See link:../snifs[snifs repository]. +* **Unified TUI:** The official OPSM interactive dashboard is currently being prototyped in link:../reposystem/total-upgrade[total-upgrade] and will be integrated as the primary dashboard in v1.5.0. + **Key Modules:** * `Opsm.Resolver` - PubGrub dependency resolver * `Opsm.VersionConstraint` - Version constraint parser diff --git a/RSR_COMPLIANCE.adoc b/RSR_COMPLIANCE.adoc index 05d5f433..212750c7 100644 --- a/RSR_COMPLIANCE.adoc +++ b/RSR_COMPLIANCE.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // RSR_COMPLIANCE.adoc — Rhodium Standard Repository compliance record // Repo: odds-and-sods-package-manager // As of: 2026-04-25 diff --git a/RSR_OUTLINE.adoc b/RSR_OUTLINE.adoc index b168b685..a08af2e8 100644 --- a/RSR_OUTLINE.adoc +++ b/RSR_OUTLINE.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = RSR Template Repository image:[Palimpsest-MPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"] image:[Palimpsest,link="https://github.com/hyperpolymath/palimpsest-license"] diff --git a/SECURITY.md b/SECURITY.md index 3f18d119..3ae72d0b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,3 +1,7 @@ + # Security Policy # SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) diff --git a/TESTING.md b/TESTING.md index e9f06ad5..22cf4d78 100644 --- a/TESTING.md +++ b/TESTING.md @@ -1,3 +1,7 @@ + # OPSM v1.0.0 Testing Guide This guide provides manual testing procedures to validate OPSM functionality before release. diff --git a/TOPOLOGY.md b/TOPOLOGY.md index 6f273ebd..6eae3d69 100644 --- a/TOPOLOGY.md +++ b/TOPOLOGY.md @@ -1,4 +1,7 @@ - + diff --git a/build.zig b/build.zig index a58a5c2d..0a3b9ad4 100644 --- a/build.zig +++ b/build.zig @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +// Copyright (c) Jonathan D.A. Jewell // // OPSM Unified CLI — Build Configuration diff --git a/cli/Config.res.js b/cli/Config.res.js index 94145d62..00b5ab66 100644 --- a/cli/Config.res.js +++ b/cli/Config.res.js @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Generated by ReScript, PLEASE EDIT WITH CARE import * as Path from "@std/path"; diff --git a/cli/Http.res.js b/cli/Http.res.js index 0b5f5cbf..2a818a49 100644 --- a/cli/Http.res.js +++ b/cli/Http.res.js @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Generated by ReScript, PLEASE EDIT WITH CARE import * as Core__Option from "@rescript/core/src/Core__Option.res.js"; diff --git a/cli/Main.res.js b/cli/Main.res.js index ba090074..e1a67658 100644 --- a/cli/Main.res.js +++ b/cli/Main.res.js @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Generated by ReScript, PLEASE EDIT WITH CARE import * as Config from "./Config.res.js"; diff --git a/cli/Types.res.js b/cli/Types.res.js index d856702b..747d24dc 100644 --- a/cli/Types.res.js +++ b/cli/Types.res.js @@ -1,2 +1,4 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Generated by ReScript, PLEASE EDIT WITH CARE /* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/cli/Wiring.res.js b/cli/Wiring.res.js index cf6eb8c3..a4299d69 100644 --- a/cli/Wiring.res.js +++ b/cli/Wiring.res.js @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Generated by ReScript, PLEASE EDIT WITH CARE import * as Oikos from "./clients/Oikos.res.js"; diff --git a/cli/clients/CheckyMonkey.res.js b/cli/clients/CheckyMonkey.res.js index 0d18946c..cbf15d51 100644 --- a/cli/clients/CheckyMonkey.res.js +++ b/cli/clients/CheckyMonkey.res.js @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Generated by ReScript, PLEASE EDIT WITH CARE import * as Http from "../Http.res.js"; diff --git a/cli/clients/CicdHyperA.res.js b/cli/clients/CicdHyperA.res.js index a25c7b9c..58407dc5 100644 --- a/cli/clients/CicdHyperA.res.js +++ b/cli/clients/CicdHyperA.res.js @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Generated by ReScript, PLEASE EDIT WITH CARE import * as Http from "../Http.res.js"; diff --git a/cli/clients/ClaimForge.res.js b/cli/clients/ClaimForge.res.js index ee0dcda7..982b9f93 100644 --- a/cli/clients/ClaimForge.res.js +++ b/cli/clients/ClaimForge.res.js @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Generated by ReScript, PLEASE EDIT WITH CARE import * as Http from "../Http.res.js"; diff --git a/cli/clients/Oikos.res.js b/cli/clients/Oikos.res.js index 1cb343d9..1b9f6778 100644 --- a/cli/clients/Oikos.res.js +++ b/cli/clients/Oikos.res.js @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Generated by ReScript, PLEASE EDIT WITH CARE import * as Http from "../Http.res.js"; diff --git a/cli/clients/Palimpsest.res.js b/cli/clients/Palimpsest.res.js index eb8e4e90..49bd895d 100644 --- a/cli/clients/Palimpsest.res.js +++ b/cli/clients/Palimpsest.res.js @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // Generated by ReScript, PLEASE EDIT WITH CARE import * as Http from "../Http.res.js"; diff --git a/deploy/k8s/microservices.yaml b/deploy/k8s/microservices.yaml index d7eec6ad..a8250f1b 100644 --- a/deploy/k8s/microservices.yaml +++ b/deploy/k8s/microservices.yaml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell # Rust microservices: claim-forge, checky-monkey, palimpsest, cicd-hyper-a, oikos --- diff --git a/deploy/k8s/namespace.yaml b/deploy/k8s/namespace.yaml index 3508f6b1..7ae0bcd5 100644 --- a/deploy/k8s/namespace.yaml +++ b/deploy/k8s/namespace.yaml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell apiVersion: v1 kind: Namespace metadata: diff --git a/deploy/k8s/network-policy.yaml b/deploy/k8s/network-policy.yaml index dd5f78f9..6f60e98a 100644 --- a/deploy/k8s/network-policy.yaml +++ b/deploy/k8s/network-policy.yaml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell # Network policies: microservices only reachable from opsm core, # svalinn gateway is the only public-facing component. diff --git a/deploy/k8s/opsm-deployment.yaml b/deploy/k8s/opsm-deployment.yaml index b80c0d94..ff4d8d10 100644 --- a/deploy/k8s/opsm-deployment.yaml +++ b/deploy/k8s/opsm-deployment.yaml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell apiVersion: apps/v1 kind: Deployment metadata: diff --git a/deploy/k8s/opsm-service.yaml b/deploy/k8s/opsm-service.yaml index 613404a8..2e977c8d 100644 --- a/deploy/k8s/opsm-service.yaml +++ b/deploy/k8s/opsm-service.yaml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell apiVersion: v1 kind: Service metadata: diff --git a/deploy/k8s/rbac.yaml b/deploy/k8s/rbac.yaml index ed5daf79..275239da 100644 --- a/deploy/k8s/rbac.yaml +++ b/deploy/k8s/rbac.yaml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell apiVersion: v1 kind: ServiceAccount metadata: diff --git a/deploy/k8s/storage.yaml b/deploy/k8s/storage.yaml index 0cab3930..68b28766 100644 --- a/deploy/k8s/storage.yaml +++ b/deploy/k8s/storage.yaml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell apiVersion: v1 kind: PersistentVolumeClaim metadata: diff --git a/deploy/k8s/svalinn-gateway.yaml b/deploy/k8s/svalinn-gateway.yaml index 4f8f9a6e..47f0908a 100644 --- a/deploy/k8s/svalinn-gateway.yaml +++ b/deploy/k8s/svalinn-gateway.yaml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell # Svalinn edge gateway — HTTPS/QUIC ingress with policy enforcement apiVersion: apps/v1 kind: Deployment diff --git a/deploy/selur-compose.yaml b/deploy/selur-compose.yaml index 864942b2..447299d3 100644 --- a/deploy/selur-compose.yaml +++ b/deploy/selur-compose.yaml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Owner: Jonathan D.A. Jewell # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # # selur-compose configuration for OPSM full stack. diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index e04bf068..9834a394 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell # Development compose file - only OPSM service (others require implementation) version: "3.8" diff --git a/docs/CITATIONS.adoc b/docs/CITATIONS.adoc index 37fdb0f0..52ba5285 100644 --- a/docs/CITATIONS.adoc +++ b/docs/CITATIONS.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = RSR-template-repo - Citation Guide :toc: diff --git a/docs/CLI-FEATURE-COMPARISON.md b/docs/CLI-FEATURE-COMPARISON.md index 34a23ea1..0c7a1fa2 100644 --- a/docs/CLI-FEATURE-COMPARISON.md +++ b/docs/CLI-FEATURE-COMPARISON.md @@ -1,3 +1,7 @@ + # OPSM CLI Feature Comparison: nala / aptitude / apt ## Executive Summary diff --git a/docs/CONTAINER-INTEGRATION.md b/docs/CONTAINER-INTEGRATION.md index da97376a..4f047a15 100644 --- a/docs/CONTAINER-INTEGRATION.md +++ b/docs/CONTAINER-INTEGRATION.md @@ -1,3 +1,7 @@ + # OPSM Container Integration **Comprehensive container security with Chainguard Wolfi, vulnerability scanning, image signing, and runtime protection.** diff --git a/docs/CRYPTO-USAGE-EXAMPLES.md b/docs/CRYPTO-USAGE-EXAMPLES.md index a9964e3d..2e94e030 100644 --- a/docs/CRYPTO-USAGE-EXAMPLES.md +++ b/docs/CRYPTO-USAGE-EXAMPLES.md @@ -1,3 +1,7 @@ + # OPSM Crypto Usage Examples **Date:** February 5, 2026 diff --git a/docs/HELP.adoc b/docs/HELP.adoc index d9bc7b81..9ac3fd9e 100644 --- a/docs/HELP.adoc +++ b/docs/HELP.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Help :toc: preamble :toclevels: 2 diff --git a/docs/MOBILE-API.md b/docs/MOBILE-API.md index 252e8b75..8d63c82c 100644 --- a/docs/MOBILE-API.md +++ b/docs/MOBILE-API.md @@ -1,3 +1,7 @@ + # OPSM Mobile API Documentation **Version:** 1.0.0 diff --git a/docs/OPSM-API.adoc b/docs/OPSM-API.adoc index 6eefb9b2..74bb74cb 100644 --- a/docs/OPSM-API.adoc +++ b/docs/OPSM-API.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Local API :toc: preamble :toclevels: 2 diff --git a/docs/OPSM-UI.adoc b/docs/OPSM-UI.adoc index 51f689ed..211afa16 100644 --- a/docs/OPSM-UI.adoc +++ b/docs/OPSM-UI.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM UI Integration :toc: preamble :toclevels: 2 diff --git a/docs/PAPER-SKETCH-zenodo-arxiv.md b/docs/PAPER-SKETCH-zenodo-arxiv.md index fab9979b..5fb8f7d4 100644 --- a/docs/PAPER-SKETCH-zenodo-arxiv.md +++ b/docs/PAPER-SKETCH-zenodo-arxiv.md @@ -1,3 +1,7 @@ + # Paper Sketch — Zenodo / arXiv Submission **Working Title:** *OPSM: Trust-First Package Management for the Ecosystem-of-Ecosystems Era* diff --git a/docs/PHOENIX-API-IMPLEMENTATION.md b/docs/PHOENIX-API-IMPLEMENTATION.md index b3546eed..c885f358 100644 --- a/docs/PHOENIX-API-IMPLEMENTATION.md +++ b/docs/PHOENIX-API-IMPLEMENTATION.md @@ -1,3 +1,7 @@ + # Phoenix API Implementation Summary **Date:** 2026-01-23 diff --git a/docs/PQ-CRYPTO-STANDARDS-TRACKING.md b/docs/PQ-CRYPTO-STANDARDS-TRACKING.md index db14b93d..0d20d6f7 100644 --- a/docs/PQ-CRYPTO-STANDARDS-TRACKING.md +++ b/docs/PQ-CRYPTO-STANDARDS-TRACKING.md @@ -1,3 +1,7 @@ + # SPDX-License-Identifier: MPL-2.0 # PQ Crypto Standards Tracking diff --git a/docs/REGISTRY-API-CHANGELOG.md b/docs/REGISTRY-API-CHANGELOG.md index 78aeb2a2..a48a501a 100644 --- a/docs/REGISTRY-API-CHANGELOG.md +++ b/docs/REGISTRY-API-CHANGELOG.md @@ -1,3 +1,7 @@ + # SPDX-License-Identifier: MPL-2.0 # Registry API Changelog and Monitoring diff --git a/docs/TAURI-VERSION-TRACKING.md b/docs/TAURI-VERSION-TRACKING.md index 9ddb6f39..c7bf5bf0 100644 --- a/docs/TAURI-VERSION-TRACKING.md +++ b/docs/TAURI-VERSION-TRACKING.md @@ -1,3 +1,7 @@ + # SPDX-License-Identifier: MPL-2.0 # Tauri 2.x Version Tracking diff --git a/docs/adding-language-adapters.adoc b/docs/adding-language-adapters.adoc index ae081963..72d2bd80 100644 --- a/docs/adding-language-adapters.adoc +++ b/docs/adding-language-adapters.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Adding Language Adapters to OPSM :revdate: 2026-01-23 :toc: left diff --git a/docs/architecture.adoc b/docs/architecture.adoc index e20744d7..61d3c818 100644 --- a/docs/architecture.adoc +++ b/docs/architecture.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Architecture :revdate: 2026-01-18 diff --git a/docs/brief/00-MASTER-BRIEF.md b/docs/brief/00-MASTER-BRIEF.md index 9d53cc9b..6d3d974c 100644 --- a/docs/brief/00-MASTER-BRIEF.md +++ b/docs/brief/00-MASTER-BRIEF.md @@ -1,3 +1,7 @@ + # OPSM master brief ## Product identity diff --git a/docs/brief/01-VISION.md b/docs/brief/01-VISION.md index 8ce6cebd..6ffd9b51 100644 --- a/docs/brief/01-VISION.md +++ b/docs/brief/01-VISION.md @@ -1,3 +1,7 @@ + # Vision OPSM exists to remove the artificial boundaries that ordinary users, developers, and administrators hit between package systems, install targets, configuration, and delivery. diff --git a/docs/brief/02-ARCHITECTURE.md b/docs/brief/02-ARCHITECTURE.md index 8d5141e0..0a7a0149 100644 --- a/docs/brief/02-ARCHITECTURE.md +++ b/docs/brief/02-ARCHITECTURE.md @@ -1,3 +1,7 @@ + # Architecture summary ## Layered shape diff --git a/docs/brief/03-V1-SCOPE.md b/docs/brief/03-V1-SCOPE.md index bb271de6..04fb7771 100644 --- a/docs/brief/03-V1-SCOPE.md +++ b/docs/brief/03-V1-SCOPE.md @@ -1,3 +1,7 @@ + # V1 scope ## In scope diff --git a/docs/brief/04-DATA-MODEL.md b/docs/brief/04-DATA-MODEL.md index 7937bfd2..8494cae2 100644 --- a/docs/brief/04-DATA-MODEL.md +++ b/docs/brief/04-DATA-MODEL.md @@ -1,3 +1,7 @@ + # Core data model outline ## First-class entities diff --git a/docs/brief/05-TRUST-REVERSIBILITY.md b/docs/brief/05-TRUST-REVERSIBILITY.md index 2b463f0a..891570f8 100644 --- a/docs/brief/05-TRUST-REVERSIBILITY.md +++ b/docs/brief/05-TRUST-REVERSIBILITY.md @@ -1,3 +1,7 @@ + # Trust, attestation, and reversibility ## Trust model diff --git a/docs/brief/06-PLUGIN-POLICY.md b/docs/brief/06-PLUGIN-POLICY.md index 5c16775c..9d393364 100644 --- a/docs/brief/06-PLUGIN-POLICY.md +++ b/docs/brief/06-PLUGIN-POLICY.md @@ -1,3 +1,7 @@ + # Plugin, policy, and approval model ## Unified extension system diff --git a/docs/brief/07-IMPLEMENTATION-PHASING.md b/docs/brief/07-IMPLEMENTATION-PHASING.md index a027c397..63df1fad 100644 --- a/docs/brief/07-IMPLEMENTATION-PHASING.md +++ b/docs/brief/07-IMPLEMENTATION-PHASING.md @@ -1,3 +1,7 @@ + # Implementation phasing ## Phase 0 — definition and schema diff --git a/docs/brief/08-CODING-AI-HANDOFF.md b/docs/brief/08-CODING-AI-HANDOFF.md index 2d10bbe5..173e8f5c 100644 --- a/docs/brief/08-CODING-AI-HANDOFF.md +++ b/docs/brief/08-CODING-AI-HANDOFF.md @@ -1,3 +1,7 @@ + # Coding AI handoff brief Treat `00-MASTER-BRIEF.md` as the primary source of truth. diff --git a/docs/brief/README-FIRST.md b/docs/brief/README-FIRST.md index 7977900b..4837b556 100644 --- a/docs/brief/README-FIRST.md +++ b/docs/brief/README-FIRST.md @@ -1,3 +1,7 @@ + # OPSM brief bundle This bundle is designed to be usable with coding AIs in three ways: diff --git a/docs/gitbot-fleet.adoc b/docs/gitbot-fleet.adoc index 061d679a..66227558 100644 --- a/docs/gitbot-fleet.adoc +++ b/docs/gitbot-fleet.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Gitbot Fleet Integration :toc: preamble :toclevels: 2 diff --git a/docs/har-integration.adoc b/docs/har-integration.adoc index ca76e5bf..6e18fc98 100644 --- a/docs/har-integration.adoc +++ b/docs/har-integration.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = HAR Integration for Agentic Package Fetching :revdate: 2026-01-23 :toc: left diff --git a/docs/imp/IMP.adoc b/docs/imp/IMP.adoc index c62b5d5f..e7da7002 100644 --- a/docs/imp/IMP.adoc +++ b/docs/imp/IMP.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Internal Manifest Protocol (IMP) :revdate: 2026-01-18 diff --git a/docs/imp/imp.readme.adoc b/docs/imp/imp.readme.adoc index a82f49d7..3fd46b4e 100644 --- a/docs/imp/imp.readme.adoc +++ b/docs/imp/imp.readme.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = IMP Artifacts :revdate: 2026-01-18 diff --git a/docs/service-contracts.adoc b/docs/service-contracts.adoc index 0326c7f0..2749d17d 100644 --- a/docs/service-contracts.adoc +++ b/docs/service-contracts.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Service Contracts :revdate: 2026-01-18 :toc: left diff --git a/docs/tech-debt-2026-05-26.md b/docs/tech-debt-2026-05-26.md index 2006a5d0..0c4960dc 100644 --- a/docs/tech-debt-2026-05-26.md +++ b/docs/tech-debt-2026-05-26.md @@ -1,8 +1,7 @@ - # Tech-Debt Audit — odds-and-sods-package-manager — 2026-05-26 **Source:** estate-wide automated scan 2026-05-26. diff --git a/docs/v2.0-PLAN.md b/docs/v2.0-PLAN.md index e1466c78..90dbafb0 100644 --- a/docs/v2.0-PLAN.md +++ b/docs/v2.0-PLAN.md @@ -1,3 +1,7 @@ + # OPSM v2.0 Planning Document ## Current Status (v1.0.0 Released) diff --git a/flake.nix b/flake.nix deleted file mode 100644 index 26884863..00000000 --- a/flake.nix +++ /dev/null @@ -1,116 +0,0 @@ -{ - description = "odds-and-sods-package-manager - {project-description}"; - - # *REMINDER: Update inputs with actual dependencies* - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - flake-utils.url = "github:numtide/flake-utils"; - # Add language-specific inputs: - # rust-overlay.url = "github:oxalica/rust-overlay"; # For Rust - # fenix.url = "github:nix-community/fenix"; # Alternative Rust - }; - - outputs = { self, nixpkgs, flake-utils, ... }@inputs: - flake-utils.lib.eachDefaultSystem (system: - let - pkgs = import nixpkgs { - inherit system; - # overlays = [ (import inputs.rust-overlay) ]; # For Rust - }; - - # *REMINDER: Define build dependencies* - buildInputs = with pkgs; [ - # Language-specific dependencies: - # gnat13 # Ada - # cargo rustc # Rust - # elixir # Elixir - # For build tools: - just - podman - git - ]; - - # *REMINDER: Define development dependencies* - nativeBuildInputs = with pkgs; [ - # Development tools: - ripgrep # Code search - lychee # Link validation - # Language-specific: - # rustfmt clippy # Rust - # mix # Elixir - ]; - - in - { - # Development shell - devShells.default = pkgs.mkShell { - inherit buildInputs nativeBuildInputs; - - shellHook = '' - echo "🚀 odds-and-sods-package-manager development environment" - echo "Language: rescript" - echo "" - echo "Available commands:" - echo " just --list # Show all tasks" - echo " just setup # Set up environment" - echo " just build # Build project" - echo " just test # Run tests" - echo " just validate # RSR compliance" - echo "" - # *REMINDER: Add language-specific environment setup* - # export CARGO_HOME=$PWD/.cargo # Rust - # export MIX_HOME=$PWD/.mix # Elixir - ''; - }; - - # Packages - packages.default = pkgs.stdenv.mkDerivation { - pname = "odds-and-sods-package-manager"; - version = "0.1.0"; - src = ./.; - - inherit buildInputs nativeBuildInputs; - - buildPhase = '' - # *REMINDER: Add build commands* - # For Rust: cargo build --release - # For Elixir: mix compile - # For Ada: gprbuild -P odds-and-sods-package-manager.gpr -XMODE=release - ''; - - installPhase = '' - mkdir -p $out/bin - # *REMINDER: Add install commands* - # cp target/release/odds-and-sods-package-manager $out/bin/ # Rust - # cp bin/odds-and-sods-package-manager $out/bin/ # Ada - ''; - - meta = with pkgs.lib; { - description = "{project-description}"; - homepage = "{repo-url}"; - license = with licenses; [ mit ]; # MIT + Palimpsest - maintainers = [ "{maintainer-name}" ]; - platforms = platforms.unix; - }; - }; - - # Apps - apps.default = { - type = "app"; - program = "${self.packages.${system}.default}/bin/odds-and-sods-package-manager"; - }; - - # Checks (CI/CD integration) - checks = { - build = self.packages.${system}.default; - # *REMINDER: Add test checks* - test = pkgs.runCommand "test-odds-and-sods-package-manager" { - buildInputs = [ self.packages.${system}.default ]; - } '' - # Run tests here - touch $out - ''; - }; - } - ); -} diff --git a/governance/STEWARDship.adoc b/governance/STEWARDship.adoc index b37ad9bd..b119cd5b 100644 --- a/governance/STEWARDship.adoc +++ b/governance/STEWARDship.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Stewardship :revdate: 2026-01-18 diff --git a/llm-warmup-dev.md b/llm-warmup-dev.md index 1edac79d..721b8784 100644 --- a/llm-warmup-dev.md +++ b/llm-warmup-dev.md @@ -1,3 +1,7 @@ + # LLM Warmup — odds-and-sods-package-manager (Developer) ## What is odds-and-sods-package-manager? diff --git a/llm-warmup-user.md b/llm-warmup-user.md index 0d44fea8..a401972d 100644 --- a/llm-warmup-user.md +++ b/llm-warmup-user.md @@ -1,3 +1,7 @@ + # LLM Warmup — odds-and-sods-package-manager (User) ## What is odds-and-sods-package-manager? diff --git a/opsm-registry-hub/event-handlers/README.adoc b/opsm-registry-hub/event-handlers/README.adoc index b0d93646..07bb9b09 100644 --- a/opsm-registry-hub/event-handlers/README.adoc +++ b/opsm-registry-hub/event-handlers/README.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Event Handlers :revdate: 2026-01-18 diff --git a/opsm-registry-hub/trust-pipeline/README.adoc b/opsm-registry-hub/trust-pipeline/README.adoc index 53adb1c1..b304e1d1 100644 --- a/opsm-registry-hub/trust-pipeline/README.adoc +++ b/opsm-registry-hub/trust-pipeline/README.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Trust Pipeline :revdate: 2026-01-18 diff --git a/opsm-ui/.github/ISSUE_TEMPLATE/bug_report.md b/opsm-ui/.github/ISSUE_TEMPLATE/bug_report.md index 987aab6b..45a6c025 100644 --- a/opsm-ui/.github/ISSUE_TEMPLATE/bug_report.md +++ b/opsm-ui/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,3 +1,7 @@ + --- name: Bug report about: Create a report to help us improve diff --git a/opsm-ui/.github/ISSUE_TEMPLATE/custom.md b/opsm-ui/.github/ISSUE_TEMPLATE/custom.md index 48d5f81f..99ebf002 100644 --- a/opsm-ui/.github/ISSUE_TEMPLATE/custom.md +++ b/opsm-ui/.github/ISSUE_TEMPLATE/custom.md @@ -1,3 +1,7 @@ + --- name: Custom issue template about: Describe this issue template's purpose here. diff --git a/opsm-ui/.github/ISSUE_TEMPLATE/documentation.md b/opsm-ui/.github/ISSUE_TEMPLATE/documentation.md index 4fcb9f9f..b1d16dff 100644 --- a/opsm-ui/.github/ISSUE_TEMPLATE/documentation.md +++ b/opsm-ui/.github/ISSUE_TEMPLATE/documentation.md @@ -1,3 +1,7 @@ + --- name: Documentation about: Report unclear, missing, or incorrect documentation diff --git a/opsm-ui/.github/ISSUE_TEMPLATE/feature_request.md b/opsm-ui/.github/ISSUE_TEMPLATE/feature_request.md index 3e8fa7e7..a5a56933 100644 --- a/opsm-ui/.github/ISSUE_TEMPLATE/feature_request.md +++ b/opsm-ui/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,3 +1,7 @@ + --- name: Feature request about: Suggest an idea for this project diff --git a/opsm-ui/.github/ISSUE_TEMPLATE/question.md b/opsm-ui/.github/ISSUE_TEMPLATE/question.md index fd0e2a5c..c2d1f57b 100644 --- a/opsm-ui/.github/ISSUE_TEMPLATE/question.md +++ b/opsm-ui/.github/ISSUE_TEMPLATE/question.md @@ -1,3 +1,7 @@ + --- name: Question about: Ask a question about usage or behaviour diff --git a/opsm-ui/.github/workflows/codeql.yml b/opsm-ui/.github/workflows/codeql.yml index 5bbdfa7d..0607869e 100644 --- a/opsm-ui/.github/workflows/codeql.yml +++ b/opsm-ui/.github/workflows/codeql.yml @@ -1,6 +1,5 @@ -# SPDX-License-Identifier: PMPL-1.0 +# SPDX-License-Identifier: MPL-2.0 name: CodeQL Security Analysis - on: push: branches: [main, master] @@ -8,12 +7,11 @@ on: branches: [main, master] schedule: - cron: '0 6 * * 1' - permissions: read-all - jobs: analyze: runs-on: ubuntu-latest + timeout-minutes: 15 permissions: contents: read security-events: write @@ -23,17 +21,14 @@ jobs: include: - language: javascript-typescript build-mode: none - steps: - name: Checkout uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - name: Initialize CodeQL uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3.28.1 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} - - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3.28.1 with: diff --git a/opsm-ui/.github/workflows/governance.yml b/opsm-ui/.github/workflows/governance.yml index b0b1ed6d..60e8e904 100644 --- a/opsm-ui/.github/workflows/governance.yml +++ b/opsm-ui/.github/workflows/governance.yml @@ -11,16 +11,14 @@ # (rust-ci, codeql, dependabot, release, scan/mirror/pages plumbing). name: Governance - on: push: branches: [main, master] pull_request: workflow_dispatch: - permissions: contents: read - jobs: governance: - uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@main + uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@861b5e911d9e5dcfb3c0ab3dd2a9a3c8fd0a1613 + timeout-minutes: 10 diff --git a/opsm-ui/.github/workflows/hypatia-scan.yml b/opsm-ui/.github/workflows/hypatia-scan.yml index 5b59919d..c3cb66bb 100644 --- a/opsm-ui/.github/workflows/hypatia-scan.yml +++ b/opsm-ui/.github/workflows/hypatia-scan.yml @@ -1,41 +1,35 @@ # SPDX-License-Identifier: MPL-2.0 # Hypatia Neurosymbolic CI/CD Security Scan name: Hypatia Security Scan - on: push: - branches: [ main, master, develop ] + branches: [main, master, develop] pull_request: - branches: [ main, master ] + branches: [main, master] schedule: - - cron: '0 0 * * 0' # Weekly on Sunday + - cron: '0 0 * * 0' # Weekly on Sunday workflow_dispatch: - permissions: read-all - jobs: scan: name: Hypatia Neurosymbolic Analysis runs-on: ubuntu-latest - + timeout-minutes: 15 steps: - name: Checkout repository uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 with: - fetch-depth: 0 # Full history for better pattern analysis - + fetch-depth: 0 # Full history for better pattern analysis - name: Setup Elixir for Hypatia scanner uses: erlef/setup-beam@2f0cc07b4b9bea248ae098aba9e1a8a1de5ec24c # v1.18.2 with: elixir-version: '1.19.4' otp-version: '28.3' - - name: Clone Hypatia run: | if [ ! -d "$HOME/hypatia" ]; then git clone https://github.com/hyperpolymath/hypatia.git "$HOME/hypatia" fi - - name: Build Hypatia scanner (if needed) working-directory: ${{ env.HOME }}/hypatia run: | @@ -46,7 +40,6 @@ jobs: mix escript.build mv hypatia ../hypatia-v2 fi - - name: Run Hypatia scan id: scan run: | @@ -73,35 +66,19 @@ jobs: echo "- Critical: $CRITICAL" >> $GITHUB_STEP_SUMMARY echo "- High: $HIGH" >> $GITHUB_STEP_SUMMARY echo "- Medium: $MEDIUM" >> $GITHUB_STEP_SUMMARY - - name: Upload findings artifact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: hypatia-findings path: hypatia-findings.json retention-days: 90 - - name: Submit findings to gitbot-fleet (Phase 2) if: steps.scan.outputs.findings_count > 0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_SHA: ${{ github.sha }} - run: | - echo "📤 Submitting ${{ steps.scan.outputs.findings_count }} findings to gitbot-fleet..." - - # Clone gitbot-fleet to temp directory - FLEET_DIR="/tmp/gitbot-fleet-$$" - git clone https://github.com/hyperpolymath/gitbot-fleet.git "$FLEET_DIR" - - # Run submission script - bash "$FLEET_DIR/scripts/submit-finding.sh" hypatia-findings.json - - # Cleanup - rm -rf "$FLEET_DIR" - - echo "✅ Finding submission complete" - + run: "echo \"\U0001F4E4 Submitting ${{ steps.scan.outputs.findings_count }} findings to gitbot-fleet...\"\n\n# Clone gitbot-fleet to temp directory\nFLEET_DIR=\"/tmp/gitbot-fleet-$$\"\ngit clone https://github.com/hyperpolymath/gitbot-fleet.git \"$FLEET_DIR\"\n\n# Run submission script\nbash \"$FLEET_DIR/scripts/submit-finding.sh\" hypatia-findings.json\n\n# Cleanup\nrm -rf \"$FLEET_DIR\"\n\necho \"✅ Finding submission complete\"\n" - name: Check for critical issues if: steps.scan.outputs.critical > 0 run: | @@ -109,7 +86,6 @@ jobs: echo "Review hypatia-findings.json for details" # Don't fail the build yet - just warn # exit 1 - - name: Generate scan report run: | cat << EOF > hypatia-report.md @@ -143,37 +119,8 @@ jobs: EOF cat hypatia-report.md >> $GITHUB_STEP_SUMMARY - - name: Comment on PR with findings if: github.event_name == 'pull_request' && steps.scan.outputs.findings_count > 0 uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7 with: - script: | - const fs = require('fs'); - const findings = JSON.parse(fs.readFileSync('hypatia-findings.json', 'utf8')); - - const critical = findings.filter(f => f.severity === 'critical').length; - const high = findings.filter(f => f.severity === 'high').length; - - let comment = `## 🔍 Hypatia Security Scan\n\n`; - comment += `**Findings:** ${findings.length} issues detected\n\n`; - comment += `| Severity | Count |\n|----------|-------|\n`; - comment += `| 🔴 Critical | ${critical} |\n`; - comment += `| 🟠 High | ${high} |\n`; - comment += `| 🟡 Medium | ${findings.length - critical - high} |\n\n`; - - if (critical > 0) { - comment += `⚠️ **Action Required:** Critical security issues found!\n\n`; - } - - comment += `
View findings\n\n`; - comment += `\`\`\`json\n${JSON.stringify(findings.slice(0, 10), null, 2)}\n\`\`\`\n`; - comment += `
\n\n`; - comment += `*Powered by Hypatia Neurosymbolic CI/CD Intelligence*`; - - github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number, - body: comment - }); + script: "const fs = require('fs');\nconst findings = JSON.parse(fs.readFileSync('hypatia-findings.json', 'utf8'));\n\nconst critical = findings.filter(f => f.severity === 'critical').length;\nconst high = findings.filter(f => f.severity === 'high').length;\n\nlet comment = `## \U0001F50D Hypatia Security Scan\\n\\n`;\ncomment += `**Findings:** ${findings.length} issues detected\\n\\n`;\ncomment += `| Severity | Count |\\n|----------|-------|\\n`;\ncomment += `| \U0001F534 Critical | ${critical} |\\n`;\ncomment += `| \U0001F7E0 High | ${high} |\\n`;\ncomment += `| \U0001F7E1 Medium | ${findings.length - critical - high} |\\n\\n`;\n\nif (critical > 0) {\n comment += `⚠️ **Action Required:** Critical security issues found!\\n\\n`;\n}\n\ncomment += `
View findings\\n\\n`;\ncomment += `\\`\\`\\`json\\n${JSON.stringify(findings.slice(0, 10), null, 2)}\\n\\`\\`\\`\\n`;\ncomment += `
\\n\\n`;\ncomment += `*Powered by Hypatia Neurosymbolic CI/CD Intelligence*`;\n\ngithub.rest.issues.createComment({\n owner: context.repo.owner,\n repo: context.repo.repo,\n issue_number: context.issue.number,\n body: comment\n});\n" diff --git a/opsm-ui/.github/workflows/instant-sync.yml b/opsm-ui/.github/workflows/instant-sync.yml index 93f5a8e7..661c9d3f 100644 --- a/opsm-ui/.github/workflows/instant-sync.yml +++ b/opsm-ui/.github/workflows/instant-sync.yml @@ -1,19 +1,17 @@ # SPDX-License-Identifier: PMPL-1.0 # Instant Forge Sync - Triggers propagation to all forges on push/release name: Instant Sync - on: push: branches: [main, master] release: types: [published] - permissions: contents: read - jobs: dispatch: runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Trigger Propagation uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v3 @@ -28,6 +26,5 @@ jobs: "sha": "${{ github.sha }}", "forges": "" } - - name: Confirm run: echo "::notice::Propagation triggered for ${{ github.event.repository.name }}" diff --git a/opsm-ui/.github/workflows/jekyll-gh-pages.yml b/opsm-ui/.github/workflows/jekyll-gh-pages.yml index 98b5a255..338c5057 100644 --- a/opsm-ui/.github/workflows/jekyll-gh-pages.yml +++ b/opsm-ui/.github/workflows/jekyll-gh-pages.yml @@ -1,31 +1,27 @@ # SPDX-License-Identifier: MPL-2.0 # 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 + timeout-minutes: 15 steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 @@ -38,13 +34,13 @@ jobs: destination: ./_site - name: Upload artifact uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v4 - # Deployment job deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest + timeout-minutes: 15 needs: build steps: - name: Deploy to GitHub Pages diff --git a/opsm-ui/.github/workflows/jekyll.yml b/opsm-ui/.github/workflows/jekyll.yml index 75d16575..fb73ccb7 100644 --- a/opsm-ui/.github/workflows/jekyll.yml +++ b/opsm-ui/.github/workflows/jekyll.yml @@ -6,31 +6,27 @@ # Sample workflow for building and deploying a Jekyll site to GitHub Pages name: Deploy Jekyll site to Pages - 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 + timeout-minutes: 15 steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 @@ -52,13 +48,13 @@ jobs: - name: Upload artifact # Automatically uploads an artifact from the './_site' directory by default uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v4 - # Deployment job deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest + timeout-minutes: 15 needs: build steps: - name: Deploy to GitHub Pages diff --git a/opsm-ui/.github/workflows/mirror.yml b/opsm-ui/.github/workflows/mirror.yml index e2a6d9d9..8652cd4e 100644 --- a/opsm-ui/.github/workflows/mirror.yml +++ b/opsm-ui/.github/workflows/mirror.yml @@ -1,142 +1,125 @@ # SPDX-License-Identifier: PMPL-1.0 # SPDX-FileCopyrightText: 2025 Jonathan D.A. Jewell name: Mirror to Git Forges - on: push: branches: [main] workflow_dispatch: - permissions: read-all - jobs: mirror-gitlab: runs-on: ubuntu-latest + timeout-minutes: 15 if: vars.GITLAB_MIRROR_ENABLED == 'true' steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1 with: ssh-private-key: ${{ secrets.GITLAB_SSH_KEY }} - - name: Mirror to GitLab run: | ssh-keyscan -t ed25519 gitlab.com >> ~/.ssh/known_hosts git remote add gitlab git@gitlab.com:hyperpolymath/${{ github.event.repository.name }}.git || true git push --force gitlab main - mirror-bitbucket: runs-on: ubuntu-latest + timeout-minutes: 15 if: vars.BITBUCKET_MIRROR_ENABLED == 'true' steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1 with: ssh-private-key: ${{ secrets.BITBUCKET_SSH_KEY }} - - name: Mirror to Bitbucket run: | ssh-keyscan -t ed25519 bitbucket.org >> ~/.ssh/known_hosts git remote add bitbucket git@bitbucket.org:hyperpolymath/${{ github.event.repository.name }}.git || true git push --force bitbucket main - mirror-codeberg: runs-on: ubuntu-latest + timeout-minutes: 15 if: vars.CODEBERG_MIRROR_ENABLED == 'true' steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1 with: ssh-private-key: ${{ secrets.CODEBERG_SSH_KEY }} - - name: Mirror to Codeberg run: | ssh-keyscan -t ed25519 codeberg.org >> ~/.ssh/known_hosts git remote add codeberg git@codeberg.org:hyperpolymath/${{ github.event.repository.name }}.git || true git push --force codeberg main - mirror-sourcehut: runs-on: ubuntu-latest + timeout-minutes: 15 if: vars.SOURCEHUT_MIRROR_ENABLED == 'true' steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1 with: ssh-private-key: ${{ secrets.SOURCEHUT_SSH_KEY }} - - name: Mirror to SourceHut run: | ssh-keyscan -t ed25519 git.sr.ht >> ~/.ssh/known_hosts git remote add sourcehut git@git.sr.ht:~hyperpolymath/${{ github.event.repository.name }} || true git push --force sourcehut main - mirror-disroot: runs-on: ubuntu-latest + timeout-minutes: 15 if: vars.DISROOT_MIRROR_ENABLED == 'true' steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1 with: ssh-private-key: ${{ secrets.DISROOT_SSH_KEY }} - - name: Mirror to Disroot run: | ssh-keyscan -t ed25519 git.disroot.org >> ~/.ssh/known_hosts git remote add disroot git@git.disroot.org:hyperpolymath/${{ github.event.repository.name }}.git || true git push --force disroot main - mirror-gitea: runs-on: ubuntu-latest + timeout-minutes: 15 if: vars.GITEA_MIRROR_ENABLED == 'true' steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1 with: ssh-private-key: ${{ secrets.GITEA_SSH_KEY }} - - name: Mirror to Gitea run: | ssh-keyscan -t ed25519 ${{ vars.GITEA_HOST }} >> ~/.ssh/known_hosts git remote add gitea git@${{ vars.GITEA_HOST }}:hyperpolymath/${{ github.event.repository.name }}.git || true git push --force gitea main - mirror-radicle: runs-on: ubuntu-latest + timeout-minutes: 15 if: vars.RADICLE_MIRROR_ENABLED == 'true' steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 with: fetch-depth: 0 - - name: Setup Rust uses: dtolnay/rust-toolchain@f7ccc83f9ed1e5b9c81d8a67d7ad1a747e22a561 # stable with: toolchain: stable - - name: Install Radicle run: | # Install via cargo (safer than curl|sh) cargo install radicle-cli --locked echo "$HOME/.cargo/bin" >> $GITHUB_PATH - - name: Mirror to Radicle run: | echo "${{ secrets.RADICLE_KEY }}" > ~/.radicle/keys/radicle diff --git a/opsm-ui/.github/workflows/scorecard-enforcer.yml b/opsm-ui/.github/workflows/scorecard-enforcer.yml index 9f5fadc6..e04d98dd 100644 --- a/opsm-ui/.github/workflows/scorecard-enforcer.yml +++ b/opsm-ui/.github/workflows/scorecard-enforcer.yml @@ -1,39 +1,34 @@ # SPDX-License-Identifier: PMPL-1.0 # Prevention workflow - runs OpenSSF Scorecard and fails on low scores name: OpenSSF Scorecard Enforcer - on: push: branches: [main] schedule: - - cron: '0 6 * * 1' # Weekly on Monday + - cron: '0 6 * * 1' # Weekly on Monday workflow_dispatch: - permissions: read-all - jobs: scorecard: runs-on: ubuntu-latest + timeout-minutes: 15 permissions: security-events: write - id-token: write # For OIDC + id-token: write # For OIDC steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 with: persist-credentials: false - - name: Run Scorecard uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3 with: results_file: results.sarif results_format: sarif publish_results: true - - name: Upload SARIF uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3 with: sarif_file: results.sarif - - name: Check minimum score run: | # Parse score from results @@ -48,20 +43,18 @@ jobs: echo "::error::Scorecard score $SCORE is below minimum $MIN_SCORE" exit 1 fi - # Check specific high-priority items check-critical: runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 - - name: Check SECURITY.md exists run: | if [ ! -f "SECURITY.md" ]; then echo "::error::SECURITY.md is required" exit 1 fi - - name: Check for pinned dependencies run: | # Check workflows for unpinned actions diff --git a/opsm-ui/.github/workflows/scorecard.yml b/opsm-ui/.github/workflows/scorecard.yml index ec5c80f8..d61617d5 100644 --- a/opsm-ui/.github/workflows/scorecard.yml +++ b/opsm-ui/.github/workflows/scorecard.yml @@ -6,12 +6,11 @@ on: schedule: - cron: '0 4 * * *' workflow_dispatch: - permissions: read-all - jobs: analysis: runs-on: ubuntu-latest + timeout-minutes: 15 permissions: security-events: write id-token: write @@ -19,13 +18,11 @@ jobs: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - - name: Run Scorecard uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.3.1 with: results_file: results.sarif results_format: sarif - - name: Upload results uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3.31.8 with: diff --git a/opsm-ui/.github/workflows/secret-scanner.yml b/opsm-ui/.github/workflows/secret-scanner.yml index 13ec0983..0f9271de 100644 --- a/opsm-ui/.github/workflows/secret-scanner.yml +++ b/opsm-ui/.github/workflows/secret-scanner.yml @@ -1,46 +1,30 @@ # SPDX-License-Identifier: PMPL-1.0 # Prevention workflow - scans for hardcoded secrets before they reach main name: Secret Scanner - on: pull_request: push: branches: [main] - permissions: read-all - jobs: trufflehog: runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 with: - fetch-depth: 0 # Full history for scanning - + fetch-depth: 0 # Full history for scanning - name: TruffleHog Secret Scan uses: trufflesecurity/trufflehog@116e7171542d2f1dad8810f00dcfacbe0b809183 # v3 with: extra_args: --only-verified --fail - - gitleaks: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 - with: - fetch-depth: 0 - - - name: Gitleaks Secret Scan - uses: gitleaks/gitleaks-action@ff98106e4c7b2bc287b24eaf42907196329070c7 # v2 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # Rust-specific: Check for hardcoded crypto values rust-secrets: runs-on: ubuntu-latest + timeout-minutes: 15 if: hashFiles('**/Cargo.toml') != '' steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 - - name: Check for hardcoded secrets in Rust run: | # Patterns that suggest hardcoded secrets diff --git a/opsm-ui/.gitlab-ci.yml b/opsm-ui/.gitlab-ci.yml index 7309fa90..8dafd33c 100644 --- a/opsm-ui/.gitlab-ci.yml +++ b/opsm-ui/.gitlab-ci.yml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell # Primary CI/CD - GitLab is the source of truth stages: @@ -6,20 +7,16 @@ stages: - lint - test - build - variables: CARGO_HOME: ${CI_PROJECT_DIR}/.cargo - cache: key: ${CI_COMMIT_REF_SLUG} paths: - .cargo/ - target/ - # ================== # Security Scanning # ================== - trivy: stage: security image: aquasec/trivy:latest @@ -27,21 +24,12 @@ trivy: - trivy fs --exit-code 0 --severity HIGH,CRITICAL --format table . - trivy fs --exit-code 1 --severity CRITICAL . allow_failure: false - -gitleaks: - stage: security - image: zricethezav/gitleaks:latest - script: - - gitleaks detect --source . --verbose --redact - allow_failure: false - semgrep: stage: security image: returntocorp/semgrep script: - semgrep --config auto --error . allow_failure: true - cargo-audit: stage: security image: rust:latest @@ -51,7 +39,6 @@ cargo-audit: rules: - exists: - Cargo.toml - cargo-deny: stage: security image: rust:latest @@ -62,7 +49,6 @@ cargo-deny: - exists: - Cargo.toml allow_failure: true - mix-audit: stage: security image: elixir:latest @@ -75,11 +61,9 @@ mix-audit: - exists: - mix.exs allow_failure: true - # ================== # Linting # ================== - rustfmt: stage: lint image: rust:latest @@ -89,7 +73,6 @@ rustfmt: rules: - exists: - Cargo.toml - clippy: stage: lint image: rust:latest @@ -100,7 +83,6 @@ clippy: - exists: - Cargo.toml allow_failure: true - mix-format: stage: lint image: elixir:latest @@ -109,7 +91,6 @@ mix-format: rules: - exists: - mix.exs - credo: stage: lint image: elixir:latest @@ -121,11 +102,9 @@ credo: - exists: - mix.exs allow_failure: true - # ================== # Testing # ================== - cargo-test: stage: test image: rust:latest @@ -134,7 +113,6 @@ cargo-test: rules: - exists: - Cargo.toml - mix-test: stage: test image: elixir:latest @@ -145,11 +123,9 @@ mix-test: rules: - exists: - mix.exs - # ================== # Build # ================== - cargo-build: stage: build image: rust:latest @@ -162,7 +138,6 @@ cargo-build: rules: - exists: - Cargo.toml - mix-build: stage: build image: elixir:latest @@ -173,3 +148,8 @@ mix-build: rules: - exists: - mix.exs +trufflehog: + stage: security + image: trufflesecurity/trufflehog:latest + script: + - trufflehog git file://. --only-verified --fail diff --git a/opsm-ui/MAINTAINERS.adoc b/opsm-ui/MAINTAINERS.adoc index a1c65443..becaa3ea 100644 --- a/opsm-ui/MAINTAINERS.adoc +++ b/opsm-ui/MAINTAINERS.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Maintainers :toc: preamble diff --git a/opsm-ui/README.adoc b/opsm-ui/README.adoc index c4b2e6cd..d28116be 100644 --- a/opsm-ui/README.adoc +++ b/opsm-ui/README.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM UI :toc: preamble :toclevels: 2 diff --git a/opsm-ui/ROADMAP.adoc b/opsm-ui/ROADMAP.adoc index f7516da8..7a74234b 100644 --- a/opsm-ui/ROADMAP.adoc +++ b/opsm-ui/ROADMAP.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Opsm Ui Roadmap == Current Status diff --git a/opsm-ui/RSR_OUTLINE.adoc b/opsm-ui/RSR_OUTLINE.adoc index 6014ebe8..a4f3393f 100644 --- a/opsm-ui/RSR_OUTLINE.adoc +++ b/opsm-ui/RSR_OUTLINE.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = RSR Template Repository image:[Palimpsest-MPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"] image:[Palimpsest,link="https://github.com/hyperpolymath/palimpsest-licence"] diff --git a/opsm-ui/docs/CITATIONS.adoc b/opsm-ui/docs/CITATIONS.adoc index 37fdb0f0..52ba5285 100644 --- a/opsm-ui/docs/CITATIONS.adoc +++ b/opsm-ui/docs/CITATIONS.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = RSR-template-repo - Citation Guide :toc: diff --git a/opsm-ui/docs/DOGFOODING-AUDIT.adoc b/opsm-ui/docs/DOGFOODING-AUDIT.adoc index 3be9d657..d6c74836 100644 --- a/opsm-ui/docs/DOGFOODING-AUDIT.adoc +++ b/opsm-ui/docs/DOGFOODING-AUDIT.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Dogfooding Audit (Wave 1) :toc: preamble :toclevels: 2 diff --git a/opsm-ui/docs/IA.adoc b/opsm-ui/docs/IA.adoc index 2e6ccec1..a6f3c07a 100644 --- a/opsm-ui/docs/IA.adoc +++ b/opsm-ui/docs/IA.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM UI Information Architecture :toc: preamble :toclevels: 2 diff --git a/opsm-ui/docs/INSTALL-MATRIX.adoc b/opsm-ui/docs/INSTALL-MATRIX.adoc index 505a5bca..b5f8d794 100644 --- a/opsm-ui/docs/INSTALL-MATRIX.adoc +++ b/opsm-ui/docs/INSTALL-MATRIX.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Install & Containment Matrix :toc: preamble :toclevels: 2 diff --git a/opsm-ui/docs/SETUP-WIZARD.adoc b/opsm-ui/docs/SETUP-WIZARD.adoc index a70f7e0d..22e4f8d5 100644 --- a/opsm-ui/docs/SETUP-WIZARD.adoc +++ b/opsm-ui/docs/SETUP-WIZARD.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Setup Wizard :toc: preamble :toclevels: 2 diff --git a/opsm-ui/docs/UI-BACKLOG.adoc b/opsm-ui/docs/UI-BACKLOG.adoc index ff9a4244..06c82960 100644 --- a/opsm-ui/docs/UI-BACKLOG.adoc +++ b/opsm-ui/docs/UI-BACKLOG.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM UI Backlog :toc: preamble :toclevels: 2 diff --git a/opsm-ui/docs/UI-SPEC.adoc b/opsm-ui/docs/UI-SPEC.adoc index 291db590..6019c9c1 100644 --- a/opsm-ui/docs/UI-SPEC.adoc +++ b/opsm-ui/docs/UI-SPEC.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM UI Specification (Tauri + ReScript) :toc: preamble :toclevels: 3 diff --git a/opsm-ui/tui/src/lib.rs b/opsm-ui/tui/src/lib.rs index 08a07516..8e2219e8 100644 --- a/opsm-ui/tui/src/lib.rs +++ b/opsm-ui/tui/src/lib.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell // //! OPSM TUI — core types and state machine. diff --git a/opsm-ui/tui/src/main.rs b/opsm-ui/tui/src/main.rs index 9e1bc736..90f599d1 100644 --- a/opsm-ui/tui/src/main.rs +++ b/opsm-ui/tui/src/main.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell // //! OPSM TUI — terminal user interface for the Odds and Sods Package Manager. diff --git a/opsm_ex/.formatter.exs b/opsm_ex/.formatter.exs index d2cda26e..a1285df0 100644 --- a/opsm_ex/.formatter.exs +++ b/opsm_ex/.formatter.exs @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # Used by "mix format" [ inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] diff --git a/opsm_ex/CHANGELOG.md b/opsm_ex/CHANGELOG.md index f6c3af49..d007af8b 100644 --- a/opsm_ex/CHANGELOG.md +++ b/opsm_ex/CHANGELOG.md @@ -1,3 +1,7 @@ + # Changelog All notable changes to this project will be documented in this file. diff --git a/opsm_ex/README.md b/opsm_ex/README.md index 46f8308e..30c0ef7a 100644 --- a/opsm_ex/README.md +++ b/opsm_ex/README.md @@ -1,3 +1,7 @@ + # Opsm **TODO: Add description** diff --git a/opsm_ex/SEAM-ANALYSIS.md b/opsm_ex/SEAM-ANALYSIS.md index 12f3929f..396ec3c7 100644 --- a/opsm_ex/SEAM-ANALYSIS.md +++ b/opsm_ex/SEAM-ANALYSIS.md @@ -1,3 +1,7 @@ + # OPSM Seam Analysis Report ## Executive Summary diff --git a/opsm_ex/TEST-EXECUTION-REPORT.md b/opsm_ex/TEST-EXECUTION-REPORT.md index 47da6516..6515318d 100644 --- a/opsm_ex/TEST-EXECUTION-REPORT.md +++ b/opsm_ex/TEST-EXECUTION-REPORT.md @@ -1,3 +1,7 @@ + # OPSM v1.0.0 Test Execution Report **Date:** 2026-01-23 diff --git a/opsm_ex/bench/opsm_bench.exs b/opsm_ex/bench/opsm_bench.exs index 29371f61..108c117b 100644 --- a/opsm_ex/bench/opsm_bench.exs +++ b/opsm_ex/bench/opsm_bench.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Benchmark do alias Opsm.{Lockfile, VersionConstraint} diff --git a/opsm_ex/config/config.exs b/opsm_ex/config/config.exs index 774b0323..82111162 100644 --- a/opsm_ex/config/config.exs +++ b/opsm_ex/config/config.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell import Config # Suppress noisy Bandit startup logs in CLI mode diff --git a/opsm_ex/docs/PROVEN_DEPENDENCY_AUDIT.md b/opsm_ex/docs/PROVEN_DEPENDENCY_AUDIT.md index 957da40e..102ada0b 100644 --- a/opsm_ex/docs/PROVEN_DEPENDENCY_AUDIT.md +++ b/opsm_ex/docs/PROVEN_DEPENDENCY_AUDIT.md @@ -1,3 +1,7 @@ + # Proven Dependency Audit SPDX-License-Identifier: MPL-2.0 diff --git a/opsm_ex/lib/opsm.ex b/opsm_ex/lib/opsm.ex index e47bb7ee..06ddff05 100644 --- a/opsm_ex/lib/opsm.ex +++ b/opsm_ex/lib/opsm.ex @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm do @moduledoc """ Documentation for `Opsm`. diff --git a/opsm_ex/lib/opsm/api/mobile_router.ex b/opsm_ex/lib/opsm/api/mobile_router.ex index fe18b618..e537cfd4 100644 --- a/opsm_ex/lib/opsm/api/mobile_router.ex +++ b/opsm_ex/lib/opsm/api/mobile_router.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Api.MobileRouter do @moduledoc """ REST API endpoints for OPSM mobile application. diff --git a/opsm_ex/lib/opsm/api/nickel.ex b/opsm_ex/lib/opsm/api/nickel.ex index 43943720..bd2662f7 100644 --- a/opsm_ex/lib/opsm/api/nickel.ex +++ b/opsm_ex/lib/opsm/api/nickel.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Api.Nickel do @moduledoc """ Nickel decoding support for API payloads. diff --git a/opsm_ex/lib/opsm/api/router.ex b/opsm_ex/lib/opsm/api/router.ex index a43e330d..f0619c2e 100644 --- a/opsm_ex/lib/opsm/api/router.ex +++ b/opsm_ex/lib/opsm/api/router.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Api.Router do @moduledoc """ Minimal REST API for OPSM UI integration. diff --git a/opsm_ex/lib/opsm/api/server.ex b/opsm_ex/lib/opsm/api/server.ex index ccac9abd..56584ceb 100644 --- a/opsm_ex/lib/opsm/api/server.ex +++ b/opsm_ex/lib/opsm/api/server.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Api.Server do @moduledoc """ Local API server for OPSM UI integration. diff --git a/opsm_ex/lib/opsm/application.ex b/opsm_ex/lib/opsm/application.ex index 88d12060..40a77103 100644 --- a/opsm_ex/lib/opsm/application.ex +++ b/opsm_ex/lib/opsm/application.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Application do @moduledoc """ OTP application entrypoint. Starts the registry gateway HTTP server. diff --git a/opsm_ex/lib/opsm/cache.ex b/opsm_ex/lib/opsm/cache.ex index 6b518a10..94e8228d 100644 --- a/opsm_ex/lib/opsm/cache.ex +++ b/opsm_ex/lib/opsm/cache.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Cache do @moduledoc """ ETS-based cache for registry responses. diff --git a/opsm_ex/lib/opsm/cli.ex b/opsm_ex/lib/opsm/cli.ex index e2fc7c44..948d1911 100644 --- a/opsm_ex/lib/opsm/cli.ex +++ b/opsm_ex/lib/opsm/cli.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.CLI do @moduledoc """ CLI entry point for OPSM - Odds-and-sods Package Manager. diff --git a/opsm_ex/lib/opsm/clients/checky_monkey.ex b/opsm_ex/lib/opsm/clients/checky_monkey.ex index 1b6a39b1..fe541d47 100644 --- a/opsm_ex/lib/opsm/clients/checky_monkey.ex +++ b/opsm_ex/lib/opsm/clients/checky_monkey.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Clients.CheckyMonkey do @moduledoc """ Client for Checky-Monkey code verification service. diff --git a/opsm_ex/lib/opsm/clients/cicd_hyper_a.ex b/opsm_ex/lib/opsm/clients/cicd_hyper_a.ex index 90edbc80..5f378d4f 100644 --- a/opsm_ex/lib/opsm/clients/cicd_hyper_a.ex +++ b/opsm_ex/lib/opsm/clients/cicd_hyper_a.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Clients.CicdHyperA do @moduledoc """ Client for CICD-Hyper-A registry and CI/CD pipeline hub. diff --git a/opsm_ex/lib/opsm/clients/claim_forge.ex b/opsm_ex/lib/opsm/clients/claim_forge.ex index e32d2a74..83c45ed2 100644 --- a/opsm_ex/lib/opsm/clients/claim_forge.ex +++ b/opsm_ex/lib/opsm/clients/claim_forge.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Clients.ClaimForge do @moduledoc """ Client for Claim-Forge attestation generation service. diff --git a/opsm_ex/lib/opsm/clients/oikos.ex b/opsm_ex/lib/opsm/clients/oikos.ex index 42cb6d0f..56b36e16 100644 --- a/opsm_ex/lib/opsm/clients/oikos.ex +++ b/opsm_ex/lib/opsm/clients/oikos.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Clients.Oikos do @moduledoc """ Client for Oikos ecosystem sustainability analysis service. diff --git a/opsm_ex/lib/opsm/clients/palimpsest.ex b/opsm_ex/lib/opsm/clients/palimpsest.ex index 70adc780..5fb7f88d 100644 --- a/opsm_ex/lib/opsm/clients/palimpsest.ex +++ b/opsm_ex/lib/opsm/clients/palimpsest.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Clients.Palimpsest do @moduledoc """ Client for Palimpsest license analysis service. diff --git a/opsm_ex/lib/opsm/colour.ex b/opsm_ex/lib/opsm/colour.ex index 7d013f43..c0574690 100644 --- a/opsm_ex/lib/opsm/colour.ex +++ b/opsm_ex/lib/opsm/colour.ex @@ -1,6 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Colour do @moduledoc """ ANSI colour helpers for CLI output. diff --git a/opsm_ex/lib/opsm/config.ex b/opsm_ex/lib/opsm/config.ex index 346d891c..8de672a8 100644 --- a/opsm_ex/lib/opsm/config.ex +++ b/opsm_ex/lib/opsm/config.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Config do @moduledoc """ Configuration loading with TOML support. diff --git a/opsm_ex/lib/opsm/container.ex b/opsm_ex/lib/opsm/container.ex index 96081e8f..0f676b66 100644 --- a/opsm_ex/lib/opsm/container.ex +++ b/opsm_ex/lib/opsm/container.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Container do @moduledoc """ Container image management and security integration. diff --git a/opsm_ex/lib/opsm/crypto/api_key_storage.ex b/opsm_ex/lib/opsm/crypto/api_key_storage.ex index 5d1d18b8..c3dd3a1c 100644 --- a/opsm_ex/lib/opsm/crypto/api_key_storage.ex +++ b/opsm_ex/lib/opsm/crypto/api_key_storage.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.ApiKeyStorage do @moduledoc """ Secure API key storage with encryption and hashing. diff --git a/opsm_ex/lib/opsm/crypto/hash.ex b/opsm_ex/lib/opsm/crypto/hash.ex index 721d1978..33dfaf11 100644 --- a/opsm_ex/lib/opsm/crypto/hash.ex +++ b/opsm_ex/lib/opsm/crypto/hash.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.Hash do @moduledoc """ Hybrid hashing strategy: diff --git a/opsm_ex/lib/opsm/crypto/hybrid_signatures.ex b/opsm_ex/lib/opsm/crypto/hybrid_signatures.ex index dcd2d3aa..5cb4bdac 100644 --- a/opsm_ex/lib/opsm/crypto/hybrid_signatures.ex +++ b/opsm_ex/lib/opsm/crypto/hybrid_signatures.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.HybridSignatures do @moduledoc """ Hybrid classical + post-quantum digital signatures. diff --git a/opsm_ex/lib/opsm/crypto/password.ex b/opsm_ex/lib/opsm/crypto/password.ex index d61c3265..78f5964f 100644 --- a/opsm_ex/lib/opsm/crypto/password.ex +++ b/opsm_ex/lib/opsm/crypto/password.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.Password do @moduledoc """ Argon2id password hashing with NIST-compliant parameters. diff --git a/opsm_ex/lib/opsm/crypto/post_quantum.ex b/opsm_ex/lib/opsm/crypto/post_quantum.ex index 16d82946..b1d53e92 100644 --- a/opsm_ex/lib/opsm/crypto/post_quantum.ex +++ b/opsm_ex/lib/opsm/crypto/post_quantum.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.PostQuantum do @moduledoc """ Post-quantum cryptographic primitives via Rust NIFs. diff --git a/opsm_ex/lib/opsm/crypto/post_quantum/nif.ex b/opsm_ex/lib/opsm/crypto/post_quantum/nif.ex index 9f67a48d..3c93bfbd 100644 --- a/opsm_ex/lib/opsm/crypto/post_quantum/nif.ex +++ b/opsm_ex/lib/opsm/crypto/post_quantum/nif.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.PostQuantum.Nif do @moduledoc """ Rust NIF bindings for post-quantum cryptographic operations. diff --git a/opsm_ex/lib/opsm/crypto/pq_trust.ex b/opsm_ex/lib/opsm/crypto/pq_trust.ex index 682c412d..8b033d4c 100644 --- a/opsm_ex/lib/opsm/crypto/pq_trust.ex +++ b/opsm_ex/lib/opsm/crypto/pq_trust.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.PqTrust do @moduledoc """ Post-quantum cryptographic integration for the trust pipeline. diff --git a/opsm_ex/lib/opsm/crypto/rng.ex b/opsm_ex/lib/opsm/crypto/rng.ex index d9dff170..7788370b 100644 --- a/opsm_ex/lib/opsm/crypto/rng.ex +++ b/opsm_ex/lib/opsm/crypto/rng.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.RNG do @moduledoc """ ChaCha20-based Deterministic Random Bit Generator (DRBG). diff --git a/opsm_ex/lib/opsm/crypto/signatures.ex b/opsm_ex/lib/opsm/crypto/signatures.ex index cef4ebc2..a9cf96e2 100644 --- a/opsm_ex/lib/opsm/crypto/signatures.ex +++ b/opsm_ex/lib/opsm/crypto/signatures.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.Signatures do @moduledoc """ Cryptographic signature generation and verification. diff --git a/opsm_ex/lib/opsm/crypto/symmetric.ex b/opsm_ex/lib/opsm/crypto/symmetric.ex index c8949ca0..1971e79e 100644 --- a/opsm_ex/lib/opsm/crypto/symmetric.ex +++ b/opsm_ex/lib/opsm/crypto/symmetric.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.Symmetric do @moduledoc """ ChaCha20-Poly1305 symmetric encryption with 256-bit keys. diff --git a/opsm_ex/lib/opsm/errors.ex b/opsm_ex/lib/opsm/errors.ex index 04300f5e..d561dac4 100644 --- a/opsm_ex/lib/opsm/errors.ex +++ b/opsm_ex/lib/opsm/errors.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Errors do @moduledoc """ Standardized error formatting and messages. diff --git a/opsm_ex/lib/opsm/events.ex b/opsm_ex/lib/opsm/events.ex index dfe82037..7ad7cff3 100644 --- a/opsm_ex/lib/opsm/events.ex +++ b/opsm_ex/lib/opsm/events.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Events do @moduledoc """ Event dispatcher for federation and registry propagation. diff --git a/opsm_ex/lib/opsm/federation.ex b/opsm_ex/lib/opsm/federation.ex index 9c8e6e53..65b03800 100644 --- a/opsm_ex/lib/opsm/federation.ex +++ b/opsm_ex/lib/opsm/federation.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Federation do @moduledoc """ Federation layer for multi-source package resolution. diff --git a/opsm_ex/lib/opsm/federation/dep_mapper.ex b/opsm_ex/lib/opsm/federation/dep_mapper.ex index 0076f390..0d3ae798 100644 --- a/opsm_ex/lib/opsm/federation/dep_mapper.ex +++ b/opsm_ex/lib/opsm/federation/dep_mapper.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Federation.DepMapper do @moduledoc """ Maps package names across ecosystems where equivalents exist. diff --git a/opsm_ex/lib/opsm/federation/system_query.ex b/opsm_ex/lib/opsm/federation/system_query.ex index 84a805db..fbb2236c 100644 --- a/opsm_ex/lib/opsm/federation/system_query.ex +++ b/opsm_ex/lib/opsm/federation/system_query.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Federation.SystemQuery do @moduledoc """ Query system package managers for installed packages and versions. diff --git a/opsm_ex/lib/opsm/git/build_detector.ex b/opsm_ex/lib/opsm/git/build_detector.ex index eba62d55..0d4a572a 100644 --- a/opsm_ex/lib/opsm/git/build_detector.ex +++ b/opsm_ex/lib/opsm/git/build_detector.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Git.BuildDetector do @moduledoc """ Detects build systems present in a repository by scanning for marker files. diff --git a/opsm_ex/lib/opsm/git/builder.ex b/opsm_ex/lib/opsm/git/builder.ex index 98c2a451..00926767 100644 --- a/opsm_ex/lib/opsm/git/builder.ex +++ b/opsm_ex/lib/opsm/git/builder.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Git.Builder do @moduledoc """ Executes builds for detected build systems via SafeExec. diff --git a/opsm_ex/lib/opsm/git/clone.ex b/opsm_ex/lib/opsm/git/clone.ex index 0e2d4607..2e1baa03 100644 --- a/opsm_ex/lib/opsm/git/clone.ex +++ b/opsm_ex/lib/opsm/git/clone.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Git.Clone do @moduledoc """ Safe git clone operations with SSRF prevention and ref pinning. diff --git a/opsm_ex/lib/opsm/git/pipeline.ex b/opsm_ex/lib/opsm/git/pipeline.ex index 68fd2d13..9a6428ca 100644 --- a/opsm_ex/lib/opsm/git/pipeline.ex +++ b/opsm_ex/lib/opsm/git/pipeline.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Git.Pipeline do @moduledoc """ Orchestrates the full git clone -> detect -> build -> install pipeline. diff --git a/opsm_ex/lib/opsm/har/web_scraper.ex b/opsm_ex/lib/opsm/har/web_scraper.ex index 5d6d3b76..604a39c3 100644 --- a/opsm_ex/lib/opsm/har/web_scraper.ex +++ b/opsm_ex/lib/opsm/har/web_scraper.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Har.WebScraper do @moduledoc """ Elixir-native HAR web scraper agent for package discovery. diff --git a/opsm_ex/lib/opsm/har_queue.ex b/opsm_ex/lib/opsm/har_queue.ex index 1bf8b9f3..d15cd79e 100644 --- a/opsm_ex/lib/opsm/har_queue.ex +++ b/opsm_ex/lib/opsm/har_queue.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.HarQueue do @moduledoc """ Manages task queue for HAR (hybrid-automation-router) integration. diff --git a/opsm_ex/lib/opsm/http.ex b/opsm_ex/lib/opsm/http.ex index d55923a1..e2df9592 100644 --- a/opsm_ex/lib/opsm/http.ex +++ b/opsm_ex/lib/opsm/http.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Http do @moduledoc """ HTTP client with retries, exponential backoff, and connection pooling. diff --git a/opsm_ex/lib/opsm/imp.ex b/opsm_ex/lib/opsm/imp.ex index cd0ea1ec..ed04c0e3 100644 --- a/opsm_ex/lib/opsm/imp.ex +++ b/opsm_ex/lib/opsm/imp.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Imp do @moduledoc """ Internal Manifest Protocol helpers for OPSM. diff --git a/opsm_ex/lib/opsm/lockfile.ex b/opsm_ex/lib/opsm/lockfile.ex index 278b5f61..51f265d8 100644 --- a/opsm_ex/lib/opsm/lockfile.ex +++ b/opsm_ex/lib/opsm/lockfile.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Lockfile do @moduledoc """ Lock file management for reproducible package installations. diff --git a/opsm_ex/lib/opsm/maintenance.ex b/opsm_ex/lib/opsm/maintenance.ex index 4aaccb9c..e0455be0 100644 --- a/opsm_ex/lib/opsm/maintenance.ex +++ b/opsm_ex/lib/opsm/maintenance.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Maintenance do @moduledoc """ Package maintenance operations. diff --git a/opsm_ex/lib/opsm/manifest/opsm_toml.ex b/opsm_ex/lib/opsm/manifest/opsm_toml.ex index 02d12617..fb3eb50b 100644 --- a/opsm_ex/lib/opsm/manifest/opsm_toml.ex +++ b/opsm_ex/lib/opsm/manifest/opsm_toml.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Manifest.OpsmToml do @moduledoc """ Native OPSM manifest format (opsm.toml) parser and writer. diff --git a/opsm_ex/lib/opsm/manifest/writer.ex b/opsm_ex/lib/opsm/manifest/writer.ex index e1ca1f94..697a924a 100644 --- a/opsm_ex/lib/opsm/manifest/writer.ex +++ b/opsm_ex/lib/opsm/manifest/writer.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Manifest.Writer do @moduledoc """ Bidirectional manifest conversion — write OPSM's internal ManifestFormat diff --git a/opsm_ex/lib/opsm/manifest_finder.ex b/opsm_ex/lib/opsm/manifest_finder.ex index 9a1cfffd..6bd11c84 100644 --- a/opsm_ex/lib/opsm/manifest_finder.ex +++ b/opsm_ex/lib/opsm/manifest_finder.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.ManifestFinder do @moduledoc """ Locate manifests for ingestion. Shares the manifest candidate list with the diff --git a/opsm_ex/lib/opsm/manifest_ingestion.ex b/opsm_ex/lib/opsm/manifest_ingestion.ex index ae5e63af..b3318fdb 100644 --- a/opsm_ex/lib/opsm/manifest_ingestion.ex +++ b/opsm_ex/lib/opsm/manifest_ingestion.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.ManifestIngestion do @moduledoc """ Manifest ingestion pipeline: nickel-config-reporter validation, IMP normalization, and diff --git a/opsm_ex/lib/opsm/network/ipv6.ex b/opsm_ex/lib/opsm/network/ipv6.ex index 2c044bc0..b574c715 100644 --- a/opsm_ex/lib/opsm/network/ipv6.ex +++ b/opsm_ex/lib/opsm/network/ipv6.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Network.Ipv6 do @moduledoc """ IPv6-only enforcement for OPSM registry connections. diff --git a/opsm_ex/lib/opsm/package/cleanup.ex b/opsm_ex/lib/opsm/package/cleanup.ex index fcf07e13..798e9c6b 100644 --- a/opsm_ex/lib/opsm/package/cleanup.ex +++ b/opsm_ex/lib/opsm/package/cleanup.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # cleanup.ex — Extended cleanup for desktop integration, services, and config. # # Handles platform-specific artifacts that the basic do_remove/1 doesn't touch: @@ -10,7 +11,6 @@ # # Part of the UX Manifesto "Uninstall (4 tiers)" requirement. # -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) defmodule Opsm.Package.Cleanup do @moduledoc """ diff --git a/opsm_ex/lib/opsm/package/downloader.ex b/opsm_ex/lib/opsm/package/downloader.ex index 38a9de0d..b9e104d5 100644 --- a/opsm_ex/lib/opsm/package/downloader.ex +++ b/opsm_ex/lib/opsm/package/downloader.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Package.Downloader do @moduledoc """ Package download and verification. diff --git a/opsm_ex/lib/opsm/package/installer.ex b/opsm_ex/lib/opsm/package/installer.ex index 8e2ec244..321db5e0 100644 --- a/opsm_ex/lib/opsm/package/installer.ex +++ b/opsm_ex/lib/opsm/package/installer.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Package.Installer do @moduledoc """ Package installation and management. diff --git a/opsm_ex/lib/opsm/package/native.ex b/opsm_ex/lib/opsm/package/native.ex index 85b38c8e..609004b4 100644 --- a/opsm_ex/lib/opsm/package/native.ex +++ b/opsm_ex/lib/opsm/package/native.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Package.Native do @moduledoc """ Native toolchain delegation. diff --git a/opsm_ex/lib/opsm/package/transaction.ex b/opsm_ex/lib/opsm/package/transaction.ex index cd664d3e..9522a2de 100644 --- a/opsm_ex/lib/opsm/package/transaction.ex +++ b/opsm_ex/lib/opsm/package/transaction.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Package.Transaction do @moduledoc """ Transaction tracking for package installation. diff --git a/opsm_ex/lib/opsm/progress.ex b/opsm_ex/lib/opsm/progress.ex index 4977e2ad..8c6afd91 100644 --- a/opsm_ex/lib/opsm/progress.ex +++ b/opsm_ex/lib/opsm/progress.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Progress do @moduledoc """ Progress indicators for long-running operations. diff --git a/opsm_ex/lib/opsm/registries/affinescript.ex b/opsm_ex/lib/opsm/registries/affinescript.ex index 3e9dc8ee..4fc1c841 100644 --- a/opsm_ex/lib/opsm/registries/affinescript.ex +++ b/opsm_ex/lib/opsm/registries/affinescript.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.AffineScript do @moduledoc """ AffineScript package registry API client. diff --git a/opsm_ex/lib/opsm/registries/agentic.ex b/opsm_ex/lib/opsm/registries/agentic.ex index 62d8fdcf..a75e7981 100644 --- a/opsm_ex/lib/opsm/registries/agentic.ex +++ b/opsm_ex/lib/opsm/registries/agentic.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Agentic do @moduledoc """ Agentic registry adapter that delegates to HAR for package discovery. diff --git a/opsm_ex/lib/opsm/registries/alire.ex b/opsm_ex/lib/opsm/registries/alire.ex index 9132c42d..30c54813 100644 --- a/opsm_ex/lib/opsm/registries/alire.ex +++ b/opsm_ex/lib/opsm/registries/alire.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Alire do @moduledoc """ Ada/SPARK Alire registry adapter. diff --git a/opsm_ex/lib/opsm/registries/alpine.ex b/opsm_ex/lib/opsm/registries/alpine.ex index 24e4e246..c69800f7 100644 --- a/opsm_ex/lib/opsm/registries/alpine.ex +++ b/opsm_ex/lib/opsm/registries/alpine.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Alpine do @moduledoc """ Alpine Linux (apk) package registry adapter. diff --git a/opsm_ex/lib/opsm/registries/ansible_galaxy.ex b/opsm_ex/lib/opsm/registries/ansible_galaxy.ex index 0157e9af..0d854e88 100644 --- a/opsm_ex/lib/opsm/registries/ansible_galaxy.ex +++ b/opsm_ex/lib/opsm/registries/ansible_galaxy.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.AnsibleGalaxy do @moduledoc """ Ansible Galaxy registry adapter for Ansible collections and roles. diff --git a/opsm_ex/lib/opsm/registries/apt.ex b/opsm_ex/lib/opsm/registries/apt.ex index 1700809e..81823875 100644 --- a/opsm_ex/lib/opsm/registries/apt.ex +++ b/opsm_ex/lib/opsm/registries/apt.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Apt do @moduledoc """ APT/dpkg (Debian/Ubuntu) package registry adapter. diff --git a/opsm_ex/lib/opsm/registries/astrolabe.ex b/opsm_ex/lib/opsm/registries/astrolabe.ex index 6bd34643..e740a475 100644 --- a/opsm_ex/lib/opsm/registries/astrolabe.ex +++ b/opsm_ex/lib/opsm/registries/astrolabe.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Astrolabe do @moduledoc """ Astrolabe registry adapter for Zig packages. diff --git a/opsm_ex/lib/opsm/registries/aur.ex b/opsm_ex/lib/opsm/registries/aur.ex index 373afdf1..e93fd8e0 100644 --- a/opsm_ex/lib/opsm/registries/aur.ex +++ b/opsm_ex/lib/opsm/registries/aur.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Aur do @moduledoc """ Arch User Repository (AUR) registry adapter. diff --git a/opsm_ex/lib/opsm/registries/betlang.ex b/opsm_ex/lib/opsm/registries/betlang.ex index 094458ae..f8ca7dd1 100644 --- a/opsm_ex/lib/opsm/registries/betlang.ex +++ b/opsm_ex/lib/opsm/registries/betlang.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Betlang do @moduledoc """ Betlang package registry API client. diff --git a/opsm_ex/lib/opsm/registries/bioconductor.ex b/opsm_ex/lib/opsm/registries/bioconductor.ex index 9dcc8037..b35d103e 100644 --- a/opsm_ex/lib/opsm/registries/bioconductor.ex +++ b/opsm_ex/lib/opsm/registries/bioconductor.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Bioconductor do @moduledoc """ Bioconductor registry adapter for R bioinformatics packages. diff --git a/opsm_ex/lib/opsm/registries/bower.ex b/opsm_ex/lib/opsm/registries/bower.ex index 6b46d277..db1866ac 100644 --- a/opsm_ex/lib/opsm/registries/bower.ex +++ b/opsm_ex/lib/opsm/registries/bower.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Bower do @moduledoc """ Bower registry adapter. diff --git a/opsm_ex/lib/opsm/registries/buildpacks.ex b/opsm_ex/lib/opsm/registries/buildpacks.ex index db170ffd..6e91029a 100644 --- a/opsm_ex/lib/opsm/registries/buildpacks.ex +++ b/opsm_ex/lib/opsm/registries/buildpacks.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Buildpacks do @moduledoc """ Cloud Native Buildpacks registry adapter. diff --git a/opsm_ex/lib/opsm/registries/cargo_binstall.ex b/opsm_ex/lib/opsm/registries/cargo_binstall.ex index 58fee8dc..f02ae8e8 100644 --- a/opsm_ex/lib/opsm/registries/cargo_binstall.ex +++ b/opsm_ex/lib/opsm/registries/cargo_binstall.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.CargoBinstall do @moduledoc """ Cargo binary install registry adapter. diff --git a/opsm_ex/lib/opsm/registries/cdnjs.ex b/opsm_ex/lib/opsm/registries/cdnjs.ex index f3d2e621..51b9d930 100644 --- a/opsm_ex/lib/opsm/registries/cdnjs.ex +++ b/opsm_ex/lib/opsm/registries/cdnjs.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Cdnjs do @moduledoc """ cdnjs Registry API client. diff --git a/opsm_ex/lib/opsm/registries/chef_supermarket.ex b/opsm_ex/lib/opsm/registries/chef_supermarket.ex index b494dabd..2f7f7c53 100644 --- a/opsm_ex/lib/opsm/registries/chef_supermarket.ex +++ b/opsm_ex/lib/opsm/registries/chef_supermarket.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.ChefSupermarket do @moduledoc """ Chef Supermarket registry adapter. diff --git a/opsm_ex/lib/opsm/registries/chicken.ex b/opsm_ex/lib/opsm/registries/chicken.ex index 7714d6a6..9657962f 100644 --- a/opsm_ex/lib/opsm/registries/chicken.ex +++ b/opsm_ex/lib/opsm/registries/chicken.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Chicken do @moduledoc """ CHICKEN Scheme egg registry adapter. diff --git a/opsm_ex/lib/opsm/registries/clojars.ex b/opsm_ex/lib/opsm/registries/clojars.ex index e391e3d3..e0f3db4b 100644 --- a/opsm_ex/lib/opsm/registries/clojars.ex +++ b/opsm_ex/lib/opsm/registries/clojars.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Clojars do @moduledoc """ Clojars registry API client. diff --git a/opsm_ex/lib/opsm/registries/cocoapods.ex b/opsm_ex/lib/opsm/registries/cocoapods.ex index e840bcfb..0a0368f1 100644 --- a/opsm_ex/lib/opsm/registries/cocoapods.ex +++ b/opsm_ex/lib/opsm/registries/cocoapods.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.CocoaPods do @moduledoc """ CocoaPods Trunk API client for iOS/macOS dependencies. diff --git a/opsm_ex/lib/opsm/registries/conan.ex b/opsm_ex/lib/opsm/registries/conan.ex index 62faa633..5103091d 100644 --- a/opsm_ex/lib/opsm/registries/conan.ex +++ b/opsm_ex/lib/opsm/registries/conan.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Conan do @moduledoc """ Conan Center Index adapter for C/C++ packages. diff --git a/opsm_ex/lib/opsm/registries/conda.ex b/opsm_ex/lib/opsm/registries/conda.ex index a83ba613..b1b32aaa 100644 --- a/opsm_ex/lib/opsm/registries/conda.ex +++ b/opsm_ex/lib/opsm/registries/conda.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Conda do @moduledoc """ Conda/Anaconda registry API client. diff --git a/opsm_ex/lib/opsm/registries/cpan.ex b/opsm_ex/lib/opsm/registries/cpan.ex index d7061a6b..608a4ef8 100644 --- a/opsm_ex/lib/opsm/registries/cpan.ex +++ b/opsm_ex/lib/opsm/registries/cpan.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Cpan do @moduledoc """ CPAN (Comprehensive Perl Archive Network) registry API client. diff --git a/opsm_ex/lib/opsm/registries/cran.ex b/opsm_ex/lib/opsm/registries/cran.ex index c6a76e74..14f24f9d 100644 --- a/opsm_ex/lib/opsm/registries/cran.ex +++ b/opsm_ex/lib/opsm/registries/cran.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Cran do @moduledoc """ CRAN (Comprehensive R Archive Network) API client. diff --git a/opsm_ex/lib/opsm/registries/crates.ex b/opsm_ex/lib/opsm/registries/crates.ex index 4f79ba8a..c89fcb5b 100644 --- a/opsm_ex/lib/opsm/registries/crates.ex +++ b/opsm_ex/lib/opsm/registries/crates.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Crates do @moduledoc """ Crates.io Registry API client. diff --git a/opsm_ex/lib/opsm/registries/deno_x.ex b/opsm_ex/lib/opsm/registries/deno_x.ex index ab5c5592..6ae8df49 100644 --- a/opsm_ex/lib/opsm/registries/deno_x.ex +++ b/opsm_ex/lib/opsm/registries/deno_x.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.DenoX do @moduledoc """ Deno Third Party Modules (deno.land/x) Registry API client. diff --git a/opsm_ex/lib/opsm/registries/docker_hub.ex b/opsm_ex/lib/opsm/registries/docker_hub.ex index 43c3467f..e815256f 100644 --- a/opsm_ex/lib/opsm/registries/docker_hub.ex +++ b/opsm_ex/lib/opsm/registries/docker_hub.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.DockerHub do @moduledoc """ Docker Hub registry adapter. diff --git a/opsm_ex/lib/opsm/registries/dub.ex b/opsm_ex/lib/opsm/registries/dub.ex index b9c52a9c..af8833d2 100644 --- a/opsm_ex/lib/opsm/registries/dub.ex +++ b/opsm_ex/lib/opsm/registries/dub.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Dub do @moduledoc """ D language (DUB) registry adapter. diff --git a/opsm_ex/lib/opsm/registries/eclexia.ex b/opsm_ex/lib/opsm/registries/eclexia.ex index a7aba299..5374f6c4 100644 --- a/opsm_ex/lib/opsm/registries/eclexia.ex +++ b/opsm_ex/lib/opsm/registries/eclexia.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Eclexia do @moduledoc """ Eclexia package registry API client. diff --git a/opsm_ex/lib/opsm/registries/eclipse_marketplace.ex b/opsm_ex/lib/opsm/registries/eclipse_marketplace.ex index 9a3348df..39deabd5 100644 --- a/opsm_ex/lib/opsm/registries/eclipse_marketplace.ex +++ b/opsm_ex/lib/opsm/registries/eclipse_marketplace.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.EclipseMarketplace do @moduledoc """ Eclipse Marketplace API client. diff --git a/opsm_ex/lib/opsm/registries/elm.ex b/opsm_ex/lib/opsm/registries/elm.ex index 445851cd..dae69dc9 100644 --- a/opsm_ex/lib/opsm/registries/elm.ex +++ b/opsm_ex/lib/opsm/registries/elm.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Elm do @moduledoc """ Elm package registry adapter. diff --git a/opsm_ex/lib/opsm/registries/elpa.ex b/opsm_ex/lib/opsm/registries/elpa.ex index 8c4c9b98..fb5ed83c 100644 --- a/opsm_ex/lib/opsm/registries/elpa.ex +++ b/opsm_ex/lib/opsm/registries/elpa.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Elpa do @moduledoc """ GNU ELPA (Emacs Lisp Package Archive) registry adapter. diff --git a/opsm_ex/lib/opsm/registries/ephapax.ex b/opsm_ex/lib/opsm/registries/ephapax.ex index f08764f5..911e18d2 100644 --- a/opsm_ex/lib/opsm/registries/ephapax.ex +++ b/opsm_ex/lib/opsm/registries/ephapax.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Ephapax do @moduledoc """ Ephapax package registry API client. diff --git a/opsm_ex/lib/opsm/registries/error_lang.ex b/opsm_ex/lib/opsm/registries/error_lang.ex index 892d4b13..3d6c6fd9 100644 --- a/opsm_ex/lib/opsm/registries/error_lang.ex +++ b/opsm_ex/lib/opsm/registries/error_lang.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.ErrorLang do @moduledoc """ error-lang package registry API client. diff --git a/opsm_ex/lib/opsm/registries/flatpak.ex b/opsm_ex/lib/opsm/registries/flatpak.ex index 09fb6186..3bc6381e 100644 --- a/opsm_ex/lib/opsm/registries/flatpak.ex +++ b/opsm_ex/lib/opsm/registries/flatpak.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Flatpak do @moduledoc """ Flatpak (Flathub) registry adapter. diff --git a/opsm_ex/lib/opsm/registries/fpm_registry.ex b/opsm_ex/lib/opsm/registries/fpm_registry.ex index d1407555..41ea75b0 100644 --- a/opsm_ex/lib/opsm/registries/fpm_registry.ex +++ b/opsm_ex/lib/opsm/registries/fpm_registry.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.FpmRegistry do @moduledoc """ Fortran Package Manager (fpm) registry adapter. diff --git a/opsm_ex/lib/opsm/registries/freebsd.ex b/opsm_ex/lib/opsm/registries/freebsd.ex index 84850d06..b8bd9be6 100644 --- a/opsm_ex/lib/opsm/registries/freebsd.ex +++ b/opsm_ex/lib/opsm/registries/freebsd.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Freebsd do @moduledoc """ FreeBSD Ports/Packages registry adapter. diff --git a/opsm_ex/lib/opsm/registries/git.ex b/opsm_ex/lib/opsm/registries/git.ex index 17053ddc..be85285e 100644 --- a/opsm_ex/lib/opsm/registries/git.ex +++ b/opsm_ex/lib/opsm/registries/git.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Git do @moduledoc """ Generic git repository adapter for package fetching. diff --git a/opsm_ex/lib/opsm/registries/github_packages.ex b/opsm_ex/lib/opsm/registries/github_packages.ex index 4b41d9cb..bb85dde8 100644 --- a/opsm_ex/lib/opsm/registries/github_packages.ex +++ b/opsm_ex/lib/opsm/registries/github_packages.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.GithubPackages do @moduledoc """ GitHub Packages registry adapter. diff --git a/opsm_ex/lib/opsm/registries/gitlab_packages.ex b/opsm_ex/lib/opsm/registries/gitlab_packages.ex index bce1ab58..5c4d8542 100644 --- a/opsm_ex/lib/opsm/registries/gitlab_packages.ex +++ b/opsm_ex/lib/opsm/registries/gitlab_packages.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.GitlabPackages do @moduledoc """ GitLab Packages registry adapter. diff --git a/opsm_ex/lib/opsm/registries/go_modules.ex b/opsm_ex/lib/opsm/registries/go_modules.ex index 38850d02..fa072b4f 100644 --- a/opsm_ex/lib/opsm/registries/go_modules.ex +++ b/opsm_ex/lib/opsm/registries/go_modules.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.GoModules do @moduledoc """ Go module proxy API client. diff --git a/opsm_ex/lib/opsm/registries/godot.ex b/opsm_ex/lib/opsm/registries/godot.ex index 21f73370..b8b312c8 100644 --- a/opsm_ex/lib/opsm/registries/godot.ex +++ b/opsm_ex/lib/opsm/registries/godot.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Godot do @moduledoc """ Godot Asset Library registry adapter. diff --git a/opsm_ex/lib/opsm/registries/gradle_plugins.ex b/opsm_ex/lib/opsm/registries/gradle_plugins.ex index d0bd0900..d2d1f9fa 100644 --- a/opsm_ex/lib/opsm/registries/gradle_plugins.ex +++ b/opsm_ex/lib/opsm/registries/gradle_plugins.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.GradlePlugins do @moduledoc """ Gradle Plugin Portal API client. diff --git a/opsm_ex/lib/opsm/registries/grafana.ex b/opsm_ex/lib/opsm/registries/grafana.ex index 0da22857..8d317373 100644 --- a/opsm_ex/lib/opsm/registries/grafana.ex +++ b/opsm_ex/lib/opsm/registries/grafana.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Grafana do @moduledoc """ Grafana Plugins registry adapter. diff --git a/opsm_ex/lib/opsm/registries/guix.ex b/opsm_ex/lib/opsm/registries/guix.ex index f5117aa3..cd6567bc 100644 --- a/opsm_ex/lib/opsm/registries/guix.ex +++ b/opsm_ex/lib/opsm/registries/guix.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Guix do @moduledoc """ GNU Guix package registry adapter. diff --git a/opsm_ex/lib/opsm/registries/hackage.ex b/opsm_ex/lib/opsm/registries/hackage.ex index 76df5a20..2f3ac907 100644 --- a/opsm_ex/lib/opsm/registries/hackage.ex +++ b/opsm_ex/lib/opsm/registries/hackage.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Hackage do @moduledoc """ Hackage (Haskell) Registry API client. diff --git a/opsm_ex/lib/opsm/registries/helm.ex b/opsm_ex/lib/opsm/registries/helm.ex index 557faee5..fe53bb25 100644 --- a/opsm_ex/lib/opsm/registries/helm.ex +++ b/opsm_ex/lib/opsm/registries/helm.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Helm do @moduledoc """ Helm chart registry adapter via Artifact Hub. diff --git a/opsm_ex/lib/opsm/registries/hex.ex b/opsm_ex/lib/opsm/registries/hex.ex index 9fb14b14..00545368 100644 --- a/opsm_ex/lib/opsm/registries/hex.ex +++ b/opsm_ex/lib/opsm/registries/hex.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Hex do @moduledoc """ Hex.pm Registry API client. diff --git a/opsm_ex/lib/opsm/registries/homebrew.ex b/opsm_ex/lib/opsm/registries/homebrew.ex index 54a2e529..3b51355a 100644 --- a/opsm_ex/lib/opsm/registries/homebrew.ex +++ b/opsm_ex/lib/opsm/registries/homebrew.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Homebrew do @moduledoc """ Homebrew registry adapter. diff --git a/opsm_ex/lib/opsm/registries/homebrew_cask.ex b/opsm_ex/lib/opsm/registries/homebrew_cask.ex index 0ac0c1d8..e18f7023 100644 --- a/opsm_ex/lib/opsm/registries/homebrew_cask.ex +++ b/opsm_ex/lib/opsm/registries/homebrew_cask.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.HomebrewCask do @moduledoc """ Homebrew Cask registry adapter (casks only). diff --git a/opsm_ex/lib/opsm/registries/hyperpolymath_forge.ex b/opsm_ex/lib/opsm/registries/hyperpolymath_forge.ex index 57db4471..08261919 100644 --- a/opsm_ex/lib/opsm/registries/hyperpolymath_forge.ex +++ b/opsm_ex/lib/opsm/registries/hyperpolymath_forge.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.HyperpPolymathForge do @moduledoc """ Hyperpolymath Forge Registry (HFR) — first-class discovery for every diff --git a/opsm_ex/lib/opsm/registries/idris2.ex b/opsm_ex/lib/opsm/registries/idris2.ex index 730e020f..1b02bf83 100644 --- a/opsm_ex/lib/opsm/registries/idris2.ex +++ b/opsm_ex/lib/opsm/registries/idris2.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Idris2 do @moduledoc """ Idris2 package adapter. diff --git a/opsm_ex/lib/opsm/registries/jetbrains.ex b/opsm_ex/lib/opsm/registries/jetbrains.ex index b2c321b0..247c0f83 100644 --- a/opsm_ex/lib/opsm/registries/jetbrains.ex +++ b/opsm_ex/lib/opsm/registries/jetbrains.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Jetbrains do @moduledoc """ JetBrains Plugin Marketplace registry adapter. diff --git a/opsm_ex/lib/opsm/registries/jsdelivr.ex b/opsm_ex/lib/opsm/registries/jsdelivr.ex index ef0c5ce5..de6f90a6 100644 --- a/opsm_ex/lib/opsm/registries/jsdelivr.ex +++ b/opsm_ex/lib/opsm/registries/jsdelivr.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.JsDelivr do @moduledoc """ jsDelivr CDN and Package API client. diff --git a/opsm_ex/lib/opsm/registries/jsr.ex b/opsm_ex/lib/opsm/registries/jsr.ex index 51cb682e..1dc8b7ca 100644 --- a/opsm_ex/lib/opsm/registries/jsr.ex +++ b/opsm_ex/lib/opsm/registries/jsr.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Jsr do @moduledoc """ JSR (JavaScript Registry) API client for Deno packages. diff --git a/opsm_ex/lib/opsm/registries/julia_general.ex b/opsm_ex/lib/opsm/registries/julia_general.ex index 3301c31e..9c0db060 100644 --- a/opsm_ex/lib/opsm/registries/julia_general.ex +++ b/opsm_ex/lib/opsm/registries/julia_general.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.JuliaGeneral do @moduledoc """ Julia General registry adapter. diff --git a/opsm_ex/lib/opsm/registries/julia_the_viper.ex b/opsm_ex/lib/opsm/registries/julia_the_viper.ex index f739ff36..48ea22d9 100644 --- a/opsm_ex/lib/opsm/registries/julia_the_viper.ex +++ b/opsm_ex/lib/opsm/registries/julia_the_viper.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.JuliaTheViper do @moduledoc """ julia-the-viper package registry API client. diff --git a/opsm_ex/lib/opsm/registries/k8s_operators.ex b/opsm_ex/lib/opsm/registries/k8s_operators.ex index e6e5ac78..40775995 100644 --- a/opsm_ex/lib/opsm/registries/k8s_operators.ex +++ b/opsm_ex/lib/opsm/registries/k8s_operators.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.K8sOperators do @moduledoc """ Kubernetes Operators registry adapter (OperatorHub.io). diff --git a/opsm_ex/lib/opsm/registries/lithoglyph.ex b/opsm_ex/lib/opsm/registries/lithoglyph.ex index f611a73e..3d900e28 100644 --- a/opsm_ex/lib/opsm/registries/lithoglyph.ex +++ b/opsm_ex/lib/opsm/registries/lithoglyph.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Lithoglyph do @moduledoc """ Lithoglyph package registry API client. diff --git a/opsm_ex/lib/opsm/registries/luarocks.ex b/opsm_ex/lib/opsm/registries/luarocks.ex index a1e6a0ee..2542164e 100644 --- a/opsm_ex/lib/opsm/registries/luarocks.ex +++ b/opsm_ex/lib/opsm/registries/luarocks.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.LuaRocks do @moduledoc """ LuaRocks registry API client. diff --git a/opsm_ex/lib/opsm/registries/macports.ex b/opsm_ex/lib/opsm/registries/macports.ex index e699f2b9..11be22da 100644 --- a/opsm_ex/lib/opsm/registries/macports.ex +++ b/opsm_ex/lib/opsm/registries/macports.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Macports do @moduledoc """ MacPorts registry adapter. diff --git a/opsm_ex/lib/opsm/registries/maven.ex b/opsm_ex/lib/opsm/registries/maven.ex index 3c10dc48..a88e1b24 100644 --- a/opsm_ex/lib/opsm/registries/maven.ex +++ b/opsm_ex/lib/opsm/registries/maven.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Maven do @moduledoc """ Maven Central Registry API client (Java/Kotlin/Scala). diff --git a/opsm_ex/lib/opsm/registries/melpa.ex b/opsm_ex/lib/opsm/registries/melpa.ex index fc6d2f85..eae7d5d1 100644 --- a/opsm_ex/lib/opsm/registries/melpa.ex +++ b/opsm_ex/lib/opsm/registries/melpa.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Melpa do @moduledoc """ MELPA (Milkypostman's Emacs Lisp Package Archive) registry adapter. diff --git a/opsm_ex/lib/opsm/registries/my_lang.ex b/opsm_ex/lib/opsm/registries/my_lang.ex index b2324ea3..ea4d27b3 100644 --- a/opsm_ex/lib/opsm/registries/my_lang.ex +++ b/opsm_ex/lib/opsm/registries/my_lang.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.MyLang do @moduledoc """ my-lang package registry API client. diff --git a/opsm_ex/lib/opsm/registries/nimble.ex b/opsm_ex/lib/opsm/registries/nimble.ex index 454f5594..9a2118ff 100644 --- a/opsm_ex/lib/opsm/registries/nimble.ex +++ b/opsm_ex/lib/opsm/registries/nimble.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Nimble do @moduledoc """ Nimble Package Directory adapter for Nim packages. diff --git a/opsm_ex/lib/opsm/registries/nix.ex b/opsm_ex/lib/opsm/registries/nix.ex index f87dcf1c..464ceb09 100644 --- a/opsm_ex/lib/opsm/registries/nix.ex +++ b/opsm_ex/lib/opsm/registries/nix.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Nix do @moduledoc """ Nix/nixpkgs registry adapter. diff --git a/opsm_ex/lib/opsm/registries/nix_darwin.ex b/opsm_ex/lib/opsm/registries/nix_darwin.ex index 25642559..97a05af9 100644 --- a/opsm_ex/lib/opsm/registries/nix_darwin.ex +++ b/opsm_ex/lib/opsm/registries/nix_darwin.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.NixDarwin do @moduledoc """ Nix-Darwin / Home Manager registry adapter. diff --git a/opsm_ex/lib/opsm/registries/nix_flakes.ex b/opsm_ex/lib/opsm/registries/nix_flakes.ex index 514a6200..92e26f40 100644 --- a/opsm_ex/lib/opsm/registries/nix_flakes.ex +++ b/opsm_ex/lib/opsm/registries/nix_flakes.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.NixFlakes do @moduledoc """ Nix Flakes registry adapter. diff --git a/opsm_ex/lib/opsm/registries/npm.ex b/opsm_ex/lib/opsm/registries/npm.ex index 6b3ad127..680d2e4c 100644 --- a/opsm_ex/lib/opsm/registries/npm.ex +++ b/opsm_ex/lib/opsm/registries/npm.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Npm do @moduledoc """ NPM Registry API client. diff --git a/opsm_ex/lib/opsm/registries/nqc.ex b/opsm_ex/lib/opsm/registries/nqc.ex index 0d4b9dbc..b3ee9ec2 100644 --- a/opsm_ex/lib/opsm/registries/nqc.ex +++ b/opsm_ex/lib/opsm/registries/nqc.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Nqc do @moduledoc """ NQC (Next Query Calculus) package registry API client. diff --git a/opsm_ex/lib/opsm/registries/nuget.ex b/opsm_ex/lib/opsm/registries/nuget.ex index 984023ed..7024cac0 100644 --- a/opsm_ex/lib/opsm/registries/nuget.ex +++ b/opsm_ex/lib/opsm/registries/nuget.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.NuGet do @moduledoc """ NuGet (.NET) Registry API client. diff --git a/opsm_ex/lib/opsm/registries/oblibeny.ex b/opsm_ex/lib/opsm/registries/oblibeny.ex index 9fbf2496..d855c01e 100644 --- a/opsm_ex/lib/opsm/registries/oblibeny.ex +++ b/opsm_ex/lib/opsm/registries/oblibeny.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Oblibeny do @moduledoc """ Oblibeny package registry API client. diff --git a/opsm_ex/lib/opsm/registries/opam.ex b/opsm_ex/lib/opsm/registries/opam.ex index 0eb97989..9470241b 100644 --- a/opsm_ex/lib/opsm/registries/opam.ex +++ b/opsm_ex/lib/opsm/registries/opam.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Opam do @moduledoc """ OPAM (OCaml Package Manager) registry API client. diff --git a/opsm_ex/lib/opsm/registries/openupm.ex b/opsm_ex/lib/opsm/registries/openupm.ex index 8c5739b7..eacf678c 100644 --- a/opsm_ex/lib/opsm/registries/openupm.ex +++ b/opsm_ex/lib/opsm/registries/openupm.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.OpenUpm do @moduledoc """ OpenUPM registry adapter for Unity packages. diff --git a/opsm_ex/lib/opsm/registries/packagist.ex b/opsm_ex/lib/opsm/registries/packagist.ex index 56c2c064..c9f6b84b 100644 --- a/opsm_ex/lib/opsm/registries/packagist.ex +++ b/opsm_ex/lib/opsm/registries/packagist.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Packagist do @moduledoc """ Packagist (Composer) registry API client. diff --git a/opsm_ex/lib/opsm/registries/pacstall.ex b/opsm_ex/lib/opsm/registries/pacstall.ex index 8b5b4cec..2bc1963f 100644 --- a/opsm_ex/lib/opsm/registries/pacstall.ex +++ b/opsm_ex/lib/opsm/registries/pacstall.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Pacstall do @moduledoc """ Pacstall registry adapter. diff --git a/opsm_ex/lib/opsm/registries/pear.ex b/opsm_ex/lib/opsm/registries/pear.ex index 85f08f71..557231a0 100644 --- a/opsm_ex/lib/opsm/registries/pear.ex +++ b/opsm_ex/lib/opsm/registries/pear.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Pear do @moduledoc """ PHP PEAR registry adapter. diff --git a/opsm_ex/lib/opsm/registries/pecl.ex b/opsm_ex/lib/opsm/registries/pecl.ex index 70fa95dd..06248faf 100644 --- a/opsm_ex/lib/opsm/registries/pecl.ex +++ b/opsm_ex/lib/opsm/registries/pecl.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Pecl do @moduledoc """ PHP PECL registry adapter. diff --git a/opsm_ex/lib/opsm/registries/phronesis.ex b/opsm_ex/lib/opsm/registries/phronesis.ex index ea0c37e8..f527c1bb 100644 --- a/opsm_ex/lib/opsm/registries/phronesis.ex +++ b/opsm_ex/lib/opsm/registries/phronesis.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Phronesis do @moduledoc """ Phronesis package registry API client. diff --git a/opsm_ex/lib/opsm/registries/pkgsrc.ex b/opsm_ex/lib/opsm/registries/pkgsrc.ex index bc5d63e0..19b08464 100644 --- a/opsm_ex/lib/opsm/registries/pkgsrc.ex +++ b/opsm_ex/lib/opsm/registries/pkgsrc.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Pkgsrc do @moduledoc """ NetBSD pkgsrc registry adapter. diff --git a/opsm_ex/lib/opsm/registries/portage.ex b/opsm_ex/lib/opsm/registries/portage.ex index 037ea5fd..7ad87599 100644 --- a/opsm_ex/lib/opsm/registries/portage.ex +++ b/opsm_ex/lib/opsm/registries/portage.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Portage do @moduledoc """ Gentoo Portage registry adapter. diff --git a/opsm_ex/lib/opsm/registries/pub_dev.ex b/opsm_ex/lib/opsm/registries/pub_dev.ex index 8f17774a..4dbab55b 100644 --- a/opsm_ex/lib/opsm/registries/pub_dev.ex +++ b/opsm_ex/lib/opsm/registries/pub_dev.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.PubDev do @moduledoc """ pub.dev Registry API client (Dart/Flutter packages). diff --git a/opsm_ex/lib/opsm/registries/pulumi.ex b/opsm_ex/lib/opsm/registries/pulumi.ex index 3ef59604..efe9226d 100644 --- a/opsm_ex/lib/opsm/registries/pulumi.ex +++ b/opsm_ex/lib/opsm/registries/pulumi.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Pulumi do @moduledoc """ Pulumi Registry adapter. diff --git a/opsm_ex/lib/opsm/registries/puppet_forge.ex b/opsm_ex/lib/opsm/registries/puppet_forge.ex index 4efb43dc..d9353f89 100644 --- a/opsm_ex/lib/opsm/registries/puppet_forge.ex +++ b/opsm_ex/lib/opsm/registries/puppet_forge.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.PuppetForge do @moduledoc """ Puppet Forge registry adapter for Puppet modules. diff --git a/opsm_ex/lib/opsm/registries/pypi.ex b/opsm_ex/lib/opsm/registries/pypi.ex index 354a2758..0c38b4ae 100644 --- a/opsm_ex/lib/opsm/registries/pypi.ex +++ b/opsm_ex/lib/opsm/registries/pypi.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Pypi do @moduledoc """ PyPI Registry API client. diff --git a/opsm_ex/lib/opsm/registries/quandledb.ex b/opsm_ex/lib/opsm/registries/quandledb.ex index bf701931..948945c0 100644 --- a/opsm_ex/lib/opsm/registries/quandledb.ex +++ b/opsm_ex/lib/opsm/registries/quandledb.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.QuandleDB do @moduledoc """ QuandleDB package registry API client. diff --git a/opsm_ex/lib/opsm/registries/raco.ex b/opsm_ex/lib/opsm/registries/raco.ex index 815122eb..3ace13bc 100644 --- a/opsm_ex/lib/opsm/registries/raco.ex +++ b/opsm_ex/lib/opsm/registries/raco.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Raco do @moduledoc """ Racket package registry adapter. diff --git a/opsm_ex/lib/opsm/registries/raku.ex b/opsm_ex/lib/opsm/registries/raku.ex index 9b9fd06e..0e1c828b 100644 --- a/opsm_ex/lib/opsm/registries/raku.ex +++ b/opsm_ex/lib/opsm/registries/raku.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Raku do @moduledoc """ Perl6/Raku module registry adapter. diff --git a/opsm_ex/lib/opsm/registries/rattlescript.ex b/opsm_ex/lib/opsm/registries/rattlescript.ex index 0f7e5aff..74d3ec69 100644 --- a/opsm_ex/lib/opsm/registries/rattlescript.ex +++ b/opsm_ex/lib/opsm/registries/rattlescript.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.RattleScript do @moduledoc """ RattleScript package registry API client. diff --git a/opsm_ex/lib/opsm/registries/registry.ex b/opsm_ex/lib/opsm/registries/registry.ex index e596ce8a..075749e2 100644 --- a/opsm_ex/lib/opsm/registries/registry.ex +++ b/opsm_ex/lib/opsm/registries/registry.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Registry do @moduledoc """ Unified registry dispatcher. diff --git a/opsm_ex/lib/opsm/registries/rpm.ex b/opsm_ex/lib/opsm/registries/rpm.ex index cb7f2e56..361b9012 100644 --- a/opsm_ex/lib/opsm/registries/rpm.ex +++ b/opsm_ex/lib/opsm/registries/rpm.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Rpm do @moduledoc """ RPM/DNF (Fedora/RHEL) package registry adapter. diff --git a/opsm_ex/lib/opsm/registries/rubygems.ex b/opsm_ex/lib/opsm/registries/rubygems.ex index 9a00af65..34c33183 100644 --- a/opsm_ex/lib/opsm/registries/rubygems.ex +++ b/opsm_ex/lib/opsm/registries/rubygems.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.RubyGems do @moduledoc """ RubyGems.org Registry API client. diff --git a/opsm_ex/lib/opsm/registries/sbt_plugins.ex b/opsm_ex/lib/opsm/registries/sbt_plugins.ex index 25448288..2d674774 100644 --- a/opsm_ex/lib/opsm/registries/sbt_plugins.ex +++ b/opsm_ex/lib/opsm/registries/sbt_plugins.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.SbtPlugins do @moduledoc """ SBT/Scala Plugin Registry API client. diff --git a/opsm_ex/lib/opsm/registries/scoop_api.ex b/opsm_ex/lib/opsm/registries/scoop_api.ex index 38d6c6d2..74ae8cb7 100644 --- a/opsm_ex/lib/opsm/registries/scoop_api.ex +++ b/opsm_ex/lib/opsm/registries/scoop_api.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.ScoopApi do @moduledoc """ Scoop package manager registry adapter. diff --git a/opsm_ex/lib/opsm/registries/shard.ex b/opsm_ex/lib/opsm/registries/shard.ex index f1fa1633..f1d8d83b 100644 --- a/opsm_ex/lib/opsm/registries/shard.ex +++ b/opsm_ex/lib/opsm/registries/shard.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Shard do @moduledoc """ Crystal shards registry adapter. diff --git a/opsm_ex/lib/opsm/registries/snap.ex b/opsm_ex/lib/opsm/registries/snap.ex index 7c3b1ac1..6f0d2a68 100644 --- a/opsm_ex/lib/opsm/registries/snap.ex +++ b/opsm_ex/lib/opsm/registries/snap.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Snap do @moduledoc """ Snapcraft (Snap Store) registry adapter. diff --git a/opsm_ex/lib/opsm/registries/solus.ex b/opsm_ex/lib/opsm/registries/solus.ex index 83cce79b..4a1887d1 100644 --- a/opsm_ex/lib/opsm/registries/solus.ex +++ b/opsm_ex/lib/opsm/registries/solus.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Solus do @moduledoc """ Solus eopkg registry adapter. diff --git a/opsm_ex/lib/opsm/registries/spack.ex b/opsm_ex/lib/opsm/registries/spack.ex index 72a1cacf..3cfaa945 100644 --- a/opsm_ex/lib/opsm/registries/spack.ex +++ b/opsm_ex/lib/opsm/registries/spack.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Spack do @moduledoc """ Spack HPC package manager registry adapter. diff --git a/opsm_ex/lib/opsm/registries/stackage.ex b/opsm_ex/lib/opsm/registries/stackage.ex index 5c6858cd..530653cc 100644 --- a/opsm_ex/lib/opsm/registries/stackage.ex +++ b/opsm_ex/lib/opsm/registries/stackage.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Stackage do @moduledoc """ Haskell Stackage registry adapter. diff --git a/opsm_ex/lib/opsm/registries/sublime.ex b/opsm_ex/lib/opsm/registries/sublime.ex index 12a1af06..186355d0 100644 --- a/opsm_ex/lib/opsm/registries/sublime.ex +++ b/opsm_ex/lib/opsm/registries/sublime.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Sublime do @moduledoc """ Sublime Text Package Control registry adapter. diff --git a/opsm_ex/lib/opsm/registries/swift_pm.ex b/opsm_ex/lib/opsm/registries/swift_pm.ex index aec6bf17..ebf45e20 100644 --- a/opsm_ex/lib/opsm/registries/swift_pm.ex +++ b/opsm_ex/lib/opsm/registries/swift_pm.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.SwiftPM do @moduledoc """ Swift Package Manager registry adapter. diff --git a/opsm_ex/lib/opsm/registries/tangle.ex b/opsm_ex/lib/opsm/registries/tangle.ex index f755162e..b2afeb61 100644 --- a/opsm_ex/lib/opsm/registries/tangle.ex +++ b/opsm_ex/lib/opsm/registries/tangle.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Tangle do @moduledoc """ Tangle / KRL package registry API client. diff --git a/opsm_ex/lib/opsm/registries/tekton_hub.ex b/opsm_ex/lib/opsm/registries/tekton_hub.ex index 2e57ba97..25b0678a 100644 --- a/opsm_ex/lib/opsm/registries/tekton_hub.ex +++ b/opsm_ex/lib/opsm/registries/tekton_hub.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.TektonHub do @moduledoc """ Tekton Hub registry adapter. diff --git a/opsm_ex/lib/opsm/registries/terraform.ex b/opsm_ex/lib/opsm/registries/terraform.ex index 48f07b09..cff0fbe3 100644 --- a/opsm_ex/lib/opsm/registries/terraform.ex +++ b/opsm_ex/lib/opsm/registries/terraform.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Terraform do @moduledoc """ HashiCorp Terraform Registry API client. diff --git a/opsm_ex/lib/opsm/registries/vcpkg.ex b/opsm_ex/lib/opsm/registries/vcpkg.ex index 5881517c..acbc5b57 100644 --- a/opsm_ex/lib/opsm/registries/vcpkg.ex +++ b/opsm_ex/lib/opsm/registries/vcpkg.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Vcpkg do @moduledoc """ vcpkg registry adapter for C/C++ packages (Microsoft). diff --git a/opsm_ex/lib/opsm/registries/vim_plugins.ex b/opsm_ex/lib/opsm/registries/vim_plugins.ex index 9333ab9a..cc0c6a68 100644 --- a/opsm_ex/lib/opsm/registries/vim_plugins.ex +++ b/opsm_ex/lib/opsm/registries/vim_plugins.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.VimPlugins do @moduledoc """ Vim/Neovim Plugin Registry API client (Vim Awesome). diff --git a/opsm_ex/lib/opsm/registries/vpm.ex b/opsm_ex/lib/opsm/registries/vpm.ex index 4d834ee6..4f0cf96a 100644 --- a/opsm_ex/lib/opsm/registries/vpm.ex +++ b/opsm_ex/lib/opsm/registries/vpm.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Vpm do @moduledoc """ VPM (V Package Manager) registry adapter for the V programming language. diff --git a/opsm_ex/lib/opsm/registries/vscode_marketplace.ex b/opsm_ex/lib/opsm/registries/vscode_marketplace.ex index 91838e7b..e5a37ea3 100644 --- a/opsm_ex/lib/opsm/registries/vscode_marketplace.ex +++ b/opsm_ex/lib/opsm/registries/vscode_marketplace.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.VscodeMarketplace do @moduledoc """ Visual Studio Code Marketplace registry adapter. diff --git a/opsm_ex/lib/opsm/registries/wapm.ex b/opsm_ex/lib/opsm/registries/wapm.ex index c8991818..961d27aa 100644 --- a/opsm_ex/lib/opsm/registries/wapm.ex +++ b/opsm_ex/lib/opsm/registries/wapm.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Wapm do @moduledoc """ WAPM (WebAssembly Package Manager) registry adapter. diff --git a/opsm_ex/lib/opsm/registries/webjars.ex b/opsm_ex/lib/opsm/registries/webjars.ex index 30d08b59..9b9edbbc 100644 --- a/opsm_ex/lib/opsm/registries/webjars.ex +++ b/opsm_ex/lib/opsm/registries/webjars.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.WebJars do @moduledoc """ WebJars Registry API client. diff --git a/opsm_ex/lib/opsm/registries/winget_api.ex b/opsm_ex/lib/opsm/registries/winget_api.ex index daecb0ea..9f7f6d02 100644 --- a/opsm_ex/lib/opsm/registries/winget_api.ex +++ b/opsm_ex/lib/opsm/registries/winget_api.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.WingetApi do @moduledoc """ WinGet manifest search adapter. diff --git a/opsm_ex/lib/opsm/registries/wokelang.ex b/opsm_ex/lib/opsm/registries/wokelang.ex index 2e98c0bd..1f302492 100644 --- a/opsm_ex/lib/opsm/registries/wokelang.ex +++ b/opsm_ex/lib/opsm/registries/wokelang.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Wokelang do @moduledoc """ Wokelang package registry API client. diff --git a/opsm_ex/lib/opsm/registries/wordpress.ex b/opsm_ex/lib/opsm/registries/wordpress.ex index c0f3b50b..b76601b7 100644 --- a/opsm_ex/lib/opsm/registries/wordpress.ex +++ b/opsm_ex/lib/opsm/registries/wordpress.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.WordPress do @moduledoc """ WordPress Plugins Registry API client. diff --git a/opsm_ex/lib/opsm/registries/wordpress_themes.ex b/opsm_ex/lib/opsm/registries/wordpress_themes.ex index 77969f3c..e08f18df 100644 --- a/opsm_ex/lib/opsm/registries/wordpress_themes.ex +++ b/opsm_ex/lib/opsm/registries/wordpress_themes.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.WordPressThemes do @moduledoc """ WordPress Themes Registry API client. diff --git a/opsm_ex/lib/opsm/registries/xbps.ex b/opsm_ex/lib/opsm/registries/xbps.ex index d54982fe..e307aa13 100644 --- a/opsm_ex/lib/opsm/registries/xbps.ex +++ b/opsm_ex/lib/opsm/registries/xbps.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Xbps do @moduledoc """ Void Linux XBPS registry adapter. diff --git a/opsm_ex/lib/opsm/registries/zypper.ex b/opsm_ex/lib/opsm/registries/zypper.ex index 37d4229c..9c4d3e4e 100644 --- a/opsm_ex/lib/opsm/registries/zypper.ex +++ b/opsm_ex/lib/opsm/registries/zypper.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.Zypper do @moduledoc """ openSUSE Zypper registry adapter. diff --git a/opsm_ex/lib/opsm/registry_cache.ex b/opsm_ex/lib/opsm/registry_cache.ex index 594fd1ef..bc15241e 100644 --- a/opsm_ex/lib/opsm/registry_cache.ex +++ b/opsm_ex/lib/opsm/registry_cache.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.RegistryCache do @moduledoc """ ETS-based cache for registry lookups during dependency resolution. diff --git a/opsm_ex/lib/opsm/registry_gateway.ex b/opsm_ex/lib/opsm/registry_gateway.ex index c27bb7ae..4b8d714f 100644 --- a/opsm_ex/lib/opsm/registry_gateway.ex +++ b/opsm_ex/lib/opsm/registry_gateway.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.RegistryGateway do @moduledoc """ Minimal http-capability-gateway for registry operations. diff --git a/opsm_ex/lib/opsm/registry_gateway/router.ex b/opsm_ex/lib/opsm/registry_gateway/router.ex index 943349db..f8472633 100644 --- a/opsm_ex/lib/opsm/registry_gateway/router.ex +++ b/opsm_ex/lib/opsm/registry_gateway/router.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.RegistryGateway.Router do use Plug.Router diff --git a/opsm_ex/lib/opsm/registry_gateway/store.ex b/opsm_ex/lib/opsm/registry_gateway/store.ex index b2eb9869..1b95f993 100644 --- a/opsm_ex/lib/opsm/registry_gateway/store.ex +++ b/opsm_ex/lib/opsm/registry_gateway/store.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.RegistryGateway.Store do @moduledoc """ Simple in-memory store for registry data. diff --git a/opsm_ex/lib/opsm/resolver.ex b/opsm_ex/lib/opsm/resolver.ex index cbd04189..8424b762 100644 --- a/opsm_ex/lib/opsm/resolver.ex +++ b/opsm_ex/lib/opsm/resolver.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Resolver do @moduledoc """ Dependency resolution engine using a PubGrub-inspired algorithm. diff --git a/opsm_ex/lib/opsm/runtime/manager.ex b/opsm_ex/lib/opsm/runtime/manager.ex index a7cd1a58..5e5f392f 100644 --- a/opsm_ex/lib/opsm/runtime/manager.ex +++ b/opsm_ex/lib/opsm/runtime/manager.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell # # OPSM Runtime Manager # ==================== diff --git a/opsm_ex/lib/opsm/runtime/source_builder.ex b/opsm_ex/lib/opsm/runtime/source_builder.ex index 42c4d7d2..12ee88be 100644 --- a/opsm_ex/lib/opsm/runtime/source_builder.ex +++ b/opsm_ex/lib/opsm/runtime/source_builder.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Runtime.SourceBuilder do @moduledoc """ Source-build orchestrator for runtime plugins with strategy 'BuildFromSource diff --git a/opsm_ex/lib/opsm/runtime/url_handler.ex b/opsm_ex/lib/opsm/runtime/url_handler.ex index 78ce1c0d..26349c80 100644 --- a/opsm_ex/lib/opsm/runtime/url_handler.ex +++ b/opsm_ex/lib/opsm/runtime/url_handler.ex @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Runtime.UrlHandler do @moduledoc """ Custom URL handler dispatch for runtime plugins that cannot use the diff --git a/opsm_ex/lib/opsm/safe_exec.ex b/opsm_ex/lib/opsm/safe_exec.ex index 6c90636e..dbdb98fe 100644 --- a/opsm_ex/lib/opsm/safe_exec.ex +++ b/opsm_ex/lib/opsm/safe_exec.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.SafeExec do @moduledoc """ Safe wrapper around System.cmd with allowlist and argument validation. diff --git a/opsm_ex/lib/opsm/security/osv.ex b/opsm_ex/lib/opsm/security/osv.ex index da506544..0302e5bb 100644 --- a/opsm_ex/lib/opsm/security/osv.ex +++ b/opsm_ex/lib/opsm/security/osv.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Security.Osv do @moduledoc """ Client for the OSV (Open Source Vulnerabilities) API. diff --git a/opsm_ex/lib/opsm/security/scanner.ex b/opsm_ex/lib/opsm/security/scanner.ex index be22c8e7..3a842271 100644 --- a/opsm_ex/lib/opsm/security/scanner.ex +++ b/opsm_ex/lib/opsm/security/scanner.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Security.Scanner do @moduledoc """ Unified security scanner: combines OSV advisory lookup with typosquat detection. diff --git a/opsm_ex/lib/opsm/security/typosquat.ex b/opsm_ex/lib/opsm/security/typosquat.ex index 9632ad97..50b04ff7 100644 --- a/opsm_ex/lib/opsm/security/typosquat.ex +++ b/opsm_ex/lib/opsm/security/typosquat.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Security.Typosquat do @moduledoc """ Typosquat detection for package names. diff --git a/opsm_ex/lib/opsm/slsa.ex b/opsm_ex/lib/opsm/slsa.ex index c73b07d4..5fe66613 100644 --- a/opsm_ex/lib/opsm/slsa.ex +++ b/opsm_ex/lib/opsm/slsa.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Slsa do @moduledoc """ SLSA (Supply-chain Levels for Software Artifacts) Level 3 compliance. diff --git a/opsm_ex/lib/opsm/slsa/provenance.ex b/opsm_ex/lib/opsm/slsa/provenance.ex index 67e53aa3..c5f4b161 100644 --- a/opsm_ex/lib/opsm/slsa/provenance.ex +++ b/opsm_ex/lib/opsm/slsa/provenance.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Slsa.Provenance do @moduledoc """ SLSA v1.0 provenance generation and verification. diff --git a/opsm_ex/lib/opsm/smart_install.ex b/opsm_ex/lib/opsm/smart_install.ex index 93209c69..3e661b5f 100644 --- a/opsm_ex/lib/opsm/smart_install.ex +++ b/opsm_ex/lib/opsm/smart_install.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.SmartInstall do @moduledoc """ Smart install parsing and execution logic shared by CLI and API. diff --git a/opsm_ex/lib/opsm/storage/backend.ex b/opsm_ex/lib/opsm/storage/backend.ex index 73c66e71..ceac4155 100644 --- a/opsm_ex/lib/opsm/storage/backend.ex +++ b/opsm_ex/lib/opsm/storage/backend.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Storage.Backend do @moduledoc """ Behaviour for OPSM tarball storage backends. diff --git a/opsm_ex/lib/opsm/storage/ipfs.ex b/opsm_ex/lib/opsm/storage/ipfs.ex index ccfd844a..75573216 100644 --- a/opsm_ex/lib/opsm/storage/ipfs.ex +++ b/opsm_ex/lib/opsm/storage/ipfs.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Storage.Ipfs do @moduledoc """ IPFS (Kubo) storage backend for content-addressed tarball caching. diff --git a/opsm_ex/lib/opsm/storage/local.ex b/opsm_ex/lib/opsm/storage/local.ex index 53a16831..51dfc4f8 100644 --- a/opsm_ex/lib/opsm/storage/local.ex +++ b/opsm_ex/lib/opsm/storage/local.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Storage.Local do @moduledoc """ Local-disk storage backend — `~/.cache/opsm/packages/`. diff --git a/opsm_ex/lib/opsm/storage/manager.ex b/opsm_ex/lib/opsm/storage/manager.ex index 84a139ad..8ff93b58 100644 --- a/opsm_ex/lib/opsm/storage/manager.ex +++ b/opsm_ex/lib/opsm/storage/manager.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Storage.Manager do @moduledoc """ Multi-backend tarball cache coordinator. diff --git a/opsm_ex/lib/opsm/storage/s3.ex b/opsm_ex/lib/opsm/storage/s3.ex index ecd10da5..4a99788b 100644 --- a/opsm_ex/lib/opsm/storage/s3.ex +++ b/opsm_ex/lib/opsm/storage/s3.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Storage.S3 do @moduledoc """ S3-compatible tarball storage backend. diff --git a/opsm_ex/lib/opsm/topo_sort.ex b/opsm_ex/lib/opsm/topo_sort.ex index 08573898..277ec525 100644 --- a/opsm_ex/lib/opsm/topo_sort.ex +++ b/opsm_ex/lib/opsm/topo_sort.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.TopoSort do @moduledoc """ Topological sort for dependency installation order. diff --git a/opsm_ex/lib/opsm/transport/protocol.ex b/opsm_ex/lib/opsm/transport/protocol.ex index 1530ddac..a0ad532c 100644 --- a/opsm_ex/lib/opsm/transport/protocol.ex +++ b/opsm_ex/lib/opsm/transport/protocol.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Transport.Protocol do @moduledoc """ Transport protocol negotiation and abstraction layer. diff --git a/opsm_ex/lib/opsm/transport/quic.ex b/opsm_ex/lib/opsm/transport/quic.ex index b924eae7..faa4ac85 100644 --- a/opsm_ex/lib/opsm/transport/quic.ex +++ b/opsm_ex/lib/opsm/transport/quic.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Transport.Quic do @moduledoc """ QUIC/HTTP3 transport client for OPSM registry fetches. diff --git a/opsm_ex/lib/opsm/transport/quic_nif.ex b/opsm_ex/lib/opsm/transport/quic_nif.ex index 880ac69f..f4a23286 100644 --- a/opsm_ex/lib/opsm/transport/quic_nif.ex +++ b/opsm_ex/lib/opsm/transport/quic_nif.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Transport.QuicNif do @moduledoc """ NIF bindings for QUIC/HTTP3 transport via the `quinn` Rust crate. diff --git a/opsm_ex/lib/opsm/trust/pipeline.ex b/opsm_ex/lib/opsm/trust/pipeline.ex index 1fe0bb92..f3baa997 100644 --- a/opsm_ex/lib/opsm/trust/pipeline.ex +++ b/opsm_ex/lib/opsm/trust/pipeline.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Trust.Pipeline do @moduledoc """ Trust pipeline for package verification. diff --git a/opsm_ex/lib/opsm/types.ex b/opsm_ex/lib/opsm/types.ex index ff61f121..75c9f58d 100644 --- a/opsm_ex/lib/opsm/types.ex +++ b/opsm_ex/lib/opsm/types.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Types do @moduledoc """ Core type definitions for OPSM CLI. diff --git a/opsm_ex/lib/opsm/types/container.ex b/opsm_ex/lib/opsm/types/container.ex index 158cb584..b629280a 100644 --- a/opsm_ex/lib/opsm/types/container.ex +++ b/opsm_ex/lib/opsm/types/container.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Types.ContainerImage do @moduledoc """ Container image metadata. diff --git a/opsm_ex/lib/opsm/validation.ex b/opsm_ex/lib/opsm/validation.ex index bda02ed3..14cc9c5b 100644 --- a/opsm_ex/lib/opsm/validation.ex +++ b/opsm_ex/lib/opsm/validation.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Validation do @moduledoc """ Input validation for security. diff --git a/opsm_ex/lib/opsm/verified.ex b/opsm_ex/lib/opsm/verified.ex index d364ab03..91c632a3 100644 --- a/opsm_ex/lib/opsm/verified.ex +++ b/opsm_ex/lib/opsm/verified.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Verified do @moduledoc """ Verified/proven library wrappers for safe operations. diff --git a/opsm_ex/lib/opsm/verified/http.ex b/opsm_ex/lib/opsm/verified/http.ex index 367d42af..c44f3390 100644 --- a/opsm_ex/lib/opsm/verified/http.ex +++ b/opsm_ex/lib/opsm/verified/http.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Verified.Http do @moduledoc """ Safe HTTP client that validates URLs before making requests. diff --git a/opsm_ex/lib/opsm/verisimdb.ex b/opsm_ex/lib/opsm/verisimdb.ex index 79a9dd7a..3327dbda 100644 --- a/opsm_ex/lib/opsm/verisimdb.ex +++ b/opsm_ex/lib/opsm/verisimdb.ex @@ -1,6 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.VeriSimDB do @moduledoc """ VeriSimDB integration for OPSM. diff --git a/opsm_ex/lib/opsm/version_constraint.ex b/opsm_ex/lib/opsm/version_constraint.ex index 28896f9e..54acbe07 100644 --- a/opsm_ex/lib/opsm/version_constraint.ex +++ b/opsm_ex/lib/opsm/version_constraint.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.VersionConstraint do @moduledoc """ Parse and evaluate version constraints across different ecosystems. diff --git a/opsm_ex/lib/opsm/wiring.ex b/opsm_ex/lib/opsm/wiring.ex index e9ba0c70..037e1d1a 100644 --- a/opsm_ex/lib/opsm/wiring.ex +++ b/opsm_ex/lib/opsm/wiring.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Wiring do @moduledoc """ Command orchestration - wires together service clients for publish, audit, status flows. diff --git a/opsm_ex/mix.exs b/opsm_ex/mix.exs index 754a0532..eb6ecd8d 100644 --- a/opsm_ex/mix.exs +++ b/opsm_ex/mix.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.MixProject do use Mix.Project diff --git a/opsm_ex/native/opsm_pq_nif/src/lib.rs b/opsm_ex/native/opsm_pq_nif/src/lib.rs index f09ecbc6..80a9610b 100644 --- a/opsm_ex/native/opsm_pq_nif/src/lib.rs +++ b/opsm_ex/native/opsm_pq_nif/src/lib.rs @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +// Copyright (c) Jonathan D.A. Jewell // // Post-quantum cryptographic NIFs for OPSM. // diff --git a/opsm_ex/native/quic_transport/src/lib.rs b/opsm_ex/native/quic_transport/src/lib.rs index f70f7bd7..05a45f51 100644 --- a/opsm_ex/native/quic_transport/src/lib.rs +++ b/opsm_ex/native/quic_transport/src/lib.rs @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +// Copyright (c) Jonathan D.A. Jewell // // QUIC/HTTP3 transport NIF for OPSM. // Uses quinn (QUIC) + h3 (HTTP/3) to provide fast registry fetches. diff --git a/opsm_ex/scripts/seam_analysis.exs b/opsm_ex/scripts/seam_analysis.exs index 52ca947a..7b8d218e 100644 --- a/opsm_ex/scripts/seam_analysis.exs +++ b/opsm_ex/scripts/seam_analysis.exs @@ -1,5 +1,5 @@ -# SPDX-License-Identifier: PMPL-1.0 - +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.SeamAnalysis do @moduledoc """ Run seam analysis: ingest multiple manifests, verify HAR staging + registry gateway, and surface timings. diff --git a/opsm_ex/test/aspect/concurrency_test.exs b/opsm_ex/test/aspect/concurrency_test.exs index 9fd54ef6..66baac92 100644 --- a/opsm_ex/test/aspect/concurrency_test.exs +++ b/opsm_ex/test/aspect/concurrency_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Aspect.ConcurrencyTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/aspect/security_test.exs b/opsm_ex/test/aspect/security_test.exs index 188aff93..32230836 100644 --- a/opsm_ex/test/aspect/security_test.exs +++ b/opsm_ex/test/aspect/security_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Aspect.SecurityTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/e2e/pq_sign_verify_e2e_test.exs b/opsm_ex/test/e2e/pq_sign_verify_e2e_test.exs index 0b8d3045..adbe510e 100644 --- a/opsm_ex/test/e2e/pq_sign_verify_e2e_test.exs +++ b/opsm_ex/test/e2e/pq_sign_verify_e2e_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell # # End-to-end test for PQ NIF sign -> verify -> content match flow. # Tagged :e2e and :integration; requires PQ NIF to be compiled. diff --git a/opsm_ex/test/e2e/registry_e2e_test.exs b/opsm_ex/test/e2e/registry_e2e_test.exs index e4398303..50e593e6 100644 --- a/opsm_ex/test/e2e/registry_e2e_test.exs +++ b/opsm_ex/test/e2e/registry_e2e_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell # # End-to-end integration tests for registry adapters. # These tests make real network calls to public registry APIs. diff --git a/opsm_ex/test/integration/e2e_test.exs b/opsm_ex/test/integration/e2e_test.exs index 1e53294b..dc9184d0 100644 --- a/opsm_ex/test/integration/e2e_test.exs +++ b/opsm_ex/test/integration/e2e_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Integration.E2ETest do use ExUnit.Case, async: false diff --git a/opsm_ex/test/integration/git_pipeline_test.exs b/opsm_ex/test/integration/git_pipeline_test.exs index 357bf9c7..7ffe2915 100644 --- a/opsm_ex/test/integration/git_pipeline_test.exs +++ b/opsm_ex/test/integration/git_pipeline_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Integration.GitPipelineTest do use ExUnit.Case, async: false diff --git a/opsm_ex/test/integration/manifest_roundtrip_test.exs b/opsm_ex/test/integration/manifest_roundtrip_test.exs index 8d2e3c4a..73615c2b 100644 --- a/opsm_ex/test/integration/manifest_roundtrip_test.exs +++ b/opsm_ex/test/integration/manifest_roundtrip_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Integration.ManifestRoundtripTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/integration/pipeline_test.exs b/opsm_ex/test/integration/pipeline_test.exs index 791e14ef..65e73a61 100644 --- a/opsm_ex/test/integration/pipeline_test.exs +++ b/opsm_ex/test/integration/pipeline_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Integration.PipelineTest do @moduledoc """ Integration tests for the OPSM pipeline. diff --git a/opsm_ex/test/integration/trust_pipeline_live_e2e_test.exs b/opsm_ex/test/integration/trust_pipeline_live_e2e_test.exs index 5e339306..302f2071 100644 --- a/opsm_ex/test/integration/trust_pipeline_live_e2e_test.exs +++ b/opsm_ex/test/integration/trust_pipeline_live_e2e_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell # # Enterprise trust pipeline — live-service E2E tests. # diff --git a/opsm_ex/test/integration/trust_pipeline_test.exs b/opsm_ex/test/integration/trust_pipeline_test.exs index cac8d2c8..08f18cbc 100644 --- a/opsm_ex/test/integration/trust_pipeline_test.exs +++ b/opsm_ex/test/integration/trust_pipeline_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Integration.TrustPipelineTest do use ExUnit.Case, async: false diff --git a/opsm_ex/test/opsm/config_test.exs b/opsm_ex/test/opsm/config_test.exs index eb9e44b7..b96d06b4 100644 --- a/opsm_ex/test/opsm/config_test.exs +++ b/opsm_ex/test/opsm/config_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.ConfigTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/crypto/api_key_storage_test.exs b/opsm_ex/test/opsm/crypto/api_key_storage_test.exs index 83575bc8..0f9ad19d 100644 --- a/opsm_ex/test/opsm/crypto/api_key_storage_test.exs +++ b/opsm_ex/test/opsm/crypto/api_key_storage_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.ApiKeyStorageTest do use ExUnit.Case, async: true alias Opsm.Crypto.ApiKeyStorage diff --git a/opsm_ex/test/opsm/crypto/hash_test.exs b/opsm_ex/test/opsm/crypto/hash_test.exs index b4d70375..a224272a 100644 --- a/opsm_ex/test/opsm/crypto/hash_test.exs +++ b/opsm_ex/test/opsm/crypto/hash_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.HashTest do use ExUnit.Case, async: true alias Opsm.Crypto.Hash diff --git a/opsm_ex/test/opsm/crypto/hybrid_signatures_test.exs b/opsm_ex/test/opsm/crypto/hybrid_signatures_test.exs index b2db52dc..18038c76 100644 --- a/opsm_ex/test/opsm/crypto/hybrid_signatures_test.exs +++ b/opsm_ex/test/opsm/crypto/hybrid_signatures_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.HybridSignaturesTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/crypto/password_test.exs b/opsm_ex/test/opsm/crypto/password_test.exs index 819bc18e..7f2c8d49 100644 --- a/opsm_ex/test/opsm/crypto/password_test.exs +++ b/opsm_ex/test/opsm/crypto/password_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.PasswordTest do use ExUnit.Case, async: true alias Opsm.Crypto.Password diff --git a/opsm_ex/test/opsm/crypto/post_quantum_test.exs b/opsm_ex/test/opsm/crypto/post_quantum_test.exs index 9e1cda6b..712add59 100644 --- a/opsm_ex/test/opsm/crypto/post_quantum_test.exs +++ b/opsm_ex/test/opsm/crypto/post_quantum_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.PostQuantumTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/crypto/rng_test.exs b/opsm_ex/test/opsm/crypto/rng_test.exs index 75ce48b8..0a0640e5 100644 --- a/opsm_ex/test/opsm/crypto/rng_test.exs +++ b/opsm_ex/test/opsm/crypto/rng_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.RNGTest do use ExUnit.Case, async: true alias Opsm.Crypto.RNG diff --git a/opsm_ex/test/opsm/crypto/symmetric_test.exs b/opsm_ex/test/opsm/crypto/symmetric_test.exs index 98031964..e273380e 100644 --- a/opsm_ex/test/opsm/crypto/symmetric_test.exs +++ b/opsm_ex/test/opsm/crypto/symmetric_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 - +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Crypto.SymmetricTest do use ExUnit.Case, async: true alias Opsm.Crypto.Symmetric diff --git a/opsm_ex/test/opsm/federation/dep_mapper_test.exs b/opsm_ex/test/opsm/federation/dep_mapper_test.exs index 89be7fa7..45d0a7bd 100644 --- a/opsm_ex/test/opsm/federation/dep_mapper_test.exs +++ b/opsm_ex/test/opsm/federation/dep_mapper_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Federation.DepMapperTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/federation/system_query_test.exs b/opsm_ex/test/opsm/federation/system_query_test.exs index 45c258ca..368085a8 100644 --- a/opsm_ex/test/opsm/federation/system_query_test.exs +++ b/opsm_ex/test/opsm/federation/system_query_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Federation.SystemQueryTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/fuzz_harness_test.exs b/opsm_ex/test/opsm/fuzz_harness_test.exs index 6df4f342..ca00afaf 100644 --- a/opsm_ex/test/opsm/fuzz_harness_test.exs +++ b/opsm_ex/test/opsm/fuzz_harness_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell # # Fuzz harness — property-based tests that drive arbitrary inputs through every # public boundary in OPSM and assert structural invariants (never crash, always diff --git a/opsm_ex/test/opsm/git/build_detector_test.exs b/opsm_ex/test/opsm/git/build_detector_test.exs index 41b6c06b..469c7916 100644 --- a/opsm_ex/test/opsm/git/build_detector_test.exs +++ b/opsm_ex/test/opsm/git/build_detector_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Git.BuildDetectorTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/git/builder_test.exs b/opsm_ex/test/opsm/git/builder_test.exs index 9257a4b3..326bed3d 100644 --- a/opsm_ex/test/opsm/git/builder_test.exs +++ b/opsm_ex/test/opsm/git/builder_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Git.BuilderTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/git/clone_test.exs b/opsm_ex/test/opsm/git/clone_test.exs index 9b9bd99b..f91f7fac 100644 --- a/opsm_ex/test/opsm/git/clone_test.exs +++ b/opsm_ex/test/opsm/git/clone_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Git.CloneTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/git/pipeline_test.exs b/opsm_ex/test/opsm/git/pipeline_test.exs index 8bb52033..e029dde7 100644 --- a/opsm_ex/test/opsm/git/pipeline_test.exs +++ b/opsm_ex/test/opsm/git/pipeline_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Git.PipelineTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/har/web_scraper_test.exs b/opsm_ex/test/opsm/har/web_scraper_test.exs index 4e05e108..8abb2b1a 100644 --- a/opsm_ex/test/opsm/har/web_scraper_test.exs +++ b/opsm_ex/test/opsm/har/web_scraper_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Har.WebScraperTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/imp_property_test.exs b/opsm_ex/test/opsm/imp_property_test.exs index 57934133..601cb23b 100644 --- a/opsm_ex/test/opsm/imp_property_test.exs +++ b/opsm_ex/test/opsm/imp_property_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.ImpPropertyTest do use ExUnit.Case use ExUnitProperties diff --git a/opsm_ex/test/opsm/integration/manifest_roundtrip_test.exs b/opsm_ex/test/opsm/integration/manifest_roundtrip_test.exs index 80de6854..7e258449 100644 --- a/opsm_ex/test/opsm/integration/manifest_roundtrip_test.exs +++ b/opsm_ex/test/opsm/integration/manifest_roundtrip_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell # # Integration tests for OPSM's manifest conversion pipeline. # Validates round-trip conversion of various manifest formats diff --git a/opsm_ex/test/opsm/integration/pq_trust_pipeline_test.exs b/opsm_ex/test/opsm/integration/pq_trust_pipeline_test.exs index 16ef6518..47e2e04b 100644 --- a/opsm_ex/test/opsm/integration/pq_trust_pipeline_test.exs +++ b/opsm_ex/test/opsm/integration/pq_trust_pipeline_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell # # Integration tests for OPSM's post-quantum trust pipeline. # Validates trust attestation, hybrid signatures, PQ algorithm diff --git a/opsm_ex/test/opsm/integration/slsa_pipeline_test.exs b/opsm_ex/test/opsm/integration/slsa_pipeline_test.exs index e078a0c6..2817361b 100644 --- a/opsm_ex/test/opsm/integration/slsa_pipeline_test.exs +++ b/opsm_ex/test/opsm/integration/slsa_pipeline_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell # # Integration tests for OPSM's SLSA provenance pipeline. # Validates provenance generation, verification, lockfile metadata, diff --git a/opsm_ex/test/opsm/lockfile_test.exs b/opsm_ex/test/opsm/lockfile_test.exs index 13fc3812..7647e017 100644 --- a/opsm_ex/test/opsm/lockfile_test.exs +++ b/opsm_ex/test/opsm/lockfile_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.LockfileTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/maintenance_test.exs b/opsm_ex/test/opsm/maintenance_test.exs index 7679faf8..243626f5 100644 --- a/opsm_ex/test/opsm/maintenance_test.exs +++ b/opsm_ex/test/opsm/maintenance_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.MaintenanceTest do use ExUnit.Case, async: false diff --git a/opsm_ex/test/opsm/manifest/opsm_toml_test.exs b/opsm_ex/test/opsm/manifest/opsm_toml_test.exs index 29486483..e0b78699 100644 --- a/opsm_ex/test/opsm/manifest/opsm_toml_test.exs +++ b/opsm_ex/test/opsm/manifest/opsm_toml_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Manifest.OpsmTomlTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/manifest/writer_test.exs b/opsm_ex/test/opsm/manifest/writer_test.exs index eb08e658..1e2729ec 100644 --- a/opsm_ex/test/opsm/manifest/writer_test.exs +++ b/opsm_ex/test/opsm/manifest/writer_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Manifest.WriterTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/network/ipv6_test.exs b/opsm_ex/test/opsm/network/ipv6_test.exs index 06e3f66d..54542a80 100644 --- a/opsm_ex/test/opsm/network/ipv6_test.exs +++ b/opsm_ex/test/opsm/network/ipv6_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Network.Ipv6Test do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/package/transaction_test.exs b/opsm_ex/test/opsm/package/transaction_test.exs index eb769fb7..5280bd8d 100644 --- a/opsm_ex/test/opsm/package/transaction_test.exs +++ b/opsm_ex/test/opsm/package/transaction_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Package.TransactionTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/progress_test.exs b/opsm_ex/test/opsm/progress_test.exs index 66532be4..5f557574 100644 --- a/opsm_ex/test/opsm/progress_test.exs +++ b/opsm_ex/test/opsm/progress_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.ProgressTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/registries/eclexia_test.exs b/opsm_ex/test/opsm/registries/eclexia_test.exs index c7bc285d..bb72abe6 100644 --- a/opsm_ex/test/opsm/registries/eclexia_test.exs +++ b/opsm_ex/test/opsm/registries/eclexia_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.EclexiaTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/registries/hyperpolymath_forge_test.exs b/opsm_ex/test/opsm/registries/hyperpolymath_forge_test.exs index 513fe53b..bf8a15c8 100644 --- a/opsm_ex/test/opsm/registries/hyperpolymath_forge_test.exs +++ b/opsm_ex/test/opsm/registries/hyperpolymath_forge_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Registries.HyperpPolymathForgeTest do use ExUnit.Case, async: false diff --git a/opsm_ex/test/opsm/registries/language_adapters_test.exs b/opsm_ex/test/opsm/registries/language_adapters_test.exs index 9f01c293..b5c6662f 100644 --- a/opsm_ex/test/opsm/registries/language_adapters_test.exs +++ b/opsm_ex/test/opsm/registries/language_adapters_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell # # Consolidated tests for all new language/database registry adapters. # Each adapter follows the same contract (search/2, fetch_package/2, diff --git a/opsm_ex/test/opsm/registry_gateway_test.exs b/opsm_ex/test/opsm/registry_gateway_test.exs index a320e995..012e26f0 100644 --- a/opsm_ex/test/opsm/registry_gateway_test.exs +++ b/opsm_ex/test/opsm/registry_gateway_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.RegistryGatewayTest do use ExUnit.Case diff --git a/opsm_ex/test/opsm/runtime/integration_test.exs b/opsm_ex/test/opsm/runtime/integration_test.exs index 257a2638..414ec400 100644 --- a/opsm_ex/test/opsm/runtime/integration_test.exs +++ b/opsm_ex/test/opsm/runtime/integration_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell # # Runtime integration tests — live tool downloads. # diff --git a/opsm_ex/test/opsm/runtime/manager_test.exs b/opsm_ex/test/opsm/runtime/manager_test.exs index e127bacf..c0ab3d1c 100644 --- a/opsm_ex/test/opsm/runtime/manager_test.exs +++ b/opsm_ex/test/opsm/runtime/manager_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Runtime.ManagerTest do use ExUnit.Case, async: false diff --git a/opsm_ex/test/opsm/runtime/source_builder_test.exs b/opsm_ex/test/opsm/runtime/source_builder_test.exs index 906e8433..a1658bc8 100644 --- a/opsm_ex/test/opsm/runtime/source_builder_test.exs +++ b/opsm_ex/test/opsm/runtime/source_builder_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Runtime.SourceBuilderTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/runtime/url_handler_test.exs b/opsm_ex/test/opsm/runtime/url_handler_test.exs index 761e2e02..0f3e1add 100644 --- a/opsm_ex/test/opsm/runtime/url_handler_test.exs +++ b/opsm_ex/test/opsm/runtime/url_handler_test.exs @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Runtime.UrlHandlerTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/security/security_test.exs b/opsm_ex/test/opsm/security/security_test.exs index 04393e6b..c7e1c83e 100644 --- a/opsm_ex/test/opsm/security/security_test.exs +++ b/opsm_ex/test/opsm/security/security_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Security.SecurityTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/storage/storage_test.exs b/opsm_ex/test/opsm/storage/storage_test.exs index 6250f485..f816c926 100644 --- a/opsm_ex/test/opsm/storage/storage_test.exs +++ b/opsm_ex/test/opsm/storage/storage_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Storage.StorageTest do use ExUnit.Case, async: false diff --git a/opsm_ex/test/opsm/transport/protocol_test.exs b/opsm_ex/test/opsm/transport/protocol_test.exs index 2805ac91..5ff227b3 100644 --- a/opsm_ex/test/opsm/transport/protocol_test.exs +++ b/opsm_ex/test/opsm/transport/protocol_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Transport.ProtocolTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/transport/quic_test.exs b/opsm_ex/test/opsm/transport/quic_test.exs index 3d3ba6e1..18e2f686 100644 --- a/opsm_ex/test/opsm/transport/quic_test.exs +++ b/opsm_ex/test/opsm/transport/quic_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Transport.QuicTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/validation_test.exs b/opsm_ex/test/opsm/validation_test.exs index 31e595ac..2dbb6236 100644 --- a/opsm_ex/test/opsm/validation_test.exs +++ b/opsm_ex/test/opsm/validation_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.ValidationTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/verified/json_property_test.exs b/opsm_ex/test/opsm/verified/json_property_test.exs index d1d1420b..cac9f6e1 100644 --- a/opsm_ex/test/opsm/verified/json_property_test.exs +++ b/opsm_ex/test/opsm/verified/json_property_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Verified.JsonPropertyTest do use ExUnit.Case use ExUnitProperties diff --git a/opsm_ex/test/opsm/verified/result_property_test.exs b/opsm_ex/test/opsm/verified/result_property_test.exs index 1915bed9..a0152b94 100644 --- a/opsm_ex/test/opsm/verified/result_property_test.exs +++ b/opsm_ex/test/opsm/verified/result_property_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Verified.ResultPropertyTest do use ExUnit.Case use ExUnitProperties diff --git a/opsm_ex/test/opsm/verified/url_property_test.exs b/opsm_ex/test/opsm/verified/url_property_test.exs index 494045fd..253225c2 100644 --- a/opsm_ex/test/opsm/verified/url_property_test.exs +++ b/opsm_ex/test/opsm/verified/url_property_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Verified.UrlPropertyTest do use ExUnit.Case use ExUnitProperties diff --git a/opsm_ex/test/opsm/verified_test.exs b/opsm_ex/test/opsm/verified_test.exs index 625dbe9c..393e0969 100644 --- a/opsm_ex/test/opsm/verified_test.exs +++ b/opsm_ex/test/opsm/verified_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.VerifiedTest do use ExUnit.Case, async: true diff --git a/opsm_ex/test/opsm/version_constraint_test.exs b/opsm_ex/test/opsm/version_constraint_test.exs index 64dc588f..1104a893 100644 --- a/opsm_ex/test/opsm/version_constraint_test.exs +++ b/opsm_ex/test/opsm/version_constraint_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.VersionConstraintTest do use ExUnit.Case, async: true alias Opsm.VersionConstraint diff --git a/opsm_ex/test/opsm/wiring/audit_test.exs b/opsm_ex/test/opsm/wiring/audit_test.exs index 255ae772..ca6bc37d 100644 --- a/opsm_ex/test/opsm/wiring/audit_test.exs +++ b/opsm_ex/test/opsm/wiring/audit_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # Tests for Opsm.Wiring.run_audit/2 — validates graceful degradation # when oikos and palimpsest services are unreachable. defmodule Opsm.Wiring.AuditTest do diff --git a/opsm_ex/test/opsm_test.exs b/opsm_ex/test/opsm_test.exs index 156a7d7f..42d4da25 100644 --- a/opsm_ex/test/opsm_test.exs +++ b/opsm_ex/test/opsm_test.exs @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule OpsmTest do use ExUnit.Case doctest Opsm diff --git a/opsm_ex/test/property/lockfile_property_test.exs b/opsm_ex/test/property/lockfile_property_test.exs index c4a5b39c..62e22d94 100644 --- a/opsm_ex/test/property/lockfile_property_test.exs +++ b/opsm_ex/test/property/lockfile_property_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Property.LockfilePropertyTest do use ExUnit.Case use ExUnitProperties diff --git a/opsm_ex/test/stress_test.exs b/opsm_ex/test/stress_test.exs index 41aabd58..a162deeb 100644 --- a/opsm_ex/test/stress_test.exs +++ b/opsm_ex/test/stress_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # Stress test: fetch real packages from all 10 registries # Run: mix run test/stress_test.exs diff --git a/opsm_ex/test/test_helper.exs b/opsm_ex/test/test_helper.exs index d537b053..16272192 100644 --- a/opsm_ex/test/test_helper.exs +++ b/opsm_ex/test/test_helper.exs @@ -1 +1,3 @@ +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell ExUnit.start(exclude: [:e2e, :external_api, :requires_nif, :live_service]) diff --git a/opsm_mobile/IMPLEMENTATION-SUMMARY.md b/opsm_mobile/IMPLEMENTATION-SUMMARY.md index e88f590d..dc87cf4d 100644 --- a/opsm_mobile/IMPLEMENTATION-SUMMARY.md +++ b/opsm_mobile/IMPLEMENTATION-SUMMARY.md @@ -1,3 +1,7 @@ + # OPSM Mobile Implementation Summary ## What Was Built diff --git a/opsm_mobile/README.md b/opsm_mobile/README.md index 58f58a5e..ed77ab95 100644 --- a/opsm_mobile/README.md +++ b/opsm_mobile/README.md @@ -1,3 +1,7 @@ + # OPSM Mobile - Native iOS/Android Wrapper Native mobile app for OPSM (Odds and Sods Package Manager) using Tauri 2.0 with ReScript TEA architecture. diff --git a/opsm_mobile/api/package_controller.ex b/opsm_mobile/api/package_controller.ex index 6bf9d217..1bcf573e 100644 --- a/opsm_mobile/api/package_controller.ex +++ b/opsm_mobile/api/package_controller.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Api.PackageController do @moduledoc """ Controller logic for mobile API endpoints. diff --git a/opsm_mobile/api/router.ex b/opsm_mobile/api/router.ex index f676f8b8..2e870430 100644 --- a/opsm_mobile/api/router.ex +++ b/opsm_mobile/api/router.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Opsm.Api.Router do @moduledoc """ HTTP API router for mobile wrapper (Tauri 2.0). diff --git a/opsm_mobile/docs/ARCHITECTURE.adoc b/opsm_mobile/docs/ARCHITECTURE.adoc index 98a8a078..bf5093e5 100644 --- a/opsm_mobile/docs/ARCHITECTURE.adoc +++ b/opsm_mobile/docs/ARCHITECTURE.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Mobile Architecture == Technology Stack diff --git a/problems-solutions/2026-01-26-rogue-repo-install.adoc b/problems-solutions/2026-01-26-rogue-repo-install.adoc index 32f1346b..ba07b4ec 100644 --- a/problems-solutions/2026-01-26-rogue-repo-install.adoc +++ b/problems-solutions/2026-01-26-rogue-repo-install.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Rogue Git repo install (no manifest) == Context diff --git a/problems-solutions/2026-01-26-rpm-ostree-multi-install.adoc b/problems-solutions/2026-01-26-rpm-ostree-multi-install.adoc index 547202c0..3555a863 100644 --- a/problems-solutions/2026-01-26-rpm-ostree-multi-install.adoc +++ b/problems-solutions/2026-01-26-rpm-ostree-multi-install.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = rpm-ostree multi‑install with mixed availability == Context diff --git a/problems-solutions/2026-01-26-unmaintained-compromised.adoc b/problems-solutions/2026-01-26-unmaintained-compromised.adoc index 4454edc7..34b56aa0 100644 --- a/problems-solutions/2026-01-26-unmaintained-compromised.adoc +++ b/problems-solutions/2026-01-26-unmaintained-compromised.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Unmaintained or compromised package == Context diff --git a/problems-solutions/README.adoc b/problems-solutions/README.adoc index 30cf05da..f672f031 100644 --- a/problems-solutions/README.adoc +++ b/problems-solutions/README.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Problems → Solutions Library :toc: preamble :toclevels: 2 diff --git a/runtime/README.adoc b/runtime/README.adoc index 758a8d6f..d0d1b054 100644 --- a/runtime/README.adoc +++ b/runtime/README.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = OPSM Runtime Extension :revdate: 2026-03-23 :toc: macro diff --git a/runtime/shim/build.zig b/runtime/shim/build.zig index 59cbc6de..8f85308b 100644 --- a/runtime/shim/build.zig +++ b/runtime/shim/build.zig @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +// Copyright (c) Jonathan D.A. Jewell // // OPSM Shim Dispatcher — Build Configuration // diff --git a/runtime/shim/src/exe_map.zig b/runtime/shim/src/exe_map.zig index 684aed00..835b2f53 100644 --- a/runtime/shim/src/exe_map.zig +++ b/runtime/shim/src/exe_map.zig @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +// Copyright (c) Jonathan D.A. Jewell // // Exe-to-Tool Name Mapping // ======================== diff --git a/runtime/shim/src/main.zig b/runtime/shim/src/main.zig index ae1b2126..dce54657 100644 --- a/runtime/shim/src/main.zig +++ b/runtime/shim/src/main.zig @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +// Copyright (c) Jonathan D.A. Jewell // // OPSM Shim Dispatcher // ==================== diff --git a/scripts/har-agents/README.md b/scripts/har-agents/README.md index 6b5b7ef3..02165d81 100644 --- a/scripts/har-agents/README.md +++ b/scripts/har-agents/README.md @@ -1,3 +1,7 @@ + # HAR Agents - Human-Assisted Repository Discovery HAR (Human-Assisted Repository) agents discover packages from obscure, legacy, or unmaintained sources. diff --git a/selur-compose.yml b/selur-compose.yml index 131ad4ac..7a38e634 100644 --- a/selur-compose.yml +++ b/selur-compose.yml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell # Selur-Compose orchestration for OPSM services # # Profiles: diff --git a/services/cerro-torre/README.md b/services/cerro-torre/README.md index 81c39229..dca03b90 100644 --- a/services/cerro-torre/README.md +++ b/services/cerro-torre/README.md @@ -1,3 +1,7 @@ + # Cerro-Torre - Security Monitoring Service **Cerro-Torre** is OPSM's runtime security monitoring and threat detection service, providing real-time visibility into container behavior using eBPF and Falco. diff --git a/services/cerro-torre/src/main.rs b/services/cerro-torre/src/main.rs index 9cc3adde..e1ebfd65 100644 --- a/services/cerro-torre/src/main.rs +++ b/services/cerro-torre/src/main.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell //! Cerro-Torre: Security monitoring and threat detection service //! //! Monitors container runtime security using eBPF and Falco. diff --git a/services/checky-monkey/src/main.rs b/services/checky-monkey/src/main.rs index 75f76d40..727d12ef 100644 --- a/services/checky-monkey/src/main.rs +++ b/services/checky-monkey/src/main.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell //! Checky-Monkey: Code verification service //! //! Provides fuzzing, property testing, type checking, formal verification, diff --git a/services/cicd-hyper-a/src/main.rs b/services/cicd-hyper-a/src/main.rs index 63cf149f..14a1a551 100644 --- a/services/cicd-hyper-a/src/main.rs +++ b/services/cicd-hyper-a/src/main.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell //! CICD-Hyper-A: CI/CD pipeline and package publishing service //! //! Handles package publishing, manifest validation, federation sync diff --git a/services/claim-forge/src/main.rs b/services/claim-forge/src/main.rs index df771378..018bec58 100644 --- a/services/claim-forge/src/main.rs +++ b/services/claim-forge/src/main.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell //! Claim-Forge: Cryptographic attestation generation service //! //! Generates SLSA provenance attestations and signs artifacts with Ed25519. diff --git a/services/oikos/src/main.rs b/services/oikos/src/main.rs index 1893a872..7023f35e 100644 --- a/services/oikos/src/main.rs +++ b/services/oikos/src/main.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell //! Oikos: Repository sustainability and health analysis service //! //! Analyzes repositories for maintainability, documentation quality, diff --git a/services/palimpsest-license/src/main.rs b/services/palimpsest-license/src/main.rs index 80045e79..3203789d 100644 --- a/services/palimpsest-license/src/main.rs +++ b/services/palimpsest-license/src/main.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell //! Palimpsest: License analysis and compatibility service //! //! Analyzes artifacts for license declarations, checks compatibility diff --git a/services/selur/README.md b/services/selur/README.md index ba989be1..b28d9659 100644 --- a/services/selur/README.md +++ b/services/selur/README.md @@ -1,3 +1,7 @@ + # Selur - Container Image Signing Service **Selur** is OPSM's container image signing and verification service, integrating Cosign for cryptographic signing and supply chain security. diff --git a/services/selur/src/main.rs b/services/selur/src/main.rs index 02d847c9..f5cff583 100644 --- a/services/selur/src/main.rs +++ b/services/selur/src/main.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell //! Selur: Container image signing and verification service //! //! Integrates Cosign for cryptographic signing of container images. diff --git a/services/svalinn/README.md b/services/svalinn/README.md index d384b9cc..5c49b9b5 100644 --- a/services/svalinn/README.md +++ b/services/svalinn/README.md @@ -1,3 +1,7 @@ + # Svalinn - Container Vulnerability Scanner **Svalinn** is OPSM's vulnerability scanning service, integrating industry-standard scanners (Trivy, Grype) into a unified REST API. diff --git a/services/svalinn/src/main.rs b/services/svalinn/src/main.rs index f37263ad..12ce58bd 100644 --- a/services/svalinn/src/main.rs +++ b/services/svalinn/src/main.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell //! Svalinn: Container vulnerability scanning service //! //! Integrates Trivy and Grype for comprehensive vulnerability detection. diff --git a/services/vordr/README.md b/services/vordr/README.md index 5ce04a89..d8b361d8 100644 --- a/services/vordr/README.md +++ b/services/vordr/README.md @@ -1,3 +1,7 @@ + # Vordr - Runtime Verification Service **Vordr** is OPSM's runtime verification and policy enforcement service, validating container configurations against security best practices using OPA policies and built-in rules. diff --git a/services/vordr/src/main.rs b/services/vordr/src/main.rs index dbd310be..b25cbe77 100644 --- a/services/vordr/src/main.rs +++ b/services/vordr/src/main.rs @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell //! Vordr: Runtime verification and OPA policy enforcement service //! //! Validates container configurations against security policies. diff --git a/src/abi/Foreign.idr b/src/abi/Foreign.idr index c35a1f2d..ca0cdf64 100644 --- a/src/abi/Foreign.idr +++ b/src/abi/Foreign.idr @@ -1,3 +1,5 @@ +-- SPDX-License-Identifier: MPL-2.0 +-- Copyright (c) Jonathan D.A. Jewell ||| SPDX-License-Identifier: MPL-2.0 ||| Foreign Function Interface Declarations for ODDS_AND_SODS_PACKAGE_MANAGER ||| diff --git a/src/abi/Layout.idr b/src/abi/Layout.idr index 1245ac52..89013281 100644 --- a/src/abi/Layout.idr +++ b/src/abi/Layout.idr @@ -1,5 +1,5 @@ -- SPDX-License-Identifier: MPL-2.0 --- Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +-- Copyright (c) Jonathan D.A. Jewell -- -- Layout.idr — System state model for the Bennett reversible uninstall ABI. -- diff --git a/src/abi/Types.idr b/src/abi/Types.idr index ce71db08..543019c3 100644 --- a/src/abi/Types.idr +++ b/src/abi/Types.idr @@ -1,5 +1,5 @@ -- SPDX-License-Identifier: MPL-2.0 --- Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +-- Copyright (c) Jonathan D.A. Jewell -- -- Types.idr — Core types for the Bennett reversible uninstall ABI. -- diff --git a/src/abi/ffi.zig b/src/abi/ffi.zig index 30ea6cf6..07c14798 100644 --- a/src/abi/ffi.zig +++ b/src/abi/ffi.zig @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +// Copyright (c) Jonathan D.A. Jewell // // OPSM Idris2 ABI — Zig FFI Implementation // ========================================= diff --git a/src/opsm.zig b/src/opsm.zig index a59d9887..3bdf3026 100644 --- a/src/opsm.zig +++ b/src/opsm.zig @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +// Copyright (c) Jonathan D.A. Jewell // // OPSM Unified CLI // ================