diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 7919653..5944926 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -1,3 +1,7 @@ + ## Machine-Readable Artefacts The following files in `.machine_readable/` contain structured project metadata: @@ -63,7 +67,7 @@ Both are FOSS with independent governance (no Big Tech). ### Enforcement Rules 1. **No new TypeScript files** - Convert existing TS to AffineScript -2. **No package.json for runtime deps** - Use deno.json imports +2. **No package.json - use deno.json deps** - Use deno.json imports 3. **No node_modules in production** - Deno caches deps automatically 4. **No Go code** - Use Rust instead 5. **Python only for SaltStack** - All other Python must be rewritten diff --git a/.conflow.yaml b/.conflow.yaml index ca6e9d0..35e02e8 100644 --- a/.conflow.yaml +++ b/.conflow.yaml @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Owner: Jonathan D.A. Jewell # conflow pipeline - Full generate → validate → export version: "1" name: "phronesis" diff --git a/.formatter.exs b/.formatter.exs index d2cda26..a1285df 100644 --- a/.formatter.exs +++ b/.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/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..3a3b7f2 --- /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 987aab6..45a6c02 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/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md index 4fcb9f9..b1d16df 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 3e8fa7e..a5a5693 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 fd0e2a5..c2d1f57 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 0000000..a719a77 --- /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/casket-pages.yml b/.github/workflows/casket-pages.yml index ad8fd14..d9a1d6d 100644 --- a/.github/workflows/casket-pages.yml +++ b/.github/workflows/casket-pages.yml @@ -1,39 +1,33 @@ # 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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 - - name: Checkout casket-ssg uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 with: repository: hyperpolymath/casket-ssg path: .casket-ssg - - name: Setup GHCup uses: haskell-actions/setup@ec49483bfc012387b227434aba94f59a6ecd0900 # v2 with: ghc-version: '9.8.2' cabal-version: '3.10' - - name: Cache Cabal uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: @@ -42,11 +36,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 +81,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@983d7736d9b0ae728b81ab479565c72886d7745b # v5 - - name: Upload artifact uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3 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 f50a1d1..5f45185 100644 --- a/.github/workflows/codeql.yml +++ b/.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] @@ -16,13 +15,12 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true - permissions: contents: read - jobs: analyze: runs-on: ubuntu-latest + timeout-minutes: 15 permissions: contents: read security-events: write @@ -32,17 +30,14 @@ jobs: include: - language: javascript-typescript build-mode: none - steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Initialize CodeQL uses: github/codeql-action/init@c6f931105cb2c34c8f901cc885ba1e2e259cf745 # v3 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} - - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@c6f931105cb2c34c8f901cc885ba1e2e259cf745 # v3 with: diff --git a/.github/workflows/dependabot-automerge.yml b/.github/workflows/dependabot-automerge.yml index 92b5254..bce3810 100644 --- a/.github/workflows/dependabot-automerge.yml +++ b/.github/workflows/dependabot-automerge.yml @@ -35,29 +35,25 @@ # bumps for dependabot/fetch-metadata flow through the same path. name: Dependabot Auto-Merge - on: pull_request: types: [opened, reopened, synchronize] - permissions: - contents: write # needed to enable auto-merge - pull-requests: write # needed to approve + contents: write # needed to enable auto-merge + pull-requests: write # needed to approve # NB: keep narrow — do NOT add secrets: read or id-token: write here. - jobs: automerge: # Only run for PRs actually authored by Dependabot. if: github.actor == 'dependabot[bot]' && github.event.pull_request.user.login == 'dependabot[bot]' runs-on: ubuntu-latest - + timeout-minutes: 15 steps: - name: Fetch Dependabot metadata id: meta uses: dependabot/fetch-metadata@dbb049abf0d677abbd7f7eee0375145b417fdd34 # v2.2.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} - # --- Policy gate ------------------------------------------------------- # Outputs from fetch-metadata we care about: # update-type → version-update:semver-{patch,minor,major} @@ -106,7 +102,6 @@ jobs: echo "security=$is_security" >> "$GITHUB_OUTPUT" echo "update_type=$UPDATE_TYPE" >> "$GITHUB_OUTPUT" echo "ghsa=$GHSA_ID" >> "$GITHUB_OUTPUT" - - name: Approve PR (if policy allows) if: steps.policy.outputs.action == 'automerge' env: @@ -115,7 +110,6 @@ jobs: run: | gh pr review --approve "$PR_URL" \ --body "Auto-approving Dependabot security update (${{ steps.policy.outputs.ghsa }}, ${{ steps.policy.outputs.update_type }}). Policy: low/moderate security patches/minors only." - - name: Enable auto-merge (if policy allows) if: steps.policy.outputs.action == 'automerge' env: @@ -123,7 +117,6 @@ jobs: PR_URL: ${{ github.event.pull_request.html_url }} run: | gh pr merge --auto --squash "$PR_URL" - - name: Write decision to step summary env: ACTION: ${{ steps.policy.outputs.action }} diff --git a/.github/workflows/dogfood-gate.yml b/.github/workflows/dogfood-gate.yml index e847252..c898637 100644 --- a/.github/workflows/dogfood-gate.yml +++ b/.github/workflows/dogfood-gate.yml @@ -22,6 +22,7 @@ jobs: a2ml-validate: name: Validate A2ML manifests runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Checkout repository @@ -66,6 +67,7 @@ jobs: k9-validate: name: Validate K9 contracts runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Checkout repository @@ -115,6 +117,7 @@ jobs: empty-lint: name: Empty-linter (invisible characters) runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Checkout repository @@ -179,6 +182,7 @@ jobs: groove-check: name: Groove manifest check runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Checkout repository @@ -237,6 +241,7 @@ jobs: eclexiaiser-validate: name: Validate eclexiaiser manifest runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Checkout repository @@ -300,6 +305,7 @@ print(f'Valid: {project[\"name\"]} ({len(functions)} function(s))') dogfood-summary: name: Dogfooding compliance summary runs-on: ubuntu-latest + timeout-minutes: 15 needs: [a2ml-validate, k9-validate, empty-lint, groove-check, eclexiaiser-validate] if: always() diff --git a/.github/workflows/governance.yml b/.github/workflows/governance.yml index 653ef98..e0c379b 100644 --- a/.github/workflows/governance.yml +++ b/.github/workflows/governance.yml @@ -11,13 +11,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 +23,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 dfacf3b..6f6edde 100644 --- a/.github/workflows/hypatia-scan.yml +++ b/.github/workflows/hypatia-scan.yml @@ -1,14 +1,13 @@ # 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: # Estate guardrail: cancel superseded runs so re-pushes don't pile up # queued runs across the estate. Safe here because this workflow only @@ -16,7 +15,6 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true - permissions: contents: read # security-events: write serves two purposes (write implies read): @@ -38,30 +36,26 @@ permissions: # "Resource not accessible by integration" and (absent continue-on-error) # hard-fails the scan — exactly what the gate-decoupling design forbids. pull-requests: write - jobs: scan: name: Hypatia Neurosymbolic Analysis runs-on: ubuntu-latest - + timeout-minutes: 15 steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 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@fc68ffb90438ef2936bbb3251622353b3dcb2f93 # v1.18.2 with: elixir-version: '1.18' otp-version: '27' - - 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) run: | cd "$HOME/hypatia" @@ -70,7 +64,6 @@ jobs: mix deps.get mix escript.build fi - - name: Run Hypatia scan id: scan env: @@ -103,14 +96,12 @@ 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.6.2 with: name: hypatia-findings path: hypatia-findings.json retention-days: 90 - - name: Convert Hypatia findings to SARIF # Always runs (no findings_count guard): an EMPTY SARIF run is # valid and intentional — uploading it clears stale Hypatia @@ -226,7 +217,6 @@ jobs: console.log(`hypatia.sarif written: ${results.length} result(s).`); CJS node "$RUNNER_TEMP/hypatia-sarif.cjs" - - name: Upload SARIF to GitHub code scanning # Fork PRs get a read-only GITHUB_TOKEN, so security-events:write # is unavailable and upload-sarif cannot publish — skip there @@ -238,8 +228,12 @@ jobs: # exists to end). The empty-SARIF "clear stale alerts" path is # handled in the converter above and does not error here. if: >- - always() && - (github.event_name != 'pull_request' || + always() && (github.event_name != 'pull_request' || + + + + + github.event.pull_request.head.repo.fork != true) uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v3.28.1 with: @@ -247,7 +241,6 @@ jobs: # Distinct category so Hypatia results coexist with CodeQL's # (codeql.yml) instead of overwriting them on the same surface. category: hypatia - - name: Submit findings to gitbot-fleet (Phase 2) if: steps.scan.outputs.findings_count > 0 # Phase 2 is the collaborative LEARNING side-channel ("bots share @@ -271,52 +264,7 @@ jobs: GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_SHA: ${{ github.sha }} FINDINGS_COUNT: ${{ steps.scan.outputs.findings_count }} - run: | - echo "📤 Submitting $FINDINGS_COUNT findings to gitbot-fleet..." - - # Clone gitbot-fleet to temp directory. A clone failure (network, - # repo gone) is non-fatal: learning submission is best-effort. - FLEET_DIR="/tmp/gitbot-fleet-$$" - if ! git clone --depth 1 https://github.com/hyperpolymath/gitbot-fleet.git "$FLEET_DIR"; then - echo "::warning::Could not clone gitbot-fleet — skipping Phase 2 learning submission (non-fatal)." - exit 0 - fi - - # The submission script's location in gitbot-fleet has drifted - # before (it was absent from the default branch, which exit-127'd - # every consuming repo's scan). Probe known locations rather than - # hard-coding one path, and skip gracefully if none is present. - SUBMIT_SCRIPT="" - for cand in \ - "$FLEET_DIR/scripts/submit-finding.sh" \ - "$FLEET_DIR/scripts/submit_finding.sh" \ - "$FLEET_DIR/bin/submit-finding.sh" \ - "$FLEET_DIR/submit-finding.sh"; do - if [ -f "$cand" ]; then - SUBMIT_SCRIPT="$cand" - break - fi - done - - if [ -z "$SUBMIT_SCRIPT" ]; then - echo "::warning::gitbot-fleet submit-finding script not found at any known path — skipping Phase 2 learning submission (non-fatal). Findings are still uploaded as an artifact and gated below." - rm -rf "$FLEET_DIR" - exit 0 - fi - - # Run submission script. Pass the findings path as ABSOLUTE — - # the script cd's into its own working dir before reading the - # file, so a relative path would resolve to the wrong place. - # A submission-script failure is logged but non-fatal. - if bash "$SUBMIT_SCRIPT" "$GITHUB_WORKSPACE/hypatia-findings.json"; then - echo "✅ Finding submission complete" - else - echo "::warning::gitbot-fleet submission script exited non-zero — Phase 2 learning submission skipped (non-fatal)." - fi - - # Cleanup - rm -rf "$FLEET_DIR" - + run: "echo \"\U0001F4E4 Submitting $FINDINGS_COUNT findings to gitbot-fleet...\"\n\n# Clone gitbot-fleet to temp directory. A clone failure (network,\n# repo gone) is non-fatal: learning submission is best-effort.\nFLEET_DIR=\"/tmp/gitbot-fleet-$$\"\nif ! git clone --depth 1 https://github.com/hyperpolymath/gitbot-fleet.git \"$FLEET_DIR\"; then\n echo \"::warning::Could not clone gitbot-fleet — skipping Phase 2 learning submission (non-fatal).\"\n exit 0\nfi\n\n# The submission script's location in gitbot-fleet has drifted\n# before (it was absent from the default branch, which exit-127'd\n# every consuming repo's scan). Probe known locations rather than\n# hard-coding one path, and skip gracefully if none is present.\nSUBMIT_SCRIPT=\"\"\nfor cand in \\\n \"$FLEET_DIR/scripts/submit-finding.sh\" \\\n \"$FLEET_DIR/scripts/submit_finding.sh\" \\\n \"$FLEET_DIR/bin/submit-finding.sh\" \\\n \"$FLEET_DIR/submit-finding.sh\"; do\n if [ -f \"$cand\" ]; then\n SUBMIT_SCRIPT=\"$cand\"\n break\n fi\ndone\n\nif [ -z \"$SUBMIT_SCRIPT\" ]; then\n echo \"::warning::gitbot-fleet submit-finding script not found at any known path — skipping Phase 2 learning submission (non-fatal). Findings are still uploaded as an artifact and gated below.\"\n rm -rf \"$FLEET_DIR\"\n exit 0\nfi\n\n# Run submission script. Pass the findings path as ABSOLUTE —\n# the script cd's into its own working dir before reading the\n# file, so a relative path would resolve to the wrong place.\n# A submission-script failure is logged but non-fatal.\nif bash \"$SUBMIT_SCRIPT\" \"$GITHUB_WORKSPACE/hypatia-findings.json\"; then\n echo \"✅ Finding submission complete\"\nelse\n echo \"::warning::gitbot-fleet submission script exited non-zero — Phase 2 learning submission skipped (non-fatal).\"\nfi\n\n# Cleanup\nrm -rf \"$FLEET_DIR\"\n" - name: Check for critical issues if: steps.scan.outputs.critical > 0 # GATING POLICY (explicit, by design — not an oversight): @@ -334,7 +282,6 @@ jobs: echo "::warning::Hypatia found critical security issue(s) — advisory." echo "See the Security → Code scanning page (category: hypatia)" echo "and the hypatia-findings.json artifact for details." - - name: Generate scan report run: | cat << EOF > hypatia-report.md @@ -373,7 +320,6 @@ 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 # Advisory only — posting findings as a PR comment must never gate @@ -383,32 +329,4 @@ jobs: continue-on-error: true uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # 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 - }); \ No newline at end of file + 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});" diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml index 2083ca6..fcff1f2 100644 --- a/.github/workflows/mirror.yml +++ b/.github/workflows/mirror.yml @@ -1,15 +1,13 @@ # 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/scorecard-enforcer.yml b/.github/workflows/scorecard-enforcer.yml index 6933b78..f5fb110 100644 --- a/.github/workflows/scorecard-enforcer.yml +++ b/.github/workflows/scorecard-enforcer.yml @@ -1,14 +1,12 @@ # 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,33 +14,29 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true - permissions: contents: read - 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@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@c6f931105cb2c34c8f901cc885ba1e2e259cf745 # v4 with: sarif_file: results.sarif - - name: Check minimum score run: | # Parse score from results @@ -57,20 +51,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 8a718f4..be695c7 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -1,19 +1,17 @@ # 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 586cdc0..8a89b98 100644 --- a/.github/workflows/secret-scanner.yml +++ b/.github/workflows/secret-scanner.yml @@ -1,19 +1,26 @@ # 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/workflow-linter.yml b/.github/workflows/workflow-linter.yml index 3bed9c5..862a590 100644 --- a/.github/workflows/workflow-linter.yml +++ b/.github/workflows/workflow-linter.yml @@ -1,7 +1,6 @@ # SPDX-License-Identifier: MPL-2.0 # Prevention workflow - validates all workflows have proper security config name: Workflow Security Linter - on: pull_request: paths: @@ -9,15 +8,13 @@ on: push: paths: - '.github/workflows/**' - permissions: read-all - jobs: lint-workflows: runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 - - name: Check SPDX headers run: | errors=0 @@ -29,7 +26,6 @@ jobs: fi done exit $errors - - name: Check permissions declaration run: | errors=0 @@ -41,7 +37,6 @@ jobs: fi done exit $errors - - name: Check pinned actions run: | errors=0 diff --git a/.machine_readable/6a2/0-AI-MANIFEST.a2ml b/.machine_readable/6a2/0-AI-MANIFEST.a2ml new file mode 100644 index 0000000..cede8a9 --- /dev/null +++ b/.machine_readable/6a2/0-AI-MANIFEST.a2ml @@ -0,0 +1,22 @@ +# 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 + diff --git a/.machine_readable/6a2/README.adoc b/.machine_readable/6a2/README.adoc new file mode 100644 index 0000000..ac38c25 --- /dev/null +++ b/.machine_readable/6a2/README.adoc @@ -0,0 +1,20 @@ +// 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 + diff --git a/.machine_readable/contractiles/Adjustfile.a2ml b/.machine_readable/contractiles/Adjustfile.a2ml new file mode 100644 index 0000000..6f01e89 --- /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 0000000..ef74f45 --- /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 0000000..c9a3ba0 --- /dev/null +++ b/.machine_readable/contractiles/Justfile @@ -0,0 +1,93 @@ +import? "contractile.just" + +# SPDX-License-Identifier: MPL-2.0 +# SPDX-FileCopyrightText: 2025 Phronesis Contributors +# +# Justfile for Phronesis - ethical reasoning language/runtime on BEAM +# +# Per AUTHORITY_STACK: All local operations must be invoked via `just ` + +# Default recipe: list available commands +default: + @just --list + +# Run all tests +test: + mix test + +# Run the demo (produces decision traces) +demo: + mix run -e 'Phronesis.Demo.run()' + +# Run conformance test suite +conformance: + mix run -e 'Phronesis.Demo.run_conformance()' + +# Compile the project +build: + mix compile + +# Clean build artifacts +clean: + mix clean + +# Format code +format: + mix format + +# Check formatting without modifying +format-check: + mix format --check-formatted + +# Run the smoke test (golden path from ANCHOR) +smoke: test demo + @echo "Smoke test passed: tests pass and demo produces traces" + +# Start interactive REPL +repl: + iex -S mix + +# Parse a policy file (for debugging) +parse file: + mix run -e 'IO.inspect(Phronesis.parse(File.read!("{{file}}")), limit: :infinity)' + +# Run linter checks +lint: + mix compile --warnings-as-errors + +# Generate documentation +docs: + mix docs + +# Install dependencies +deps: + mix deps.get + +# Create compiled escript binary +escript: + mix escript.build + +# 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" + + +# 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 0000000..55f8ab4 --- /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 0000000..e2028b5 --- /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/bust/Bustfile.a2ml b/.machine_readable/contractiles/bust/Bustfile.a2ml new file mode 100644 index 0000000..b2cebfb --- /dev/null +++ b/.machine_readable/contractiles/bust/Bustfile.a2ml @@ -0,0 +1,52 @@ +# SPDX-License-Identifier: MPL-2.0 +# Bustfile — failure mode contractile for phronesis +# Author: Jonathan D.A. Jewell +# +# Paired runner: bust.ncl +# Verb: bust +# Semantics: Every declared failure mode must have a working recovery path +# that has been exercised. Status moves: +# declared → drilled (probe run) → verified (recovery confirmed) +# or → failing (recovery broken) +# +# CLI: +# contractile bust check → list failure modes + recovery status +# contractile bust drill → inject failures, verify recovery paths +# +# This repository: phronesis is the canonical template for RSR compliance. +# Failure modes here relate to template distribution and substitution. + +@abstract: +Bustfile for phronesis. Lists failure modes specific to the template +repository itself, particularly around template distribution, substitution, +and synchronization across the hyperpolymath estate. +@end + +## Failure Modes + +### template-substitution-failure +- class: template_processing +- description: Template substitution fails when initializing a new repo from this template +- injection_probe: "cp -r phronesis test-repo && cd test-repo && sed -i 's/phronesis/TEST/g' .machine_readable/contractiles/Intentfile.a2ml && grep -q 'TEST' .machine_readable/contractiles/Intentfile.a2ml" +- recovery_probe: "git -C test-repo diff --quiet .machine_readable/contractiles/Intentfile.a2ml" +- expected_recovery_time_seconds: 10 +- status: declared +- notes: Verify that substitution scripts handle all placeholder replacements correctly + +### sync-drift-between-repos +- class: synchronization +- description: Drift occurs between phronesis and other repos after template updates +- injection_probe: "echo 'template_updated' > /tmp/test_drift_marker" +- recovery_probe: "test -f /tmp/test_drift_marker && rm /tmp/test_drift_marker" +- expected_recovery_time_seconds: 60 +- status: declared +- notes: The estate-wide sync scripts (see scripts/) should prevent this; verify with scripts/verify-sync.sh + +### contractile-parse-error +- class: contractile_format +- description: A contractile file fails to parse due to syntax errors +- injection_probe: "echo 'invalid syntax' >> phronesis/.machine_readable/contractiles/Intentfile.a2ml" +- recovery_probe: "git checkout phronesis/.machine_readable/contractiles/Intentfile.a2ml" +- expected_recovery_time_seconds: 5 +- status: declared +- notes: All .a2ml files should be valid A2ML; use a2ml-validate runner diff --git a/.machine_readable/contractiles/dust/Dustfile.a2ml b/.machine_readable/contractiles/dust/Dustfile.a2ml new file mode 100644 index 0000000..1388eba --- /dev/null +++ b/.machine_readable/contractiles/dust/Dustfile.a2ml @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: MPL-2.0 +# Dustfile — Cleanup and hygiene contract for phronesis +# Author: Jonathan D.A. Jewell +# +# Paired runner: dust.ncl +# Verb: dust +# Semantics: What should be cleaned up. Housekeeping, not blockers. +# +# This repository: phronesis is the canonical template. +# Cleanup items here ensure the template itself remains pristine. + +@abstract: +Cleanup and hygiene items for phronesis. These are maintenance tasks +that ensure the template repository remains clean and ready for distribution +to new repositories. +@end + +## Stale Files + +### no-template-artifacts +- description: No generated files from template testing in root +- run: test -z "$(ls template-test-* 2>/dev/null)" +- severity: info +- notes: Template testing should use /tmp or dedicated test directories + +### no-example-placeholders +- description: No example placeholder files (EXAMPLE-, SAMPLE-) in contractiles/ +- run: test -z "$(find .machine_readable/contractiles/ -name 'EXAMPLE-*' -o -name 'SAMPLE-*' 2>/dev/null)" +- severity: warning +- notes: All placeholders should be replaced with actual content or removed + +### no-old-contractile-formats +- description: No old .contractile or .hs files remaining +- run: test -z "$(find .machine_readable/contractiles/ \( -name '*.contractile' -o -name '*.hs' \) 2>/dev/null)" +- severity: warning +- notes: All contractiles should be .a2ml format + +## Format Duplicates + +### no-duplicate-justfile +- description: Only one Justfile (hardlinked from root to .machine_readable/contractiles/) +- run: test $(stat -c '%i' Justfile) = $(stat -c '%i' .machine_readable/contractiles/Justfile 2>/dev/null) +- severity: warning +- notes: Justfile should be hardlinked, not copied + +### no-duplicate-readme-format +- description: Only one README format in contractiles/ (.adoc canonical) +- run: test ! -f .machine_readable/contractiles/README.md +- severity: info + +## Template Hygiene + +### no-stale-template-references +- description: No references to phronesis in generic template files +- run: test -z "$(grep -r 'phronesis' machine-readable-design/ 2>/dev/null)" +- severity: warning +- notes: Generic templates should use {{PROJECT_NAME}} or similar placeholders + +### version-sync-checked +- description: Version in canonical-directory-structure matches .machine_readable/contractiles +- verification: compare version identifiers in both locations +- severity: info diff --git a/ANALYSIS-COMPLETE.md b/ANALYSIS-COMPLETE.md index 0016be4..75d9a4f 100644 --- a/ANALYSIS-COMPLETE.md +++ b/ANALYSIS-COMPLETE.md @@ -1,3 +1,7 @@ + # Phronesis Analysis Complete ## Task Summary diff --git a/CHANGELOG.md b/CHANGELOG.md index a9cbf7c..f819f32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,7 @@ - # Changelog All notable changes to `phronesis` will be documented in this file. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 31604d2..5c80c98 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/phronesis.git cd phronesis diff --git a/EXPLAINME.adoc b/EXPLAINME.adoc index 1d9d707..3e4192d 100644 --- a/EXPLAINME.adoc +++ b/EXPLAINME.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Phronesis — Show Me The Receipts :toc: :icons: font diff --git a/GOVERNANCE.adoc b/GOVERNANCE.adoc new file mode 100644 index 0000000..8bbf167 --- /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/IMPLEMENTATION-ROADMAP.md b/IMPLEMENTATION-ROADMAP.md index a647ac4..c69ab6b 100644 --- a/IMPLEMENTATION-ROADMAP.md +++ b/IMPLEMENTATION-ROADMAP.md @@ -1,3 +1,7 @@ + # Phronesis Implementation Roadmap ## From 25% Specification to Working Compiler diff --git a/Justfile b/Justfile index b4dafba..f627ef5 100644 --- a/Justfile +++ b/Justfile @@ -1,4 +1,5 @@ import? "contractile.just" +// Owner: Jonathan D.A. Jewell # SPDX-License-Identifier: MPL-2.0 # SPDX-FileCopyrightText: 2025 Phronesis Contributors @@ -88,3 +89,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 4a7f1aa..d0a1fa1 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/LSP-IMPLEMENTATION-SUMMARY.md b/LSP-IMPLEMENTATION-SUMMARY.md index 1771dc8..6769e0c 100644 --- a/LSP-IMPLEMENTATION-SUMMARY.md +++ b/LSP-IMPLEMENTATION-SUMMARY.md @@ -1,3 +1,7 @@ + # LSP Implementation Summary **Date:** 2026-01-30 diff --git a/MAINTAINERS.adoc b/MAINTAINERS.adoc index a1c6544..becaa3e 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/PALIMPSEST.adoc b/PALIMPSEST.adoc index ebaa6d0..9660f13 100644 --- a/PALIMPSEST.adoc +++ b/PALIMPSEST.adoc @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Palimpsest License :toc: :toc-placement!: diff --git a/README.adoc b/README.adoc index c3f3339..5c16ece 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,8 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell = Phronesis: A Provably Safe Language for Agentic Ethical Reasoning +image:https://img.shields.io/badge/OpenSSF-Best_Practices-green?logo=openssourcesecurity[OpenSSF Best Practices,link="https://www.bestpractices.dev/en/projects/new?repo_url=https://github.com/hyperpolymath/phronesis"] + :license: PMPL-1.0 + Palimpsest v0.5 :author: Jonathan D. A. Jewell :version: Standard Candidate 1.0 diff --git a/SECURITY.md b/SECURITY.md index 24878c9..698780d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,3 +1,7 @@ + # Security Policy We take security seriously. We appreciate your efforts to responsibly disclose vulnerabilities and will make every effort to acknowledge your contributions. diff --git a/TEST-NEEDS.md b/TEST-NEEDS.md index 33865ce..a7b0b40 100644 --- a/TEST-NEEDS.md +++ b/TEST-NEEDS.md @@ -1,3 +1,7 @@ + # Test Requirements — Phronesis ## CRG Grade: C — ACHIEVED 2026-04-04 diff --git a/TESTING-REPORT.adoc b/TESTING-REPORT.adoc index c1a9c5a..49cc7fa 100644 --- a/TESTING-REPORT.adoc +++ b/TESTING-REPORT.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // SPDX-FileCopyrightText: 2025 Phronesis Contributors = Phronesis Testing Report :author: Claude Code (Anthropic) diff --git a/TOOLCHAIN-WISHLIST.md b/TOOLCHAIN-WISHLIST.md index 721c506..c6b21f6 100644 --- a/TOOLCHAIN-WISHLIST.md +++ b/TOOLCHAIN-WISHLIST.md @@ -1,3 +1,7 @@ + # Phronesis Toolchain Wishlist ## Missing Components for Production-Grade Language diff --git a/TOPOLOGY.md b/TOPOLOGY.md index 1fa987c..39d49fe 100644 --- a/TOPOLOGY.md +++ b/TOPOLOGY.md @@ -1,4 +1,7 @@ - + # TOPOLOGY.md — phronesis diff --git a/WOKELANG-FEATURE-COMPARISON.md b/WOKELANG-FEATURE-COMPARISON.md index 80d73de..d9310d0 100644 --- a/WOKELANG-FEATURE-COMPARISON.md +++ b/WOKELANG-FEATURE-COMPARISON.md @@ -1,3 +1,7 @@ + # Phronesis vs WokeLang Feature Comparison ## Summary diff --git a/academic/README.md b/academic/README.md index 5b765c8..19e32ea 100644 --- a/academic/README.md +++ b/academic/README.md @@ -1,3 +1,7 @@ + # Phronesis Academic Documentation **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/TODO.md b/academic/TODO.md index 4e277c4..bae6959 100644 --- a/academic/TODO.md +++ b/academic/TODO.md @@ -1,3 +1,7 @@ + # Academic Documentation TODO **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/notation-guide.md b/academic/notation-guide.md index 21d9474..33fb4f7 100644 --- a/academic/notation-guide.md +++ b/academic/notation-guide.md @@ -1,3 +1,7 @@ + # Unified Notation Guide for Phronesis Academic Documentation **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/papers/phronesis-white-paper.md b/academic/papers/phronesis-white-paper.md index 61c74e8..afbbdec 100644 --- a/academic/papers/phronesis-white-paper.md +++ b/academic/papers/phronesis-white-paper.md @@ -1,3 +1,7 @@ + # Phronesis: A Formally Verified Consensus-Gated Policy Language for Network Configuration **Authors:** Phronesis Development Team diff --git a/academic/proofs/abstract-interpretation/abstract-interpretation-framework.md b/academic/proofs/abstract-interpretation/abstract-interpretation-framework.md index 64232ff..4bfc690 100644 --- a/academic/proofs/abstract-interpretation/abstract-interpretation-framework.md +++ b/academic/proofs/abstract-interpretation/abstract-interpretation-framework.md @@ -1,3 +1,7 @@ + # Abstract Interpretation Framework for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/algebraic-semantics/algebraic-semantics.md b/academic/proofs/algebraic-semantics/algebraic-semantics.md index d88c9f1..4a1f9b5 100644 --- a/academic/proofs/algebraic-semantics/algebraic-semantics.md +++ b/academic/proofs/algebraic-semantics/algebraic-semantics.md @@ -1,3 +1,7 @@ + # Algebraic Semantics for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/automata-theory/automata-theory-proofs.md b/academic/proofs/automata-theory/automata-theory-proofs.md index 5db7bc6..b807fd9 100644 --- a/academic/proofs/automata-theory/automata-theory-proofs.md +++ b/academic/proofs/automata-theory/automata-theory-proofs.md @@ -1,3 +1,7 @@ + # Automata Theory Proofs for Phronesis Lexer and Parser **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/axiomatic-semantics/hoare-logic.md b/academic/proofs/axiomatic-semantics/hoare-logic.md index 0065291..a8ab6e7 100644 --- a/academic/proofs/axiomatic-semantics/hoare-logic.md +++ b/academic/proofs/axiomatic-semantics/hoare-logic.md @@ -1,3 +1,7 @@ + # Axiomatic Semantics for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/category-theory/category-theory-foundations.md b/academic/proofs/category-theory/category-theory-foundations.md index 3cd9862..5c0ce63 100644 --- a/academic/proofs/category-theory/category-theory-foundations.md +++ b/academic/proofs/category-theory/category-theory-foundations.md @@ -1,3 +1,7 @@ + # Category Theory Foundations for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/complexity-theory/computational-complexity-analysis.md b/academic/proofs/complexity-theory/computational-complexity-analysis.md index 9692331..af5d3e1 100644 --- a/academic/proofs/complexity-theory/computational-complexity-analysis.md +++ b/academic/proofs/complexity-theory/computational-complexity-analysis.md @@ -1,3 +1,7 @@ + # Computational Complexity Analysis of Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/concurrency-theory/process-algebra.md b/academic/proofs/concurrency-theory/process-algebra.md index c723228..54b06dd 100644 --- a/academic/proofs/concurrency-theory/process-algebra.md +++ b/academic/proofs/concurrency-theory/process-algebra.md @@ -1,3 +1,7 @@ + # Process Algebra and Concurrency Theory for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/cryptography/cryptographic-proofs.md b/academic/proofs/cryptography/cryptographic-proofs.md index 2225354..847e575 100644 --- a/academic/proofs/cryptography/cryptographic-proofs.md +++ b/academic/proofs/cryptography/cryptographic-proofs.md @@ -1,3 +1,7 @@ + # Cryptographic Proofs for Phronesis Consensus **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/domain-theory/domain-theory-foundations.md b/academic/proofs/domain-theory/domain-theory-foundations.md index a4bc141..c1c1234 100644 --- a/academic/proofs/domain-theory/domain-theory-foundations.md +++ b/academic/proofs/domain-theory/domain-theory-foundations.md @@ -1,3 +1,7 @@ + # Domain Theory Foundations for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/game-theory/consensus-game-theory.md b/academic/proofs/game-theory/consensus-game-theory.md index 463c301..11ebcac 100644 --- a/academic/proofs/game-theory/consensus-game-theory.md +++ b/academic/proofs/game-theory/consensus-game-theory.md @@ -1,3 +1,7 @@ + # Game Theory Analysis of Phronesis Consensus **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/graph-theory/bgp-graph-theory.md b/academic/proofs/graph-theory/bgp-graph-theory.md index 11bd9f1..a30dccc 100644 --- a/academic/proofs/graph-theory/bgp-graph-theory.md +++ b/academic/proofs/graph-theory/bgp-graph-theory.md @@ -1,3 +1,7 @@ + # Graph Theory Proofs for BGP/AS Path Validation **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/information-theory/information-flow-analysis.md b/academic/proofs/information-theory/information-flow-analysis.md index 507d804..d800721 100644 --- a/academic/proofs/information-theory/information-flow-analysis.md +++ b/academic/proofs/information-theory/information-flow-analysis.md @@ -1,3 +1,7 @@ + # Information Flow Analysis for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/lattice-theory/type-lattice-proofs.md b/academic/proofs/lattice-theory/type-lattice-proofs.md index 827d28a..ad1c58d 100644 --- a/academic/proofs/lattice-theory/type-lattice-proofs.md +++ b/academic/proofs/lattice-theory/type-lattice-proofs.md @@ -1,3 +1,7 @@ + # Lattice Theory Proofs for Phronesis Type System **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/model-theory/denotational-semantics.md b/academic/proofs/model-theory/denotational-semantics.md index 6a8d166..58e42c0 100644 --- a/academic/proofs/model-theory/denotational-semantics.md +++ b/academic/proofs/model-theory/denotational-semantics.md @@ -1,3 +1,7 @@ + # Denotational Semantics for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/model-theory/model-theory-specification.md b/academic/proofs/model-theory/model-theory-specification.md index f2d82a1..a8ec814 100644 --- a/academic/proofs/model-theory/model-theory-specification.md +++ b/academic/proofs/model-theory/model-theory-specification.md @@ -1,3 +1,7 @@ + # Model Theory Specification for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/number-theory/number-theory-foundations.md b/academic/proofs/number-theory/number-theory-foundations.md index 3f16f6a..8ab35e6 100644 --- a/academic/proofs/number-theory/number-theory-foundations.md +++ b/academic/proofs/number-theory/number-theory-foundations.md @@ -1,3 +1,7 @@ + # Number Theory Foundations for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/operational-semantics/complete-operational-semantics.md b/academic/proofs/operational-semantics/complete-operational-semantics.md index 464127c..850b5ec 100644 --- a/academic/proofs/operational-semantics/complete-operational-semantics.md +++ b/academic/proofs/operational-semantics/complete-operational-semantics.md @@ -1,3 +1,7 @@ + # Complete Operational Semantics for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/order-theory/order-theory-foundations.md b/academic/proofs/order-theory/order-theory-foundations.md index b36b330..dba44fa 100644 --- a/academic/proofs/order-theory/order-theory-foundations.md +++ b/academic/proofs/order-theory/order-theory-foundations.md @@ -1,3 +1,7 @@ + # Order Theory Foundations for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/probabilistic-analysis/probabilistic-analysis.md b/academic/proofs/probabilistic-analysis/probabilistic-analysis.md index b7ab6d6..c9abc40 100644 --- a/academic/proofs/probabilistic-analysis/probabilistic-analysis.md +++ b/academic/proofs/probabilistic-analysis/probabilistic-analysis.md @@ -1,3 +1,7 @@ + # Probabilistic Analysis for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/proof-theory/curry-howard-correspondence.md b/academic/proofs/proof-theory/curry-howard-correspondence.md index 8e4f3f2..693e81b 100644 --- a/academic/proofs/proof-theory/curry-howard-correspondence.md +++ b/academic/proofs/proof-theory/curry-howard-correspondence.md @@ -1,3 +1,7 @@ + # Proof Theory and Curry-Howard Correspondence for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/protocol-verification/dolev-yao-model.md b/academic/proofs/protocol-verification/dolev-yao-model.md index e36f5a4..8cc47ae 100644 --- a/academic/proofs/protocol-verification/dolev-yao-model.md +++ b/academic/proofs/protocol-verification/dolev-yao-model.md @@ -1,3 +1,7 @@ + # Protocol Verification for Phronesis: Dolev-Yao Model **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/real-analysis/ieee754-analysis.md b/academic/proofs/real-analysis/ieee754-analysis.md index 20f7da7..f3f6294 100644 --- a/academic/proofs/real-analysis/ieee754-analysis.md +++ b/academic/proofs/real-analysis/ieee754-analysis.md @@ -1,3 +1,7 @@ + # Real Analysis for IEEE 754 Floating-Point in Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/separation-logic/separation-logic.md b/academic/proofs/separation-logic/separation-logic.md index f355571..6f4d4b5 100644 --- a/academic/proofs/separation-logic/separation-logic.md +++ b/academic/proofs/separation-logic/separation-logic.md @@ -1,3 +1,7 @@ + # Separation Logic for Phronesis Capabilities **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/set-theory/set-theoretic-foundations.md b/academic/proofs/set-theory/set-theoretic-foundations.md index 37d7165..179b955 100644 --- a/academic/proofs/set-theory/set-theoretic-foundations.md +++ b/academic/proofs/set-theory/set-theoretic-foundations.md @@ -1,3 +1,7 @@ + # Set-Theoretic Foundations for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/temporal-logic/temporal-logic-specifications.md b/academic/proofs/temporal-logic/temporal-logic-specifications.md index 90c6fd2..b8e5ea3 100644 --- a/academic/proofs/temporal-logic/temporal-logic-specifications.md +++ b/academic/proofs/temporal-logic/temporal-logic-specifications.md @@ -1,3 +1,7 @@ + # Temporal Logic Specifications for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/proofs/type-theory/type-theory-proofs.md b/academic/proofs/type-theory/type-theory-proofs.md index b273bd2..58a70ff 100644 --- a/academic/proofs/type-theory/type-theory-proofs.md +++ b/academic/proofs/type-theory/type-theory-proofs.md @@ -1,3 +1,7 @@ + # Type Theory Proofs for Phronesis **SPDX-License-Identifier: MPL-2.0 diff --git a/academic/theorem-index.md b/academic/theorem-index.md index f44a343..7ef0929 100644 --- a/academic/theorem-index.md +++ b/academic/theorem-index.md @@ -1,3 +1,7 @@ + # Theorem Index for Phronesis Academic Documentation **SPDX-License-Identifier: MPL-2.0 diff --git a/bench/bench_lexer.exs b/bench/bench_lexer.exs index 6b78c53..4300205 100644 --- a/bench/bench_lexer.exs +++ b/bench/bench_lexer.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # bench_lexer.exs -- Lexer performance benchmark for Phronesis # # Measures: diff --git a/bench/bench_parser.exs b/bench/bench_parser.exs index 776ffd3..ba0f142 100644 --- a/bench/bench_parser.exs +++ b/bench/bench_parser.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # bench_parser.exs -- Parser benchmark harness for Phronesis # # Generates a large synthetic Phronesis policy program and measures diff --git a/compiler/phronesis-ast/src/lib.rs b/compiler/phronesis-ast/src/lib.rs index df46994..7889242 100644 --- a/compiler/phronesis-ast/src/lib.rs +++ b/compiler/phronesis-ast/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 //! Abstract syntax tree definitions for the Phronesis policy language. diff --git a/compiler/phronesis-wasm/src/lib.rs b/compiler/phronesis-wasm/src/lib.rs index 455afbe..76815b8 100644 --- a/compiler/phronesis-wasm/src/lib.rs +++ b/compiler/phronesis-wasm/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 //! WebAssembly backend for Phronesis. diff --git a/copilot-instructions.md b/copilot-instructions.md index 32bdfab..afee095 100644 --- a/copilot-instructions.md +++ b/copilot-instructions.md @@ -1,3 +1,7 @@ + ## Code Review Guidelines When reviewing code in this repository, apply these standards strictly. diff --git a/deploy/DEPLOYMENT.md b/deploy/DEPLOYMENT.md index 6f4f285..fcf4039 100644 --- a/deploy/DEPLOYMENT.md +++ b/deploy/DEPLOYMENT.md @@ -1,3 +1,7 @@ + # Phronesis Production Deployment Guide ## Overview diff --git a/deploy/kubernetes/statefulset.yaml b/deploy/kubernetes/statefulset.yaml index 42ff726..0d4fff9 100644 --- a/deploy/kubernetes/statefulset.yaml +++ b/deploy/kubernetes/statefulset.yaml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Owner: Jonathan D.A. Jewell # Kubernetes StatefulSet for Phronesis consensus cluster apiVersion: v1 diff --git a/docker-compose.yml b/docker-compose.yml index 94dfd45..eed1cb1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +// Owner: Jonathan D.A. Jewell # Docker Compose for Phronesis multi-node cluster version: '3.8' diff --git a/docs/CONSENSUS.md b/docs/CONSENSUS.md index 43f13a7..c6e57c9 100644 --- a/docs/CONSENSUS.md +++ b/docs/CONSENSUS.md @@ -1,3 +1,7 @@ + # Phronesis Distributed Consensus ## Overview diff --git a/docs/safety_proofs.md b/docs/safety_proofs.md index d63904e..5ca91cf 100644 --- a/docs/safety_proofs.md +++ b/docs/safety_proofs.md @@ -1,3 +1,7 @@ + # Phronesis: Safety Proofs ## Purpose diff --git a/docs/tech-debt-2026-05-26.md b/docs/tech-debt-2026-05-26.md index b5a3c71..d563377 100644 --- a/docs/tech-debt-2026-05-26.md +++ b/docs/tech-debt-2026-05-26.md @@ -1,8 +1,7 @@ - # Tech-Debt Audit — phronesis — 2026-05-26 **Source:** estate-wide automated scan 2026-05-26. diff --git a/editors/vscode/README.md b/editors/vscode/README.md index 8dd1176..2bc69ea 100644 --- a/editors/vscode/README.md +++ b/editors/vscode/README.md @@ -1,3 +1,7 @@ + # Phronesis VSCode Extension VSCode extension for Phronesis policy language with LSP support. diff --git a/lib/phronesis.ex b/lib/phronesis.ex index 1cb003b..e436cbc 100644 --- a/lib/phronesis.ex +++ b/lib/phronesis.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis do diff --git a/lib/phronesis/analyzer.ex b/lib/phronesis/analyzer.ex index 903d9aa..745a15e 100644 --- a/lib/phronesis/analyzer.ex +++ b/lib/phronesis/analyzer.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Analyzer do diff --git a/lib/phronesis/application.ex b/lib/phronesis/application.ex index 165b821..f41ee9b 100644 --- a/lib/phronesis/application.ex +++ b/lib/phronesis/application.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Application do diff --git a/lib/phronesis/ast.ex b/lib/phronesis/ast.ex index 046e0da..e16978d 100644 --- a/lib/phronesis/ast.ex +++ b/lib/phronesis/ast.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.AST do diff --git a/lib/phronesis/benchmark.ex b/lib/phronesis/benchmark.ex index bce0682..4265873 100644 --- a/lib/phronesis/benchmark.ex +++ b/lib/phronesis/benchmark.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Benchmark do diff --git a/lib/phronesis/cli.ex b/lib/phronesis/cli.ex index 22faeb5..779be7c 100644 --- a/lib/phronesis/cli.ex +++ b/lib/phronesis/cli.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 Phronesis.CLI do @moduledoc """ Command-line interface for the Phronesis policy language. diff --git a/lib/phronesis/compiler.ex b/lib/phronesis/compiler.ex index 7f3b2b2..3eef02a 100644 --- a/lib/phronesis/compiler.ex +++ b/lib/phronesis/compiler.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Compiler do diff --git a/lib/phronesis/consensus/raft.ex b/lib/phronesis/consensus/raft.ex index 5f73b51..253dfd3 100644 --- a/lib/phronesis/consensus/raft.ex +++ b/lib/phronesis/consensus/raft.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Consensus.Raft do diff --git a/lib/phronesis/consensus/raft/log.ex b/lib/phronesis/consensus/raft/log.ex index e8e5802..dbb75b1 100644 --- a/lib/phronesis/consensus/raft/log.ex +++ b/lib/phronesis/consensus/raft/log.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Consensus.Raft.Log do diff --git a/lib/phronesis/consensus/raft/rpc.ex b/lib/phronesis/consensus/raft/rpc.ex index 9316ef1..736fea9 100644 --- a/lib/phronesis/consensus/raft/rpc.ex +++ b/lib/phronesis/consensus/raft/rpc.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Consensus.Raft.RPC do diff --git a/lib/phronesis/consensus/server.ex b/lib/phronesis/consensus/server.ex index 83d6a9a..ffe62f9 100644 --- a/lib/phronesis/consensus/server.ex +++ b/lib/phronesis/consensus/server.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Consensus.Server do diff --git a/lib/phronesis/consensus/server/machine.ex b/lib/phronesis/consensus/server/machine.ex index 2869e43..a37e4e0 100644 --- a/lib/phronesis/consensus/server/machine.ex +++ b/lib/phronesis/consensus/server/machine.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Consensus.Server.Machine do diff --git a/lib/phronesis/consensus/supervisor.ex b/lib/phronesis/consensus/supervisor.ex index 4e0a0ea..7fedb1e 100644 --- a/lib/phronesis/consensus/supervisor.ex +++ b/lib/phronesis/consensus/supervisor.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Consensus.Supervisor do diff --git a/lib/phronesis/cst.ex b/lib/phronesis/cst.ex index c742c24..c804427 100644 --- a/lib/phronesis/cst.ex +++ b/lib/phronesis/cst.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2026 Phronesis Contributors defmodule Phronesis.CST do diff --git a/lib/phronesis/debugger.ex b/lib/phronesis/debugger.ex index 0853d1a..5ae527a 100644 --- a/lib/phronesis/debugger.ex +++ b/lib/phronesis/debugger.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Debugger do diff --git a/lib/phronesis/debugger/repl.ex b/lib/phronesis/debugger/repl.ex index d9de3c6..af1cc5b 100644 --- a/lib/phronesis/debugger/repl.ex +++ b/lib/phronesis/debugger/repl.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Debugger.REPL do diff --git a/lib/phronesis/demo.ex b/lib/phronesis/demo.ex index 831f202..746cf21 100644 --- a/lib/phronesis/demo.ex +++ b/lib/phronesis/demo.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Demo do diff --git a/lib/phronesis/diagnostics.ex b/lib/phronesis/diagnostics.ex index e140468..de7086e 100644 --- a/lib/phronesis/diagnostics.ex +++ b/lib/phronesis/diagnostics.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Diagnostics do diff --git a/lib/phronesis/diagnostics/reporter.ex b/lib/phronesis/diagnostics/reporter.ex index fa00118..efa2332 100644 --- a/lib/phronesis/diagnostics/reporter.ex +++ b/lib/phronesis/diagnostics/reporter.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Diagnostics.Reporter do diff --git a/lib/phronesis/diagnostics/suggestions.ex b/lib/phronesis/diagnostics/suggestions.ex index 8b885e2..e7b3d81 100644 --- a/lib/phronesis/diagnostics/suggestions.ex +++ b/lib/phronesis/diagnostics/suggestions.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Diagnostics.Suggestions do diff --git a/lib/phronesis/doc_generator.ex b/lib/phronesis/doc_generator.ex index 34f177d..8eb1b0c 100644 --- a/lib/phronesis/doc_generator.ex +++ b/lib/phronesis/doc_generator.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.DocGenerator do diff --git a/lib/phronesis/formatter.ex b/lib/phronesis/formatter.ex index 4476c01..dfeb5b8 100644 --- a/lib/phronesis/formatter.ex +++ b/lib/phronesis/formatter.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Formatter do diff --git a/lib/phronesis/hot_reload.ex b/lib/phronesis/hot_reload.ex index 6862ec5..77074ca 100644 --- a/lib/phronesis/hot_reload.ex +++ b/lib/phronesis/hot_reload.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.HotReload do diff --git a/lib/phronesis/incremental_lexer.ex b/lib/phronesis/incremental_lexer.ex index 23d56f6..1ed5ce8 100644 --- a/lib/phronesis/incremental_lexer.ex +++ b/lib/phronesis/incremental_lexer.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell defmodule Phronesis.IncrementalLexer do diff --git a/lib/phronesis/incremental_parser.ex b/lib/phronesis/incremental_parser.ex index 18a6f42..568231d 100644 --- a/lib/phronesis/incremental_parser.ex +++ b/lib/phronesis/incremental_parser.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell defmodule Phronesis.IncrementalParser do diff --git a/lib/phronesis/interpreter.ex b/lib/phronesis/interpreter.ex index 2168d85..9851f79 100644 --- a/lib/phronesis/interpreter.ex +++ b/lib/phronesis/interpreter.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Interpreter do diff --git a/lib/phronesis/lexer.ex b/lib/phronesis/lexer.ex index 7495aa5..afeb87b 100644 --- a/lib/phronesis/lexer.ex +++ b/lib/phronesis/lexer.ex @@ -1,5 +1,6 @@ -# @taxonomy: compiler/lexer # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell +# @taxonomy: compiler/lexer # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Lexer do diff --git a/lib/phronesis/library/common/network.ex b/lib/phronesis/library/common/network.ex index 4dc3061..33f827f 100644 --- a/lib/phronesis/library/common/network.ex +++ b/lib/phronesis/library/common/network.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Library.Common.Network do diff --git a/lib/phronesis/library/common/time.ex b/lib/phronesis/library/common/time.ex index 270f9a3..1b46eb5 100644 --- a/lib/phronesis/library/common/time.ex +++ b/lib/phronesis/library/common/time.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Library.Common.Time do diff --git a/lib/phronesis/library/common/validation.ex b/lib/phronesis/library/common/validation.ex index cd491ef..2601754 100644 --- a/lib/phronesis/library/common/validation.ex +++ b/lib/phronesis/library/common/validation.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Library.Common.Validation do diff --git a/lib/phronesis/library/phronesis/consensus_helpers.ex b/lib/phronesis/library/phronesis/consensus_helpers.ex index eec7e30..1148198 100644 --- a/lib/phronesis/library/phronesis/consensus_helpers.ex +++ b/lib/phronesis/library/phronesis/consensus_helpers.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Library.Phronesis.ConsensusHelpers do diff --git a/lib/phronesis/library/phronesis/policy_helpers.ex b/lib/phronesis/library/phronesis/policy_helpers.ex index 2273ab3..34ae9eb 100644 --- a/lib/phronesis/library/phronesis/policy_helpers.ex +++ b/lib/phronesis/library/phronesis/policy_helpers.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Library.Phronesis.PolicyHelpers do diff --git a/lib/phronesis/linter.ex b/lib/phronesis/linter.ex index f14e3c6..fedf58a 100644 --- a/lib/phronesis/linter.ex +++ b/lib/phronesis/linter.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Linter do diff --git a/lib/phronesis/lsp/completion.ex b/lib/phronesis/lsp/completion.ex index 4a944e3..6642a8f 100644 --- a/lib/phronesis/lsp/completion.ex +++ b/lib/phronesis/lsp/completion.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.LSP.Completion do diff --git a/lib/phronesis/lsp/definition.ex b/lib/phronesis/lsp/definition.ex index b3d56c9..a591c55 100644 --- a/lib/phronesis/lsp/definition.ex +++ b/lib/phronesis/lsp/definition.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.LSP.Definition do diff --git a/lib/phronesis/lsp/hover.ex b/lib/phronesis/lsp/hover.ex index 7414355..e6d8b9a 100644 --- a/lib/phronesis/lsp/hover.ex +++ b/lib/phronesis/lsp/hover.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.LSP.Hover do diff --git a/lib/phronesis/lsp/server.ex b/lib/phronesis/lsp/server.ex index a52cfc3..f3801bc 100644 --- a/lib/phronesis/lsp/server.ex +++ b/lib/phronesis/lsp/server.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.LSP.Server do diff --git a/lib/phronesis/lsp/text_document.ex b/lib/phronesis/lsp/text_document.ex index 1a260f5..2b743ae 100644 --- a/lib/phronesis/lsp/text_document.ex +++ b/lib/phronesis/lsp/text_document.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.LSP.TextDocument do diff --git a/lib/phronesis/package_manager.ex b/lib/phronesis/package_manager.ex index d3ed316..4758883 100644 --- a/lib/phronesis/package_manager.ex +++ b/lib/phronesis/package_manager.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.PackageManager do diff --git a/lib/phronesis/package_manager/manifest.ex b/lib/phronesis/package_manager/manifest.ex index a48b08b..a95f15d 100644 --- a/lib/phronesis/package_manager/manifest.ex +++ b/lib/phronesis/package_manager/manifest.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.PackageManager.Manifest do diff --git a/lib/phronesis/package_manager/registry.ex b/lib/phronesis/package_manager/registry.ex index 20f4864..d15f879 100644 --- a/lib/phronesis/package_manager/registry.ex +++ b/lib/phronesis/package_manager/registry.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.PackageManager.Registry do diff --git a/lib/phronesis/package_manager/resolver.ex b/lib/phronesis/package_manager/resolver.ex index 0e50bf3..6e4fcc8 100644 --- a/lib/phronesis/package_manager/resolver.ex +++ b/lib/phronesis/package_manager/resolver.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.PackageManager.Resolver do diff --git a/lib/phronesis/parser.ex b/lib/phronesis/parser.ex index 5f5c506..68e4627 100644 --- a/lib/phronesis/parser.ex +++ b/lib/phronesis/parser.ex @@ -1,5 +1,6 @@ -# @taxonomy: compiler/parser # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell +# @taxonomy: compiler/parser # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Parser do diff --git a/lib/phronesis/parser/errors.ex b/lib/phronesis/parser/errors.ex index 0255f03..a51d526 100644 --- a/lib/phronesis/parser/errors.ex +++ b/lib/phronesis/parser/errors.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Parser.Errors do diff --git a/lib/phronesis/profiler.ex b/lib/phronesis/profiler.ex index 19a47ed..d5927f8 100644 --- a/lib/phronesis/profiler.ex +++ b/lib/phronesis/profiler.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Profiler do diff --git a/lib/phronesis/profiler/reporter.ex b/lib/phronesis/profiler/reporter.ex index 0fdbb7a..34de5a9 100644 --- a/lib/phronesis/profiler/reporter.ex +++ b/lib/phronesis/profiler/reporter.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Profiler.Reporter do diff --git a/lib/phronesis/state.ex b/lib/phronesis/state.ex index cf2627e..532135e 100644 --- a/lib/phronesis/state.ex +++ b/lib/phronesis/state.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.State do diff --git a/lib/phronesis/stdlib/bgp.ex b/lib/phronesis/stdlib/bgp.ex index e3869d4..3e74937 100644 --- a/lib/phronesis/stdlib/bgp.ex +++ b/lib/phronesis/stdlib/bgp.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Stdlib.BGP do diff --git a/lib/phronesis/stdlib/consensus.ex b/lib/phronesis/stdlib/consensus.ex index 1f4678b..5b249ab 100644 --- a/lib/phronesis/stdlib/consensus.ex +++ b/lib/phronesis/stdlib/consensus.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Stdlib.Consensus do diff --git a/lib/phronesis/stdlib/module.ex b/lib/phronesis/stdlib/module.ex index 2608cc7..ff002f7 100644 --- a/lib/phronesis/stdlib/module.ex +++ b/lib/phronesis/stdlib/module.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Stdlib.Module do diff --git a/lib/phronesis/stdlib/rpki.ex b/lib/phronesis/stdlib/rpki.ex index 3f08f17..9fc6d1b 100644 --- a/lib/phronesis/stdlib/rpki.ex +++ b/lib/phronesis/stdlib/rpki.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Stdlib.RPKI do diff --git a/lib/phronesis/stdlib/rpki_validator.ex b/lib/phronesis/stdlib/rpki_validator.ex index 231c3ac..b62a0cd 100644 --- a/lib/phronesis/stdlib/rpki_validator.ex +++ b/lib/phronesis/stdlib/rpki_validator.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Stdlib.StdRPKI.Validator do diff --git a/lib/phronesis/stdlib/temporal.ex b/lib/phronesis/stdlib/temporal.ex index 4cc5d6a..b93c221 100644 --- a/lib/phronesis/stdlib/temporal.ex +++ b/lib/phronesis/stdlib/temporal.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Stdlib.Temporal do diff --git a/lib/phronesis/test/property.ex b/lib/phronesis/test/property.ex index 18b0ec1..ef6ec52 100644 --- a/lib/phronesis/test/property.ex +++ b/lib/phronesis/test/property.ex @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Phronesis.Test.Property do @moduledoc """ Property-based testing framework for Phronesis policies. diff --git a/lib/phronesis/test_framework.ex b/lib/phronesis/test_framework.ex index 52f1158..b2acd03 100644 --- a/lib/phronesis/test_framework.ex +++ b/lib/phronesis/test_framework.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.TestFramework do diff --git a/lib/phronesis/token.ex b/lib/phronesis/token.ex index baaa913..c3cafdf 100644 --- a/lib/phronesis/token.ex +++ b/lib/phronesis/token.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Token do diff --git a/lib/phronesis/token_stream.ex b/lib/phronesis/token_stream.ex index e92609c..ca61500 100644 --- a/lib/phronesis/token_stream.ex +++ b/lib/phronesis/token_stream.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell defmodule Phronesis.TokenStream do diff --git a/lib/phronesis/trace.ex b/lib/phronesis/trace.ex index 7bf1872..77c5f13 100644 --- a/lib/phronesis/trace.ex +++ b/lib/phronesis/trace.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.Trace do diff --git a/lib/phronesis/tracing_interpreter.ex b/lib/phronesis/tracing_interpreter.ex index dd5ec8c..456b032 100644 --- a/lib/phronesis/tracing_interpreter.ex +++ b/lib/phronesis/tracing_interpreter.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.TracingInterpreter do diff --git a/lib/phronesis/type_checker.ex b/lib/phronesis/type_checker.ex index 7763da3..d867534 100644 --- a/lib/phronesis/type_checker.ex +++ b/lib/phronesis/type_checker.ex @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.TypeChecker do diff --git a/manifest.scm b/manifest.scm new file mode 100644 index 0000000..dd942c7 --- /dev/null +++ b/manifest.scm @@ -0,0 +1,24 @@ +;;; SPDX-License-Identifier: MPL-2.0 +;;; manifest.scm — Generic Guix manifest for RSR-compliant projects +;;; +;;; Usage: +;;; guix shell -m manifest.scm +;;; + +(specifications->manifest + '(;; Core development tools + "git" + "just" + "nickel" + "curl" + "bash" + "coreutils" + + ;; Documentation + "asciidoctor" + "pandoc" + + ;; Common build dependencies + "openssl" + "zlib" + "pkg-config")) diff --git a/mix.exs b/mix.exs index 77582dd..6f00619 100644 --- a/mix.exs +++ b/mix.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.MixProject do diff --git a/spec/README.adoc b/spec/README.adoc index a49621e..a26b7d2 100644 --- a/spec/README.adoc +++ b/spec/README.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // @taxonomy: spec/index = phronesis — Specification Directory :toc: diff --git a/spec/system-specs.md b/spec/system-specs.md index 984d901..4def235 100644 --- a/spec/system-specs.md +++ b/spec/system-specs.md @@ -1,3 +1,7 @@ + # SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) diff --git a/src/abi/Types.idr b/src/abi/Types.idr index da5bd4c..ce27836 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 -- Phronesis Type Safety Proofs module Types diff --git a/syntax/README.md b/syntax/README.md index 8cd7827..5d26f2b 100644 --- a/syntax/README.md +++ b/syntax/README.md @@ -1,3 +1,7 @@ + # Phronesis Syntax Highlighting This directory contains syntax highlighting definitions for various editors. diff --git a/syntax/linguist.yml b/syntax/linguist.yml index a6e7d5a..de719a1 100644 --- a/syntax/linguist.yml +++ b/syntax/linguist.yml @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0 +// Owner: Jonathan D.A. Jewell # GitHub Linguist language definition for Phronesis # Place this in .github/linguist.yml or submit to github/linguist diff --git a/test/analyzer_test.exs b/test/analyzer_test.exs index 1cb8764..0f77012 100644 --- a/test/analyzer_test.exs +++ b/test/analyzer_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Phronesis.AnalyzerTest do use ExUnit.Case, async: true alias Phronesis.Analyzer diff --git a/test/compiler_test.exs b/test/compiler_test.exs index e169e54..d04a629 100644 --- a/test/compiler_test.exs +++ b/test/compiler_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.CompilerTest do diff --git a/test/conformance_test.exs b/test/conformance_test.exs index 5a6f831..b9f1a25 100644 --- a/test/conformance_test.exs +++ b/test/conformance_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.ConformanceTest do diff --git a/test/consensus_test.exs b/test/consensus_test.exs index ae7f275..27b26d7 100644 --- a/test/consensus_test.exs +++ b/test/consensus_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.ConsensusTest do diff --git a/test/cst_test.exs b/test/cst_test.exs index 8e83125..981362b 100644 --- a/test/cst_test.exs +++ b/test/cst_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2026 Phronesis Contributors defmodule Phronesis.CSTTest do diff --git a/test/debugger_test.exs b/test/debugger_test.exs index daee1ed..cb9fa4e 100644 --- a/test/debugger_test.exs +++ b/test/debugger_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # Debugger Tests defmodule Phronesis.DebuggerTest do diff --git a/test/diagnostics_test.exs b/test/diagnostics_test.exs index b2a53e2..0f366a4 100644 --- a/test/diagnostics_test.exs +++ b/test/diagnostics_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.DiagnosticsTest do diff --git a/test/doc_generator_test.exs b/test/doc_generator_test.exs index d133780..5bc3f5b 100644 --- a/test/doc_generator_test.exs +++ b/test/doc_generator_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Phronesis.DocGeneratorTest do use ExUnit.Case, async: true alias Phronesis.DocGenerator diff --git a/test/e2e_test.exs b/test/e2e_test.exs index ecf7f6a..ac0dbff 100644 --- a/test/e2e_test.exs +++ b/test/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 # # Phronesis — End-to-End Tests # diff --git a/test/fuzz/lexer_fuzz_test.exs b/test/fuzz/lexer_fuzz_test.exs index 8df5824..d2cc1f8 100644 --- a/test/fuzz/lexer_fuzz_test.exs +++ b/test/fuzz/lexer_fuzz_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2026 Phronesis Contributors # # Fuzz test for the Phronesis lexer. diff --git a/test/fuzz/parser_fuzz_test.exs b/test/fuzz/parser_fuzz_test.exs index 15bf1bd..d9521f7 100644 --- a/test/fuzz/parser_fuzz_test.exs +++ b/test/fuzz/parser_fuzz_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2026 Phronesis Contributors # # Fuzz test for the Phronesis parser. diff --git a/test/incremental_lexer_test.exs b/test/incremental_lexer_test.exs index 6111e48..4b9bf57 100644 --- a/test/incremental_lexer_test.exs +++ b/test/incremental_lexer_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell defmodule Phronesis.IncrementalLexerTest do diff --git a/test/incremental_parser_test.exs b/test/incremental_parser_test.exs index a34e25a..b7536ca 100644 --- a/test/incremental_parser_test.exs +++ b/test/incremental_parser_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell defmodule Phronesis.IncrementalParserTest do diff --git a/test/interpreter_test.exs b/test/interpreter_test.exs index a9db88b..857f4d8 100644 --- a/test/interpreter_test.exs +++ b/test/interpreter_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.InterpreterTest do diff --git a/test/lexer_test.exs b/test/lexer_test.exs index d871eaf..d652c6f 100644 --- a/test/lexer_test.exs +++ b/test/lexer_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.LexerTest do diff --git a/test/lexer_v02_test.exs b/test/lexer_v02_test.exs index be53ace..0d7fc64 100644 --- a/test/lexer_v02_test.exs +++ b/test/lexer_v02_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # Tests for Phronesis Lexer v0.2.x features defmodule Phronesis.LexerV02Test do diff --git a/test/lsp_integration_test.exs b/test/lsp_integration_test.exs index 9366fea..3e6ea29 100644 --- a/test/lsp_integration_test.exs +++ b/test/lsp_integration_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # LSP Integration Tests defmodule Phronesis.LSPIntegrationTest do diff --git a/test/package_manager_test.exs b/test/package_manager_test.exs index 6fdd799..fe9b032 100644 --- a/test/package_manager_test.exs +++ b/test/package_manager_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell defmodule Phronesis.PackageManagerTest do use ExUnit.Case, async: false alias Phronesis.PackageManager diff --git a/test/parser_test.exs b/test/parser_test.exs index c383a98..881aea9 100644 --- a/test/parser_test.exs +++ b/test/parser_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.ParserTest do diff --git a/test/phronesis_test.exs b/test/phronesis_test.exs index 0e015fe..6136fa6 100644 --- a/test/phronesis_test.exs +++ b/test/phronesis_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule PhronesisTest do diff --git a/test/profiler_test.exs b/test/profiler_test.exs index 7dedd99..ccc6c9a 100644 --- a/test/profiler_test.exs +++ b/test/profiler_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # Profiler Tests defmodule Phronesis.ProfilerTest do diff --git a/test/property_test.exs b/test/property_test.exs index 72804ab..8f79c6e 100644 --- a/test/property_test.exs +++ b/test/property_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 # # Phronesis — Property-Based (P2P) Tests # diff --git a/test/state_test.exs b/test/state_test.exs index c41e7fa..83eb548 100644 --- a/test/state_test.exs +++ b/test/state_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.StateTest do diff --git a/test/test_helper.exs b/test/test_helper.exs index 869559e..ee359bc 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -1 +1,3 @@ +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell ExUnit.start() diff --git a/test/trace_test.exs b/test/trace_test.exs index 83ca433..97417c7 100644 --- a/test/trace_test.exs +++ b/test/trace_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.TraceTest do diff --git a/test/tracing_interpreter_test.exs b/test/tracing_interpreter_test.exs index afe5615..0801af9 100644 --- a/test/tracing_interpreter_test.exs +++ b/test/tracing_interpreter_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.TracingInterpreterTest do diff --git a/test/type_checker_test.exs b/test/type_checker_test.exs index 6b3252d..9c92189 100644 --- a/test/type_checker_test.exs +++ b/test/type_checker_test.exs @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell # SPDX-FileCopyrightText: 2025 Phronesis Contributors defmodule Phronesis.TypeCheckerTest do diff --git a/test_e2e.exs b/test_e2e.exs index 1d73793..c7f17f5 100644 --- a/test_e2e.exs +++ b/test_e2e.exs @@ -1,6 +1,7 @@ +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell #!/usr/bin/env elixir -# SPDX-License-Identifier: MPL-2.0 # End-to-end test of phronesis policy execution Mix.install([]) diff --git a/test_framework_demo.exs b/test_framework_demo.exs index 682520e..c2b2b35 100644 --- a/test_framework_demo.exs +++ b/test_framework_demo.exs @@ -1,6 +1,7 @@ +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell #!/usr/bin/env elixir -# SPDX-License-Identifier: MPL-2.0 # Demo of phronesis testing framework Mix.install([]) diff --git a/test_stdlib.exs b/test_stdlib.exs index 04b08ec..0e9fe00 100644 --- a/test_stdlib.exs +++ b/test_stdlib.exs @@ -1,6 +1,7 @@ +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) Jonathan D.A. Jewell #!/usr/bin/env elixir -# SPDX-License-Identifier: MPL-2.0 # Test script for phronesis standard library Mix.install([]) diff --git a/verification/README.adoc b/verification/README.adoc index 4e7bdbb..9390fbc 100644 --- a/verification/README.adoc +++ b/verification/README.adoc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Jonathan D.A. Jewell // @taxonomy: verification/index = phronesis — Verification Directory :toc: diff --git a/wiki/Architecture-Lexer.md b/wiki/Architecture-Lexer.md index 667a38a..c0154d1 100644 --- a/wiki/Architecture-Lexer.md +++ b/wiki/Architecture-Lexer.md @@ -1,3 +1,7 @@ + # Architecture: Lexer The tokenizer component of the Phronesis frontend. diff --git a/wiki/Architecture-Overview.md b/wiki/Architecture-Overview.md index 43005fd..184fefc 100644 --- a/wiki/Architecture-Overview.md +++ b/wiki/Architecture-Overview.md @@ -1,3 +1,7 @@ + # Architecture Overview High-level system architecture of the Phronesis policy language. diff --git a/wiki/CLI-Reference.md b/wiki/CLI-Reference.md index 5dbe0de..6120393 100644 --- a/wiki/CLI-Reference.md +++ b/wiki/CLI-Reference.md @@ -1,3 +1,7 @@ + # CLI Reference Command-line interface for Phronesis. diff --git a/wiki/Contributing.md b/wiki/Contributing.md index a7ccea0..1a1c75e 100644 --- a/wiki/Contributing.md +++ b/wiki/Contributing.md @@ -1,3 +1,7 @@ + # Contributing to Phronesis Thank you for your interest in contributing to Phronesis! This guide explains how to get involved. diff --git a/wiki/FAQ.md b/wiki/FAQ.md index ffa548a..a326786 100644 --- a/wiki/FAQ.md +++ b/wiki/FAQ.md @@ -1,3 +1,7 @@ + # Frequently Asked Questions Common questions about Phronesis. diff --git a/wiki/Formal-Semantics.md b/wiki/Formal-Semantics.md index a318a7d..b27ded6 100644 --- a/wiki/Formal-Semantics.md +++ b/wiki/Formal-Semantics.md @@ -1,3 +1,7 @@ + # Formal Semantics Mathematical specification of Phronesis operational semantics. diff --git a/wiki/Home.md b/wiki/Home.md index e996125..c92c50e 100644 --- a/wiki/Home.md +++ b/wiki/Home.md @@ -1,3 +1,7 @@ + # Phronesis Wiki > **Phronesis** - A consensus-gated policy language for network configuration diff --git a/wiki/Installation.md b/wiki/Installation.md index 05fd08d..59cc786 100644 --- a/wiki/Installation.md +++ b/wiki/Installation.md @@ -1,3 +1,7 @@ + # Installation This guide covers installing Phronesis on various platforms. diff --git a/wiki/Language-Overview.md b/wiki/Language-Overview.md index da7e726..76faf21 100644 --- a/wiki/Language-Overview.md +++ b/wiki/Language-Overview.md @@ -1,3 +1,7 @@ + # Language Overview Phronesis is a minimal, declarative policy language designed for network configuration with formal safety guarantees. diff --git a/wiki/Quick-Start.md b/wiki/Quick-Start.md index 95b03af..1793a5e 100644 --- a/wiki/Quick-Start.md +++ b/wiki/Quick-Start.md @@ -1,3 +1,7 @@ + # Quick Start Get up and running with Phronesis in 5 minutes. diff --git a/wiki/Reference-Grammar.md b/wiki/Reference-Grammar.md index 8ffac57..f13eebf 100644 --- a/wiki/Reference-Grammar.md +++ b/wiki/Reference-Grammar.md @@ -1,3 +1,7 @@ + # Grammar Reference Complete formal grammar for the Phronesis policy language in EBNF. diff --git a/wiki/Stdlib-BGP.md b/wiki/Stdlib-BGP.md index aaecfed..1e89c0b 100644 --- a/wiki/Stdlib-BGP.md +++ b/wiki/Stdlib-BGP.md @@ -1,3 +1,7 @@ + # Std.BGP Border Gateway Protocol (BGP) operations module. diff --git a/wiki/Stdlib-Consensus.md b/wiki/Stdlib-Consensus.md index 6dc1621..7b9ec91 100644 --- a/wiki/Stdlib-Consensus.md +++ b/wiki/Stdlib-Consensus.md @@ -1,3 +1,7 @@ + # Std.Consensus Distributed consensus and voting module. diff --git a/wiki/Stdlib-RPKI.md b/wiki/Stdlib-RPKI.md index fb09aa4..6acf019 100644 --- a/wiki/Stdlib-RPKI.md +++ b/wiki/Stdlib-RPKI.md @@ -1,3 +1,7 @@ + # Std.RPKI Resource Public Key Infrastructure (RPKI) validation module. diff --git a/wiki/Stdlib-Temporal.md b/wiki/Stdlib-Temporal.md index 1e64b0b..9d1dbd5 100644 --- a/wiki/Stdlib-Temporal.md +++ b/wiki/Stdlib-Temporal.md @@ -1,3 +1,7 @@ + # Std.Temporal Time-based constraints and temporal operations module. diff --git a/wiki/Syntax-Reference.md b/wiki/Syntax-Reference.md index f788e0b..44bd44a 100644 --- a/wiki/Syntax-Reference.md +++ b/wiki/Syntax-Reference.md @@ -1,3 +1,7 @@ + # Syntax Reference Complete syntax reference for the Phronesis policy language. diff --git a/wiki/Testing.md b/wiki/Testing.md index 7649163..dc740f4 100644 --- a/wiki/Testing.md +++ b/wiki/Testing.md @@ -1,3 +1,7 @@ + # Testing Testing framework and best practices for Phronesis policies. diff --git a/wiki/Tutorial-BGP-Security.md b/wiki/Tutorial-BGP-Security.md index b86d0d9..f804d4c 100644 --- a/wiki/Tutorial-BGP-Security.md +++ b/wiki/Tutorial-BGP-Security.md @@ -1,3 +1,7 @@ + # Tutorial: BGP Security Policy Learn to create comprehensive BGP security policies with Phronesis. diff --git a/wiki/Types.md b/wiki/Types.md index 19563f9..9e62ec9 100644 --- a/wiki/Types.md +++ b/wiki/Types.md @@ -1,3 +1,7 @@ + # Types Phronesis is dynamically typed with a small set of value types.