diff --git a/.clinerules b/.clinerules index 18fd60b..1fc45c4 100644 --- a/.clinerules +++ b/.clinerules @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # Authoritative source: docs/practice/AI-CONVENTIONS.adoc # STARTUP: Read the repo deed (*_chora.deed at the repo root) first, then docs/status/ROADMAP.adoc. @@ -8,7 +8,7 @@ # All original code: MPL-2.0. # Never AGPL-3.0. MPL-2.0 only as platform-required fallback. # SPDX header required on every source file. -# Copyright: {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +# Copyright: Jonathan D.A. Jewell (hyperpolymath) # STATE FILES # No .a2ml file may exist anywhere: the format is retired. State, metadata, diff --git a/.cursorrules b/.cursorrules index d9cd1d2..8ad5b4c 100644 --- a/.cursorrules +++ b/.cursorrules @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # Authoritative source: docs/practice/AI-CONVENTIONS.adoc # Read the repo deed (*_chora.deed in the repo root) FIRST: canonical file locations @@ -7,7 +7,7 @@ # LICENSE # All original code: MPL-2.0 (SPDX header required on every file). -# Copyright: {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +# Copyright: Jonathan D.A. Jewell (hyperpolymath) # STATE FILES # No .a2ml file may exist anywhere: the format is retired. State, metadata, diff --git a/.devcontainer/Containerfile b/.devcontainer/Containerfile index f69a893..a6bb978 100644 --- a/.devcontainer/Containerfile +++ b/.devcontainer/Containerfile @@ -1,9 +1,9 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # -# Dev Container image for {{PROJECT_NAME}} +# Dev Container image for Resource Algebra # Base: Chainguard Wolfi (minimal, supply-chain-secure) -# Build: podman build -t {{PROJECT_NAME}}-dev -f .devcontainer/Containerfile . +# Build: podman build -t Resource Algebra-dev -f .devcontainer/Containerfile . # `:latest` suits a dev container (rebuilt daily); pin by digest # (...@sha256:) if you need a reproducible dev environment. # @@ -44,7 +44,7 @@ RUN set -eu; \ # devcontainer.json maps your host user onto it with --userns=keep-id. # Set workspace directory -WORKDIR /workspaces/{{PROJECT_NAME}} +WORKDIR /workspaces/Resource Algebra # Default shell ENV SHELL=/bin/bash diff --git a/.devcontainer/README.adoc b/.devcontainer/README.adoc index 6a0114e..5049142 100644 --- a/.devcontainer/README.adoc +++ b/.devcontainer/README.adoc @@ -1,7 +1,7 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell = Dev Container Usage -:author: {{AUTHOR}} <{{AUTHOR_EMAIL}}> +:author: Jonathan D.A. Jewell == Overview @@ -35,7 +35,7 @@ There are two configurations for the same image: . Install the *Dev Containers* extension (`ms-vscode-remote.remote-containers`). . Set `dev.containers.dockerPath` to `podman` in VS Code settings. . Open the repo folder, then choose **Reopen in Container** and pick - **{{PROJECT_NAME}} (Podman)**. + **Resource Algebra (Podman)**. == devcontainer CLI (Podman) @@ -47,7 +47,7 @@ bunx @devcontainers/cli up --workspace-folder . --docker-path podman == GitHub Codespaces . From the repository on GitHub, click **Code > Codespaces > ... > New with options**. -. Choose the **{{PROJECT_NAME}} (Docker / Codespaces)** configuration. +. Choose the **Resource Algebra (Docker / Codespaces)** configuration. == Gitpod @@ -56,6 +56,6 @@ bunx @devcontainers/cli up --workspace-folder . --docker-path podman == Customization -Replace the `{{PROJECT_NAME}}` placeholders in both `devcontainer.json` files and +Replace the `Resource Algebra` placeholders in both `devcontainer.json` files and the `Containerfile` with your actual project name. `just deps` runs automatically after the container is created. Run it again to check the environment. diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4fa5d13..c786fdb 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,13 +1,13 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) // -// Dev Container configuration for {{PROJECT_NAME}} — rootless Podman (default). +// Dev Container configuration for Resource Algebra — rootless Podman (default). // Works with: VS Code Dev Containers with `dev.containers.dockerPath` = podman, // and the devcontainer CLI (`devcontainer up --docker-path podman`). // Docker, GitHub Codespaces and Gitpod: use .devcontainer/docker/devcontainer.json // instead — Docker rejects the Podman-only `--userns=keep-id` below. { - "name": "{{PROJECT_NAME}} (Podman)", + "name": "Resource Algebra (Podman)", "build": { "dockerfile": "Containerfile", diff --git a/.devcontainer/docker/devcontainer.json b/.devcontainer/docker/devcontainer.json index fadee84..c818834 100644 --- a/.devcontainer/docker/devcontainer.json +++ b/.devcontainer/docker/devcontainer.json @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MPL-2.0 -// Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) // -// Dev Container configuration for {{PROJECT_NAME}} — Docker engines. +// Dev Container configuration for Resource Algebra — Docker engines. // Works with: GitHub Codespaces, Gitpod, and VS Code Dev Containers on Docker. // The estate default is rootless Podman: .devcontainer/devcontainer.json. // Same image (../Containerfile); only the user-namespace settings differ. { - "name": "{{PROJECT_NAME}} (Docker / Codespaces)", + "name": "Resource Algebra (Docker / Codespaces)", "build": { "dockerfile": "../Containerfile", diff --git a/.editorconfig b/.editorconfig index 808e241..b201e9e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MPL-2.0 # Hyperpolymath estate canonical .editorconfig (standards#343 phase 1) -# Canon lives in rsr-template-repo; do not add a per-repo name to this header. +# Canon lives in resource-algebra; do not add a per-repo name to this header. # https://editorconfig.org root = true diff --git a/.envrc b/.envrc index ec7a7ad..5088d33 100644 --- a/.envrc +++ b/.envrc @@ -13,7 +13,7 @@ if has guix && [ -f build/manifest.scm ]; then fi # Project environment variables -export PROJECT_NAME="{{PROJECT_NAME}}" +export PROJECT_NAME="Resource Algebra" export RSR_TIER="infrastructure" # Add non-secret project env vars above (e.g. DATABASE_URL, service endpoints). # Real secrets belong in .env (gitignored) — never commit them to .envrc. diff --git a/.gitattributes b/.gitattributes index c85fa95..2aa5ee5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MPL-2.0 # Hyperpolymath estate canonical .gitattributes (standards#343 phase 1) -# Canon lives in rsr-template-repo; do not add a per-repo name to this header. +# Canon lives in resource-algebra; do not add a per-repo name to this header. # # Only diff drivers that git actually ships are used here. MEASURED on git # 2.47.3: diff=go and diff=zig are NOT drivers (git silently falls back to the diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index c7f72ae..341359a 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -4,29 +4,9 @@ Copyright (c) Jonathan D.A. Jewell --> # Code of Conduct - - ## Our Pledge -We as members, contributors, and leaders pledge to make participation in rsr-template-repo a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, colour, religion, or sexual identity and orientation. +We as members, contributors, and leaders pledge to make participation in resource-algebra a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, colour, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. @@ -140,7 +120,7 @@ If you experience or witness unacceptable behaviour, or have any other concerns, | Method | Details | Best For | |--------|---------|----------| -| **Email** | {{CONDUCT_EMAIL}} | Detailed reports, sensitive matters | +| **Email** | j.d.a.jewell@open.ac.uk | Detailed reports, sensitive matters | | **Private Message** | Contact any maintainer directly | Quick questions, minor issues | **What to Include** @@ -155,8 +135,8 @@ If you experience or witness unacceptable behaviour, or have any other concerns, **What Happens Next** -1. You will receive acknowledgment within **{{RESPONSE_TIME}}** -2. The {{CONDUCT_TEAM}} will review the report +1. You will receive acknowledgment within **48 hours** +2. The Code of Conduct Committee will review the report 3. We may ask for additional information 4. We will determine appropriate action 5. We will inform you of the outcome (respecting others' privacy) @@ -172,7 +152,7 @@ All reports will be handled with discretion: ### Conflicts of Interest -If the {{CONDUCT_TEAM}} are themselves involved in an incident: +If the Code of Conduct Committee are themselves involved in an incident: - They will recuse themselves from the process - Another maintainer or external party will handle the report @@ -182,7 +162,7 @@ If the {{CONDUCT_TEAM}} are themselves involved in an incident: ## Enforcement Guidelines -The {{CONDUCT_TEAM}} will follow these guidelines in determining consequences: +The Code of Conduct Committee will follow these guidelines in determining consequences: ### 1. Correction @@ -242,13 +222,13 @@ For contributors with elevated access (Perimeter 2 or 1): If you believe an enforcement decision was made in error: 1. **Wait 7 days** after the decision (cooling-off period) -2. **Email** {{CONDUCT_EMAIL}} with subject line "Appeal: [Original Report ID]" +2. **Email** j.d.a.jewell@open.ac.uk with subject line "Appeal: [Original Report ID]" 3. **Explain** why you believe the decision should be reconsidered 4. **Provide** any new information not previously available **Appeals Process** -- Appeals are reviewed by the {{CONDUCT_TEAM}}, excluding anyone involved in the original +- Appeals are reviewed by the Code of Conduct Committee, excluding anyone involved in the original - You will receive a response within 14 days - The appeals decision is final - You may only appeal once per incident @@ -321,8 +301,8 @@ We thank these communities for their leadership in creating welcoming spaces. If you have questions about this Code of Conduct: -- Open a [Discussion](https://github.com/hyperpolymath/rsr-template-repo/discussions) (for general questions) -- Email {{CONDUCT_EMAIL}} (for private questions) +- Open a [Discussion](https://github.com/hyperpolymath/resource-algebra/discussions) (for general questions) +- Email j.d.a.jewell@open.ac.uk (for private questions) - Contact any maintainer directly --- @@ -335,4 +315,4 @@ We're all here because we care about this project. Let's make it a place where e --- -Last updated: {{CURRENT_YEAR}} · Based on Contributor Covenant 2.1 +Last updated: 2026 · Based on Contributor Covenant 2.1 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index ba9e87a..7f07d43 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -4,15 +4,15 @@ Copyright (c) Jonathan D.A. Jewell --> ``` # Clone the repository -git clone https://github.com/hyperpolymath/rsr-template-repo.git -cd rsr-template-repo +git clone https://github.com/hyperpolymath/resource-algebra.git +cd resource-algebra # Using Guix (recommended for reproducibility) guix shell -D -f build/guix.scm # Or using toolbox/distrobox -toolbox create rsr-template-repo-dev -toolbox enter rsr-template-repo-dev +toolbox create resource-algebra-dev +toolbox enter resource-algebra-dev # Install dependencies manually # Verify setup @@ -39,7 +39,7 @@ which is precisely why the map is now generated rather than typed. **Before reporting**: 1. Search existing issues -2. Check if it's already fixed in `{{MAIN_BRANCH}}` +2. Check if it's already fixed in `main` 3. Determine which perimeter the bug affects **When reporting**: @@ -72,10 +72,10 @@ Use the [feature request template](.github/ISSUE_TEMPLATE/feature_request.md) an Look for issues labelled: -- [`good first issue`](https://github.com/hyperpolymath/rsr-template-repo/labels/good%20first%20issue) — Simple Perimeter 3 tasks -- [`help wanted`](https://github.com/hyperpolymath/rsr-template-repo/labels/help%20wanted) — Community help needed -- [`documentation`](https://github.com/hyperpolymath/rsr-template-repo/labels/documentation) — Docs improvements -- [`perimeter-3`](https://github.com/hyperpolymath/rsr-template-repo/labels/perimeter-3) — Community sandbox scope +- [`good first issue`](https://github.com/hyperpolymath/resource-algebra/labels/good%20first%20issue) — Simple Perimeter 3 tasks +- [`help wanted`](https://github.com/hyperpolymath/resource-algebra/labels/help%20wanted) — Community help needed +- [`documentation`](https://github.com/hyperpolymath/resource-algebra/labels/documentation) — Docs improvements +- [`perimeter-3`](https://github.com/hyperpolymath/resource-algebra/labels/perimeter-3) — Community sandbox scope --- diff --git a/.github/GOVERNANCE.md b/.github/GOVERNANCE.md index 246a51a..4120cbd 100644 --- a/.github/GOVERNANCE.md +++ b/.github/GOVERNANCE.md @@ -4,13 +4,13 @@ Copyright (c) Jonathan D.A. Jewell --> # Project Governance -This document describes the governance model for **{{PROJECT_NAME}}**. +This document describes the governance model for **Resource Algebra**. --- ## Project Governance Model -{{PROJECT_NAME}} follows a **Benevolent Dictator For Life (BDFL)** governance model. +Resource Algebra follows a **Benevolent Dictator For Life (BDFL)** governance model. This model is well-suited for solo maintainers and small project teams where rapid, consistent decision-making is more valuable than formal consensus processes. @@ -157,4 +157,4 @@ with the community before adoption, even though the BDFL retains final authority --- -Copyright (c) {{CURRENT_YEAR}} {{OWNER}}. Licensed under MPL-2.0. +Copyright (c) 2026 hyperpolymath. Licensed under MPL-2.0. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 5e508a7..96604bf 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -6,8 +6,8 @@ blank_issues_enabled: true contact_links: - name: Security vulnerability - url: https://{{FORGE}}/{{OWNER}}/{{REPO}}/security/advisories/new + url: https://github.com/hyperpolymath/resource-algebra/security/advisories/new about: Report privately via a security advisory. Do NOT open a public issue. - name: Question or support request - url: https://{{FORGE}}/{{OWNER}}/{{REPO}}/discussions + url: https://github.com/hyperpolymath/resource-algebra/discussions about: Ask a question. See .github/SUPPORT.md for what to expect. diff --git a/.github/SECURITY.md b/.github/SECURITY.md index 9d376eb..7513e47 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -33,7 +33,7 @@ We take security seriously. We appreciate your efforts to responsibly disclose v The preferred method for reporting security vulnerabilities is through GitHub's Security Advisory feature: -1. Navigate to [Report a Vulnerability](https://github.com/hyperpolymath/rsr-template-repo/security/advisories/new) +1. Navigate to [Report a Vulnerability](https://github.com/hyperpolymath/resource-algebra/security/advisories/new) 2. Click **"Report a vulnerability"** 3. Complete the form with as much detail as possible 4. Submit — we'll receive a private notification @@ -51,7 +51,7 @@ If you cannot use GitHub Security Advisories, you may email us directly: | | | |---|---| -| **Email** | {{SECURITY_EMAIL}} | +| **Email** | j.d.a.jewell@open.ac.uk | This mailbox is not encrypted. For anything sensitive enough to need encryption, prefer GitHub Security Advisories above — the report stays private @@ -187,7 +187,7 @@ If we cannot reach agreement on disclosure timing, we default to 90 days from yo The following are within scope for security research: -- This repository (`hyperpolymath/rsr-template-repo`) and all its code +- This repository (`hyperpolymath/resource-algebra`) and all its code - Official releases and packages published from this repository - Documentation that could lead to security issues - Build and deployment configurations in this repository @@ -306,7 +306,7 @@ Recognition includes: To stay informed about security updates: - **Watch this repository**: Click "Watch" → "Custom" → Select "Security alerts" -- **GitHub Security Advisories**: Published at [Security Advisories](https://github.com/hyperpolymath/rsr-template-repo/security/advisories) +- **GitHub Security Advisories**: Published at [Security Advisories](https://github.com/hyperpolymath/resource-algebra/security/advisories) - **Release notes**: Security fixes noted in [CHANGELOG](../CHANGELOG.md) ### Update Policy @@ -332,7 +332,7 @@ To stay informed about security updates: ## Security Best Practices -When using rsr-template-repo, we recommend: +When using resource-algebra, we recommend: ### General @@ -354,7 +354,7 @@ When using rsr-template-repo, we recommend: ## Additional Resources -- [Security Advisories](https://github.com/hyperpolymath/rsr-template-repo/security/advisories) +- [Security Advisories](https://github.com/hyperpolymath/resource-algebra/security/advisories) - [Changelog](../CHANGELOG.md) - [Contributing Guidelines](CONTRIBUTING.md) - [CVE Database](https://cve.mitre.org/) @@ -366,8 +366,8 @@ When using rsr-template-repo, we recommend: | Purpose | Contact | |---------|---------| -| **Security issues** | [Report via GitHub](https://github.com/hyperpolymath/rsr-template-repo/security/advisories/new) or {{SECURITY_EMAIL}} | -| **General questions** | [GitHub Discussions](https://github.com/hyperpolymath/rsr-template-repo/discussions) | +| **Security issues** | [Report via GitHub](https://github.com/hyperpolymath/resource-algebra/security/advisories/new) or j.d.a.jewell@open.ac.uk | +| **General questions** | [GitHub Discussions](https://github.com/hyperpolymath/resource-algebra/discussions) | | **Other enquiries** | See [README](../README.adoc) for contact information | --- @@ -382,8 +382,8 @@ This security policy may be updated from time to time. Significant changes will --- -*Thank you for helping keep rsr-template-repo and its users safe.* 🛡️ +*Thank you for helping keep resource-algebra and its users safe.* 🛡️ --- -Last updated: {{CURRENT_YEAR}} · Policy version: 1.0.0 +Last updated: 2026 · Policy version: 1.0.0 diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md index b06c59a..ebd3040 100644 --- a/.github/SUPPORT.md +++ b/.github/SUPPORT.md @@ -2,6 +2,6 @@ For questions, help, and community discussion: -- GitHub Discussions: https://github.com/{{OWNER}}/{{REPO}}/discussions -- GitHub Issues: https://github.com/{{OWNER}}/{{REPO}}/issues +- GitHub Discussions: https://github.com/hyperpolymath/resource-algebra/discussions +- GitHub Issues: https://github.com/hyperpolymath/resource-algebra/issues - Documentation: See README.adoc in the root directory. diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index b109979..775ff30 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: CC-BY-SA-4.0 Copyright (c) Jonathan D.A. Jewell --> - + # Copilot Instructions @@ -17,7 +17,7 @@ Copyright (c) Jonathan D.A. Jewell - SPDX: `MPL-2.0` on all new files. - Never use AGPL-3.0. -- Copyright: `{{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}>` +- Copyright: `Jonathan D.A. Jewell (hyperpolymath) ` ## Code Style diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8327806..51e4769 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -41,42 +41,3 @@ updates: # "security only, not routine bumps". Pair with the # dependabot-automerge.yml workflow for low-touch security # maintenance. - - package-ecosystem: "cargo" - directory: "/" - schedule: - interval: "weekly" - open-pull-requests-limit: 0 - - # Elixir/Mix - - package-ecosystem: "mix" - directory: "/" - schedule: - interval: "weekly" - open-pull-requests-limit: 3 - groups: - dependency-updates: - patterns: ["*"] - - # Node.js/npm - - package-ecosystem: "npm" - directory: "/" - schedule: - interval: "weekly" - open-pull-requests-limit: 3 - groups: - dependency-updates: - patterns: ["*"] - - # Python/pip - - package-ecosystem: "pip" - directory: "/" - schedule: - interval: "weekly" - open-pull-requests-limit: 3 - groups: - dependency-updates: - patterns: ["*"] - - # NOTE: Nix is banned estate-wide — Guix is the sole package manager. - # Do not add a `nix` ecosystem here. Guix has no Dependabot ecosystem; - # pin Guix channels/manifests via build/ tooling instead. diff --git a/.github/hooks/validate-deed.sh b/.github/hooks/validate-deed.sh index 4acbc1d..226a27a 100755 --- a/.github/hooks/validate-deed.sh +++ b/.github/hooks/validate-deed.sh @@ -202,7 +202,7 @@ validate_deed() { # policies/*, integrations/*, …). Per the RSR convention these carry # identity structurally — owning repo + path + filename — not via an # in-file `name`/`agent-id`. This generalises the `.machine_readable/descriptiles/` - # rationale above to the whole tree: rsr-template-repo itself ships these + # rationale above to the whole tree: resource-algebra itself ships these # files without an in-file identity key, so requiring one produces # estate-wide false positives on every repo built from the canonical # template. Files outside `.machine_readable/` are still validated. diff --git a/.github/settings.yml b/.github/settings.yml index 46df341..17e68ef 100644 --- a/.github/settings.yml +++ b/.github/settings.yml @@ -12,10 +12,10 @@ # It carries NO `name`, `description`, `homepage` or `private` key, and it must # never gain one. The reason is a real incident, not a hypothetical: # -# This file previously read `name: "rsr-template-repo"`. probot/settings applies it on +# This file previously read `name: "resource-algebra"`. probot/settings applies it on # every push to the default branch, so it submitted the literal string -# `rsr-template-repo` as the repository name. GitHub sanitises an invalid name by -# collapsing each run of illegal characters to a dash — `rsr-template-repo` became +# `resource-algebra` as the repository name. GitHub sanitises an invalid name by +# collapsing each run of illegal characters to a dash — `resource-algebra` became # `-REPO-`. The template renamed itself on every push, its old URL 404'd, and # it was mistaken for a deleted repository. `description` was likewise left # reading the literal `Canonical RSR (Rhodium Standard Repository) template — governance, CI/CD, machine-readable metadata, ABI/FFI seam and formal-verification scaffolding that hyperpolymath projects are instantiated from.` on the live repo. diff --git a/.github/workflows/actions.lock b/.github/workflows/actions.lock index 9cbb47a..36346cb 100644 --- a/.github/workflows/actions.lock +++ b/.github/workflows/actions.lock @@ -31,13 +31,13 @@ workflows: '.github/workflows/estate-rules.yml': - 'actions/checkout@v7.0.1' '.github/workflows/governance.yml': - - 'hyperpolymath/standards@da2c748aad55c1a1dcba00b60fe4a35017bc6540' + - 'hyperpolymath/standards@ae36881b5ff4b469fb904b66542ac226a15107f3' '.github/workflows/groove-check.yml': - 'actions/checkout@v7.0.1' '.github/workflows/guix-policy.yml': - 'actions/checkout@v7.0.1' '.github/workflows/hypatia-scan.yml': - - 'hyperpolymath/standards@da2c748aad55c1a1dcba00b60fe4a35017bc6540' + - 'hyperpolymath/standards@ae36881b5ff4b469fb904b66542ac226a15107f3' '.github/workflows/k9-validate.yml': - 'actions/checkout@v7.0.1' - 'hyperpolymath/k9-ecosystem@main' @@ -47,7 +47,7 @@ workflows: '.github/workflows/main-estate-audit.yml': - 'hyperpolymath/cicd-suite@55556cf5ba71ba744695861503c13148d3915a5d' '.github/workflows/mirror.yml': - - 'hyperpolymath/standards@da2c748aad55c1a1dcba00b60fe4a35017bc6540' + - 'hyperpolymath/standards@ae36881b5ff4b469fb904b66542ac226a15107f3' '.github/workflows/ossf-best-practices.yml': - 'actions/checkout@v7.0.1' '.github/workflows/pages.yml': @@ -74,11 +74,11 @@ workflows: '.github/workflows/runtime-policy.yml': - 'actions/checkout@v7.0.1' '.github/workflows/rust-ci.yml': - - 'hyperpolymath/standards@da2c748aad55c1a1dcba00b60fe4a35017bc6540' + - 'hyperpolymath/standards@ae36881b5ff4b469fb904b66542ac226a15107f3' '.github/workflows/scorecard.yml': - - 'hyperpolymath/standards@da2c748aad55c1a1dcba00b60fe4a35017bc6540' + - 'hyperpolymath/standards@ae36881b5ff4b469fb904b66542ac226a15107f3' '.github/workflows/secret-scanner.yml': - - 'hyperpolymath/standards@da2c748aad55c1a1dcba00b60fe4a35017bc6540' + - 'hyperpolymath/standards@ae36881b5ff4b469fb904b66542ac226a15107f3' '.github/workflows/security-policy.yml': - 'actions/checkout@v7.0.1' '.github/workflows/sonarqube.yml': @@ -140,16 +140,16 @@ dependencies: commit: 'sha1-9000827ccba6bdab643e8b6fd33ac0654aef8333' owner_id: 44036562 repo_id: 192626254 - 'actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a': - ref: '043fb46d1a93c77aae656e7c1c64a875d1fc6a0a' - commit: 'sha1-043fb46d1a93c77aae656e7c1c64a875d1fc6a0a' - owner_id: 44036562 - repo_id: 192625955 'actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f': ref: 'v7.0.0' commit: 'sha1-bbbca2ddaa5d8feaa63e36b76fdaad77386f024f' owner_id: 44036562 repo_id: 192625955 + 'actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9': + ref: 'v7.0.2' + commit: 'sha1-cf430e030ddbb5b0abf93d22962f4752f3646cd9' + owner_id: 44036562 + repo_id: 192625955 'actions/upload-artifact@v7.0.2': ref: 'v7.0.2' commit: 'sha1-cf430e030ddbb5b0abf93d22962f4752f3646cd9' @@ -167,9 +167,9 @@ dependencies: commit: 'sha1-25dd0e34f4fe68f24cc83900b1fe3fe149efef98' owner_id: 27347476 repo_id: 371068214 - 'dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772': - ref: '6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772' - commit: 'sha1-6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772' + 'dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f': + ref: 'v1' + commit: 'sha1-e2a55d2ffb04f378e9626c28d38b36d230d1e12f' owner_id: 1940490 repo_id: 260749683 'editorconfig-checker/action-editorconfig-checker@51f63319f592f97930c73d9c46184d20bd206393': @@ -197,11 +197,6 @@ dependencies: commit: 'sha1-b96794f015dfd88f77b49b1c93e0fa7110f94c63' owner_id: 9919 repo_id: 259445878 - 'github/codeql-action@cdf488f595d80d6e07e03d4674febd5ab45fa938': - ref: 'cdf488f595d80d6e07e03d4674febd5ab45fa938' - commit: 'sha1-cdf488f595d80d6e07e03d4674febd5ab45fa938' - owner_id: 9919 - repo_id: 259445878 'goto-bus-stop/setup-zig@abea47f85e598557f500fa1fd2ab7464fcb39406': ref: 'abea47f85e598557f500fa1fd2ab7464fcb39406' commit: 'sha1-abea47f85e598557f500fa1fd2ab7464fcb39406' @@ -240,19 +235,19 @@ dependencies: commit: 'sha1-c1c9fa07992a02c1fd3d67a0dc1b08cccb852aef' owner_id: 6759885 repo_id: 1352485172 - 'hyperpolymath/standards@da2c748aad55c1a1dcba00b60fe4a35017bc6540': - ref: 'da2c748aad55c1a1dcba00b60fe4a35017bc6540' - commit: 'sha1-da2c748aad55c1a1dcba00b60fe4a35017bc6540' + 'hyperpolymath/standards@ae36881b5ff4b469fb904b66542ac226a15107f3': + ref: 'ae36881b5ff4b469fb904b66542ac226a15107f3' + commit: 'sha1-ae36881b5ff4b469fb904b66542ac226a15107f3' owner_id: 6759885 repo_id: 1116521501 uses: - 'actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9' - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' - - 'actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a' - - 'dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772' + - 'actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9' + - 'dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f' - 'editorconfig-checker/action-editorconfig-checker@51f63319f592f97930c73d9c46184d20bd206393' - 'erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124' - - 'github/codeql-action@cdf488f595d80d6e07e03d4674febd5ab45fa938' + - 'github/codeql-action@b96794f015dfd88f77b49b1c93e0fa7110f94c63' - 'goto-bus-stop/setup-zig@abea47f85e598557f500fa1fd2ab7464fcb39406' - 'ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc' - 'swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6' diff --git a/.github/workflows/deed-validate.yml b/.github/workflows/deed-validate.yml index 5a985bd..0206245 100644 --- a/.github/workflows/deed-validate.yml +++ b/.github/workflows/deed-validate.yml @@ -50,7 +50,7 @@ jobs: :warning: **No .deed manifest found.** Every RSR-compliant repo should have a repo deed (`_chora.deed`) at its root. - Copy it from [rsr-template-repo](https://github.com/hyperpolymath/rsr-template-repo). Manifests are validated against the DEED grammar (standards `1-formats/deed/`). The `.a2ml` format is retired; no `.a2ml` file may exist. + Copy it from [resource-algebra](https://github.com/hyperpolymath/resource-algebra). Manifests are validated against the DEED grammar (standards `1-formats/deed/`). The `.a2ml` format is retired; no `.a2ml` file may exist. EOF else echo "## DEED Manifest Validation" >> "$GITHUB_STEP_SUMMARY" diff --git a/.github/workflows/dogfood-gate.yml b/.github/workflows/dogfood-gate.yml index 75dd9e9..675e3fd 100644 --- a/.github/workflows/dogfood-gate.yml +++ b/.github/workflows/dogfood-gate.yml @@ -58,7 +58,7 @@ jobs: :warning: **No .deed manifest found.** Every RSR-compliant repo should have a repo deed (`_chora.deed`) at its root. - Copy it from [rsr-template-repo](https://github.com/hyperpolymath/rsr-template-repo). Manifests are validated against the DEED grammar (standards `1-formats/deed/`). The `.a2ml` format is retired; no `.a2ml` file may exist. + Copy it from [resource-algebra](https://github.com/hyperpolymath/resource-algebra). Manifests are validated against the DEED grammar (standards `1-formats/deed/`). The `.a2ml` format is retired; no `.a2ml` file may exist. EOF else echo "## DEED Manifest Validation" >> "$GITHUB_STEP_SUMMARY" @@ -328,7 +328,7 @@ jobs: # The canon<->spine binding. hyperpolymath/standards publishes canon.lock: the # released identity of the law, with a sha256 per law artefact. This repo # declares the SAME hashes in the `(canon …)` clause of its repo deed, - # rsr-template-repo_chora.deed. + # resource-algebra_chora.deed. # # The pin used to live in a retired .a2ml profile, which D43 froze, so it # could not follow canon 2.1.2 and this job went red on every PR (#215). The @@ -614,7 +614,7 @@ jobs: | eclexiaiser | ${ECLEX_STATUS} | Energy/carbon budgets for container services | --- - *Generated by the [Dogfood Gate](https://github.com/hyperpolymath/rsr-template-repo) workflow.* + *Generated by the [Dogfood Gate](https://github.com/hyperpolymath/resource-algebra) workflow.* *Dogfooding is guinea pig fooding — we test our tools on ourselves.* EOF diff --git a/.github/workflows/governance.yml b/.github/workflows/governance.yml index 73366ea..45ab7dd 100644 --- a/.github/workflows/governance.yml +++ b/.github/workflows/governance.yml @@ -18,4 +18,4 @@ permissions: jobs: governance: - uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@da2c748aad55c1a1dcba00b60fe4a35017bc6540 + uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@ae36881b5ff4b469fb904b66542ac226a15107f3 diff --git a/.github/workflows/hypatia-scan.yml b/.github/workflows/hypatia-scan.yml index 997e008..394053d 100644 --- a/.github/workflows/hypatia-scan.yml +++ b/.github/workflows/hypatia-scan.yml @@ -27,4 +27,4 @@ permissions: jobs: hypatia: - uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@da2c748aad55c1a1dcba00b60fe4a35017bc6540 + uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@ae36881b5ff4b469fb904b66542ac226a15107f3 diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml index 35c5683..268185a 100644 --- a/.github/workflows/mirror.yml +++ b/.github/workflows/mirror.yml @@ -13,7 +13,7 @@ permissions: contents: read jobs: mirror: - uses: hyperpolymath/standards/.github/workflows/mirror-reusable.yml@da2c748aad55c1a1dcba00b60fe4a35017bc6540 + uses: hyperpolymath/standards/.github/workflows/mirror-reusable.yml@ae36881b5ff4b469fb904b66542ac226a15107f3 # Explicit secrets map — no `secrets: inherit` (Hypatia WH008, alert #131). # All seven are the callee's complete optional contract (standards # mirror-reusable.yml@da2c748); behaviour is unchanged, future secrets diff --git a/.github/workflows/ossf-best-practices.yml b/.github/workflows/ossf-best-practices.yml index 695a842..76bc36c 100644 --- a/.github/workflows/ossf-best-practices.yml +++ b/.github/workflows/ossf-best-practices.yml @@ -72,7 +72,7 @@ jobs: fi # Project state is the (status …) clause of the repo deed - # (rsr-template-repo#209), which replaced descriptiles/STATE.a2ml. + # (resource-algebra#209), which replaced descriptiles/STATE.a2ml. if ! DEED=$(bash scripts/deed-field.sh --find .); then echo "::error::exactly one _chora.deed is required at the root" exit 1 diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml index 05369dd..45a2b08 100644 --- a/.github/workflows/rust-ci.yml +++ b/.github/workflows/rust-ci.yml @@ -16,4 +16,4 @@ permissions: contents: read jobs: rust-ci: - uses: hyperpolymath/standards/.github/workflows/rust-ci-reusable.yml@da2c748aad55c1a1dcba00b60fe4a35017bc6540 + uses: hyperpolymath/standards/.github/workflows/rust-ci-reusable.yml@ae36881b5ff4b469fb904b66542ac226a15107f3 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index f2ce703..5ce1f8f 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -16,7 +16,7 @@ permissions: jobs: scorecard: - uses: hyperpolymath/standards/.github/workflows/scorecard-reusable.yml@da2c748aad55c1a1dcba00b60fe4a35017bc6540 + uses: hyperpolymath/standards/.github/workflows/scorecard-reusable.yml@ae36881b5ff4b469fb904b66542ac226a15107f3 # Reusable called-workflow permissions are CAPPED by the caller's grants; # without security-events: write here the scorecard SARIF upload fails with # startup_failure (hypatia WF018). id-token: write enables OIDC publish. diff --git a/.github/workflows/secret-scanner.yml b/.github/workflows/secret-scanner.yml index 9a7b136..606b5c1 100644 --- a/.github/workflows/secret-scanner.yml +++ b/.github/workflows/secret-scanner.yml @@ -26,4 +26,4 @@ jobs: # is therefore the cap GitHub applies to the called workflow. permissions: contents: read - uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@da2c748aad55c1a1dcba00b60fe4a35017bc6540 + uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@ae36881b5ff4b469fb904b66542ac226a15107f3 diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index b2d14b0..5987816 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -3,7 +3,7 @@ # SonarQube Cloud (SonarCloud) static analysis. Analysis scope + exclusions live # in sonar-project.properties. Requires the SONAR_TOKEN repository secret # (Settings -> Secrets and variables -> Actions) and a SonarCloud project: -# https://sonarcloud.io/project/overview?id=hyperpolymath_rsr-template-repo +# https://sonarcloud.io/project/overview?id=hyperpolymath_resource-algebra # Mirrors the boj-server arrangement. # # WHY THE TOKEN GUARD (added 2026-07-28) diff --git a/.machine_readable/ai/PLACEHOLDERS.adoc b/.machine_readable/ai/PLACEHOLDERS.adoc index 3eb5054..1d32faf 100644 --- a/.machine_readable/ai/PLACEHOLDERS.adoc +++ b/.machine_readable/ai/PLACEHOLDERS.adoc @@ -20,16 +20,16 @@ validates the result, and runs k9-svc checks if available. ```bash # If you prefer manual replacement (run from repo root) -sed -i 's/{{AUTHOR}}/Jane Doe/g' $(grep -rl '{{AUTHOR}}' .) -sed -i 's/{{AUTHOR_EMAIL}}/jane@example.org/g' $(grep -rl '{{AUTHOR_EMAIL}}' .) -sed -i 's/{{OWNER}}/my-org/g' $(grep -rl '{{OWNER}}' .) -sed -i 's/{{PROJECT_NAME}}/my-project/g' $(grep -rl '{{PROJECT_NAME}}' .) -sed -i 's/{{PROJECT}}/MY_PROJECT/g' $(grep -rl '{{PROJECT}}' .) -sed -i 's/{{project}}/my_project/g' $(grep -rl '{{project}}' .) -sed -i 's/{{REPO}}/my-project/g' $(grep -rl '{{REPO}}' .) -sed -i 's/{{FORGE}}/github.com/g' $(grep -rl '{{FORGE}}' .) -sed -i "s/{{CURRENT_YEAR}}/$(date +%Y)/g" $(grep -rl '{{CURRENT_YEAR}}' .) -sed -i "s/{{CURRENT_DATE}}/$(date +%Y-%m-%d)/g" $(grep -rl '{{CURRENT_DATE}}' .) +sed -i 's/Jonathan D.A. Jewell/Jane Doe/g' $(grep -rl 'Jonathan D.A. Jewell' .) +sed -i 's/j.d.a.jewell@open.ac.uk/jane@example.org/g' $(grep -rl 'j.d.a.jewell@open.ac.uk' .) +sed -i 's/hyperpolymath/my-org/g' $(grep -rl 'hyperpolymath' .) +sed -i 's/Resource Algebra/my-project/g' $(grep -rl 'Resource Algebra' .) +sed -i 's/RESOURCE_ALGEBRA/MY_PROJECT/g' $(grep -rl 'RESOURCE_ALGEBRA' .) +sed -i 's/resource_algebra/my_project/g' $(grep -rl 'resource_algebra' .) +sed -i 's/resource-algebra/my-project/g' $(grep -rl 'resource-algebra' .) +sed -i 's/github.com/github.com/g' $(grep -rl 'github.com' .) +sed -i "s/2026/$(date +%Y)/g" $(grep -rl '2026' .) +sed -i "s/2026-10-14/$(date +%Y-%m-%d)/g" $(grep -rl '2026-10-14' .) ``` ## Placeholder Reference @@ -38,59 +38,59 @@ sed -i "s/{{CURRENT_DATE}}/$(date +%Y-%m-%d)/g" $(grep -rl '{{CURRENT_DATE}}' .) | Placeholder | Description | Example | Files | |---|---|---|---| -| `{{AUTHOR}}` | Full legal name | `Jane Doe` | SPDX headers (all files), MAINTAINERS.md, .mailmap, .reuse/dep5, docs/AI-CONVENTIONS.md | -| `{{AUTHOR_EMAIL}}` | Primary contact email | `jane@example.org` | SPDX headers (all files), .mailmap, .reuse/dep5, www/.well-known/humans.txt | +| `Jonathan D.A. Jewell` | Full legal name | `Jane Doe` | SPDX headers (all files), MAINTAINERS.md, .mailmap, .reuse/dep5, docs/AI-CONVENTIONS.md | +| `j.d.a.jewell@open.ac.uk` | Primary contact email | `jane@example.org` | SPDX headers (all files), .mailmap, .reuse/dep5, www/.well-known/humans.txt | | `{{AUTHOR_EMAIL_ALT}}` | Previous/secondary email (for .mailmap) | `old@example.com` | .mailmap | -| `{{AUTHOR_ORG}}` | Author's organization/affiliation | `Acme University` | project-metadata.k9.ncl | -| `{{AUTHOR_LAST}}` | Author surname (for citations) | `Doe` | docs/CITATIONS.adoc | -| `{{AUTHOR_FIRST}}` | Author first name (for citations) | `Jane` | docs/CITATIONS.adoc | -| `{{AUTHOR_INITIALS}}` | Author initials (for citations) | `J.` | docs/CITATIONS.adoc | +| `The Open University` | Author's organization/affiliation | `Acme University` | project-metadata.k9.ncl | +| `Jewell` | Author surname (for citations) | `Doe` | docs/CITATIONS.adoc | +| `Jonathan D.A.` | Author first name (for citations) | `Jane` | docs/CITATIONS.adoc | +| `J.` | Author initials (for citations) | `J.` | docs/CITATIONS.adoc | | `{{AUTHOR_ORCID}}` | Author ORCID iD, bare form; blank drops the line (default: `git config user.orcid`) | `0000-0002-1825-0097` | CITATION.cff | ### Project Identity | Placeholder | Description | Example | Files | |---|---|---|---| -| `{{PROJECT_NAME}}` | Human-readable project name | `My Project` | SECURITY.md, CODE_OF_CONDUCT.md, TOPOLOGY.md, docs/status/ROADMAP.adoc (via build/templates/ROADMAP.adoc.in), Justfile, GOVERNANCE.md, MAINTAINERS.md, devcontainer.json | -| `{{PROJECT_DESCRIPTION}}` | One-line description | `A tool for X` | README.adoc, build/container/Containerfile | -| `{{PROJECT}}` | Uppercase identifier (for Idris2 modules, C macros) | `MY_PROJECT` | ABI-FFI-README.md, src/interface/abi/*.idr, src/interface/ffi/*.zig | -| `{{project}}` | Lowercase identifier (for C symbols, filenames) | `my_project` | ABI-FFI-README.md, src/interface/ffi/*.zig | -| `{{REPO}}` | Repository name (slug) | `my-project` | CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, cliff.toml | -| `{{OWNER}}` | GitHub/GitLab org or username | `my-org` | SPDX headers, CONTRIBUTING.md, SECURITY.md, GOVERNANCE.md, MAINTAINERS.md, CODEOWNERS, mirror.yml, cliff.toml | -| `{{FORGE}}` | Git forge domain | `github.com` | CONTRIBUTING.md | +| `Resource Algebra` | Human-readable project name | `My Project` | SECURITY.md, CODE_OF_CONDUCT.md, TOPOLOGY.md, docs/status/ROADMAP.adoc (via build/templates/ROADMAP.adoc.in), Justfile, GOVERNANCE.md, MAINTAINERS.md, devcontainer.json | +| `The parametric grade algebra shared by the hyperpolymath type family` | One-line description | `A tool for X` | README.adoc, build/container/Containerfile | +| `RESOURCE_ALGEBRA` | Uppercase identifier (for Idris2 modules, C macros) | `MY_PROJECT` | ABI-FFI-README.md, src/interface/abi/*.idr, src/interface/ffi/*.zig | +| `resource_algebra` | Lowercase identifier (for C symbols, filenames) | `my_project` | ABI-FFI-README.md, src/interface/ffi/*.zig | +| `resource-algebra` | Repository name (slug) | `my-project` | CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, cliff.toml | +| `hyperpolymath` | GitHub/GitLab org or username | `my-org` | SPDX headers, CONTRIBUTING.md, SECURITY.md, GOVERNANCE.md, MAINTAINERS.md, CODEOWNERS, mirror.yml, cliff.toml | +| `github.com` | Git forge domain | `github.com` | CONTRIBUTING.md | ### Dates | Placeholder | Description | Example | Files | |---|---|---|---| -| `{{CURRENT_YEAR}}` | Current year | `2026` | SPDX headers (all files), GOVERNANCE.md, MAINTAINERS.md | -| `{{CURRENT_DATE}}` | Current date (ISO) | `2026-02-14` | `*_chora.deed` (via build/templates/identity.deed.in), MAINTAINERS.md | -| `{{DATE}}` | Last updated date | `2026-02-14` | TOPOLOGY.md, THREAT-MODEL.md | +| `2026` | Current year | `2026` | SPDX headers (all files), GOVERNANCE.md, MAINTAINERS.md | +| `2026-10-14` | Current date (ISO) | `2026-02-14` | `*_chora.deed` (via build/templates/identity.deed.in), MAINTAINERS.md | +| `2026-10-14` | Last updated date | `2026-02-14` | TOPOLOGY.md, THREAT-MODEL.md | ### Contact & Security | Placeholder | Description | Example | Files | |---|---|---|---| -| `{{SECURITY_EMAIL}}` | Security contact email | `security@example.org` | SECURITY.md | +| `j.d.a.jewell@open.ac.uk` | Security contact email | `security@example.org` | SECURITY.md | | `{{PGP_FINGERPRINT}}` | 40-char PGP fingerprint | `ABCD 1234 ...` | SECURITY.md | | `{{PGP_KEY_URL}}` | URL to public PGP key | `https://keys.openpgp.org/...` | SECURITY.md | -| `{{WEBSITE}}` | Project website | `https://example.org` | SECURITY.md | -| `{{CONDUCT_EMAIL}}` | Conduct reports email | `conduct@example.org` | CODE_OF_CONDUCT.md | -| `{{CONDUCT_TEAM}}` | Conduct committee name | `Code of Conduct Committee` | CODE_OF_CONDUCT.md | -| `{{RESPONSE_TIME}}` | SLA for initial response | `48 hours` | CODE_OF_CONDUCT.md | +| `https://github.com/hyperpolymath/resource-algebra` | Project website | `https://example.org` | SECURITY.md | +| `j.d.a.jewell@open.ac.uk` | Conduct reports email | `conduct@example.org` | CODE_OF_CONDUCT.md | +| `Code of Conduct Committee` | Conduct committee name | `Code of Conduct Committee` | CODE_OF_CONDUCT.md | +| `48 hours` | SLA for initial response | `48 hours` | CODE_OF_CONDUCT.md | ### Git | Placeholder | Description | Example | Files | |---|---|---|---| -| `{{MAIN_BRANCH}}` | Main branch name | `main` | CONTRIBUTING.md | +| `main` | Main branch name | `main` | CONTRIBUTING.md | ### Build | Placeholder | Description | Example | Files | |---|---|---|---| -| `{{LICENSE}}` | License name | `MPL-2.0` | ABI-FFI-README.md | -| `{{PROJECT_PURPOSE}}` | One-line project description | `FFI bridges between languages` | `*_chora.deed` `(anchor (identity))` :one-sentence (set from `{{PROJECT_DESCRIPTION}}` by `just repo-init`) | +| `MPL-2.0` | License name | `MPL-2.0` | ABI-FFI-README.md | +| `The parametric grade algebra shared by the hyperpolymath type family` | One-line project description | `FFI bridges between languages` | `*_chora.deed` `(anchor (identity))` :one-sentence (set from `The parametric grade algebra shared by the hyperpolymath type family` by `just repo-init`) | | `{{OPENSSF_BP_ID}}` | OpenSSF Best Practices numeric project ID (from registering at bestpractices.dev). Optional — leave blank until registered; `just repo-init` then surfaces it in the post-init "remaining placeholders" notice as a reminder. | `1234` | README.adoc (OpenSSF Best Practices badge) | ### Project Content & Onboarding (manual-fill, post-init) @@ -103,20 +103,20 @@ surfaces any left unfilled. | Placeholder | Description | Example | Files | |---|---|---|---| -| `{{PACKAGE_NAME}}` | Package / module name (slug) | `my-project` | docs/onboarding/QUICKSTART-MAINTAINER.adoc | -| `{{DESCRIPTION}}` | Short repo description (forge metadata) | `A tool for X` | .github/settings.yml | -| `{{LANG_STACK}}` | Language / toolchain stack | `Idris2 + Zig` | docs/onboarding/QUICKSTART-DEV.adoc | -| `{{BUILD_CMD}}` | Build command | `just build` | docs/onboarding/QUICKSTART-DEV.adoc | -| `{{TEST_CMD}}` | Test command | `just test` | docs/onboarding/QUICKSTART-DEV.adoc | -| `{{BUILD_OUTPUT_PATH}}` | Build artefact output path | `build/` | docs/onboarding/QUICKSTART-MAINTAINER.adoc | -| `{{DEPS}}` | Project dependencies summary | `Idris2 0.7, Zig 0.13` | docs/onboarding/QUICKSTART-MAINTAINER.adoc | -| `{{MUST_INVARIANTS}}` | Required project invariants | `no believe_me; totality on` | docs/onboarding/QUICKSTART-DEV.adoc | -| `{{MAIN_FUNCTION}}` | Primary function / purpose | `FFI bridge generation` | no file in this template (the retired Intentfile is now `.machine_readable/contractiles/intend/intend.k9.ncl`, which does not carry the token) | -| `{{TARGET_AUDIENCE}}` | Intended audience | `library authors` | no file in this template (the retired Intentfile is now `.machine_readable/contractiles/intend/intend.k9.ncl`, which does not carry the token) | +| `UNASSIGNED` | Package / module name (slug) | `my-project` | docs/onboarding/QUICKSTART-MAINTAINER.adoc | +| `The parametric grade algebra shared by the hyperpolymath type family` | Short repo description (forge metadata) | `A tool for X` | .github/settings.yml | +| `UNASSIGNED` | Language / toolchain stack | `Idris2 + Zig` | docs/onboarding/QUICKSTART-DEV.adoc | +| `UNASSIGNED` | Build command | `just build` | docs/onboarding/QUICKSTART-DEV.adoc | +| `UNASSIGNED` | Test command | `just test` | docs/onboarding/QUICKSTART-DEV.adoc | +| `UNASSIGNED` | Build artefact output path | `build/` | docs/onboarding/QUICKSTART-MAINTAINER.adoc | +| `UNASSIGNED` | Project dependencies summary | `Idris2 0.7, Zig 0.13` | docs/onboarding/QUICKSTART-MAINTAINER.adoc | +| `UNASSIGNED` | Required project invariants | `no believe_me; totality on` | docs/onboarding/QUICKSTART-DEV.adoc | +| `UNASSIGNED` | Primary function / purpose | `FFI bridge generation` | no file in this template (the retired Intentfile is now `.machine_readable/contractiles/intend/intend.k9.ncl`, which does not carry the token) | +| `UNASSIGNED` | Intended audience | `library authors` | no file in this template (the retired Intentfile is now `.machine_readable/contractiles/intend/intend.k9.ncl`, which does not carry the token) | | `{{EXPECTED_AUTHOR}}` | Expected author identity (trust anchor) | `hyperpolymath` | no file in this template (the retired Trustfile is now `.machine_readable/contractiles/trust/trust.k9.ncl`, which does not carry the token) | -| `{{PROJECT_UNIQUE_STRENGTH}}` | What this project does better than alternatives | `proof-carrying FFI` | `*_chora.deed` `(bot-directives (methodology (methodology (unique-strength))))` :description | -| `{{PROJECT_KIND}}` | Project kind / category | `library` | `*_chora.deed` `(anchor (identity))` :kind | -| `{{PROJECT_DOMAIN}}` | Project domain | `formal-methods` | `*_chora.deed` `(anchor (identity))` :domain | +| `UNASSIGNED` | What this project does better than alternatives | `proof-carrying FFI` | `*_chora.deed` `(bot-directives (methodology (methodology (unique-strength))))` :description | +| `UNASSIGNED` | Project kind / category | `library` | `*_chora.deed` `(anchor (identity))` :kind | +| `UNASSIGNED` | Project domain | `formal-methods` | `*_chora.deed` `(anchor (identity))` :domain | | `{{OPENSSF_PROJECT_ID}}` | OpenSSF Best Practices project ID (same value as `{{OPENSSF_BP_ID}}`) | `1234` | docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc | ### Repo deed (folded family-7 allocation manifest) diff --git a/.machine_readable/arrival-pack/README.adoc b/.machine_readable/arrival-pack/README.adoc index 8c85701..4c06831 100644 --- a/.machine_readable/arrival-pack/README.adoc +++ b/.machine_readable/arrival-pack/README.adoc @@ -24,7 +24,7 @@ Two halves of the generated region: position, constraints, golden path, state. The repo deed (`_chora.deed`) is the single source of truth; it took -over the former CLADE / ECOSYSTEM / AGENTIC / STATE records (rsr-template-repo#209), and +over the former CLADE / ECOSYSTEM / AGENTIC / STATE records (resource-algebra#209), and `extract.sh` reads it through `scripts/deed-field.sh`. The golden path comes from its `(anchor (golden-path))` clause. CLAUDE.md is a *view*. Content outside the `ARRIVAL-PACK:BEGIN/END` markers is hand-authorable and preserved. diff --git a/.machine_readable/arrival-pack/arrival-pack.ncl b/.machine_readable/arrival-pack/arrival-pack.ncl index 5306faf..8f8f378 100644 --- a/.machine_readable/arrival-pack/arrival-pack.ncl +++ b/.machine_readable/arrival-pack/arrival-pack.ncl @@ -73,6 +73,9 @@ Deny: **Nix, Python, Go, TypeScript, Deno, ReScript, AGPL**. (Guix, not Nix.) JavaScript runtime: **Bun** (package.json + bun.lock) > pnpm > npm (last resort, permitted). Deno is retired, not grandfathered (owner ruling 2026-08-26, standards#655): existing Deno projects migrate to Bun. Use plain JavaScript when this tooling is needed. TypeScript and ReScript migrate to AffineScript. +## Asking the owner +Put every question that needs the owner's decision through the selector (the AskUserQuestion tool), not as prose at the end of a report. Batch up to four per call, offer concrete options with the recommended one first, and say what each option would cause. + --- # This repo: `%{data.canonical_name}` · clade `%{data.prefixed_name}` diff --git a/.machine_readable/arrival-pack/claude-md.k9.ncl b/.machine_readable/arrival-pack/claude-md.k9.ncl index d4af629..16112e7 100644 --- a/.machine_readable/arrival-pack/claude-md.k9.ncl +++ b/.machine_readable/arrival-pack/claude-md.k9.ncl @@ -34,7 +34,7 @@ K9! # Inputs the projection reads (single source of truth). inputs = { # The repo deed (_chora.deed) is the only input; the golden path is - # its (anchor (golden-path)) clause (rsr-template-repo#209). + # its (anchor (golden-path)) clause (resource-algebra#209). descriptiles = [ "_chora.deed", ], diff --git a/.machine_readable/arrival-pack/extract.sh b/.machine_readable/arrival-pack/extract.sh index 717959c..20367d3 100755 --- a/.machine_readable/arrival-pack/extract.sh +++ b/.machine_readable/arrival-pack/extract.sh @@ -8,7 +8,7 @@ # (_chora.deed: identity, clade, lineage, status, maturity, ecosystem, # agentic, and the golden path in its (anchor) clause) into a single # deterministic JSON document on stdout. Every deed read goes through -# scripts/deed-field.sh; there are no .a2ml inputs (rsr-template-repo#209). +# scripts/deed-field.sh; there are no .a2ml inputs (resource-algebra#209). # # This is a READER only — it authors nothing. The deed remains the single # source of truth; arrival-pack.ncl renders this JSON into the CLAUDE.md region. diff --git a/.machine_readable/coaptation/README.adoc b/.machine_readable/coaptation/README.adoc index 17ed7bc..332a738 100644 --- a/.machine_readable/coaptation/README.adoc +++ b/.machine_readable/coaptation/README.adoc @@ -88,7 +88,7 @@ the "how far is too far" that proposes a re-anchor: `green` (nothing) / [cols="1,3"] |=== | `extract-clauses.sh` | Normative-side atomiser. Lifts the records of the `declaration` field of the six `/.k9.ncl` files (`nickel export` piped to `jq`) into `clauses.json` (stable id `verb.slug`). Reader only. -| `extract-facts.sh` | Descriptive-side atomiser. Projects the repo deed (through `scripts/deed-field.sh`), including its `(anchor …)` clause, into `facts.json` (stable id `family.key`). The family prefixes `clade.` `state.` `ecosystem.` `agentic.` name the deed clauses that replaced the retired CLADE / STATE / ECOSYSTEM / AGENTIC records (rsr-template-repo#209) and are kept so the witness map does not change. +| `extract-facts.sh` | Descriptive-side atomiser. Projects the repo deed (through `scripts/deed-field.sh`), including its `(anchor …)` clause, into `facts.json` (stable id `family.key`). The family prefixes `clade.` `state.` `ecosystem.` `agentic.` name the deed clauses that replaced the retired CLADE / STATE / ECOSYSTEM / AGENTIC records (resource-algebra#209) and are kept so the witness map does not change. | `witness-map.ncl` | The hand-authored *knowledge* layer: which fact witnesses which clause, under what predicate. The one file to review for honesty. | `grades.ncl` | Grade type per verb + aggregation tolerances. | `coapt.ncl` | The Yard comparator. Imports the atoms + map + grades; emits the receipt (`nickel export --format raw`). diff --git a/.machine_readable/coaptation/coapt.k9.ncl b/.machine_readable/coaptation/coapt.k9.ncl index d15eace..a29577c 100644 --- a/.machine_readable/coaptation/coapt.k9.ncl +++ b/.machine_readable/coaptation/coapt.k9.ncl @@ -45,7 +45,7 @@ K9! descriptiles = [ # The repo deed at the root (_chora.deed), read through # scripts/deed-field.sh; it replaced CLADE/STATE/ECOSYSTEM/AGENTIC.a2ml - # (rsr-template-repo#209). + # (resource-algebra#209). # Its (anchor …) clause replaced descriptiles/anchors/ANCHOR.a2ml. "*_chora.deed", ], diff --git a/.machine_readable/coaptation/coapt.ncl b/.machine_readable/coaptation/coapt.ncl index e480601..2d58e78 100644 --- a/.machine_readable/coaptation/coapt.ncl +++ b/.machine_readable/coaptation/coapt.ncl @@ -136,8 +136,8 @@ let contractile_prov = "intend@%{cp.intend} must@%{cp.must} trust@%{cp.trust} ad let descriptile_prov = "deed@%{fp.deed} anchor@%{fp.anchor}" in # repo name comes from the repo deed, not a hardcoded literal — this -# script is shared verbatim by every repo instantiated from rsr-template-repo, -# so a literal "rsr-template-repo" here would misreport every one of them. +# script is shared verbatim by every repo instantiated from resource-algebra, +# so a literal "resource-algebra" here would misreport every one of them. let repo_name = (lookup "clade.canonical-name").value in let s = std.to_string in diff --git a/.machine_readable/coaptation/coapt.sh b/.machine_readable/coaptation/coapt.sh index 0e50366..8b371b3 100755 --- a/.machine_readable/coaptation/coapt.sh +++ b/.machine_readable/coaptation/coapt.sh @@ -46,7 +46,7 @@ case "$MODE" in basis="$CO/receipts/reanchor-basis.toml" # repo name from the repo deed, not a hardcoded literal — this # script is shared verbatim by every repo instantiated from - # rsr-template-repo, so a literal "rsr-template-repo" here would + # resource-algebra, so a literal "resource-algebra" here would # misreport every one of them. repo_name="$(bash "$ROOT/scripts/deed-field.sh" "$(bash "$ROOT/scripts/deed-field.sh" --find "$ROOT")" "" canonical-name)" { diff --git a/.machine_readable/coaptation/extract-facts.sh b/.machine_readable/coaptation/extract-facts.sh index f0f40f8..43c77af 100755 --- a/.machine_readable/coaptation/extract-facts.sh +++ b/.machine_readable/coaptation/extract-facts.sh @@ -6,7 +6,7 @@ # # Step 1 of the build path (descriptile half): give each descriptive fact a # STABLE ID. Reads this repo's deed (_chora.deed, which took over -# CLADE / STATE / ECOSYSTEM / AGENTIC .a2ml in rsr-template-repo#209) through +# CLADE / STATE / ECOSYSTEM / AGENTIC .a2ml in resource-algebra#209) through # scripts/deed-field.sh, including its (anchor …) clause (which took over # descriptiles/anchors/ANCHOR.a2ml), and projects the # fields that can bear witness to contractile obligations into one diff --git a/.machine_readable/coaptation/receipts/latest.toml b/.machine_readable/coaptation/receipts/latest.toml index e3e84bb..1e4f433 100644 --- a/.machine_readable/coaptation/receipts/latest.toml +++ b/.machine_readable/coaptation/receipts/latest.toml @@ -5,7 +5,7 @@ [receipt] schema = "hyperpolymath.coaptation/1" -repo = "rsr-template-repo" +repo = "resource-algebra" band = "amber" proposed-action = "advisory — soft drift within bands (posture/intend). Open an advisory issue; no re-anchor." diff --git a/.machine_readable/coaptation/witness-map.ncl b/.machine_readable/coaptation/witness-map.ncl index 025d42c..1ce8dab 100644 --- a/.machine_readable/coaptation/witness-map.ncl +++ b/.machine_readable/coaptation/witness-map.ncl @@ -35,7 +35,7 @@ }, # must.six-directory-present has NO descriptile witness. Its probe needs # descriptiles/PLAYBOOK + NEUROSYM and exactly one deed, and no fact here - # attests that: state and ecosystem are deed clauses since rsr-template-repo#209, + # attests that: state and ecosystem are deed clauses since resource-algebra#209, # and the anchor facts come from the deed. It is probe-deferred to the Hunt tier. # --- TRUST: deliberately NO descriptile witness. --- @@ -56,15 +56,15 @@ }, # --- ADJUST: accessibility/hygiene posture (advisory; never gates) --- - # The ANCHOR identity block still carries {{PROJECT_NAME}}; for the template + # The ANCHOR identity block still carries Resource Algebra; for the template # itself that is expected, but it is honestly a posture dip worth surfacing. "adjust.placeholder-drift" = { kind = "descriptile", witnesses = [{ fact = "anchor.project", op = 'not_contains, arg = "{{" }], - note = "deed (anchor (identity :project)) is un-substituted ({{PROJECT_NAME}}) ⇒ posture dip", + note = "deed (anchor (identity :project)) is un-substituted (Resource Algebra) ⇒ posture dip", }, - # --- BUST: deliberately NO descriptile witness since rsr-template-repo#209. --- + # --- BUST: deliberately NO descriptile witness since resource-algebra#209. --- # The bust entries used to read STATE.a2ml open-failures / last-result. Those # were hand-written values ("0", "unknown") that no maintenance run ever # updated, and the deed has no such field, so there is no descriptive evidence diff --git a/.machine_readable/compliance/reuse/dep5 b/.machine_readable/compliance/reuse/dep5 index 637157c..50bb985 100644 --- a/.machine_readable/compliance/reuse/dep5 +++ b/.machine_readable/compliance/reuse/dep5 @@ -1,56 +1,56 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: {{PROJECT_NAME}} -Upstream-Contact: {{AUTHOR}} <{{AUTHOR_EMAIL}}> -Source: https://github.com/{{OWNER}}/{{REPO}} +Upstream-Name: Resource Algebra +Upstream-Contact: Jonathan D.A. Jewell +Source: https://github.com/hyperpolymath/resource-algebra # Default: all files are MPL-2.0 Files: * -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: MPL-2.0 # Configuration files that cannot carry headers Files: .editorconfig .gitignore .gitattributes .tool-versions .mailmap -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: MPL-2.0 # Machine-readable state files Files: .machine_readable/*.a2ml -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: MPL-2.0 # Bot directives Files: .machine_readable/bot_directives/* -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: MPL-2.0 # Contractiles Files: .machine_readable/contractiles/* -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: MPL-2.0 # GitHub/CI configuration Files: .github/* .github/**/* -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: MPL-2.0 # Generated files Files: generated/* -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: MPL-2.0 # Lockfiles and auto-generated Files: *.lock Cargo.lock flake.lock -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: MPL-2.0 # Devcontainer config (JSON, no comments) Files: .devcontainer/*.json -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: MPL-2.0 # Git-cliff config Files: cliff.toml -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: MPL-2.0 # Narrative documentation is CC-BY-SA-4.0 (estate Rule 1). @@ -58,5 +58,5 @@ License: MPL-2.0 # including the GitHub community-health .md files. Machine-readable .a2ml is a # different extension and stays MPL-2.0 per its stanza above. Files: *.adoc *.md -Copyright: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright: 2026 Jonathan D.A. Jewell (hyperpolymath) License: CC-BY-SA-4.0 diff --git a/.machine_readable/configs/eclexiaiser.toml b/.machine_readable/configs/eclexiaiser.toml index abc542e..f90fbe4 100644 --- a/.machine_readable/configs/eclexiaiser.toml +++ b/.machine_readable/configs/eclexiaiser.toml @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MPL-2.0 [project] -name = "{{REPO}}" +name = "resource-algebra" [[functions]] name = "build" diff --git a/.machine_readable/configs/git-cliff/cliff.toml b/.machine_readable/configs/git-cliff/cliff.toml index 5c39b48..4c07e51 100644 --- a/.machine_readable/configs/git-cliff/cliff.toml +++ b/.machine_readable/configs/git-cliff/cliff.toml @@ -1,12 +1,12 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # # git-cliff configuration for conventional commit changelog generation. # https://git-cliff.org/docs/configuration # # Placeholders — replace before first use: -# {{OWNER}} — GitHub organization or username -# {{REPO}} — GitHub repository name +# hyperpolymath — GitHub organization or username +# resource-algebra — GitHub repository name [changelog] # Changelog header @@ -21,7 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 # https://keats.github.io/tera/docs/#introduction body = """ {%- macro remote_url() -%} - https://github.com/{{OWNER}}/{{REPO}} + https://github.com/hyperpolymath/resource-algebra {%- endmacro -%} {% if version -%} @@ -57,7 +57,7 @@ body = """ # Template for the changelog footer footer = """ {%- macro remote_url() -%} - https://github.com/{{OWNER}}/{{REPO}} + https://github.com/hyperpolymath/resource-algebra {%- endmacro -%} {% for release in releases -%} diff --git a/.machine_readable/configs/stapeln.toml b/.machine_readable/configs/stapeln.toml index 7bf5d48..51aaead 100644 --- a/.machine_readable/configs/stapeln.toml +++ b/.machine_readable/configs/stapeln.toml @@ -1,16 +1,16 @@ # SPDX-License-Identifier: MPL-2.0 -# stapeln.toml — Layer-based container build for {{SERVICE_NAME}} +# stapeln.toml — Layer-based container build for resource-algebra # # stapeln builds containers as composable layers (German: "to stack"). # Each layer is independently cacheable, verifiable, and signable. [metadata] -name = "{{SERVICE_NAME}}" +name = "resource-algebra" version = "0.1.0" -description = "{{SERVICE_NAME}} container service" +description = "resource-algebra container service" author = "Jonathan D.A. Jewell " license = "MPL-2.0" -registry = "{{REGISTRY}}" +registry = "ghcr.io/hyperpolymath" [build] containerfile = "Containerfile" @@ -32,7 +32,7 @@ packages = [] cache = true [layers.build] -description = "{{SERVICE_NAME}} build" +description = "resource-algebra build" extends = "toolchain" commands = [] @@ -43,7 +43,7 @@ packages = ["ca-certificates", "curl"] copy-from = [ { layer = "build", src = "/app/", dst = "/app/" }, ] -entrypoint = ["/app/{{SERVICE_NAME}}"] +entrypoint = ["/app/resource-algebra"] user = "nonroot" # ── Security ─────────────────────────────────────────────────── diff --git a/.machine_readable/contractiles/Justfile b/.machine_readable/contractiles/Justfile index a83f204..375fc07 100644 --- a/.machine_readable/contractiles/Justfile +++ b/.machine_readable/contractiles/Justfile @@ -22,9 +22,9 @@ import? "build/contractile.just" mod provision 'build/just/provision.just' # Project metadata — customize these -project := "rsr-template-repo" +project := "resource-algebra" OWNER := "hyperpolymath" -REPO := "rsr-template-repo" +REPO := "resource-algebra" version := "0.1.0" tier := "infrastructure" # 1 | 2 | infrastructure @@ -408,7 +408,7 @@ import? "build/just/validate.just" # ═══════════════════════════════════════════════════════════════════════════════ # Repo state lives in the repo deed's (status …) and (maturity …) clauses -# (rsr-template-repo#209); the journal is docs/status/ROADMAP.adoc. There is +# (resource-algebra#209); the journal is docs/status/ROADMAP.adoc. There is # no last-updated stamp to touch: git log is the record of when it changed. # Show the lifecycle phase and maturity from the repo deed @@ -574,7 +574,7 @@ opsm: provision::opsm # Guided tour of key features tour: - @echo "=== rsr-template-repo Tour ===" + @echo "=== resource-algebra Tour ===" @echo "" @echo "1. Project structure:" @ls -la @@ -589,12 +589,12 @@ tour: # Open feedback channel with diagnostic context help-me: - @echo "=== rsr-template-repo Help ===" + @echo "=== resource-algebra Help ===" @echo "Platform: $(uname -s) $(uname -m)" @echo "Shell: $SHELL" @echo "" @echo "To report an issue:" - @echo " https://github.com/hyperpolymath/rsr-template-repo/issues/new" + @echo " https://github.com/hyperpolymath/resource-algebra/issues/new" @echo "" @echo "Include the output of 'just doctor' in your report." diff --git a/.machine_readable/contractiles/README.adoc b/.machine_readable/contractiles/README.adoc index 3402581..5a4075e 100644 --- a/.machine_readable/contractiles/README.adoc +++ b/.machine_readable/contractiles/README.adoc @@ -5,7 +5,7 @@ :sectnums: This directory contains the canonical contractile templates for the -hyperpolymath estate. `rsr-template-repo` mirrors the standards master +hyperpolymath estate. `resource-algebra` mirrors the standards master structure; copy `.machine_readable/contractiles/` into a new repo to establish a consistent operational, validation, trust, recovery, aspiration, and service-automation framework. diff --git a/.machine_readable/contractiles/adjust/adjust.k9.ncl b/.machine_readable/contractiles/adjust/adjust.k9.ncl index 8e5cef3..48fc252 100644 --- a/.machine_readable/contractiles/adjust/adjust.k9.ncl +++ b/.machine_readable/contractiles/adjust/adjust.k9.ncl @@ -67,7 +67,7 @@ let base = import "../_base.ncl" in signed_by = { user = "Jonathan D.A. Jewell", date = "2026-04-18", - context = "adjust trident — canonical template in rsr-template-repo. (Yard, advisory) authority pattern. Specialises in cumulative-drift catchment — tolerance bands + trend tracking + auto-fix-where-declared. Advisory (continue-with-warnings). Copy this trident into a new repo and define its drift tolerances and corrective actions.", + context = "adjust trident — canonical template in resource-algebra. (Yard, advisory) authority pattern. Specialises in cumulative-drift catchment — tolerance bands + trend tracking + auto-fix-where-declared. Advisory (continue-with-warnings). Copy this trident into a new repo and define its drift tolerances and corrective actions.", }, history = [ { date = "2026-04-18", event = "trident-born", note = "Adjustfile.a2ml and adjust.ncl pre-existed. This manifest + adjust.k9.ncl complete the trident. Exercises the Yard tier + advisory authority for the first time; on_exceeded = 'warn_and_attempt_fix rather than 'fail. adjust-specific track_drift_trend_over_sessions + flag_accelerating_drift." }, @@ -85,8 +85,8 @@ let base = import "../_base.ncl" in # Read by .machine_readable/coaptation/extract-clauses.sh. # ------------------------------------------------------------------- declaration = { - preamble = "# SPDX-License-Identifier: MPL-2.0\n# Adjustfile — Drift-tolerance contract for rsr-template-repo\n# Author: Jonathan D.A. Jewell \n#\n# Cumulative-drift catchment: tolerance bands + corrective actions.\n# Authority: advisory (Yard) — continue-with-warnings; auto_fix where deterministic.\n# Run with: adjust check\n# Fix with: adjust fix (applies deterministic patches; advisory otherwise)\n", - abstract = "Drift tolerances and corrective actions for rsr-template-repo. Unlike\nMUST (hard gate), ADJUST tracks cumulative drift against tolerance bands\nand proposes corrective actions. Advisory — it warns and trends, it does\nnot block.", + preamble = "# SPDX-License-Identifier: MPL-2.0\n# Adjustfile — Drift-tolerance contract for resource-algebra\n# Author: Jonathan D.A. Jewell \n#\n# Cumulative-drift catchment: tolerance bands + corrective actions.\n# Authority: advisory (Yard) — continue-with-warnings; auto_fix where deterministic.\n# Run with: adjust check\n# Fix with: adjust fix (applies deterministic patches; advisory otherwise)\n", + abstract = "Drift tolerances and corrective actions for resource-algebra. Unlike\nMUST (hard gate), ADJUST tracks cumulative drift against tolerance bands\nand proposes corrective actions. Advisory — it warns and trends, it does\nnot block.", prose = [ ], requirements = [ diff --git a/.machine_readable/contractiles/bust/bust.k9.ncl b/.machine_readable/contractiles/bust/bust.k9.ncl index 6b0df6b..113663e 100644 --- a/.machine_readable/contractiles/bust/bust.k9.ncl +++ b/.machine_readable/contractiles/bust/bust.k9.ncl @@ -69,7 +69,7 @@ let base = import "../_base.ncl" in signed_by = { user = "Jonathan D.A. Jewell", date = "2026-04-18", - context = "bust trident — canonical template in rsr-template-repo. Completes the blocking-authority triple (must + trust + bust). Specialises in deprecated-path-reintroduction catchment. Declares hard-stop / expiry / must-not-run conditions. Copy this trident into a new repo and declare its real breakage / expiry conditions.", + context = "bust trident — canonical template in resource-algebra. Completes the blocking-authority triple (must + trust + bust). Specialises in deprecated-path-reintroduction catchment. Declares hard-stop / expiry / must-not-run conditions. Copy this trident into a new repo and declare its real breakage / expiry conditions.", }, history = [ { date = "2026-04-18", event = "trident-born", note = "Bustfile.a2ml and bust.ncl pre-existed. This manifest + bust.k9.ncl complete the trident. Inherits the full negotiation+accountability schema from intend.k9.ncl v2.0.0 + trust/must extensions; adds flag_deprecated_reintroduction for C2-defense specificity." }, @@ -87,8 +87,8 @@ let base = import "../_base.ncl" in # Read by .machine_readable/coaptation/extract-clauses.sh. # ------------------------------------------------------------------- declaration = { - preamble = "# SPDX-License-Identifier: MPL-2.0\n# Bustfile — failure mode contractile for rsr-template-repo\n# Author: Jonathan D.A. Jewell \n#\n# Paired runner: bust.ncl\n# Verb: bust\n# Semantics: Every declared failure mode must have a working recovery path\n# that has been exercised. Status moves:\n# declared → drilled (probe run) → verified (recovery confirmed)\n# or → failing (recovery broken)\n#\n# CLI:\n# contractile bust check → list failure modes + recovery status\n# contractile bust drill → inject failures, verify recovery paths\n#\n# This repository: rsr-template-repo is the canonical template for RSR compliance.\n# Failure modes here relate to template distribution and substitution.\n", - abstract = "Bustfile for rsr-template-repo. Lists failure modes specific to the template\nrepository itself, particularly around template distribution, substitution,\nand synchronization across the hyperpolymath estate.", + preamble = "# SPDX-License-Identifier: MPL-2.0\n# Bustfile — failure mode contractile for resource-algebra\n# Author: Jonathan D.A. Jewell \n#\n# Paired runner: bust.ncl\n# Verb: bust\n# Semantics: Every declared failure mode must have a working recovery path\n# that has been exercised. Status moves:\n# declared → drilled (probe run) → verified (recovery confirmed)\n# or → failing (recovery broken)\n#\n# CLI:\n# contractile bust check → list failure modes + recovery status\n# contractile bust drill → inject failures, verify recovery paths\n#\n# This repository: resource-algebra is the canonical template for RSR compliance.\n# Failure modes here relate to template distribution and substitution.\n", + abstract = "Bustfile for resource-algebra. Lists failure modes specific to the template\nrepository itself, particularly around template distribution, substitution,\nand synchronization across the hyperpolymath estate.", prose = [ ], failure_modes = [ @@ -97,7 +97,7 @@ let base = import "../_base.ncl" in section = "Failure Modes", class = 'template_processing, description = "Template substitution fails when initializing a new repo from this template", - injection_probe = "cp -r rsr-template-repo test-repo && cd test-repo && sed -i 's/rsr-template-repo/TEST/g' .machine_readable/contractiles/intend/intend.k9.ncl && grep -q 'TEST' .machine_readable/contractiles/intend/intend.k9.ncl", + injection_probe = "cp -r resource-algebra test-repo && cd test-repo && sed -i 's/resource-algebra/TEST/g' .machine_readable/contractiles/intend/intend.k9.ncl && grep -q 'TEST' .machine_readable/contractiles/intend/intend.k9.ncl", recovery_probe = "git -C test-repo diff --quiet .machine_readable/contractiles/intend/intend.k9.ncl", expected_recovery_time_seconds = 10, status = 'declared, @@ -107,7 +107,7 @@ let base = import "../_base.ncl" in id = "sync-drift-between-repos", section = "Failure Modes", class = 'synchronization, - description = "Drift occurs between rsr-template-repo and other repos after template updates", + description = "Drift occurs between resource-algebra 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, @@ -119,8 +119,8 @@ let base = import "../_base.ncl" in section = "Failure Modes", class = 'contractile_format, description = "A contractile file fails to parse due to syntax errors", - injection_probe = "echo 'invalid syntax' >> rsr-template-repo/.machine_readable/contractiles/intend/intend.k9.ncl", - recovery_probe = "git checkout rsr-template-repo/.machine_readable/contractiles/intend/intend.k9.ncl", + injection_probe = "echo 'invalid syntax' >> resource-algebra/.machine_readable/contractiles/intend/intend.k9.ncl", + recovery_probe = "git checkout resource-algebra/.machine_readable/contractiles/intend/intend.k9.ncl", expected_recovery_time_seconds = 5, status = 'declared, notes = "Every .k9.ncl must typecheck; validate with .github/hooks/validate-k9.sh and nickel typecheck", diff --git a/.machine_readable/contractiles/dust/dust.k9.ncl b/.machine_readable/contractiles/dust/dust.k9.ncl index 8c3612e..7a8cea8 100644 --- a/.machine_readable/contractiles/dust/dust.k9.ncl +++ b/.machine_readable/contractiles/dust/dust.k9.ncl @@ -78,7 +78,7 @@ let base = import "../_base.ncl" in signed_by = { user = "Jonathan D.A. Jewell", date = "2026-04-18", - context = "dust trident — canonical template in rsr-template-repo. Specialises in audit-trail preservation + rollback-path verification. Yard tier with destructive-action gating (dry-run default; --apply + per-item approval required for mutations). Copy this trident into a new repo and describe how it actually rolls back or retires behaviour.", + context = "dust trident — canonical template in resource-algebra. Specialises in audit-trail preservation + rollback-path verification. Yard tier with destructive-action gating (dry-run default; --apply + per-item approval required for mutations). Copy this trident into a new repo and describe how it actually rolls back or retires behaviour.", }, history = [ { date = "2026-04-18", event = "trident-born", note = "Dustfile.a2ml and dust.ncl pre-existed. This manifest + dust.k9.ncl complete the trident and the full verb set. All 6 verbs now on trident shape: intend (Hunt, reporting), trust (Hunt, blocking), must (Hunt-read-only, blocking), bust (Hunt-read-only, blocking), adjust (Yard, advisory), dust (Yard, advisory)." }, @@ -97,8 +97,8 @@ let base = import "../_base.ncl" in # Read by .machine_readable/coaptation/extract-clauses.sh. # ------------------------------------------------------------------- declaration = { - preamble = "# SPDX-License-Identifier: MPL-2.0\n# Dustfile — Cleanup and hygiene contract for rsr-template-repo\n# Author: Jonathan D.A. Jewell \n#\n# Paired runner: dust.ncl\n# Verb: dust\n# Semantics: What should be cleaned up. Housekeeping, not blockers.\n#\n# This repository: rsr-template-repo is the canonical template.\n# Cleanup items here ensure the template itself remains pristine.\n", - abstract = "Cleanup and hygiene items for rsr-template-repo. These are maintenance tasks\nthat ensure the template repository remains clean and ready for distribution\nto new repositories.", + preamble = "# SPDX-License-Identifier: MPL-2.0\n# Dustfile — Cleanup and hygiene contract for resource-algebra\n# Author: Jonathan D.A. Jewell \n#\n# Paired runner: dust.ncl\n# Verb: dust\n# Semantics: What should be cleaned up. Housekeeping, not blockers.\n#\n# This repository: resource-algebra is the canonical template.\n# Cleanup items here ensure the template itself remains pristine.\n", + abstract = "Cleanup and hygiene items for resource-algebra. These are maintenance tasks\nthat ensure the template repository remains clean and ready for distribution\nto new repositories.", prose = [ ], removal_candidates = [ @@ -144,10 +144,10 @@ let base = import "../_base.ncl" in { id = "no-stale-template-references", section = "Template Hygiene", - description = "No references to rsr-template-repo in generic template files", - probe = "test -z \"$(grep -r 'rsr-template-repo' machine-readable-design/ 2>/dev/null)\"", + description = "No references to resource-algebra in generic template files", + probe = "test -z \"$(grep -r 'resource-algebra' machine-readable-design/ 2>/dev/null)\"", severity = 'warning, - notes = "Generic templates should use {{PROJECT_NAME}} or similar placeholders", + notes = "Generic templates should use Resource Algebra or similar placeholders", }, { id = "version-sync-checked", diff --git a/.machine_readable/contractiles/intend/intend.k9.ncl b/.machine_readable/contractiles/intend/intend.k9.ncl index 9e2f988..bb74185 100644 --- a/.machine_readable/contractiles/intend/intend.k9.ncl +++ b/.machine_readable/contractiles/intend/intend.k9.ncl @@ -82,7 +82,7 @@ let base = import "../_base.ncl" in signed_by = { user = "Jonathan D.A. Jewell", date = "2026-04-18", - context = "intend trident — canonical template in rsr-template-repo. North-star verb: reports progress toward committed next-actions ([[intents]]) and lists horizon aspirations ([[wishes]]). Non-gating (reporting authority). Copy this trident into a new repo and replace the declaration with project-specific content.", + context = "intend trident — canonical template in resource-algebra. North-star verb: reports progress toward committed next-actions ([[intents]]) and lists horizon aspirations ([[wishes]]). Non-gating (reporting authority). Copy this trident into a new repo and replace the declaration with project-specific content.", }, history = [ { date = "2026-04-18", event = "trident-born", note = "intend/Intentfile.a2ml pre-existed (f380b62, lust absorption). This manifest + intend.k9.ncl complete the trident for the first time." }, @@ -101,12 +101,12 @@ let base = import "../_base.ncl" in # Read by .machine_readable/coaptation/extract-clauses.sh. # ------------------------------------------------------------------- declaration = { - preamble = "# SPDX-License-Identifier: MPL-2.0\n# Intentfile — north-star contractile for rsr-template-repo\n# Author: Jonathan D.A. Jewell \n#\n# Paired runner: intend.ncl\n# Verb: intend\n#\n# Semantics: North-star contractile. Declares BOTH concrete committed\n# next-actions AND horizon aspirations the project wishes to\n# become. Two sections share one file because they answer\n# the same question at different ranges:\n# [[intents]] — \"we WILL do this; track progress\"\n# status: declared → in_progress → done |\n# deferred | retired\n# [[wishes]] — \"we WISH this were true; revisit later\"\n# status: declared → in_progress → achieved |\n# abandoned\n# grouped by horizon: near / mid / far.\n# Non-gating — this is a report, not a gate. See the `must`\n# contractile for hard gates.\n", - abstract = "North-star contractile for rsr-template-repo. This repository is the\ncanonical template for Rhodium Standard Repository compliance. It provides\nthe scaffold that all hyperpolymath repos should copy and customize.", + preamble = "# SPDX-License-Identifier: MPL-2.0\n# Intentfile — north-star contractile for resource-algebra\n# Author: Jonathan D.A. Jewell \n#\n# Paired runner: intend.ncl\n# Verb: intend\n#\n# Semantics: North-star contractile. Declares BOTH concrete committed\n# next-actions AND horizon aspirations the project wishes to\n# become. Two sections share one file because they answer\n# the same question at different ranges:\n# [[intents]] — \"we WILL do this; track progress\"\n# status: declared → in_progress → done |\n# deferred | retired\n# [[wishes]] — \"we WISH this were true; revisit later\"\n# status: declared → in_progress → achieved |\n# abandoned\n# grouped by horizon: near / mid / far.\n# Non-gating — this is a report, not a gate. See the `must`\n# contractile for hard gates.\n", + abstract = "North-star contractile for resource-algebra. This repository is the\ncanonical template for Rhodium Standard Repository compliance. It provides\nthe scaffold that all hyperpolymath repos should copy and customize.", prose = [ { section = "Purpose", - text = "The rsr-template-repo serves as the master template for all hyperpolymath\nrepositories. It contains the complete set of contractile files, machine-readable\nspecifications, and governance documentation that define the Rhodium Standard.\n\nEvery new repository in the hyperpolymath estate should be initialized by\ncopying this template and substituting the placeholder values with\nrepo-specific content.", + text = "The resource-algebra serves as the master template for all hyperpolymath\nrepositories. It contains the complete set of contractile files, machine-readable\nspecifications, and governance documentation that define the Rhodium Standard.\n\nEvery new repository in the hyperpolymath estate should be initialized by\ncopying this template and substituting the placeholder values with\nrepo-specific content.", }, { section = "Anti-Purpose", diff --git a/.machine_readable/contractiles/must/must.k9.ncl b/.machine_readable/contractiles/must/must.k9.ncl index bea41e1..4f70b0d 100644 --- a/.machine_readable/contractiles/must/must.k9.ncl +++ b/.machine_readable/contractiles/must/must.k9.ncl @@ -94,7 +94,7 @@ let base = import "../_base.ncl" in signed_by = { user = "Jonathan D.A. Jewell", date = "2026-04-18", - context = "must trident — canonical template in rsr-template-repo. Blocking-authority verb (paired with trust). Specialises in subtle invariant-erosion catchment vs trust's outrageous-attack catchment. Hard gate: any failing invariant blocks merge. Copy this trident into a new repo and replace the declaration with project-specific invariants.", + context = "must trident — canonical template in resource-algebra. Blocking-authority verb (paired with trust). Specialises in subtle invariant-erosion catchment vs trust's outrageous-attack catchment. Hard gate: any failing invariant blocks merge. Copy this trident into a new repo and replace the declaration with project-specific invariants.", }, history = [ { date = "2026-04-18", event = "trident-born", note = "Mustfile.a2ml and must.ncl pre-existed. This manifest + must.k9.ncl complete the trident. Inherits on_open schema from intend.k9.ncl v2.0.0; inherits block_session_close_on_critical_drift + variance-severity-acknowledgement from trust.k9.ncl v1.0.0; adds must-specific track_per_session_trend + flag_silent_regression + probe_scope = 'read_only (must doesn't do active exploit attempts — that's trust's safe_hacking territory)." }, @@ -112,8 +112,8 @@ let base = import "../_base.ncl" in # Read by .machine_readable/coaptation/extract-clauses.sh. # ------------------------------------------------------------------- declaration = { - preamble = "# SPDX-License-Identifier: MPL-2.0\n# Mustfile — Physical state contract for rsr-template-repo\n# Author: Jonathan D.A. Jewell \n#\n# What MUST be true about this repository. Hard requirements.\n# Run with: must check\n# Fix with: must fix (where a deterministic fix exists)\n", - abstract = "Physical-state invariants for rsr-template-repo. This is the canonical\nRSR template repository. These are hard requirements — CI and pre-commit\nhooks fail if any check fails.", + preamble = "# SPDX-License-Identifier: MPL-2.0\n# Mustfile — Physical state contract for resource-algebra\n# Author: Jonathan D.A. Jewell \n#\n# What MUST be true about this repository. Hard requirements.\n# Run with: must check\n# Fix with: must fix (where a deterministic fix exists)\n", + abstract = "Physical-state invariants for resource-algebra. This is the canonical\nRSR template repository. These are hard requirements — CI and pre-commit\nhooks fail if any check fails.", prose = [ { section = "Template Integrity", diff --git a/.machine_readable/contractiles/trust/trust.k9.ncl b/.machine_readable/contractiles/trust/trust.k9.ncl index fa7431a..feb2ebc 100644 --- a/.machine_readable/contractiles/trust/trust.k9.ncl +++ b/.machine_readable/contractiles/trust/trust.k9.ncl @@ -100,7 +100,7 @@ let base = import "../_base.ncl" in signed_by = { user = "Jonathan D.A. Jewell", date = "2026-04-18", - context = "trust trident — canonical template in rsr-template-repo. (Hunt, blocking) authority pattern. Primary catchment for adversarial drift test scenarios (firewall-off, cleartext-auth, PQ-downgrade, CSP-weaken). Hard gate: failed verification blocks merge. Copy this trident into a new repo and point it at the real keys, policies, and authority boundaries.", + context = "trust trident — canonical template in resource-algebra. (Hunt, blocking) authority pattern. Primary catchment for adversarial drift test scenarios (firewall-off, cleartext-auth, PQ-downgrade, CSP-weaken). Hard gate: failed verification blocks merge. Copy this trident into a new repo and point it at the real keys, policies, and authority boundaries.", }, history = [ { date = "2026-04-18", event = "trident-born", note = "Trustfile.a2ml and trust.ncl pre-existed. This manifest + trust.k9.ncl complete the trident. Inherits on_open negotiation + accountability + plain-language-translation schema from intend.k9.ncl v2.0.0; adds trust-specific threat_model_foregrounding + block_session_close_on_critical_drift + stricter accountability pledge (user cannot disable verification to unblock merges)." }, @@ -118,12 +118,12 @@ let base = import "../_base.ncl" in # Read by .machine_readable/coaptation/extract-clauses.sh. # ------------------------------------------------------------------- declaration = { - preamble = "# SPDX-License-Identifier: MPL-2.0\n# Trustfile — Trust boundaries and integrity invariants for rsr-template-repo\n# Author: Jonathan D.A. Jewell \n#\n# Defines what LLM/SLM agents are trusted to do without asking, and\n# integrity invariants that verify the repo has not been tampered with.\n", - abstract = "Trust boundaries and integrity checks for rsr-template-repo. This file\ncombines the trust-level definitions from the original TRUST.contractile\nwith the integrity invariants from the old Trustfile.a2ml. It defines\nwhat AI agents may do autonomously and what requires human approval,\nplus checks that verify repository integrity.", + preamble = "# SPDX-License-Identifier: MPL-2.0\n# Trustfile — Trust boundaries and integrity invariants for resource-algebra\n# Author: Jonathan D.A. Jewell \n#\n# Defines what LLM/SLM agents are trusted to do without asking, and\n# integrity invariants that verify the repo has not been tampered with.\n", + abstract = "Trust boundaries and integrity checks for resource-algebra. This file\ncombines the trust-level definitions from the original TRUST.contractile\nwith the integrity invariants from the old Trustfile.a2ml. It defines\nwhat AI agents may do autonomously and what requires human approval,\nplus checks that verify repository integrity.", prose = [ { section = "Trust Levels", - text = "The rsr-template-repo operates at trust level: maximal\n\nTrust levels:\n- maximal: Agent may read, build, test, lint, format, heal freely.\n Only destructive/external actions require approval.\n- standard: Agent may read and build. Test/lint need approval.\n- restricted: Agent may read only. All modifications need approval.\n- minimal: Agent may read specific files only. Everything else blocked.\n\nCurrent trust level: maximal", + text = "The resource-algebra operates at trust level: maximal\n\nTrust levels:\n- maximal: Agent may read, build, test, lint, format, heal freely.\n Only destructive/external actions require approval.\n- standard: Agent may read and build. Test/lint need approval.\n- restricted: Agent may read only. All modifications need approval.\n- minimal: Agent may read specific files only. Everything else blocked.\n\nCurrent trust level: maximal", }, ], verifications = [ diff --git a/.machine_readable/descriptiles/README.adoc b/.machine_readable/descriptiles/README.adoc index 5f7207c..9d25b55 100644 --- a/.machine_readable/descriptiles/README.adoc +++ b/.machine_readable/descriptiles/README.adoc @@ -30,7 +30,7 @@ grammar specification, never against a neighbouring file. The descriptiles are clauses of the repo deed (`*_chora.deed`), not separate files; no `.a2ml` file may be recreated anywhere -(rsr-template-repo#209): +(resource-algebra#209): * `(neurosym)`: symbolic semantics, composition algebra; * `(playbook)`: executable plans, operational runbooks; diff --git a/.machine_readable/descriptiles/provisioning_praxis.deed b/.machine_readable/descriptiles/provisioning_praxis.deed index 5445982..d822560 100644 --- a/.machine_readable/descriptiles/provisioning_praxis.deed +++ b/.machine_readable/descriptiles/provisioning_praxis.deed @@ -10,8 +10,8 @@ ;; Canon: hyperpolymath/standards 3-practice/provisioning/PROVISIONING-STANDARD.adoc (praxis-deed :schema-version "1.0.0" - :canonical-name "rsr-template-repo-provisioning" - :repo "hyperpolymath/rsr-template-repo" + :canonical-name "resource-algebra-provisioning" + :repo "hyperpolymath/resource-algebra" :archetype "library" ; app | library | tool | theory | docs :languages "idris2 zig" ; detected; informational ;; Contract-verb overrides ("" = per-language default, which `just langs` shows) diff --git a/.machine_readable/scripts/maintenance/maint-assault.sh b/.machine_readable/scripts/maintenance/maint-assault.sh index f170cab..4c630f1 100644 --- a/.machine_readable/scripts/maintenance/maint-assault.sh +++ b/.machine_readable/scripts/maintenance/maint-assault.sh @@ -8,7 +8,7 @@ set -euo pipefail -BINARY_NAME="{{project}}" +BINARY_NAME="resource_algebra" REPORT_PATH="docs/reports/security/assault-latest.json" PA_BIN="${PANIC_ATTACK_BIN:-panic-attack}" diff --git a/.machine_readable/self-validating/README.adoc b/.machine_readable/self-validating/README.adoc index 6484b4e..778ab2e 100644 --- a/.machine_readable/self-validating/README.adoc +++ b/.machine_readable/self-validating/README.adoc @@ -131,7 +131,7 @@ K9 contractiles integrate with other RSR standards: ⚠️ **Never run as root unless required** + ⚠️ **Sandbox external components** -**See:** https://github.com/{{OWNER}}/k9-svc/blob/main/docs/SECURITY-BEST-PRACTICES.adoc +**See:** https://github.com/hyperpolymath/k9-svc/blob/main/docs/SECURITY-BEST-PRACTICES.adoc == Template Files @@ -155,14 +155,14 @@ chmod +x nickel && sudo mv nickel /usr/local/bin/ cargo install just # Clone K9-SVC (for must shim and tooling) -git clone https://github.com/{{OWNER}}/k9-svc.git +git clone https://github.com/hyperpolymath/k9-svc.git ---- == Learn More -- **K9-SVC Specification:** https://github.com/{{OWNER}}/k9-svc/blob/main/SPEC.adoc -- **K9 User Guide:** https://github.com/{{OWNER}}/k9-svc/blob/main/GUIDE.adoc -- **Security Documentation:** https://github.com/{{OWNER}}/k9-svc/blob/main/docs/SECURITY-FAQ.adoc +- **K9-SVC Specification:** https://github.com/hyperpolymath/k9-svc/blob/main/SPEC.adoc +- **K9 User Guide:** https://github.com/hyperpolymath/k9-svc/blob/main/GUIDE.adoc +- **Security Documentation:** https://github.com/hyperpolymath/k9-svc/blob/main/docs/SECURITY-FAQ.adoc - **IANA Media Type:** `application/vnd.k9+nickel` == Contributing @@ -175,4 +175,4 @@ When adding K9 contractiles to your repository: 4. Sign Hunt-level components before committing 5. Add K9 validation to CI/CD pipeline -**Questions?** Open an issue on https://github.com/{{OWNER}}/k9-svc +**Questions?** Open an issue on https://github.com/hyperpolymath/k9-svc diff --git a/.machine_readable/self-validating/examples/ci-config.k9.ncl b/.machine_readable/self-validating/examples/ci-config.k9.ncl index 1f38e2d..9fe314e 100644 --- a/.machine_readable/self-validating/examples/ci-config.k9.ncl +++ b/.machine_readable/self-validating/examples/ci-config.k9.ncl @@ -19,7 +19,7 @@ K9! name = "ci-config", version = "1.0.0", description = "CI/CD configuration with runtime validation", - author = "{{AUTHOR}} <{{AUTHOR_EMAIL}}>", + author = "Jonathan D.A. Jewell ", }, }, diff --git a/.machine_readable/self-validating/examples/project-metadata.k9.ncl b/.machine_readable/self-validating/examples/project-metadata.k9.ncl index c8e6ebf..b2299b4 100644 --- a/.machine_readable/self-validating/examples/project-metadata.k9.ncl +++ b/.machine_readable/self-validating/examples/project-metadata.k9.ncl @@ -19,7 +19,7 @@ K9! name = "project-metadata", version = "1.0.0", description = "Pure data configuration for project metadata", - author = "{{AUTHOR}} <{{AUTHOR_EMAIL}}>", + author = "Jonathan D.A. Jewell ", }, }, @@ -30,14 +30,14 @@ K9! description = "A project following Rhodium Standard Repositories", repository = { - url = "https://github.com/{{OWNER}}/my-project", + url = "https://github.com/hyperpolymath/my-project", type = "git", }, author = { - name = "{{AUTHOR}}", - email = "{{AUTHOR_EMAIL}}", - organization = "{{AUTHOR_ORG}}", + name = "Jonathan D.A. Jewell", + email = "j.d.a.jewell@open.ac.uk", + organization = "The Open University", }, license = "MPL-2.0", @@ -45,7 +45,7 @@ K9! keywords = [ "rhodium-standard", "rsr", - "{{OWNER}}", + "hyperpolymath", ], }, diff --git a/.machine_readable/self-validating/examples/setup-repo.k9.ncl b/.machine_readable/self-validating/examples/setup-repo.k9.ncl index f86df82..8c8d8c5 100644 --- a/.machine_readable/self-validating/examples/setup-repo.k9.ncl +++ b/.machine_readable/self-validating/examples/setup-repo.k9.ncl @@ -20,7 +20,7 @@ K9! name = "setup-repo", version = "1.0.0", description = "Automated repository setup with RSR standards", - author = "{{AUTHOR}} <{{AUTHOR_EMAIL}}>", + author = "Jonathan D.A. Jewell ", }, warnings = [ "This component has full system access", @@ -104,8 +104,8 @@ K9! description = "Initialize Git repository", commands = [ "git init -b %{config.git.default_branch}", - "git config user.name '{{AUTHOR}}'", - "git config user.email '{{AUTHOR_EMAIL}}'", + "git config user.name 'Jonathan D.A. Jewell'", + "git config user.email 'j.d.a.jewell@open.ac.uk'", "echo '✓ Git initialized'", ], }, @@ -114,7 +114,7 @@ K9! description = "Add RSR-compliant workflows", commands = [ # This would copy workflow templates - # In a real implementation, would fetch from rsr-template-repo + # In a real implementation, would fetch from resource-algebra "echo '✓ Workflows configured'", ], }, diff --git a/.machine_readable/self-validating/methodology-guard.k9.ncl b/.machine_readable/self-validating/methodology-guard.k9.ncl index 41c12d5..cefb839 100644 --- a/.machine_readable/self-validating/methodology-guard.k9.ncl +++ b/.machine_readable/self-validating/methodology-guard.k9.ncl @@ -1,6 +1,6 @@ K9! # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # # K9 Validator: Methodology Guard # Checks that agent work respects methodology constraints declared in the @@ -56,7 +56,7 @@ let methodology_guard = { state_not_template = { description = "The ROADMAP journal must not contain template placeholders", severity = "warning", - # The journal, not the repo deed: a deed names rsr-template-repo in + # The journal, not the repo deed: a deed names resource-algebra in # (lineage :instantiated-from) by design, so this pattern would always # fire there. file = "docs/status/ROADMAP.adoc", @@ -68,8 +68,8 @@ let methodology_guard = { # out of the file (in this comment too) so init cannot match it, while # Nickel still evaluates the element back to the full token. Do not # "simplify" it to a plain string. (The PLACEHOLDER token and - # "rsr-template-repo" are not init tokens, so they survive as-is.) - reject_patterns = ["{{PLACEHOLDER}}", "{{" ++ "PROJECT}}", "rsr-template-repo"], + # "resource-algebra" are not init tokens, so they survive as-is.) + reject_patterns = ["{{PLACEHOLDER}}", "{{" ++ "PROJECT}}", "resource-algebra"], }, coverage_updated = { diff --git a/.machine_readable/self-validating/template-hunt.k9.ncl b/.machine_readable/self-validating/template-hunt.k9.ncl index a9cc350..b3fcb47 100644 --- a/.machine_readable/self-validating/template-hunt.k9.ncl +++ b/.machine_readable/self-validating/template-hunt.k9.ncl @@ -20,7 +20,7 @@ K9! name = "TODO: component-name", version = "1.0.0", description = "TODO: Detailed description of what this component does", - author = "{{AUTHOR}} <{{AUTHOR_EMAIL}}>", + author = "Jonathan D.A. Jewell ", }, warnings = [ "This component has full system access", diff --git a/.machine_readable/self-validating/template-kennel.k9.ncl b/.machine_readable/self-validating/template-kennel.k9.ncl index fa7e3f3..4228b26 100644 --- a/.machine_readable/self-validating/template-kennel.k9.ncl +++ b/.machine_readable/self-validating/template-kennel.k9.ncl @@ -19,7 +19,7 @@ K9! name = "TODO: component-name", version = "1.0.0", description = "TODO: Brief description of what this component contains", - author = "{{AUTHOR}} <{{AUTHOR_EMAIL}}>", + author = "Jonathan D.A. Jewell ", }, }, diff --git a/.machine_readable/self-validating/template-yard.k9.ncl b/.machine_readable/self-validating/template-yard.k9.ncl index 358671c..a723f5a 100644 --- a/.machine_readable/self-validating/template-yard.k9.ncl +++ b/.machine_readable/self-validating/template-yard.k9.ncl @@ -19,7 +19,7 @@ K9! name = "TODO: component-name", version = "1.0.0", description = "TODO: Brief description with validation details", - author = "{{AUTHOR}} <{{AUTHOR_EMAIL}}>", + author = "Jonathan D.A. Jewell ", }, }, diff --git a/.mailmap b/.mailmap index e416ced..9a973b3 100644 --- a/.mailmap +++ b/.mailmap @@ -1,4 +1 @@ -# Format: Canonical Name Alias Name -Jonathan D.A. Jewell hyperpolymath -# Bot identities -gitbot-fleet[bot] +# No alternate author address to map. diff --git a/.windsurfrules b/.windsurfrules index b16b511..10ecb83 100644 --- a/.windsurfrules +++ b/.windsurfrules @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # Authoritative source: docs/practice/AI-CONVENTIONS.adoc # STARTUP: Read the repo deed (*_chora.deed at the repo root) first, then docs/status/ROADMAP.adoc. @@ -8,7 +8,7 @@ # All original code: MPL-2.0. # Never AGPL-3.0. MPL-2.0 only as platform-required fallback. # SPDX header required on every source file. -# Copyright: {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +# Copyright: Jonathan D.A. Jewell (hyperpolymath) # STATE FILES # No .a2ml file may exist anywhere: the format is retired. State, metadata, diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 64f181c..d8aa1d3 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -1,6 +1,22 @@ == Changelog +== 2026-10-14 — minted, and the estate checks made green + +* Minted with `just repo-init`. The repository had been created from + rsr-template-repo df09a6c with GitHub's template copy and never minted, + so it still declared itself the template. The deed is now + `resource-algebra_chora.deed` (clade `fv`), placeholders are filled, + and CLAUDE.md and the repository map describe this repository. +* `build/just/repo-init.just`: the non-interactive mint now completes; + just's own interpolation, the arrival pack, the repository map, the + state-validation detector and the OpenSSF audit table survive the mint. +* `scripts/check-agda.sh`: each expected rejection must land on the + fixture's `invalid` definition. +* `PROOF-STATUS.adoc` moved to `docs/status/PROOF-STATUS.adoc`. +* CI: the standards reusables re-pinned to standards main, with a closed + `actions.lock`; `CITATION.cff` gained its required `message`. + == 2026-10-14 — MinMax and morphisms (resource-algebra#3) * `Instances/MinMax.agda`: the min-max (bottleneck) instance on the Loss diff --git a/CLAUDE.md b/CLAUDE.md index 63bf9ad..ea94d07 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell - + # You are in the hyperpolymath estate — orient before acting @@ -55,19 +55,22 @@ Deny: **Nix, Python, Go, TypeScript, Deno, ReScript, AGPL**. (Guix, not Nix.) JavaScript runtime: **Bun** (package.json + bun.lock) > pnpm > npm (last resort, permitted). Deno is retired, not grandfathered (owner ruling 2026-08-26, standards#655): existing Deno projects migrate to Bun. Use plain JavaScript when this tooling is needed. TypeScript and ReScript migrate to AffineScript. +## Asking the owner +Put every question that needs the owner's decision through the selector (the AskUserQuestion tool), not as prose at the end of a report. Batch up to four per call, offer concrete options with the recommended one first, and say what each option would cause. + --- -# This repo: `resource-algebra` · clade `UNASSIGNED-resource-algebra` +# This repo: `resource-algebra` · clade `fv-resource-algebra` -- **Identity** — uuid `241f1c29-0838-5033-b654-7f4c5e279ebc`; clade `UNASSIGNED` (secondary ``); born 2026-10-12; forge `hyperpolymath/resource-algebra`. +- **Identity** — uuid `241f1c29-0838-5033-b654-7f4c5e279ebc`; clade `fv` (secondary ``); born 2026-10-12; forge `hyperpolymath/resource-algebra`. - **IS** — Parametric resource algebra in Agda, with Loss, MaxPlus, HWM and MinMax instances and strict/lax morphisms. - **IS-NOT** — a repository template · the K-CUT statement, which belongs in choreographic-types · occupancy-types' own algebra, for which HWM is a proposal -- **Where it sits** — pipeline position **kernel**; chain `resource-algebra → hyperpolymath type family`; coordination = ``. +- **Where it sits** — pipeline position **kernel**; chain `resource-algebra → hyperpolymath type family`; coordination = `standards`. - **Constraints here** (AGENTIC) — fail-closed; evidence-per-step; no-silent-skip; rerun-after-fix; release-claim-requires-hard-pass. Never: banned langs (above), secrets, state files in repo root, AGPL. Details: the deed's `(bot-directives (methodology) (coverage) (debt))` clauses. - **Golden path** (ANCHOR) — `just test && just quality` → Core tests pass; Quality gates pass; No unresolved critical security findings. - **State** — phase active; maturity experimental. Milestones and next actions: `docs/status/ROADMAP.adoc`. - + ## Estate-Wide Format Migration Directives @@ -103,7 +106,7 @@ hand; that migration is done per repo (ADR-008 phase P3). In deed files use - Grammars: `standards/1-formats/deed/spec/abnf/deed.abnf` (authoritative over the deed README, D308) and `standards/1-formats/k9/` for k9. - Descriptiles (anchor, meta, state, ecosystem, agentic, neurosym, playbook) - are clauses of `rsr-template-repo_chora.deed` (D312). + are clauses of `resource-algebra_chora.deed` (D312). - Contractiles (intend, must, trust, adjust, bust, dust) are k9 contracts in `.machine_readable/contractiles//`. The deed attests to them (`:contractiles_required`, and a `(contractiles …)` clause per D312). diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index b271386..f2c2abb 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -1,6 +1,6 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // SPDX-FileCopyrightText: Jonathan D.A. Jewell (hyperpolymath) -= Contributing — rsr-template-repo += Contributing — resource-algebra :toc: left Contributors work on the *spine*: the template every RSR repo is minted @@ -12,15 +12,15 @@ is the estate's bar. [source,bash] ---- # Clone the repository -git clone https://github.com/hyperpolymath/rsr-template-repo.git -cd rsr-template-repo +git clone https://github.com/hyperpolymath/resource-algebra.git +cd resource-algebra # Using Guix (recommended for reproducibility) guix shell -D -f build/guix.scm # Or using toolbox/distrobox -toolbox create rsr-template-repo-dev -toolbox enter rsr-template-repo-dev +toolbox create resource-algebra-dev +toolbox enter resource-algebra-dev # Install dependencies manually # Verify setup @@ -80,10 +80,10 @@ and include: Look for issues labelled: -* https://github.com/hyperpolymath/rsr-template-repo/labels/good%20first%20issue[`good first issue`] — Simple Perimeter 3 tasks -* https://github.com/hyperpolymath/rsr-template-repo/labels/help%20wanted[`help wanted`] — Community help needed -* https://github.com/hyperpolymath/rsr-template-repo/labels/documentation[`documentation`] — Docs improvements -* https://github.com/hyperpolymath/rsr-template-repo/labels/perimeter-3[`perimeter-3`] — Community sandbox scope +* https://github.com/hyperpolymath/resource-algebra/labels/good%20first%20issue[`good first issue`] — Simple Perimeter 3 tasks +* https://github.com/hyperpolymath/resource-algebra/labels/help%20wanted[`help wanted`] — Community help needed +* https://github.com/hyperpolymath/resource-algebra/labels/documentation[`documentation`] — Docs improvements +* https://github.com/hyperpolymath/resource-algebra/labels/perimeter-3[`perimeter-3`] — Community sandbox scope == Development workflow diff --git a/Justfile b/Justfile index b5d9e98..f82afcf 100644 --- a/Justfile +++ b/Justfile @@ -22,9 +22,9 @@ import? "build/contractile.just" mod provision 'build/just/provision.just' # Project metadata — customize these -project := "rsr-template-repo" +project := "resource-algebra" OWNER := "hyperpolymath" -REPO := "rsr-template-repo" +REPO := "resource-algebra" version := "0.1.0" tier := "infrastructure" # 1 | 2 | infrastructure @@ -408,7 +408,7 @@ import? "build/just/validate.just" # ═══════════════════════════════════════════════════════════════════════════════ # Repo state lives in the repo deed's (status …) and (maturity …) clauses -# (rsr-template-repo#209); the journal is docs/status/ROADMAP.adoc. There is +# (resource-algebra#209); the journal is docs/status/ROADMAP.adoc. There is # no last-updated stamp to touch: git log is the record of when it changed. # Show the lifecycle phase and maturity from the repo deed @@ -574,7 +574,7 @@ opsm: provision::opsm # Guided tour of key features tour: - @echo "=== rsr-template-repo Tour ===" + @echo "=== resource-algebra Tour ===" @echo "" @echo "1. Project structure:" @ls -la @@ -589,12 +589,12 @@ tour: # Open feedback channel with diagnostic context help-me: - @echo "=== rsr-template-repo Help ===" + @echo "=== resource-algebra Help ===" @echo "Platform: $(uname -s) $(uname -m)" @echo "Shell: $SHELL" @echo "" @echo "To report an issue:" - @echo " https://github.com/hyperpolymath/rsr-template-repo/issues/new" + @echo " https://github.com/hyperpolymath/resource-algebra/issues/new" @echo "" @echo "Include the output of 'just doctor' in your report." diff --git a/README.adoc b/README.adoc index 4327202..6764462 100644 --- a/README.adoc +++ b/README.adoc @@ -110,53 +110,16 @@ image:https://img.shields.io/badge/Provenance-Quantum--Safe-blueviolet[Quantum-S // ── Standard & quality gates ──────────────────────────────────────────────── image:https://img.shields.io/badge/RSR-Rhodium_Standard-9C27B0[Rhodium Standard Repository,link="https://github.com/hyperpolymath/rhodium-standard-repositories"] -image:https://www.bestpractices.dev/projects/{{OPENSSF_BP_ID}}/badge[OpenSSF Best Practices,link="https://www.bestpractices.dev/projects/{{OPENSSF_BP_ID}}"] -image:https://api.scorecard.dev/projects/github.com/{{OWNER}}/{{REPO}}/badge[OpenSSF Scorecard,link="https://scorecard.dev/viewer/?uri=github.com/{{OWNER}}/{{REPO}}"] -image:https://sonarcloud.io/api/project_badges/measure?project={{OWNER}}_{{REPO}}&metric=alert_status[SonarQube Quality Gate,link="https://sonarcloud.io/summary/new_code?id={{OWNER}}_{{REPO}}"] -image:https://archive.softwareheritage.org/badge/origin/https://{{FORGE}}/{{OWNER}}/{{REPO}}/[Archived in Software Heritage,link="https://archive.softwareheritage.org/browse/origin/?origin_url=https://{{FORGE}}/{{OWNER}}/{{REPO}}"] +image:https://api.scorecard.dev/projects/github.com/hyperpolymath/resource-algebra/badge[OpenSSF Scorecard,link="https://scorecard.dev/viewer/?uri=github.com/hyperpolymath/resource-algebra"] +image:https://sonarcloud.io/api/project_badges/measure?project=hyperpolymath_resource-algebra&metric=alert_status[SonarQube Quality Gate,link="https://sonarcloud.io/summary/new_code?id=hyperpolymath_resource-algebra"] +image:https://archive.softwareheritage.org/badge/origin/https://github.com/hyperpolymath/resource-algebra/[Archived in Software Heritage,link="https://archive.softwareheritage.org/browse/origin/?origin_url=https://github.com/hyperpolymath/resource-algebra"] // ── Provenance & ecosystem ────────────────────────────────────────────────── image:https://img.shields.io/badge/Idris-Inside-5E5086?logo=idris&logoColor=white[Idris Inside,link="https://github.com/hyperpolymath/proven"] image:https://img.shields.io/badge/Zig-Zero--overhead-F7A41D?logo=zig&logoColor=black[Zig Zero-overhead FFI,link="https://github.com/hyperpolymath/typed-wasm"] -image:https://api.thegreenwebfoundation.org/greencheckimage/{{FORGE}}[Green Web,link="https://www.thegreenwebfoundation.org/green-web-check/?url={{FORGE}}"] +image:https://api.thegreenwebfoundation.org/greencheckimage/github.com[Green Web,link="https://www.thegreenwebfoundation.org/green-web-check/?url=github.com"] -{{PROJECT_DESCRIPTION}} - -[IMPORTANT] -==== -*This file is a template.* You are reading `README.adoc` from the *RSR template repo* -(or a freshly-cloned copy of it). Run `just repo-init` to replace every `{{PLACEHOLDER}}` -token with your project's details, then delete this admonition. Until you do, the -`{{...}}` markers below are intentional placeholders, not content. -==== - -== What this is - -A new repository scaffolded from the *Rhodium Standard Repository (RSR)* template: -a batteries-included starting point that ships with CI/CD, machine-readable project -metadata, an AI-agent gatekeeper protocol, a formally-typed ABI/FFI seam -(Idris2 + Zig), container and reproducible-build scaffolding, and governance -infrastructure — all wired and passing the RSR validators on day one. - -Replace this section with a description of *your* project once initialised. - -== Quick start - -[source,bash] ----- -# 1. Create a repo from this template (or clone it), then from the repo root: -just repo-init # interactive bootstrap: fills every {{PLACEHOLDER}} - -# 2. See the available tasks: -just # lists all phases (build, test, validate, audit, ...) - -# 3. Check the repo still satisfies the RSR shape: -just validate # structure + metadata checks ----- - -`just repo-init` prompts for the project name, owner, author, licence contact, and the -other values listed in `.machine_readable/ai/PLACEHOLDERS.adoc`, substitutes them -across the tree, validates the result, and (if available) runs the `k9-svc` checks. +The parametric grade algebra shared by the hyperpolymath type family [[ai-install]] == AI-Assisted Installation (Recommended) @@ -168,42 +131,31 @@ commands to paste): [source,text] ---- -Create a new repository from https://github.com/hyperpolymath/rsr-template-repo +Set up resource-algebra from https://github.com/hyperpolymath/resource-algebra ---- The URL is the key: it leads the assistant to link:docs/AI_INSTALLATION_GUIDE.adoc[`docs/AI_INSTALLATION_GUIDE.adoc`], the -complete step-by-step recipe. The assistant checks your system, installs the -prerequisites, instantiates the template with `just repo-init`, and verifies the -result with `just doctor`. +complete step-by-step recipe for this repository. The assistant checks your +system, installs the prerequisites, fetches and sets up resource-algebra, and +verifies it with `just doctor`. -* "Set up rsr-template-repo so I can work on the template itself — https://github.com/hyperpolymath/rsr-template-repo" * `./launcher.sh --ai-setup` (or `just ai-setup`) prints the line and the guide path. === What you will be asked . Your operating system (Linux, macOS, or Windows via WSL2). -. The new project's name, owner, author and licence contact (the values listed in - `.machine_readable/ai/PLACEHOLDERS.adoc`). +. Where to put it (default `~/src/resource-algebra`). . To confirm the privacy notice below. === Privacy and security [IMPORTANT] ==== -Setting up rsr-template-repo clones this repository and installs its developer +Setting up resource-algebra clones this repository and installs its developer tools per-user with mise (no administrator rights, nothing sent anywhere). -`just repo-init` rewrites files only inside the new checkout; it creates no -remote repository and pushes nothing until you do. ==== -=== The one trap - -If you are an AI agent: **do not set `RSR_NON_INTERACTIVE=1`**. It stubs the -shell builtin `read`, which also disables the loops that perform token -substitution — the run never terminates and substitutes nothing. Pipe answers to -stdin instead. - === Troubleshooting Run `just doctor`; each FAIL carries a code explained in diff --git a/archetypes/README.adoc b/archetypes/README.adoc deleted file mode 100644 index e51fbe2..0000000 --- a/archetypes/README.adoc +++ /dev/null @@ -1,76 +0,0 @@ -// SPDX-License-Identifier: CC-BY-SA-4.0 -// Copyright (c) Jonathan D.A. Jewell -= Archetypes — template-only overlay data for `just repo-init` - -An *archetype* specialises the spine for one kind of repository (a Julia -library, a WordPress plugin, …) **as data, not as a fork**. Each archetype is -a directory here: - - archetypes//_praxis.deed required — the contract (see below) - archetypes//overlay/ optional — files copied over the spine - archetypes//actions.lock required when the overlay ships workflows - -Decision record: `docs/decisions/0003-forge-and-sustain-lifecycle.adoc`. -Normative lifecycle: standards `spec/SCAFFOLD-LIFECYCLE.adoc`. - -== The contract (`_praxis.deed`) - -A `praxis-deed` (standards `1-formats/deed/spec/abnf/deed.abnf`), read by -`just repo-init` through `scripts/deed-field.sh`. Values are single-line -strings: - -- `(metadata :archetype … :schema_version …)`. -- `(capability :preset "")` — MUST name a preset in standards - `.machine_readable/template-capability-gates.toml [presets]`. The archetype - directory name and the preset name are the same string by convention. -- `(tokens :TOKEN "value" …)` — one pair per token. Only tokens the archetype can - honestly determine (`PROJECT_KIND`, `PROJECT_DOMAIN`, `LANG_STACK`, - `BUILD_CMD`, `TEST_CMD`, `DEPS`, `BUILD_OUTPUT_PATH`, `MAIN_FUNCTION`). - Values MUST NOT contain `|` (the init sed delimiter — init skips such - values with a warning). Judgement-only tokens - (`PROJECT_UNIQUE_STRENGTH`, `TARGET_AUDIENCE`, `MUST_INVARIANTS`, - per-repo names like `PACKAGE_NAME`) MUST be omitted so they stay - `UNASSIGNED` — an archetype never writes fiction. - -`just repo-init ` applies the overlay directory (if present), adds the -token substitutions, and writes the preset into the minted repo's -deed's `(rsr-profile)` clause. This whole `archetypes/` directory is -template-only and is removed from the minted tree, exactly like -`build/templates/`. - -== Workflows and their lock records - -An overlay that ships workflows ships their lock records **beside** the -overlay, as `archetypes//actions.lock`, and never inside it. An -`overlay/.github/workflows/actions.lock` would replace the spine's lock when -the overlay is copied, and every spine workflow would then be refused at -startup for want of a record. That is how the first Julia mints -(ZeroInflatedCounts.jl, ResidualEvidenceTypes.jl) began with Lock Sync red. - -`just repo-init` merges the fragment into `.github/workflows/actions.lock` -with `scripts/merge-actions-lock.rs`: entries are unioned, and a key present -in both files with a different record stops the mint. Write the fragment with -the authoritative tool, never by hand: - -. Copy the overlay workflows into an empty git repository, under - `.github/workflows/` and under their minted names (drop the `.in`). -. Run `gh actions-lock --no-narrow` there, then `gh actions-lock --no-fix` - to check it. -. Copy the resulting `.github/workflows/actions.lock` to - `archetypes//actions.lock`. - -Regenerate it in the same PR as any `uses:` change in the overlay. -`tests/workflows/archetype_lock_merge_test.sh` mints each archetype's -workflow set and runs `scripts/check-lock-sync.sh` on the merged lock. - -== Current archetypes - -- `julia-library` — reference instance, harvested from - rsr-julia-library-template-repo's variant record (ADR-0002) and the - dormant scaffoldia registry's `julia/package.ncl`. The variant repo - remains the full hand-maintained reference until the scaffoldia - inversion; this archetype covers the `just repo-init` path. - -Declared, content to follow (presets already reserved in the canon): -`wordpress-plugin`, `zotero-plugin`, `userscript`. Do not stub them empty — -an archetype exists when its contract and overlay are real. diff --git a/archetypes/julia-library/actions.lock b/archetypes/julia-library/actions.lock deleted file mode 100644 index 4d55562..0000000 --- a/archetypes/julia-library/actions.lock +++ /dev/null @@ -1,29 +0,0 @@ -# This file is machine-generated by `gh actions-lock`. -# Do not edit by hand; run `gh actions-lock` to update. -# Docs: https://gh.io/actions-lockfile -version: 'v0.0.2' -workflows: - '.github/workflows/julia-ci.yml': - - 'actions/checkout@v7.0.1' - - 'julia-actions/cache@v3.5.0' - - 'julia-actions/setup-julia@v3.0.2' - '.github/workflows/julia-docs.yml': - - 'actions/checkout@v7.0.1' - - 'julia-actions/cache@v3.5.0' - - 'julia-actions/setup-julia@v3.0.2' -dependencies: - 'actions/checkout@v7.0.1': - ref: 'v7.0.1' - commit: 'sha1-3d3c42e5aac5ba805825da76410c181273ba90b1' - owner_id: 44036562 - repo_id: 197814629 - 'julia-actions/cache@v3.5.0': - ref: 'v3.5.0' - commit: 'sha1-9353db09a0f2bbbdec6f41791918c75d37391b36' - owner_id: 53965732 - repo_id: 441908600 - 'julia-actions/setup-julia@v3.0.2': - ref: 'v3.0.2' - commit: 'sha1-fa02766e078afaaf09b14210362cee14137e6a32' - owner_id: 53965732 - repo_id: 202020219 diff --git a/archetypes/julia-library/julia-library_praxis.deed b/archetypes/julia-library/julia-library_praxis.deed deleted file mode 100644 index 497ea93..0000000 --- a/archetypes/julia-library/julia-library_praxis.deed +++ /dev/null @@ -1,37 +0,0 @@ -;; SPDX-License-Identifier: MPL-2.0 -;; SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) -;; -;; julia-library_praxis.deed — the julia-library archetype for `just repo-init` -;; (ADR-0003). repo-init reads it with scripts/deed-field.sh: -;; (capability :preset) the capability preset; and -;; (tokens :) each value fills {{}} at mint. -;; -;; Harvested 2026-07-21 from rsr-julia-library-template-repo (its variant -;; record, the ADR-0002 reference instance) and the dormant scaffoldia registry -;; entry registry/julia/package.ncl. The variant repo remains the full -;; hand-maintained reference (Project.toml [compat] closure, Aqua+JET, -;; Documenter, flagship rubric); this archetype covers the `just repo-init` path. -;; -;; Contract rules: archetypes/README.adoc. Single-line values; no `|` in token -;; values (init's sed delimiter). Tokens omitted here stay UNASSIGNED on -;; purpose: PACKAGE_NAME and MUST_INVARIANTS are per-repo judgement, and an -;; archetype must not write fiction. -(praxis-deed - :schema-version "1.0.0" - :canonical-name "rsr-template-repo-archetype-julia-library" - (metadata - :archetype "julia-library" - :name "julia-library" - :schema_version "0.1.0" - :harvested-from "rsr-julia-library-template-repo variant record + scaffoldia registry julia/package.ncl") - (capability - ; Preset defined in standards .machine_readable/template-capability-gates.toml - :preset "julia-library") - (tokens - :PROJECT_KIND "library" - :PROJECT_DOMAIN "julia" - :LANG_STACK "Julia (1.9+)" - :BUILD_CMD "julia --project=. -e 'using Pkg; Pkg.instantiate()'" - :TEST_CMD "julia --project=. -e 'using Pkg; Pkg.test()'" - :DEPS "Julia General registry via Project.toml [deps] with [compat] closure" - :BUILD_OUTPUT_PATH "src/")) diff --git a/archetypes/julia-library/overlay/.github/workflows/julia-ci.yml.in b/archetypes/julia-library/overlay/.github/workflows/julia-ci.yml.in deleted file mode 100644 index 227f965..0000000 --- a/archetypes/julia-library/overlay/.github/workflows/julia-ci.yml.in +++ /dev/null @@ -1,119 +0,0 @@ -# This workflow is managed by gh actions-lock. -# SPDX-License-Identifier: MPL-2.0 -# {{PROJECT_NAME}} — Julia CI (julia-library archetype) -# -# Pin posture (estate ruling R2, 2026-09-02; D38/D39 resolution 2026-09-19): -# symbolic refs here, pinned by .github/workflows/actions.lock (same dir). -# The lock records come from archetypes/julia-library/actions.lock, merged -# into the spine's lock at mint. Refs resolved 2026-10-09: -# actions/checkout@v7.0.1 = 3d3c42e5aac5ba805825da76410c181273ba90b1 -# julia-actions/setup-julia@v3.0.2 = fa02766e078afaaf09b14210362cee14137e6a32 -# julia-actions/cache@v3.5.0 = 9353db09a0f2bbbdec6f41791918c75d37391b36 -# Regenerate the lock in the SAME PR as any uses: change (estate MUST). - -name: Julia CI - -on: - push: - branches: [main, master] - pull_request: - -# No job here writes to the repository. -permissions: - contents: read - -# No `continue-on-error` on a MUST check (R1–R9): a red job is the gate -# working. Coverage (R4) is reported by the estate's standard coverage -# upload where present; it is not a blocker at template level. -jobs: - fmt: - name: Format (JuliaFormatter) - runs-on: ubuntu-24.04 - steps: - - uses: actions/checkout@v7.0.1 - - uses: julia-actions/setup-julia@v3.0.2 - with: - version: "1" - - name: Check formatting (check mode — never writes in CI) - run: | - julia --project=. -e ' - using Pkg - Pkg.add("JuliaFormatter") - using JuliaFormatter - for f in filter(isfile, Iterators.flatten(( - [joinpath("src", x) for x in readdir("src")], - [joinpath("test", x) for x in readdir("test") if x != "cases"], - [joinpath("test", "cases", x) for x in readdir(joinpath("test", "cases"))], - ))) - text = read(f, String) - formatted = JuliaFormatter.format_string(text) - if text != formatted - @error "not formatted" file=f - exit(1) - end - end' - - jet: - name: Static analysis (JET) - runs-on: ubuntu-24.04 - steps: - - uses: actions/checkout@v7.0.1 - - uses: julia-actions/setup-julia@v3.0.2 - with: - version: "1" - - uses: julia-actions/cache@v3.5.0 - - name: JET analysis (supported API) - # JET's path/string entry points were REMOVED in v0.12.0, having been - # deprecated since v0.11: `report_package(::AbstractString)`, - # `report_package()` and the corresponding `test_package` forms. The - # package must be loaded and its MODULE passed instead — - # `report_package(PkgModule)`. `target_defined_modules` was removed in - # the same release (use `target_modules`). - # - # The previous invocation was `JET.test_package(path=".", - # julia_version="1")`, which is the removed string form. It failed with - # `MethodError: no method matching report_package(; toplevel_logger, - # path, julia_version)` on JET v0.12.2 before any analysis ran. Because - # the analyzer was installed with an unconstrained `Pkg.add`, the - # breakage arrived with an upstream release, not with a template change. - # - # The analyzer now goes into a throwaway environment with a pinned - # version, so it no longer mutates this package's Project.toml on every - # run, and it cannot float to a new major/minor unannounced. - run: | - julia -e ' - using Pkg - Pkg.activate(mktempdir()) - Pkg.develop(path=".") - Pkg.add(Pkg.PackageSpec(name="JET", version="0.12")) - using {{PROJECT_NAME}}, JET - - # Fail with the actual reason rather than a MethodError if the - # upstream API moves again. This is the tripwire for the class of - # defect this job previously shipped: a call that never ran. - if !hasmethod(JET.test_package, (Module,)) - error("JET ", pkgversion(JET), " has no test_package(::Module) — " * - "the julia-library overlay pins an API that no longer exists.") - end - - JET.test_package({{PROJECT_NAME}})' - - test: - name: Test (Test + Aqua) - runs-on: ubuntu-24.04 - strategy: - fail-fast: false - matrix: - # The [compat] floor IS tested — an untested floor is an unproven - # floor (measured estate gap: Axiology-class repos declare julia 1.9 - # but test 1.10/1.11 only). - julia: ["1.9", "1"] - os: [ubuntu-24.04] - steps: - - uses: actions/checkout@v7.0.1 - - uses: julia-actions/setup-julia@v3.0.2 - with: - version: ${{ matrix.julia }} - - uses: julia-actions/cache@v3.5.0 - - name: Pkg.test() - run: julia --project=. -e 'using Pkg; Pkg.test()' diff --git a/archetypes/julia-library/overlay/.github/workflows/julia-docs.yml.in b/archetypes/julia-library/overlay/.github/workflows/julia-docs.yml.in deleted file mode 100644 index 2bd847d..0000000 --- a/archetypes/julia-library/overlay/.github/workflows/julia-docs.yml.in +++ /dev/null @@ -1,58 +0,0 @@ -# This workflow is managed by gh actions-lock. -# SPDX-License-Identifier: MPL-2.0 -# {{PROJECT_NAME}} — docs build & deploy (julia-library archetype) -# -# Fails LOUD while docs/ is absent: a declared `docs-site` capability with -# no build is a defect (criterion 5.2.6, na-honesty). Once -# docs/Project.toml + docs/make.jl + docs/src/ exist, this builds the docs -# and Documenter's own `deploydocs` (called from docs/make.jl) pushes the -# site to gh-pages with GITHUB_TOKEN. -# -# The build runs as two plain steps instead of julia-actions/julia-buildpkg -# and julia-actions/julia-docdeploy. Those two actions are refused at -# startup by the estate's actions allowlist, so a minted repo's Docs -# workflow could never start; the steps below are what they ran. -# -# Pin posture (estate ruling R2 / D38-D39): symbolic refs, pinned by -# .github/workflows/actions.lock. Regenerate the lock in the same PR as -# any uses: change. - -name: Docs - -on: - push: - branches: [main, master] - workflow_dispatch: - -permissions: - contents: read - -jobs: - docs: - name: Build and deploy - runs-on: ubuntu-24.04 - # deploydocs pushes the built site to the gh-pages branch. - permissions: - contents: write - steps: - - uses: actions/checkout@v7.0.1 - # deploydocs pushes with GITHUB_TOKEN from its own env, so the - # checkout keeps no credential for package code run during setup. - with: - persist-credentials: false - - name: Layout gate — fail loud while docs/ is absent - run: | - if [ ! -f docs/Project.toml ] || [ ! -f docs/make.jl ] || [ ! -d docs/src ]; then - echo "::error::docs-site declared but no Documenter build: docs/Project.toml, docs/make.jl and docs/src/ are required. Either add the build or drop the docs-site capability from the repo deed's (rsr-profile) clause." - exit 1 - fi - - uses: julia-actions/setup-julia@v3.0.2 - with: - version: "1" - - uses: julia-actions/cache@v3.5.0 - - name: Instantiate the docs environment - run: julia --project=docs -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()' - - name: Build and deploy (Documenter deploydocs) - run: julia --project=docs docs/make.jl - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/archetypes/julia-library/overlay/Project.toml.in b/archetypes/julia-library/overlay/Project.toml.in deleted file mode 100644 index ce0bc79..0000000 --- a/archetypes/julia-library/overlay/Project.toml.in +++ /dev/null @@ -1,32 +0,0 @@ -# minted by: just repo-init julia-library ({{CURRENT_YEAR}}) -# owner: {{OWNER}} -# -# uuid = "{{PACKAGE_UUID}}" is DERIVED at mint (UUIDv5 over the repo -# identity — see repo-init's julia-library rule); it is stable across -# re-mints of the same repo and is never hand-edited. If the mint could not -# derive it (no uuidgen AND no python3 on the operator machine) it is -# UNASSIGNED and Pkg refuses to load the package until the owner assigns one. - -name = "{{PROJECT_NAME}}" -uuid = "{{PACKAGE_UUID}}" -description = "{{PROJECT_DESCRIPTION}}" -authors = ["{{AUTHOR}} <{{AUTHOR_EMAIL}}"] -license = "MPL-2.0" -version = "0.1.0" - -[deps] - -# Test uuid = stdlib, resolved via Base.identify_package("Test") 2026-09-19 -[extras] -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" - -# Aqua's deps_compat check requires a compat bound for EVERY extra — -# a template that omits these fails its own gate (measured 2026-09-19). -[targets] -test = ["Test", "Aqua"] - -[compat] -julia = "1.9" -Test = "1.9" -Aqua = "0.8" diff --git a/archetypes/julia-library/overlay/src/PACKAGE.jl.in b/archetypes/julia-library/overlay/src/PACKAGE.jl.in deleted file mode 100644 index d526338..0000000 --- a/archetypes/julia-library/overlay/src/PACKAGE.jl.in +++ /dev/null @@ -1,15 +0,0 @@ -module {{PROJECT_NAME}} - -# {{PROJECT_NAME}} — {{PROJECT_DESCRIPTION}} -# -# Forged from the hyperpolymath julia-library archetype ({{CURRENT_YEAR}}). -# Provenance: the repo deed's (provenance) clause, written at mint. -# -# The public API is whatever is `export`ed below; Aqua's exports/ambiguity -# checks gate it from the first mint, so keep exports deliberate. - -# --- public API ---------------------------------------------------------- - -# --- implementation ------------------------------------------------------ - -end # module {{PROJECT_NAME}} diff --git a/archetypes/julia-library/overlay/test/cases/smoke.jl b/archetypes/julia-library/overlay/test/cases/smoke.jl deleted file mode 100644 index e3cddcb..0000000 --- a/archetypes/julia-library/overlay/test/cases/smoke.jl +++ /dev/null @@ -1,11 +0,0 @@ -# smoke.jl — the archetype's load-check case. -# -# This case proves the package LOADS (module resolution, no parse/load -# errors, top-level evaluation clean). It is deliberately not a behaviour -# test: a repo whose only case is this file has a NECESSARY-but-not- -# sufficient green. Replace it with real behaviour tests as they land — -# do not delete it (the Aqua suite already covers shape; this covers load). - -@testset "smoke — package loads" begin - @test @isdefined {{PROJECT_NAME}} -end diff --git a/archetypes/julia-library/overlay/test/runtests.jl b/archetypes/julia-library/overlay/test/runtests.jl deleted file mode 100644 index 0cb4fef..0000000 --- a/archetypes/julia-library/overlay/test/runtests.jl +++ /dev/null @@ -1,31 +0,0 @@ -# {{PROJECT_NAME}} — test entry point (julia-library archetype) -# -# Two suites, in this order: -# 1. Aqua package-shape gate — runs FIRST: a package that does not load -# cleanly, whose deps are not compat-closed, or whose exports are -# ambiguous is rejected before any behaviour test can pass. -# 2. Behaviour — every test/cases/*.jl is included. The shipped case -# (smoke.jl) is a LOAD check only; replace/extend it as real -# behaviour tests land. Until then, `Pkg.test()` passing is necessary -# but NOT sufficient — record that in docs/status/ROADMAP.adoc (smoke-only suite). - -using Test -using {{PROJECT_NAME}} - -@testset "{{PROJECT_NAME}} — Aqua package shape" begin - using Aqua - Aqua.test_all({{PROJECT_NAME}}) -end - -@testset "{{PROJECT_NAME}} — behaviour" begin - # NOTE: no `continue`/`break` inside a `for` inside @testset — Test's - # loop-form detection re-parses the loop body at top level, where - # `continue` is a ParseError. Filter with a guarded call instead. - # (Measured trap, 2026-09-19 — see the Julia testing guide.) - cases = joinpath(@__DIR__, "cases") - if isdir(cases) - for path in sort(readdir(cases, join = true)) - endswith(path, ".jl") && include(path) - end - end -end diff --git a/build/container/Containerfile b/build/container/Containerfile index 6dbff80..5a91d08 100644 --- a/build/container/Containerfile +++ b/build/container/Containerfile @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MPL-2.0 -# {{PROJECT_NAME}} Container Image +# Resource Algebra Container Image # # Multi-stage build template for Chainguard Wolfi base images. # Customise the builder stage for your language and copy the @@ -11,13 +11,13 @@ # svalinn files under build/container/stapeln/ are referenced only as labels. # # Build (engine-agnostic — substitute podman | nerdctl | docker): -# podman build -t {{SERVICE_NAME}}:latest -f build/container/Containerfile . +# podman build -t resource-algebra:latest -f build/container/Containerfile . # # Run: -# podman run -p {{PORT}}:{{PORT}} {{SERVICE_NAME}}:latest +# podman run -p 8080:8080 resource-algebra:latest # # Run with persistent volume: -# podman run -p {{PORT}}:{{PORT}} -v {{SERVICE_NAME}}-data:/data {{SERVICE_NAME}}:latest +# podman run -p 8080:8080 -v resource-algebra-data:/data resource-algebra:latest # # Via the Justfile (auto-detects engine, prefers cerro-torre when present): # just container-build @@ -37,7 +37,7 @@ # COPY Cargo.toml Cargo.lock ./ # COPY src/ ./src/ # RUN cargo build --release -# # Output: /build/target/release/{{SERVICE_NAME}} +# # Output: /build/target/release/resource-algebra # # --- Elixir --- # RUN apk add --no-cache erl27-elixir-1.18 erlang-27 erlang-27-dev git build-base @@ -47,14 +47,14 @@ # ENV MIX_ENV=prod # RUN mix local.hex --force && mix local.rebar --force && \ # mix deps.get --only prod && mix compile && mix release -# # Output: /build/_build/prod/rel/{{SERVICE_NAME}}/ +# # Output: /build/_build/prod/rel/resource-algebra/ # # --- Zig --- # RUN apk add --no-cache zig build-base # COPY build.zig build.zig.zon ./ # COPY src/ ./src/ # RUN zig build -Doptimize=ReleaseFast -# # Output: /build/zig-out/bin/{{SERVICE_NAME}} +# # Output: /build/zig-out/bin/resource-algebra # # Base image: `:latest` is right for a template scaffold (Chainguard rebuilds # Wolfi daily). For PRODUCTION builds, pin by digest for reproducibility/supply- @@ -82,13 +82,13 @@ COPY . . FROM cgr.dev/chainguard/wolfi-base:latest # OCI image labels (compatible with cerro-torre .ctp bundle metadata) -LABEL org.opencontainers.image.title="{{PROJECT_NAME}}" \ - org.opencontainers.image.description="{{PROJECT_DESCRIPTION}}" \ - org.opencontainers.image.url="https://{{FORGE}}/{{OWNER}}/{{REPO}}" \ - org.opencontainers.image.source="https://{{FORGE}}/{{OWNER}}/{{REPO}}" \ - org.opencontainers.image.vendor="{{OWNER}}" \ - org.opencontainers.image.licenses="{{LICENSE}}" \ - org.opencontainers.image.authors="{{AUTHOR}} <{{AUTHOR_EMAIL}}>" \ +LABEL org.opencontainers.image.title="Resource Algebra" \ + org.opencontainers.image.description="The parametric grade algebra shared by the hyperpolymath type family" \ + org.opencontainers.image.url="https://github.com/hyperpolymath/resource-algebra" \ + org.opencontainers.image.source="https://github.com/hyperpolymath/resource-algebra" \ + org.opencontainers.image.vendor="hyperpolymath" \ + org.opencontainers.image.licenses="MPL-2.0" \ + org.opencontainers.image.authors="Jonathan D.A. Jewell " \ dev.cerrotorre.manifest="build/container/stapeln/manifest.toml" \ dev.cerrotorre.gatekeeper="build/container/stapeln/.gatekeeper.yaml" \ dev.stapeln.compose="build/container/stapeln/compose.toml" @@ -109,9 +109,9 @@ WORKDIR /app # TODO: Copy compiled binary/release from builder stage. # Examples: -# COPY --from=builder /build/target/release/{{SERVICE_NAME}} /app/{{SERVICE_NAME}} -# COPY --from=builder /build/_build/prod/rel/{{SERVICE_NAME}} /app/release/ -# COPY --from=builder /build/zig-out/bin/{{SERVICE_NAME}} /app/{{SERVICE_NAME}} +# COPY --from=builder /build/target/release/resource-algebra /app/resource-algebra +# COPY --from=builder /build/_build/prod/rel/resource-algebra /app/release/ +# COPY --from=builder /build/zig-out/bin/resource-algebra /app/resource-algebra # Copy entrypoint script COPY build/container/entrypoint.sh /app/entrypoint.sh @@ -132,7 +132,7 @@ RUN chown -R appuser:appuser /app # Environment variables — customise for your application ENV APP_HOST=[::] -ENV APP_PORT={{PORT}} +ENV APP_PORT=8080 ENV APP_LOG_FORMAT=json ENV APP_DATA_DIR=/data @@ -143,7 +143,7 @@ VOLUME ["/data"] USER appuser # Expose the application port -EXPOSE {{PORT}} +EXPOSE 8080 # Health check — the application must respond 2xx at /health HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/build/container/README.adoc b/build/container/README.adoc index 18d1160..fc76578 100644 --- a/build/container/README.adoc +++ b/build/container/README.adoc @@ -1,6 +1,6 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -= {{PROJECT_NAME}} Containerisation += Resource Algebra Containerisation :toc: left :toclevels: 3 :sectnums: @@ -138,7 +138,7 @@ The sovereign tier wires together the stapeln container stack: (Kennel / Yard / Hunt). The request path in the full stack is: -`svalinn` (edge) → `rokur` (secrets gate) → `{{SERVICE_NAME}}` (app). +`svalinn` (edge) → `rokur` (secrets gate) → `resource-algebra` (app). == Initialise diff --git a/build/container/compose.yaml b/build/container/compose.yaml index 4b5087f..4112547 100644 --- a/build/container/compose.yaml +++ b/build/container/compose.yaml @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MPL-2.0 # -# {{PROJECT_NAME}} — portable compose stack (Tier B) +# Resource Algebra — portable compose stack (Tier B) # # This is the runtime-agnostic, OCI compose-spec file. It works unchanged with: # podman compose -f build/container/compose.yaml up -d @@ -20,23 +20,23 @@ services: # ────────────────────────────────────────────────────────────────────── # Primary application service # ────────────────────────────────────────────────────────────────────── - "{{SERVICE_NAME}}": + "resource-algebra": build: context: .. dockerfile: build/container/Containerfile - image: "{{REGISTRY}}/{{SERVICE_NAME}}:latest" + image: "ghcr.io/hyperpolymath/resource-algebra:latest" ports: - - "{{PORT}}:{{PORT}}" + - "8080:8080" environment: APP_HOST: "[::]" - APP_PORT: "{{PORT}}" + APP_PORT: "8080" APP_LOG_FORMAT: "json" APP_DATA_DIR: "/data" volumes: - - "{{SERVICE_NAME}}-data:/data" + - "resource-algebra-data:/data" restart: unless-stopped healthcheck: - test: ["CMD", "curl", "-sf", "http://localhost:{{PORT}}/health"] + test: ["CMD", "curl", "-sf", "http://localhost:8080/health"] interval: 30s timeout: 5s retries: 3 @@ -50,7 +50,7 @@ services: rokur: image: ghcr.io/hyperpolymath/rokur:latest environment: - ROKUR_BACKEND: "http://{{SERVICE_NAME}}:{{PORT}}" + ROKUR_BACKEND: "http://resource-algebra:8080" ROKUR_LISTEN: "[::]:8081" ROKUR_REQUIRED_SECRETS: "" # comma-separated env names that MUST be set ROKUR_AUDIT_LOG: "/var/log/rokur/audit.jsonl" @@ -60,7 +60,7 @@ services: volumes: - rokur-audit:/var/log/rokur depends_on: - "{{SERVICE_NAME}}": + "resource-algebra": condition: service_healthy restart: unless-stopped healthcheck: @@ -95,5 +95,5 @@ services: retries: 3 volumes: - "{{SERVICE_NAME}}-data": + "resource-algebra-data": rokur-audit: diff --git a/build/container/entrypoint.sh b/build/container/entrypoint.sh index a7a0369..f9b864a 100755 --- a/build/container/entrypoint.sh +++ b/build/container/entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/sh # SPDX-License-Identifier: MPL-2.0 -# {{PROJECT_NAME}} container entrypoint +# Resource Algebra container entrypoint # # Handles signal propagation, startup logging, and health check # preparation before exec-ing into the main application process. @@ -15,7 +15,7 @@ set -e # when Podman sends stop signals (e.g. `podman stop`, `selur-compose down`). cleanup() { - echo "Received shutdown signal — stopping {{SERVICE_NAME}}..." + echo "Received shutdown signal — stopping resource-algebra..." # If the main process is backgrounded, kill it here: # kill "$MAIN_PID" 2>/dev/null || true # wait "$MAIN_PID" 2>/dev/null || true @@ -27,9 +27,9 @@ trap cleanup TERM INT # Startup logging # --------------------------------------------------------------------------- -echo "Starting {{SERVICE_NAME}}..." +echo "Starting resource-algebra..." echo " Host: ${APP_HOST:-[::]}" -echo " Port: ${APP_PORT:-{{PORT}}}" +echo " Port: ${APP_PORT:-8080}" echo " Data: ${APP_DATA_DIR:-/data}" echo " Log: ${APP_LOG_FORMAT:-json}" @@ -56,8 +56,8 @@ fi # # TODO: Replace the command below with your application binary. # Examples: -# exec /app/{{SERVICE_NAME}} -# exec /app/release/bin/{{SERVICE_NAME}} start -# exec /app/{{SERVICE_NAME}} serve --host "${APP_HOST}" --port "${APP_PORT}" +# exec /app/resource-algebra +# exec /app/release/bin/resource-algebra start +# exec /app/resource-algebra serve --host "${APP_HOST}" --port "${APP_PORT}" exec "$@" diff --git a/build/container/stapeln/.gatekeeper.yaml b/build/container/stapeln/.gatekeeper.yaml index 4aac671..1144fab 100644 --- a/build/container/stapeln/.gatekeeper.yaml +++ b/build/container/stapeln/.gatekeeper.yaml @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MPL-2.0 # -# Svalinn gatekeeper policy for {{PROJECT_NAME}} +# Svalinn gatekeeper policy for Resource Algebra # # Controls which operations are permitted through the edge gateway. # This template provides moderate security defaults — not wide-open test @@ -65,9 +65,9 @@ rate_limits: trust: # Only accept .ctp bundles signed by these keys. trusted_signers: - - key_id: "{{SERVICE_NAME}}-release" + - key_id: "resource-algebra-release" algorithm: "Ed25519" - public_key_file: "/etc/svalinn/keys/{{SERVICE_NAME}}-release.pub" + public_key_file: "/etc/svalinn/keys/resource-algebra-release.pub" # Require these attestations on all .ctp bundles. required_attestations: diff --git a/build/container/stapeln/compose.toml b/build/container/stapeln/compose.toml index db42fb9..6e463af 100644 --- a/build/container/stapeln/compose.toml +++ b/build/container/stapeln/compose.toml @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MPL-2.0 # -# {{PROJECT_NAME}} selur-compose configuration +# Resource Algebra selur-compose configuration # # Orchestrates the container stack as verified container bundles (.ctp). # Uses selur zero-copy IPC between services on the same host. @@ -10,7 +10,7 @@ # selur-compose up --detach # Start in background # selur-compose verify # Verify all .ctp signatures # selur-compose ps # Check status -# selur-compose logs -f {{SERVICE_NAME}} # Stream logs +# selur-compose logs -f resource-algebra # Stream logs # selur-compose down # Stop all services # # Fallback (when selur is not installed): this TOML is selur-native and is @@ -25,18 +25,18 @@ version = "1.0" # ============================================================================ # Primary application service -[services.{{SERVICE_NAME}}] -image = "{{REGISTRY}}/{{SERVICE_NAME}}:latest.ctp" -ports = ["{{PORT}}:{{PORT}}"] +[services.resource-algebra] +image = "ghcr.io/hyperpolymath/resource-algebra:latest.ctp" +ports = ["8080:8080"] environment = { APP_HOST = "[::]", - APP_PORT = "{{PORT}}", + APP_PORT = "8080", APP_LOG_FORMAT = "json", APP_DATA_DIR = "/data", } -volumes = ["{{SERVICE_NAME}}-data:/data"] +volumes = ["resource-algebra-data:/data"] restart = "always" -healthcheck = { test = "curl -sf http://localhost:{{PORT}}/health", interval = "30s", timeout = "5s", retries = 3 } +healthcheck = { test = "curl -sf http://localhost:8080/health", interval = "30s", timeout = "5s", retries = 3 } # Rokur secrets gate: refuses to start (and refuses to proxy) unless the # declared secrets are present; emits a structured audit log of every access. @@ -45,14 +45,14 @@ healthcheck = { test = "curl -sf http://localhost:{{PORT}}/health", interval = " image = "ghcr.io/hyperpolymath/rokur:latest.ctp" ports = ["8081:8081"] environment = { - ROKUR_BACKEND = "http://{{SERVICE_NAME}}:{{PORT}}", + ROKUR_BACKEND = "http://resource-algebra:8080", ROKUR_LISTEN = "[::]:8081", ROKUR_REQUIRED_SECRETS = "", ROKUR_AUDIT_LOG = "/var/log/rokur/audit.jsonl", ROKUR_LOG_FORMAT = "json", } volumes = ["rokur-audit:/var/log/rokur"] -depends_on = ["{{SERVICE_NAME}}"] +depends_on = ["resource-algebra"] restart = "always" healthcheck = { test = "curl -sf http://localhost:8081/health", interval = "30s", timeout = "5s", retries = 3 } @@ -75,7 +75,7 @@ healthcheck = { test = "curl -sf http://localhost:80/health", interval = "30s", # Volumes # ============================================================================ -[volumes.{{SERVICE_NAME}}-data] +[volumes.resource-algebra-data] driver = "local" [volumes.rokur-audit] diff --git a/build/container/stapeln/ct-build.sh b/build/container/stapeln/ct-build.sh index c825b84..13a1d74 100755 --- a/build/container/stapeln/ct-build.sh +++ b/build/container/stapeln/ct-build.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: MPL-2.0 # -# {{PROJECT_NAME}} — Cerro Torre build, sign, and verify pipeline +# Resource Algebra — Cerro Torre build, sign, and verify pipeline # # Builds the container image, packages it as a verified .ctp bundle, # signs it with Ed25519, and verifies the result. Gracefully degrades @@ -18,8 +18,8 @@ # CT_KEY_ID=my-key ./ct-build.sh # Use specific signing key # # Environment variables: -# CT_KEY_ID — Signing key identifier (default: {{SERVICE_NAME}}-release) -# CT_REGISTRY — OCI registry to push to (default: {{REGISTRY}}) +# CT_KEY_ID — Signing key identifier (default: resource-algebra-release) +# CT_REGISTRY — OCI registry to push to (default: ghcr.io/hyperpolymath) # CT_TAG — Image tag (default: latest) set -euo pipefail @@ -44,15 +44,15 @@ for arg in "$@"; do fi done -CT_KEY_ID="${CT_KEY_ID:-{{SERVICE_NAME}}-release}" -CT_REGISTRY="${CT_REGISTRY:-{{REGISTRY}}}" +CT_KEY_ID="${CT_KEY_ID:-resource-algebra-release}" +CT_REGISTRY="${CT_REGISTRY:-ghcr.io/hyperpolymath}" CT_TAG="${CT_TAG:-latest}" -IMAGE_NAME="{{SERVICE_NAME}}" +IMAGE_NAME="resource-algebra" FULL_IMAGE="${CT_REGISTRY}/${IMAGE_NAME}:${CT_TAG}" CTP_FILE="${SCRIPT_DIR}/${IMAGE_NAME}-${CT_TAG}.ctp" -echo "=== {{PROJECT_NAME}} Cerro Torre Build Pipeline ===" +echo "=== Resource Algebra Cerro Torre Build Pipeline ===" echo " Image: ${FULL_IMAGE}" echo " Key: ${CT_KEY_ID}" echo " Bundle: ${CTP_FILE}" diff --git a/build/container/stapeln/deploy.k9.ncl b/build/container/stapeln/deploy.k9.ncl index 7282738..5c4288b 100644 --- a/build/container/stapeln/deploy.k9.ncl +++ b/build/container/stapeln/deploy.k9.ncl @@ -1,6 +1,6 @@ K9! # SPDX-License-Identifier: MPL-2.0 -# deploy.k9.ncl — {{PROJECT_NAME}} deployment component (Hunt level) +# deploy.k9.ncl — Resource Algebra deployment component (Hunt level) # # k9-svc deployment specification with full pedigree (L1-L5). # Security Level: 'Hunt (requires cryptographic handshake for execution). @@ -19,11 +19,11 @@ let component_pedigree = { # L1: The Snout — Identity # ───────────────────────────────────────────────────────────── metadata = { - name = "{{SERVICE_NAME}}-deploy", - version = "{{VERSION}}", + name = "resource-algebra-deploy", + version = "0.1.0", breed = "application/vnd.k9+nickel", magic_number = "K9!", - description = "{{PROJECT_NAME}} deployment component (Hunt level)", + description = "Resource Algebra deployment component (Hunt level)", }, # ───────────────────────────────────────────────────────────── @@ -97,8 +97,8 @@ let deployment = { # Container configuration container = { - image = "{{REGISTRY}}/{{SERVICE_NAME}}", - port = {{PORT}}, + image = "ghcr.io/hyperpolymath/resource-algebra", + port = 8080, health_check = "/health", readiness_check = "/ready", }, @@ -117,7 +117,7 @@ let scripts = { pre_deploy = m%" #!/bin/sh set -eu -echo "K9: Pre-deployment validation for {{SERVICE_NAME}}..." +echo "K9: Pre-deployment validation for resource-algebra..." cd build/container/stapeln && selur-compose verify || podman compose --file ../compose.yaml config echo "K9: Validation passed." "%, @@ -127,7 +127,7 @@ echo "K9: Validation passed." #!/bin/sh set -eu ENV="${1:-dev}" -echo "K9: Deploying {{SERVICE_NAME}} to $ENV environment..." +echo "K9: Deploying resource-algebra to $ENV environment..." cd build/container/stapeln ./ct-build.sh selur-compose up --detach || podman compose --file ../compose.yaml up --detach @@ -138,7 +138,7 @@ echo "K9: Deployment to $ENV complete." rollback = m%" #!/bin/sh set -eu -echo "K9: Rolling back {{SERVICE_NAME}} deployment..." +echo "K9: Rolling back resource-algebra deployment..." cd build/container/stapeln selur-compose down || podman compose --file ../compose.yaml down echo "K9: Rollback complete." @@ -147,7 +147,7 @@ echo "K9: Rollback complete." # Export the component { - pedigree = component_pedigree & { name = "{{SERVICE_NAME}}-deploy" }, + pedigree = component_pedigree & { name = "resource-algebra-deploy" }, deployment = deployment, scripts = scripts, diff --git a/build/container/stapeln/manifest.toml b/build/container/stapeln/manifest.toml index f55fcb3..c9a2189 100644 --- a/build/container/stapeln/manifest.toml +++ b/build/container/stapeln/manifest.toml @@ -1,27 +1,27 @@ # SPDX-License-Identifier: MPL-2.0 # -# Cerro Torre manifest for {{PROJECT_NAME}} .ctp bundle +# Cerro Torre manifest for Resource Algebra .ctp bundle # # This manifest describes the container image for verified # container packaging. Used by `ct pack` to create .ctp bundles. [metadata] -name = "{{SERVICE_NAME}}" -version = "{{VERSION}}" +name = "resource-algebra" +version = "0.1.0" revision = 1 -summary = "{{PROJECT_DESCRIPTION}}" +summary = "The parametric grade algebra shared by the hyperpolymath type family" description = """ -{{PROJECT_NAME}} — containerised service packaged as a verified +Resource Algebra — containerised service packaged as a verified cerro-torre .ctp bundle with Ed25519 signing and full provenance tracking. """ -license = "{{LICENSE}}" -homepage = "https://{{FORGE}}/{{OWNER}}/{{REPO}}" -maintainer = "{{AUTHOR}} <{{EMAIL}}>" +license = "MPL-2.0" +homepage = "https://github.com/hyperpolymath/resource-algebra" +maintainer = "Jonathan D.A. Jewell " [provenance] -upstream = "https://{{FORGE}}/{{OWNER}}/{{REPO}}" -import_date = {{CURRENT_DATE}}T00:00:00Z +upstream = "https://github.com/hyperpolymath/resource-algebra" +import_date = 2026-10-14T00:00:00Z [dependencies] runtime = ["ca-certificates", "curl"] @@ -32,10 +32,10 @@ system = "podman" [build.environment] APP_HOST = "[::]" -APP_PORT = "{{PORT}}" +APP_PORT = "8080" [outputs] -primary = "{{SERVICE_NAME}}" +primary = "resource-algebra" split = [] [attestations] @@ -54,7 +54,7 @@ drop = ["ALL"] add = ["NET_BIND_SERVICE"] [security.network] -listen_tcp = [{{PORT}}] +listen_tcp = [8080] [security.filesystem] read = ["/app/", "/data/"] diff --git a/build/container/stapeln/rokur.toml b/build/container/stapeln/rokur.toml index 361c1ea..0d2f7b0 100644 --- a/build/container/stapeln/rokur.toml +++ b/build/container/stapeln/rokur.toml @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MPL-2.0 # -# Rokur secrets-gate configuration for {{PROJECT_NAME}} +# Rokur secrets-gate configuration for Resource Algebra # # Rokur (stapeln container stack) is a secrets-management gate: a small # Deno service that sits in front of the application and refuses to pass @@ -16,8 +16,8 @@ # # or, in the stack, via compose (see compose.toml / compose.yaml) [metadata] -name = "{{SERVICE_NAME}}-gate" -version = "{{VERSION}}" +name = "resource-algebra-gate" +version = "0.1.0" # ============================================================================ # Listener / routing (env: ROKUR_LISTEN, ROKUR_BACKEND) @@ -27,7 +27,7 @@ version = "{{VERSION}}" # Address rokur listens on (inside the container). listen = "[::]:8081" # The upstream application rokur fronts once the gate is satisfied. -backend = "http://{{SERVICE_NAME}}:{{PORT}}" +backend = "http://resource-algebra:8080" # Health/readiness endpoints rokur exposes for vordr / orchestrators. health_path = "/health" ready_path = "/ready" diff --git a/build/container/stapeln/vordr.toml b/build/container/stapeln/vordr.toml index 90084b4..12f1e18 100644 --- a/build/container/stapeln/vordr.toml +++ b/build/container/stapeln/vordr.toml @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MPL-2.0 # -# Vordr runtime monitoring configuration for {{PROJECT_NAME}} +# Vordr runtime monitoring configuration for Resource Algebra # # Vordr watches container health, detects crashes, tracks resource usage, # and emits structured logs. It runs alongside the application stack and @@ -12,8 +12,8 @@ # vordr report [metadata] -name = "{{SERVICE_NAME}}" -version = "{{VERSION}}" +name = "resource-algebra" +version = "0.1.0" # ============================================================================ # Health Monitoring @@ -25,13 +25,13 @@ version = "{{VERSION}}" [health] # Primary health endpoint — must return 2xx. -endpoint = "http://localhost:{{PORT}}/health" +endpoint = "http://localhost:8080/health" interval = "30s" timeout = "5s" failure_threshold = 3 # Readiness endpoint — checked during startup and after restarts. -readiness_endpoint = "http://localhost:{{PORT}}/ready" +readiness_endpoint = "http://localhost:8080/ready" readiness_timeout = "10s" # Action on failure: "alert" (log + notify) or "restart" (alert + restart). @@ -96,7 +96,7 @@ format = "json" level = "info" # Write vordr logs to stdout (captured by Podman) and optionally to file. output = "stdout" -# file = "/var/log/vordr/{{SERVICE_NAME}}.log" +# file = "/var/log/vordr/resource-algebra.log" # ============================================================================ # Notifications (optional) @@ -111,7 +111,7 @@ output = "stdout" # on = ["failure", "recovery", "resource_critical"] # [notifications.email] -# to = "{{EMAIL}}" -# from = "vordr@{{SERVICE_NAME}}.local" +# to = "j.d.a.jewell@open.ac.uk" +# from = "vordr@resource-algebra.local" # smtp = "smtp://localhost:25" # on = ["failure", "resource_critical"] diff --git a/build/docs-seed/README.adoc b/build/docs-seed/README.adoc deleted file mode 100644 index c4e0266..0000000 --- a/build/docs-seed/README.adoc +++ /dev/null @@ -1,87 +0,0 @@ -// SPDX-License-Identifier: CC-BY-SA-4.0 -// Copyright (c) Jonathan D.A. Jewell -// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) -= Documentation Template -:revdate: 2026-05-26 -:status: SEED - -This directory is the *minimum heavy-wiki seed* for a hyperpolymath repo. - -[NOTE] -==== -*This is NOT a duplicate of `docs/`.* `docs/` holds *this* template's own, -fully-written documentation; `build/docs-seed/` is the un-filled *seed* (with -`{{PLACEHOLDER}}` tokens and illustrative example paths) that is copied into a -*newly scaffolded* repo's `docs/`. Example paths inside `build/docs-seed/` -describe a hypothetical downstream project, so they intentionally do not resolve -against this template's tree (see `.hypatia-ignore` for the matching SD022 -carve-out). -==== - -== How adoption works - -`just repo-init` does the first two steps for you. It was previously a manual -four-step procedure that nothing automated, with the result that minted repos -carried the un-filled seed *and* the spine's own rendered docs side by side. - -. **Automatic** — repo-init copies this seed over `docs/` before substitution. - It is an *overlay*: these files win on collision, and everything else the - spine ships under `docs/` survives (notably `docs/governance/` and - `docs/legal/`, which `build/just/validate.just` requires). This README is not - copied. The seed directory is then removed from your repo alongside - `archetypes/` and `build/templates/`. -. **Automatic** — `{{PROJECT_NAME}}`, `{{OWNER}}`, `{{AUTHOR}}`, - `{{AUTHOR_EMAIL}}` and `{{CURRENT_YEAR}}` are rendered by the same - substitution pass as the rest of the tree. -. **Yours to do** — delete any section that genuinely does not apply. Do not - leave empty scaffolding: the 2026-05-26 doc-debt audit counted 61 estate - repos with empty `docs/` dirs as its own category of debt. -. **Yours to do** — add repo-specific sections. - -== What's in here - -[cols="1,2", options="header"] -|=== -| File | Purpose - -| `README.adoc` | This file. NOT copied into your repo — it documents the seed itself. -| `architecture.adoc` | System overview, component diagram, data flow. -| `usage.adoc` | End-user / consumer perspective. How to invoke / consume / depend on this repo. -| `contributing.adoc` | Developer perspective. Local-dev setup, test running, PR conventions. -| `troubleshooting.adoc` | FAQ-style. Known failure modes + recovery paths. -| `decisions/0001-template.adoc` | ADR (Architecture Decision Record) template. Copy → `0002-...`, `0003-...` etc. -|=== - -== Why these five sections - -The 2026-05-26 estate documentation-debt audit -(link:https://github.com/hyperpolymath/standards/blob/main/docs/audits/2026-05-26-estate-documentation-debt.md[standards#197]) -identified four canonical perspectives every repo should answer: - -. **What is it** — README answers (lives at repo root, not here). -. **How is it built** — `architecture.adoc`. -. **How do I use it** — `usage.adoc`. -. **How do I help build it** — `contributing.adoc`. -. **What goes wrong** — `troubleshooting.adoc`. - -ADRs are the long-running historical record — they don't fit any of -the above but are essential for explaining *why* a particular shape -was chosen. - -== What's intentionally NOT in here - -This seed deliberately omits: - -* `proof-debt.md` — only relevant to proof-bearing repos; see - link:https://github.com/hyperpolymath/standards/blob/main/docs/TRUSTED-BASE-REDUCTION-POLICY.adoc[standards#203]. -* `CHANGELOG.md` — generated automatically by - link:https://github.com/hyperpolymath/standards/blob/main/.github/workflows/changelog-reusable.yml[`changelog-reusable.yml`] - (standards#206), don't write by hand. -* `tech-debt-YYYY-MM-DD.md` — generated by the periodic estate audit. - -== "Heavily-developed wiki" bar (audit definition) - -A repo meets the audit's bar when `docs/` contains ≥ 10 substantive -markdown / asciidoc / rst files with topical organisation. Adopting -this seed gets you to ~5 — add repo-specific deep-dives (typically -one per major component or invariant) to clear the bar. diff --git a/build/guix.scm b/build/guix.scm index adbe8c3..204831e 100755 --- a/build/guix.scm +++ b/build/guix.scm @@ -1,9 +1,9 @@ ;; SPDX-License-Identifier: MPL-2.0 ;; SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) ;; -;; guix.scm — rsr-template-repo as a Guix package. +;; guix.scm — resource-algebra as a Guix package. ;; -;; guix build -f build/guix.scm # installs the source tree to share/rsr-template-repo +;; guix build -f build/guix.scm # installs the source tree to share/resource-algebra ;; guix shell -D -f build/guix.scm # the full development toolchain ;; ;; This is a SOURCE package, and says so: a hermetic compiled build needs this @@ -28,17 +28,17 @@ '(".git" "target" ".eval" "node_modules" "_build" "deps" "zig-out" ".zig-cache" "dist-newstyle")) (package - (name "rsr-template-repo") + (name "resource-algebra") (version "0.1.0") - (source (local-file %source-dir "rsr-template-repo-checkout" + (source (local-file %source-dir "resource-algebra-checkout" #:recursive? #t #:select? (lambda (file stat) (not (member (basename file) %ignored))))) (build-system copy-build-system) - (arguments (list #:install-plan #~'(("." "share/rsr-template-repo/")))) + (arguments (list #:install-plan #~'(("." "share/resource-algebra/")))) (native-inputs (map spec->input (list "git" "bash" "coreutils" "nss-certs" "just" "mise" "shellcheck" "chez-scheme" "gmp" "gcc-toolchain" "zig"))) - (home-page "https://github.com/hyperpolymath/rsr-template-repo") + (home-page "https://github.com/hyperpolymath/resource-algebra") (synopsis "Rhodium Standard Repository template") (description "The estate's repository template: the RSR layout, an Idris2 ABI seam with a Zig FFI, CI gates, and the provisioning set (launcher, Justfile, diff --git a/build/just/assess.just b/build/just/assess.just index c4c382f..98e93a9 100644 --- a/build/just/assess.just +++ b/build/just/assess.just @@ -250,7 +250,7 @@ verify: check_file "LICENSE" check_community_file "CONTRIBUTING" check_either "README.adoc" "README.md" - # Identity, state and ecosystem live in the repo deed (rsr-template-repo#209). + # Identity, state and ecosystem live in the repo deed (resource-algebra#209). if DEED=$(bash scripts/deed-field.sh --find . 2>/dev/null) && bash scripts/deed-field.sh --has "$DEED" status; then echo " OK: $DEED (status, meta, ecosystem)" else diff --git a/build/just/groove.just b/build/just/groove.just index 2b2d7ae..78eb8c7 100644 --- a/build/just/groove.just +++ b/build/just/groove.just @@ -78,8 +78,8 @@ verify-template: fi # Check for template defaults still present - if grep -q 'rsr-template-repo' Justfile 2>/dev/null; then - echo "⚠ Justfile still references 'rsr-template-repo' — update project name" + if grep -q 'resource-algebra' Justfile 2>/dev/null; then + echo "⚠ Justfile still references 'resource-algebra' — update project name" FOUND=1 fi diff --git a/build/just/provision-lib.sh b/build/just/provision-lib.sh index fb1d942..6ff41b5 100755 --- a/build/just/provision-lib.sh +++ b/build/just/provision-lib.sh @@ -45,7 +45,7 @@ have() { command -v "$1" >/dev/null 2>&1; } # Where this repository keeps each part of the set. A file sits at the root only # when something needs it there (launcher.sh, Justfile, mise.toml, mise.lock); # the Guix trio and the warm-ups follow the layout the repository already has -# (rsr-template-repo keeps build/guix.scm and docs/onboarding/llm-warmup-*.adoc). +# (resource-algebra keeps build/guix.scm and docs/onboarding/llm-warmup-*.adoc). # This is the ONE answer: provision-check.sh asks it through `guix-dir` and # `set-files` rather than keeping its own copy. guix_dir() { if [ -f build/guix.scm ]; then echo build; else echo .; fi; } @@ -85,7 +85,7 @@ ARCHETYPE="$(deed archetype "")" # --------------------------------------------------------------------------- # Language detection. Markers at the root or one level down (workspaces). The # estate ABI/FFI pattern nests deeper: Idris2 to two levels down (src/abi/*.ipkg), -# Zig to three (ffi/zig/build.zig, and rsr-template-repo's src/interface/ffi/build.zig: +# Zig to three (ffi/zig/build.zig, and resource-algebra's src/interface/ffi/build.zig: # 74 repos have their only build.zig at that depth, measured 2026-09-30). # Order matters only for display. `docs` is reported when nothing else is. first() { find . -maxdepth "${2:-2}" -not -path './.git/*' -not -path '*/node_modules/*' -not -path './target/*' -name "$1" -print -quit 2>/dev/null; } diff --git a/build/just/repo-init.just b/build/just/repo-init.just index 8ae21bd..4ca36f7 100644 --- a/build/just/repo-init.just +++ b/build/just/repo-init.just @@ -14,11 +14,28 @@ repo-init archetype="": #!/usr/bin/env bash set -euo pipefail - # Non-interactive support: if RSR_NON_INTERACTIVE is set, dummy-out 'read'. - # This prevents blocking on input and seamlessly uses environment variables. - if [ -n "${RSR_NON_INTERACTIVE:-}" ]; then - read() { return 0; } - fi + # ask PROMPT VAR — every prompt below goes through this, never through a + # bare `read`. Interactive: read VAR from the terminal. Non-interactive + # (RSR_NON_INTERACTIVE set, the scaffoldia / CI path): touch no stdin and + # keep VAR's value from the environment, or empty when it has none. + # + # This replaced `read() { return 0; }`, which shadowed the builtin for the + # WHOLE recipe. Measured 2026-10-14 minting resource-algebra: + # * a prompt the environment did not answer left its variable unset, so + # `set -u` killed the mint at OPENSSF_BP_ID, after docs/ had already + # been overwritten by the seed; + # * every `while read -r` loop below inherited the no-op, which succeeds + # without reading, so the substitution pass spun forever on an unbound + # `file`. + # The non-interactive mint could therefore never complete, and the e2e test + # drove only the interactive path, so nothing noticed. + ask() { + if [ -n "${RSR_NON_INTERACTIVE:-}" ]; then + printf -v "$2" '%s' "${!2:-}" + else + read -rp "$1" "$2" + fi + } echo "═══════════════════════════════════════════════════" echo " RSR Project Bootstrap" @@ -54,10 +71,10 @@ repo-init archetype="": fi # --- Required values (pre-filled from defaults if available) --- - read -rp "Project name (human-readable, e.g. My Project): " PROJECT_NAME + ask "Project name (human-readable, e.g. My Project): " PROJECT_NAME [ -z "$PROJECT_NAME" ] && echo "Error: project name required" && exit 1 - read -rp "Repository slug (e.g. my-project): " REPO + ask "Repository slug (e.g. my-project): " REPO [ -z "$REPO" ] && echo "Error: repo slug required" && exit 1 # A Julia package repo is named after its package: `.jl`, where # is the package's own identifier (UpperCamelCase by Julia @@ -71,23 +88,23 @@ repo-init archetype="": exit 1 fi - read -rp "Owner [${OWNER:-}]: " _OWNER + ask "Owner [${OWNER:-}]: " _OWNER OWNER="${_OWNER:-${OWNER:-}}" [ -z "$OWNER" ] && echo "Error: owner required" && exit 1 - read -rp "Author full name [${AUTHOR:-}]: " _AUTHOR + ask "Author full name [${AUTHOR:-}]: " _AUTHOR AUTHOR="${_AUTHOR:-${AUTHOR:-}}" [ -z "$AUTHOR" ] && echo "Error: author name required" && exit 1 - read -rp "Author email [${AUTHOR_EMAIL:-}]: " _AUTHOR_EMAIL + ask "Author email [${AUTHOR_EMAIL:-}]: " _AUTHOR_EMAIL AUTHOR_EMAIL="${_AUTHOR_EMAIL:-${AUTHOR_EMAIL:-}}" [ -z "$AUTHOR_EMAIL" ] && echo "Error: email required" && exit 1 # --- Optional values (pre-filled from defaults if available) --- - read -rp "Author organization [${AUTHOR_ORG:-none}]: " _AUTHOR_ORG + ask "Author organization [${AUTHOR_ORG:-none}]: " _AUTHOR_ORG AUTHOR_ORG="${_AUTHOR_ORG:-${AUTHOR_ORG:-}}" - read -rp "Previous/alt email [${AUTHOR_EMAIL_ALT:-none}]: " _AUTHOR_EMAIL_ALT + ask "Previous/alt email [${AUTHOR_EMAIL_ALT:-none}]: " _AUTHOR_EMAIL_ALT AUTHOR_EMAIL_ALT="${_AUTHOR_EMAIL_ALT:-${AUTHOR_EMAIL_ALT:-}}" # ORCID iD for CITATION.cff. Defaults from AUTHOR_ORCID in the defaults @@ -96,7 +113,7 @@ repo-init archetype="": # Blank drops the orcid line below. An all-zeros placeholder is worse than # no line: citation tools resolve it and attribute the work to nobody. AUTHOR_ORCID="${AUTHOR_ORCID:-$(git config --get user.orcid 2>/dev/null || true)}" - read -rp "Author ORCID iD [${AUTHOR_ORCID:-none}]: " _AUTHOR_ORCID + ask "Author ORCID iD [${AUTHOR_ORCID:-none}]: " _AUTHOR_ORCID AUTHOR_ORCID="${_AUTHOR_ORCID:-${AUTHOR_ORCID:-}}" AUTHOR_ORCID="${AUTHOR_ORCID#http*://orcid.org/}" if [ -n "$AUTHOR_ORCID" ]; then @@ -119,24 +136,24 @@ repo-init archetype="": fi fi - read -rp "Project description []: " PROJECT_DESCRIPTION + ask "Project description []: " PROJECT_DESCRIPTION - read -rp "Forge domain [${FORGE:-github.com}]: " _FORGE + ask "Forge domain [${FORGE:-github.com}]: " _FORGE FORGE="${_FORGE:-${FORGE:-github.com}}" - read -rp "Security contact email [${SECURITY_EMAIL:-$AUTHOR_EMAIL}]: " _SECURITY_EMAIL + ask "Security contact email [${SECURITY_EMAIL:-$AUTHOR_EMAIL}]: " _SECURITY_EMAIL SECURITY_EMAIL="${_SECURITY_EMAIL:-${SECURITY_EMAIL:-$AUTHOR_EMAIL}}" - read -rp "Conduct contact email [${CONDUCT_EMAIL:-$AUTHOR_EMAIL}]: " _CONDUCT_EMAIL + ask "Conduct contact email [${CONDUCT_EMAIL:-$AUTHOR_EMAIL}]: " _CONDUCT_EMAIL CONDUCT_EMAIL="${_CONDUCT_EMAIL:-${CONDUCT_EMAIL:-$AUTHOR_EMAIL}}" - read -rp "Project type (library|binary|monorepo|service|website) [library]: " PROJECT_TYPE + ask "Project type (library|binary|monorepo|service|website) [library]: " PROJECT_TYPE PROJECT_TYPE="${PROJECT_TYPE:-library}" - read -rp "Website URL [https://${FORGE}/${OWNER}/${REPO}]: " WEBSITE + ask "Website URL [https://${FORGE}/${OWNER}/${REPO}]: " WEBSITE WEBSITE="${WEBSITE:-https://${FORGE}/${OWNER}/${REPO}}" - read -rp "OpenSSF Best Practices project ID (blank if not yet registered) []: " OPENSSF_BP_ID + ask "OpenSSF Best Practices project ID (blank if not yet registered) []: " OPENSSF_BP_ID # --- Container values (optional — only relevant if build/container/ exists) --- # The default service name is the slug in lower case: an OCI image name @@ -144,16 +161,16 @@ repo-init archetype="": if [ -d "build/container" ]; then echo "" echo "── Container configuration (optional) ─────────" - read -rp "Service name [${REPO,,}]: " _SERVICE_NAME - SERVICE_NAME="${_SERVICE_NAME:-${REPO,,}}" - read -rp "Primary port [8080]: " _PORT - PORT="${_PORT:-8080}" - read -rp "Container registry [ghcr.io/${OWNER}]: " _REGISTRY - REGISTRY="${_REGISTRY:-ghcr.io/${OWNER}}" + ask "Service name [${SERVICE_NAME:-${REPO,,}}]: " _SERVICE_NAME + SERVICE_NAME="${_SERVICE_NAME:-${SERVICE_NAME:-${REPO,,}}}" + ask "Primary port [${PORT:-8080}]: " _PORT + PORT="${_PORT:-${PORT:-8080}}" + ask "Container registry [${REGISTRY:-ghcr.io/${OWNER}}]: " _REGISTRY + REGISTRY="${_REGISTRY:-${REGISTRY:-ghcr.io/${OWNER}}}" else - SERVICE_NAME="${REPO,,}" - PORT="8080" - REGISTRY="ghcr.io/${OWNER}" + SERVICE_NAME="${SERVICE_NAME:-${REPO,,}}" + PORT="${PORT:-8080}" + REGISTRY="${REGISTRY:-ghcr.io/${OWNER}}" fi # --- Derived values --- @@ -201,7 +218,7 @@ repo-init archetype="": echo " Year: $CURRENT_YEAR" echo "────────────────────────────────────────────────" echo "" - read -rp "Proceed? [Y/n] " CONFIRM + ask "Proceed? [Y/n] " CONFIRM [[ "${CONFIRM:-Y}" =~ ^[Nn] ]] && echo "Aborted." && exit 0 echo "" @@ -349,9 +366,17 @@ repo-init archetype="": # in the new repo's README, and it trips the placeholder gate on every # subsequent push, which trains people to ignore a red CI. No id yet means # no badge yet; add it when you register at bestpractices.dev. + # + # Line deletion is only safe where the line is the whole construct. It + # used to run on docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc too, where + # the token's line is one CELL of a six-column table row: deleting it + # left an incomplete row, asciidoctor reported "dropping cells from + # incomplete row", and Estate Rules' render gate failed in every child + # minted without an OpenSSF id (measured 2026-10-14 on resource-algebra). + # That document names the README's tokens rather than using them, so it + # now spells them as plain names and needs no pass here. if [ -z "$OPENSSF_BP_ID" ]; then sed -i "/bestpractices\.dev\/projects\/${LB}OPENSSF_BP_ID${RB}/d" README.adoc 2>/dev/null || true - sed -i "/${LB}OPENSSF_PROJECT_ID${RB}/d" docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc 2>/dev/null || true fi # Same rule for the ORCID iD: CFF makes `orcid` optional, a wrong one is not. if [ -z "$AUTHOR_ORCID" ]; then @@ -369,9 +394,22 @@ repo-init archetype="": fi # Replace in all text files (skip .git, LICENSE text, and binaries) + # + # Skip just files too. In a Justfile or *.just module, double braces are + # just's OWN interpolation syntax, never a template token: every one in + # the template is a just variable or parameter. The lowercase project + # token is spelled exactly like just's interpolation of the `project` + # variable, so this pass used to freeze it into the identifier form. + # Measured 2026-10-14 minting resource-algebra: 7 Justfile lines, the + # contractile Justfile copy and container.just's image tag all became the + # literal `resource_algebra` instead of following `project := + # "resource-algebra"` (docs/man/resource_algebra.1, an image tagged with + # the underscored name). The self-name pass below still rewrites the + # template literal in these files; that is the edit they actually need. find . -type f \ -not -path './.git/*' \ -not -name 'MPL-2.0.txt' \ + -not -name 'Justfile' -not -name '*.just' \ -not -name '*.png' -not -name '*.jpg' -not -name '*.gif' \ -not -name '*.woff' -not -name '*.woff2' \ | while read -r file; do @@ -437,8 +475,16 @@ repo-init archetype="": # (ADRs, its changelog, its own audit, and this recipe itself — which # holds PARENT_SLUG) are skipped wholesale, and within every other file # any line that names the parent AS a parent is left byte-for-byte alone. + # + # A line that names the template as something to DETECT is protected too: + # the deed's state-validation `:reject-if-contains ("rsr-template-repo")` + # flags state files still carrying template text. Rewritten to the child's + # own slug it rejected every legitimate state file of the child (measured + # 2026-10-14 on resource-algebra) - the same "detector eaten by the + # filling" defect the :reject-if-matches comment in the deed records for + # tokens. if [ "$REPO" != "rsr-template-repo" ]; then - SELF_PROV='instantiated-from|parent|upstream|chain =|lineage|minted from|created from|Template: ' + SELF_PROV='instantiated-from|parent|upstream|chain =|lineage|minted from|created from|Template: |reject-if-contains' find . -type f \ -not -path './.git/*' \ -not -path './build/just/repo-init.just' \ @@ -806,6 +852,28 @@ repo-init archetype="": done fi + # ── Regenerate what is DERIVED from the deed and the tree ─────────────── + # CLAUDE.md's arrival pack and the repository map are generated files, and + # until now the mint left both describing the TEMPLATE. The self-name pass + # swaps the slug inside them, which is worse than leaving them alone: the + # pack then states the template's uuid and clade, maturity `production`, + # and pipeline position `foundation` with chain "standards -> + # -> (every estate repo)", under the child's name. Measured 2026-10-14 on + # resource-algebra. The map also kept the archetypes/ root entry, + # which this recipe deletes, so Estate Rules' map-freshness step failed in + # every minted child. Both are regenerated here, after every deed clause + # above is written and every template-only path is gone. Fail-closed: a + # generator that cannot run (no nickel on PATH) stops the mint rather than + # shipping a pack that names the wrong repository. + if [ -f .machine_readable/arrival-pack/generate.sh ]; then + bash .machine_readable/arrival-pack/generate.sh + echo " arrival pack: CLAUDE.md regenerated from ${DEED_OUT}" + fi + if [ -f scripts/gen-repo-map.sh ]; then + bash scripts/gen-repo-map.sh . >/dev/null + echo " repo map: docs/architecture/REPOSITORY-MAP.adoc regenerated" + fi + echo "" echo "── Validation ───────────────────────────────────" diff --git a/build/just/validate.just b/build/just/validate.just index dc6d724..477269f 100644 --- a/build/just/validate.just +++ b/build/just/validate.just @@ -35,7 +35,7 @@ validate-rsr: [ -f "$f" ] || MISSING="$MISSING $f" done # Identity, lifecycle, maintenance axes, the anchor and the maintenance - # policies are all clauses of the repo deed (rsr-template-repo#209). + # policies are all clauses of the repo deed (resource-algebra#209). DEED=$(bash scripts/deed-field.sh --find . || true) if [ -n "$DEED" ] && bash scripts/deed-field.sh --has "$DEED" status; then # Prints the field, or nothing when it is absent. diff --git a/build/manifest.scm b/build/manifest.scm index a05df9c..607826a 100644 --- a/build/manifest.scm +++ b/build/manifest.scm @@ -1,7 +1,7 @@ ;; SPDX-License-Identifier: MPL-2.0 ;; SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) ;; -;; manifest.scm — the Guix development shell for rsr-template-repo. +;; manifest.scm — the Guix development shell for resource-algebra. ;; ;; guix shell -m manifest.scm # or: just dev-shell ;; guix time-machine -C channels.scm -- shell -m manifest.scm # the pinned Guix diff --git a/build/templates/ROADMAP.adoc.in b/build/templates/ROADMAP.adoc.in deleted file mode 100644 index 3a465b1..0000000 --- a/build/templates/ROADMAP.adoc.in +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: CC-BY-SA-4.0 -// Copyright (c) Jonathan D.A. Jewell -= {{PROJECT_NAME}} Roadmap - -== Current Status - -Initial development phase. - -== Milestones - -=== v0.1.0 - Foundation -* [ ] Core functionality -* [ ] Basic documentation -* [ ] CI/CD pipeline - -=== v1.0.0 - Stable Release -* [ ] Full feature set -* [ ] Comprehensive tests -* [ ] Production ready - -== Future Directions - -_To be determined based on community feedback._ diff --git a/build/templates/identity.deed.in b/build/templates/identity.deed.in deleted file mode 100644 index 7a97240..0000000 --- a/build/templates/identity.deed.in +++ /dev/null @@ -1,94 +0,0 @@ - ; >>> repo-identity - ; Written by `just repo-init` from build/templates/identity.deed.in, in - ; place of the block the template repo ships (template issue #209). It replaces - ; descriptiles/CLADE.a2ml and ECOSYSTEM.a2ml; the mapping is standards - ; 1-formats/deed/mappings/clade-to-repo-deed.adoc and - ; meta-ecosystem-to-repo-deed.adoc. - ; - ; THE UUID IS DERIVED, NOT ALLOCATED, NOT INVENTED. It is not stored: it is - ; uuid5(namespace = URL, name = the header :repo-uuid string) - ; and anyone can recompute it (gv-clade-index: - ; docs/SPEC-clade-verisim-portal.adoc §Identity Model): - ; uuidgen --sha1 --namespace @url --name "{{FORGE}}/{{OWNER}}/{{REPO}}" - ; The owner is part of the name, so part of the identity: record the owner - ; that is true today, and re-derive if the repo ever moves. - ; - ; CHOOSE A CLADE. A CLOSED TAXONOMY OF 12 CATEGORIES, NOT AN ABBREVIATION - ; SCHEME: the two letters abbreviate the clade's name, never your repo's. - ; fv Formal Verification & Proofs provable correctness, dependent types, theorem proving - ; nl Nextgen Languages compilers, runtimes, language tooling - ; rm Repo Management & Tooling scaffolding, graph analysis, bots, templates - ; gv Governance & Standards licensing, compliance, policy enforcement - ; db Databases database engines, query languages, storage - ; ap Applications end-user apps, web, desktop, services - ; ix Infrastructure & Cloud containers, deployment, sysadmin - ; dx Developer Ecosystem dev tools, package managers, editors, bindings - ; pt Protocols & Interop internet standards, protocol implementations - ; ax AI & Neurosymbolic ML, neural proof synthesis, AI governance - ; gm Games & Interactive game engines, interactive experiences - ; sc Security scanning, vulnerability management, access control - ; paint-type once chose `pt` reading it as "PainT-type" (an image editor is - ; `ap`); gossamer chose `gv` reading it as "Graphical/Visual" (`gv` is - ; GoVernance). Both codes were valid, so every check passed. - ; HOW TO CHOOSE: the primary clade reflects the project's core value - ; proposition, not its implementation. A game written in Idris2 is `gm`. - ; Set BOTH :primary and :primary-name, and make them agree; then set - ; :prefixed-name to "-{{REPO}}". `just validate-rsr` fails while - ; :primary is UNASSIGNED. That is deliberate: an unchosen clade must never - ; look like a chosen one. - ; - ; REGISTRATION IS NOT DERIVATION. Registering means an entry in - ; gv-clade-index verisim/seed/repos.a2ml. It is outward-facing and it is the - ; OWNER's act; an agent must not do it. - (identity - :primary-forge github - :owner "{{OWNER}}" - :prefixed-name "UNASSIGNED-{{REPO}}") - (clade - :primary UNASSIGNED - :primary-name "UNASSIGNED" - :secondary () - :assigned "{{CURRENT_DATE}}" - :rationale "") - (forges - :github "{{OWNER}}/{{REPO}}") - ; :type is one of standalone monorepo monorepo-child inflated deflated hub - ; satellite. A hub COORDINATES an ecosystem family; a satellite is - ; coordinated by one and keeps :parent "" (parent names a monorepo parent, - ; never the coordinating hub). - (lineage - :type standalone - :parent "" - :born "{{CURRENT_DATE}}" - :previous-names () - :instantiated-from "rsr-template-repo") - ; :phase is one of reserved incubating active dormant merged superseded - ; archived extinct. A repo created today has not proven anything yet. - (status - :phase incubating - :since "{{CURRENT_DATE}}" - :present #t - :aliases () - :merged-into "" - :superseded-by "" - :successors () - :ended "" - (history - (entry :phase incubating :since "{{CURRENT_DATE}}" :note "created from rsr-template-repo; clade not yet chosen; not yet registered"))) - ; :level is one of experimental alpha beta production lts (standards - ; 1-formats/deed/vocabulary/maturity.adoc). - (maturity - :level experimental - :since "{{CURRENT_DATE}}") - ; Fill in what this repo IS and IS NOT, and the repos it relates to. - ; :relationship is one of standard-source build-tooling validation-tooling - ; signing-tooling verification-tooling minted-from registry. - (ecosystem - :project "{{REPO}}" - :ecosystem "{{OWNER}}" - :position-type "UNASSIGNED" - :purpose "UNASSIGNED" - :not () - :coordination standards - (related :name "rsr-template-repo" :relationship minted-from :notes "the template this repo was minted from by just repo-init")) - ; <<< repo-identity diff --git a/docs/AFFIRMATION.adoc b/docs/AFFIRMATION.adoc index 90d321c..83e5c65 100644 --- a/docs/AFFIRMATION.adoc +++ b/docs/AFFIRMATION.adoc @@ -1,6 +1,6 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell -= AFFIRMATION — {{PROJECT_NAME}}, as of += AFFIRMATION — Resource Algebra, as of :toc: macro :toclevels: 2 :std-docs: https://github.com/hyperpolymath/standards/blob/main/docs @@ -37,12 +37,12 @@ toc::[] == What this is, and how it works -*What it is.* A short, dated, signed snapshot of what {{OWNER}} can honestly and -verifiably claim about *{{PROJECT_NAME}}* at one exact commit. Nothing here is +*What it is.* A short, dated, signed snapshot of what hyperpolymath can honestly and +verifiably claim about *Resource Algebra* at one exact commit. Nothing here is marketing and nothing is a promise about the future — those live in the README. This file is the receipt. -*What the project is.* {{PROJECT_DESCRIPTION}} +*What the project is.* The parametric grade algebra shared by the hyperpolymath type family *How it stays trustworthy.* Three moving parts: @@ -63,7 +63,7 @@ correctness. Treat it as a falsifiable claim, not gospel. == The epistemic contract (read this before you trust _or_ attack) -This document records {{OWNER}}'s *best belief* at the timestamp below. It is +This document records hyperpolymath's *best belief* at the timestamp below. It is *not a guarantee of correctness.* The only guarantee is *no intentional overclaim*: where something is proven we say "proven"; where it is a documented trust boundary, an experiment, or an unwired module, we say so; where a claim is @@ -95,19 +95,19 @@ file. Bring a counter-example, a failing run, or a contradicting source. | Field | Value | Project -| {{PROJECT_NAME}} +| Resource Algebra | Repo -| `{{OWNER}}/{{REPO}}` +| `hyperpolymath/resource-algebra` | Branch -| `{{MAIN_BRANCH}}` +| `main` | Commit (HEAD) | `` | Permalink -| https://{{FORGE}}/{{OWNER}}/{{REPO}}/tree/ +| https://github.com/hyperpolymath/resource-algebra/tree/ | Verified (UTC) | `` @@ -120,7 +120,7 @@ file. Bring a counter-example, a failing run, or a contradicting source. | `` | Affirmed by -| {{AUTHOR}} <{{AUTHOR_EMAIL}}> +| Jonathan D.A. Jewell |=== [IMPORTANT] @@ -193,15 +193,15 @@ to prevent — mark it refuted and say what refuted it. [source,bash] ---- -git clone https://{{FORGE}}/{{OWNER}}/{{REPO}} -cd {{REPO}} +git clone https://github.com/hyperpolymath/resource-algebra +cd resource-algebra git checkout # ---- == One-line characterisation (quote this) -> `` +> `` == Joint attestation @@ -213,7 +213,7 @@ hidden. * *Engineering party (AI):* `` — ran the checks recorded here at `` and stands behind the wording above as a faithful report of those runs. -* *Owner / maintainer:* {{AUTHOR}} <{{AUTHOR_EMAIL}}> — _signs by committing +* *Owner / maintainer:* Jonathan D.A. Jewell — _signs by committing this file with `-S`; the git commit signature over this content, at the commit SHA recorded above, is the cryptographic form of this affirmation._ diff --git a/docs/AI_INSTALLATION_GUIDE.adoc b/docs/AI_INSTALLATION_GUIDE.adoc index afdd6da..a102ce5 100644 --- a/docs/AI_INSTALLATION_GUIDE.adoc +++ b/docs/AI_INSTALLATION_GUIDE.adoc @@ -30,7 +30,7 @@ local checkouts across this estate are routinely stale or carry sweep debris. [source,bash] ---- -git clone https://github.com/hyperpolymath/rsr-template-repo.git my-project +git clone https://github.com/hyperpolymath/resource-algebra.git my-project cd my-project rm -rf .git && git init ---- diff --git a/docs/QUICKSTART.adoc b/docs/QUICKSTART.adoc index fc9fdf9..1f31e71 100644 --- a/docs/QUICKSTART.adoc +++ b/docs/QUICKSTART.adoc @@ -15,7 +15,7 @@ Get up and running in 60 seconds. [source,bash] ---- -git clone https://github.com/{{OWNER}}/rsr-template-repo my-project +git clone https://github.com/hyperpolymath/resource-algebra my-project cd my-project rm -rf .git && git init -b main just repo-init # interactive placeholder replacement diff --git a/docs/RSR-PHILOSOPHY.adoc b/docs/RSR-PHILOSOPHY.adoc index 05a1590..4e2b027 100644 --- a/docs/RSR-PHILOSOPHY.adoc +++ b/docs/RSR-PHILOSOPHY.adoc @@ -51,7 +51,7 @@ Two obligations follow from this, and they are not optional: * *Find the source.* Before acting, trace the thing back to where it is actually defined — the template, the generator, the canon, the single point that everything else inherits from. The estate's structure is - `standards → rsr-template-repo → (every repo)`; a fix that belongs at the + `standards → resource-algebra → (every repo)`; a fix that belongs at the template does not belong in 380 leaves. * *Be mindful of every up- and down-stream.* A change at a source propagates. Before you make it, know what feeds into the thing you are changing (upstream) diff --git a/docs/SETUP.adoc b/docs/SETUP.adoc index b9ba055..802e758 100644 --- a/docs/SETUP.adoc +++ b/docs/SETUP.adoc @@ -1,6 +1,6 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) -= Setting up rsr-template-repo by hand += Setting up resource-algebra by hand :toc: :toclevels: 2 @@ -10,7 +10,7 @@ link:AI_INSTALLATION_GUIDE.adoc[AI_INSTALLATION_GUIDE.adoc]), but those do exactly what is written here, so this page is also what to read when they stop. [horizontal] -Repository:: https://github.com/hyperpolymath/rsr-template-repo +Repository:: https://github.com/hyperpolymath/resource-algebra Kind:: library (idris2, zig) Toolchain declared in:: `mise.toml` (versions `latest`, made concrete in `mise.lock`), and `build/manifest.scm` / `build/guix.scm` / `build/channels.scm` for Guix @@ -56,12 +56,12 @@ The Guix development shell (`build/manifest.scm`) already includes both. [source,bash] ---- -git clone https://github.com/hyperpolymath/rsr-template-repo.git -cd rsr-template-repo +git clone https://github.com/hyperpolymath/resource-algebra.git +cd resource-algebra ---- Or with OPSM, the odds-and-sods package manager (see <>): -`opsm install https://github.com/hyperpolymath/rsr-template-repo.git --registry git` +`opsm install https://github.com/hyperpolymath/resource-algebra.git --registry git` TIP: To start a *new* project from this template, use GitHub's *Use this template* button (or clone as above), then run `just repo-init` before step 3; it fills every @@ -153,10 +153,10 @@ when it is not. [source,bash] ---- -opsm install https://github.com/hyperpolymath/rsr-template-repo.git --registry git +opsm install https://github.com/hyperpolymath/resource-algebra.git --registry git ---- -rsr-template-repo has no registry package, so OPSM fetches it through its git +resource-algebra has no registry package, so OPSM fetches it through its git adapter; then provision it with `./launcher.sh --setup`. To get OPSM itself (Erlang/OTP 26+ and Elixir 1.16+ required): @@ -212,4 +212,4 @@ every fix marked *auto* for you. |=== Still stuck? `just doctor > doctor.txt 2>&1` and open an issue at -https://github.com/hyperpolymath/rsr-template-repo/issues with that file attached. +https://github.com/hyperpolymath/resource-algebra/issues with that file attached. diff --git a/build/docs-seed/architecture.adoc b/docs/architecture.adoc similarity index 93% rename from build/docs-seed/architecture.adoc rename to docs/architecture.adoc index 685b024..8345dfb 100644 --- a/build/docs-seed/architecture.adoc +++ b/docs/architecture.adoc @@ -1,8 +1,8 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -// SPDX-FileCopyrightText: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> -= Architecture — {{PROJECT_NAME}} -:revdate: {{CURRENT_YEAR}}-MM-DD +// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) += Architecture — Resource Algebra +:revdate: 2026-MM-DD == System overview diff --git a/docs/architecture/REPOSITORY-MAP.adoc b/docs/architecture/REPOSITORY-MAP.adoc index 5b92b52..9f34afd 100644 --- a/docs/architecture/REPOSITORY-MAP.adoc +++ b/docs/architecture/REPOSITORY-MAP.adoc @@ -113,18 +113,10 @@ predecessors did. | yes | REUSE licence texts, dual-licence model (code MPL-2.0 / docs CC-BY-SA-4.0) -| `PROOF-STATUS.adoc` -| yes -| project proof ledger, linked by README.adoc and docs/pre-registration.adoc - | `README.adoc` | yes | - -| `archetypes/` -| optional -| template-only variation seam (ADR-0003); `just repo-init` removes it from minted repos - | `benches/` | optional | Cargo-conventional at package root diff --git a/docs/architecture/THREAT-MODEL.adoc b/docs/architecture/THREAT-MODEL.adoc index 43d945d..15c3074 100644 --- a/docs/architecture/THREAT-MODEL.adoc +++ b/docs/architecture/THREAT-MODEL.adoc @@ -2,19 +2,19 @@ // Copyright (c) Jonathan D.A. Jewell = Threat Model // SPDX-License-Identifier: CC-BY-SA-4.0 -// Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) -== Threat Model: {{PROJECT_NAME}} +== Threat Model: Resource Algebra === Document Info |=== | Field | Value -| Project | {{PROJECT_NAME}} +| Project | Resource Algebra | Version | 1.0 -| Last Reviewed | {{DATE}} -| Author | {{AUTHOR}} +| Last Reviewed | 2026-10-14 +| Author | Jonathan D.A. Jewell | Methodology | STRIDE |=== @@ -39,7 +39,7 @@ === System Overview -Brief description of {{PROJECT_NAME}} and its architecture. +Brief description of Resource Algebra and its architecture. NOTE: See link:../STATE-VISUALIZER.adoc[STATE-VISUALIZER.adoc] for the full architecture diagram and completion dashboard. diff --git a/docs/attribution/CITATIONS.adoc b/docs/attribution/CITATIONS.adoc index 0a8b419..d021ae8 100644 --- a/docs/attribution/CITATIONS.adoc +++ b/docs/attribution/CITATIONS.adoc @@ -1,36 +1,36 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -= {{PROJECT_NAME}} - Citation Guide += Resource Algebra - Citation Guide :toc: == BibTeX [source,bibtex] ---- -@software{{{PROJECT_NAME}}_{{CURRENT_YEAR}}, - author = {{{AUTHOR_LAST}}, {{AUTHOR_FIRST}}}, - title = {{{PROJECT_NAME}}}, - year = {{{CURRENT_YEAR}}}, - url = {https://github.com/{{OWNER}}/{{PROJECT_NAME}}}, +@software{Resource Algebra_2026, + author = {Jewell, Jonathan D.A.}, + title = {Resource Algebra}, + year = {2026}, + url = {https://github.com/hyperpolymath/Resource Algebra}, license = {MPL-2.0} } ---- == Harvard Style -{{AUTHOR_LAST}}, {{AUTHOR_INITIALS}} ({{CURRENT_YEAR}}) _{{PROJECT_NAME}}_ [Computer software]. Available at: https://github.com/{{OWNER}}/{{PROJECT_NAME}} +Jewell, J. (2026) _Resource Algebra_ [Computer software]. Available at: https://github.com/hyperpolymath/Resource Algebra == OSCOLA -{{AUTHOR}}, '{{PROJECT_NAME}}' ({{CURRENT_YEAR}}) +Jonathan D.A. Jewell, 'Resource Algebra' (2026) == MLA -{{AUTHOR_LAST}}, {{AUTHOR_FIRST}} "{{PROJECT_NAME}}." {{CURRENT_YEAR}}, github.com/{{OWNER}}/{{PROJECT_NAME}}. +Jewell, Jonathan D.A. "Resource Algebra." 2026, github.com/hyperpolymath/Resource Algebra. == APA 7 -{{AUTHOR_LAST}}, {{AUTHOR_INITIALS}} ({{CURRENT_YEAR}}). _{{PROJECT_NAME}}_ [Computer software]. GitHub. https://github.com/{{OWNER}}/{{PROJECT_NAME}} +Jewell, J. (2026). _Resource Algebra_ [Computer software]. GitHub. https://github.com/hyperpolymath/Resource Algebra == See Also diff --git a/build/docs-seed/contributing.adoc b/docs/contributing.adoc similarity index 88% rename from build/docs-seed/contributing.adoc rename to docs/contributing.adoc index eb22aac..064f780 100644 --- a/build/docs-seed/contributing.adoc +++ b/docs/contributing.adoc @@ -1,12 +1,12 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -// SPDX-FileCopyrightText: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> -= Contributing — {{PROJECT_NAME}} -:revdate: {{CURRENT_YEAR}}-MM-DD +// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) += Contributing — Resource Algebra +:revdate: 2026-MM-DD == Audience -Developers working *on* `{{PROJECT_NAME}}`. For consumers (people calling +Developers working *on* `Resource Algebra`. For consumers (people calling or depending on it) see link:./usage.adoc[usage.adoc]. == Local-dev setup @@ -23,8 +23,8 @@ One-shot setup: [source,bash] ---- -git clone git@github.com:{{OWNER}}/{{PROJECT_NAME}}.git -cd {{PROJECT_NAME}} +git clone git@github.com:hyperpolymath/Resource Algebra.git +cd Resource Algebra just setup # installs deps, sets up hooks just test # runs the full test suite ---- @@ -86,6 +86,6 @@ When you make a non-obvious design decision, write it down: == Reporting issues -* Bugs in `{{PROJECT_NAME}}`: file at `{{OWNER}}/{{PROJECT_NAME}}/issues`. +* Bugs in `Resource Algebra`: file at `hyperpolymath/Resource Algebra/issues`. * Estate-wide concerns (policy, conventions, CI): file at `hyperpolymath/standards/issues`. diff --git a/docs/decisions/0000-template.adoc b/docs/decisions/0000-template.adoc index 32c2c2a..0025b64 100644 --- a/docs/decisions/0000-template.adoc +++ b/docs/decisions/0000-template.adoc @@ -2,7 +2,7 @@ // Copyright (c) Jonathan D.A. Jewell = Architecture Decision Record: 0000-template // SPDX-License-Identifier: CC-BY-SA-4.0 -// Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) == [NUMBER]. [TITLE] diff --git a/docs/decisions/0001-adopt-rsr-standard.adoc b/docs/decisions/0001-adopt-rsr-standard.adoc index cfcc68e..6e0bfeb 100644 --- a/docs/decisions/0001-adopt-rsr-standard.adoc +++ b/docs/decisions/0001-adopt-rsr-standard.adoc @@ -2,7 +2,7 @@ // Copyright (c) Jonathan D.A. Jewell = Architecture Decision Record: 0001-adopt-rsr-standard // SPDX-License-Identifier: CC-BY-SA-4.0 -// Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) NOTE: Superseded in part (2026-10-06, rsr-template-repo#209): the `.a2ml` files named below no longer exist; their facts are clauses of the repo deed (`*_chora.deed`). @@ -58,7 +58,7 @@ New repositories are created by cloning the template: [source,bash] ---- -git clone https://github.com/{{OWNER}}/rsr-template-repo new-repo-name +git clone https://github.com/hyperpolymath/rsr-template-repo new-repo-name cd new-repo-name rm -rf .git && git init ---- diff --git a/build/docs-seed/decisions/0001-template.adoc b/docs/decisions/0001-template.adoc similarity index 94% rename from build/docs-seed/decisions/0001-template.adoc rename to docs/decisions/0001-template.adoc index eff8bb8..b4070a8 100644 --- a/build/docs-seed/decisions/0001-template.adoc +++ b/docs/decisions/0001-template.adoc @@ -1,8 +1,8 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -// SPDX-FileCopyrightText: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) = ADR-0001 — Use Architecture Decision Records -:revdate: {{CURRENT_YEAR}}-MM-DD +:revdate: 2026-MM-DD :status: ACCEPTED == Context diff --git a/docs/developer/ABI-FFI-README.adoc b/docs/developer/ABI-FFI-README.adoc index 2a9ff08..537fabf 100644 --- a/docs/developer/ABI-FFI-README.adoc +++ b/docs/developer/ABI-FFI-README.adoc @@ -3,7 +3,7 @@ = ABI/FFI Standards {{~ Aditionally delete this line and fill out the template below ~}} -== {{PROJECT}} ABI/FFI Documentation +== RESOURCE_ALGEBRA ABI/FFI Documentation === Overview @@ -29,7 +29,7 @@ This library follows the **Hyperpolymath RSR Standard** for ABI and FFI design: ▼ ┌─────────────────────────────────────────────┐ │ C Headers (auto-generated) │ -│ generated/abi/{{project}}.h │ +│ generated/abi/resource_algebra.h │ └─────────────────┬───────────────────────────┘ │ │ imported by @@ -42,7 +42,7 @@ This library follows the **Hyperpolymath RSR Standard** for ABI and FFI design: │ - Memory-safe by default │ └─────────────────┬───────────────────────────┘ │ - │ compiled to lib{{project}}.so/.a + │ compiled to libresource_algebra.so/.a ▼ ┌─────────────────────────────────────────────┐ │ Any Language via C ABI │ @@ -53,7 +53,7 @@ This library follows the **Hyperpolymath RSR Standard** for ABI and FFI design: === Directory Structure ---- -{{project}}/ +resource_algebra/ ├── src/ │ ├── abi/ # ABI definitions (Idris2) │ │ ├── Types.idr # Core type definitions with proofs @@ -70,11 +70,11 @@ This library follows the **Hyperpolymath RSR Standard** for ABI and FFI design: │ ├── test/ │ │ └── integration_test.zig │ └── include/ -│ └── {{project}}.h # C header (optional, can be generated) +│ └── resource_algebra.h # C header (optional, can be generated) │ ├── generated/ # Auto-generated files │ └── abi/ -│ └── {{project}}.h # Generated from Idris2 ABI +│ └── resource_algebra.h # Generated from Idris2 ABI │ └── bindings/ # Language-specific wrappers (optional) ├── rust/ @@ -212,7 +212,7 @@ zig build test # Run tests [source,bash] ---- cd src/abi -idris2 --cg c-header Types.idr -o ../../generated/abi/{{project}}.h +idris2 --cg c-header Types.idr -o ../../generated/abi/resource_algebra.h ---- ==== Cross-Compile @@ -237,19 +237,19 @@ zig build -Dtarget=x86_64-windows [source,c] ---- -#include "{{project}}.h" +#include "resource_algebra.h" int main() { - void* handle = {{project}}_init(); + void* handle = resource_algebra_init(); if (!handle) return 1; - int result = {{project}}_process(handle, 42); + int result = resource_algebra_process(handle, 42); if (result != 0) { - const char* err = {{project}}_last_error(); + const char* err = resource_algebra_last_error(); fprintf(stderr, "Error: %s\n", err); } - {{project}}_free(handle); + resource_algebra_free(handle); return 0; } ---- @@ -257,14 +257,14 @@ int main() { Compile with: [source,bash] ---- -gcc -o example example.c -l{{project}} -L./zig-out/lib +gcc -o example example.c -lresource_algebra -L./zig-out/lib ---- ==== From Idris2 [source,idris] ---- -import {{PROJECT}}.ABI.Foreign +import RESOURCE_ALGEBRA.ABI.Foreign main : IO () main = do @@ -282,22 +282,22 @@ main = do [source,rust] ---- -#[link(name = "{{project}}")] +#[link(name = "resource_algebra")] extern "C" { - fn {{project}}_init() -> *mut std::ffi::c_void; - fn {{project}}_free(handle: *mut std::ffi::c_void); - fn {{project}}_process(handle: *mut std::ffi::c_void, input: u32) -> i32; + fn resource_algebra_init() -> *mut std::ffi::c_void; + fn resource_algebra_free(handle: *mut std::ffi::c_void); + fn resource_algebra_process(handle: *mut std::ffi::c_void, input: u32) -> i32; } fn main() { unsafe { - let handle = {{project}}_init(); + let handle = resource_algebra_init(); assert!(!handle.is_null()); - let result = {{project}}_process(handle, 42); + let result = resource_algebra_process(handle, 42); assert_eq!(result, 0); - {{project}}_free(handle); + resource_algebra_free(handle); } } ---- @@ -306,21 +306,21 @@ fn main() { [source,julia] ---- -const lib{{project}} = "lib{{project}}" +const libresource_algebra = "libresource_algebra" function init() - handle = ccall((:{{project}}_init, lib{{project}}), Ptr{Cvoid}, ()) + handle = ccall((:resource_algebra_init, libresource_algebra), Ptr{Cvoid}, ()) handle == C_NULL && error("Failed to initialize") handle end function process(handle, input) - result = ccall((:{{project}}_process, lib{{project}}), Cint, (Ptr{Cvoid}, UInt32), handle, input) + result = ccall((:resource_algebra_process, libresource_algebra), Cint, (Ptr{Cvoid}, UInt32), handle, input) result end function cleanup(handle) - ccall((:{{project}}_free, lib{{project}}), Cvoid, (Ptr{Cvoid},), handle) + ccall((:resource_algebra_free, libresource_algebra), Cvoid, (Ptr{Cvoid},), handle) end # Usage @@ -377,7 +377,7 @@ When modifying the ABI/FFI: 2. **Generate C header** ```bash - idris2 --cg c-header src/interface/Abi/Types.idr -o generated/abi/{{project}}.h + idris2 --cg c-header src/interface/Abi/Types.idr -o generated/abi/resource_algebra.h ``` 3. **Update FFI implementation** (`ffi/zig/src/main.zig`) @@ -396,10 +396,10 @@ When modifying the ABI/FFI: === License -{{LICENSE}} +MPL-2.0 === See Also - https://idris2.readthedocs.io[Idris2 Documentation] - https://ziglang.org/documentation/master/[Zig Documentation] -- https://github.com/{{OWNER}}/rhodium-standard-repositories[Rhodium Standard Repositories] +- https://github.com/hyperpolymath/rhodium-standard-repositories[Rhodium Standard Repositories] diff --git a/docs/governance/CRG-AUDIT-TEMPLATE.adoc b/docs/governance/CRG-AUDIT-TEMPLATE.adoc index 192c5f9..d5d1fcd 100644 --- a/docs/governance/CRG-AUDIT-TEMPLATE.adoc +++ b/docs/governance/CRG-AUDIT-TEMPLATE.adoc @@ -1,8 +1,8 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -= {{PROJECT_NAME}} — CRG Audit ({{CURRENT_DATE}}) -{{AUTHOR}} -{{CURRENT_DATE}} += Resource Algebra — CRG Audit (2026-10-14) +Jonathan D.A. Jewell +2026-10-14 :toc: :sectnums: @@ -18,17 +18,17 @@ == Scope and Standard -Evaluates the `{{REPO}}` repository against +Evaluates the `resource-algebra` repository against *Component Readiness Grades v2.0 (STRICT)*, 2026-03-30 revision. - Standard: `standards/component-readiness-grades/COMPONENT-READINESS-GRADES.md` -- Template (criteria boilerplate): `rsr-template-repo/docs/governance/CRG-CRITERIA.adoc` +- Template (criteria boilerplate): `resource-algebra/docs/governance/CRG-CRITERIA.adoc` - Self-declared grade (prior art): * `docs/status/ROADMAP.adoc` → `Declared CRG grade: ` line * `docs/READINESS.md` (if present) → per-component grades * Third-party badges (Glama, OpenSSF, etc.) if any — note date and scope -- Audit date: {{CURRENT_DATE}} -- Auditor: {{AUTHOR}} +- Audit date: 2026-10-14 +- Auditor: Jonathan D.A. Jewell The audit grades the repo *as-is today*, not aspirationally. @@ -49,7 +49,7 @@ The audit grades the repo *as-is today*, not aspirationally. Publication requires B+. Long alpha is discipline, not shame. -== Evidence Inventory (verified {{CURRENT_DATE}}) +== Evidence Inventory (verified 2026-10-14) === Structural compliance (Grade D floor) @@ -101,7 +101,7 @@ Do *not* mark PRESENT without citing the path. | Build-system policy (RSR R-020) | Remote -| `git@{{FORGE}}:{{OWNER}}/{{REPO}}.git` (origin only) / drift +| `git@github.com:hyperpolymath/resource-algebra.git` (origin only) / drift | `git remote -v` |=== @@ -135,7 +135,7 @@ RSR compliance verdict: *met* / *partial* / *not met* — Grade D floor satisfie | Dangerous-pattern scan (`assert_total`, `Admitted`, `sorry`, `unsafeCoerce`, `Obj.magic`) | N -| Grepped {{CURRENT_DATE}}. +| Grepped 2026-10-14. |=== === Test matrix @@ -283,7 +283,7 @@ them. Examples: - `docs/READINESS.md` — per-component table. Note v1.0-vs-v2.0 schema alignment. - `*_chora.deed` (repo deed) — authoritative phase and maturity (`(status)`, `(maturity)`). - `docs/status/ROADMAP.adoc` — milestones, evidence and the declared CRG grade. -- `docs/governance/CRG-LIFT-PLAN-{{CURRENT_DATE}}.adoc` — companion plan for +- `docs/governance/CRG-LIFT-PLAN-2026-10-14.adoc` — companion plan for D→C (and medium-term C→B) lifts. - `docs/governance/CRG-CRITERIA.adoc` — boilerplate criteria doc. diff --git a/docs/governance/TEMPLATE-LINEAGE-AUDIT.adoc b/docs/governance/TEMPLATE-LINEAGE-AUDIT.adoc index 9c64d8a..0a8d822 100644 --- a/docs/governance/TEMPLATE-LINEAGE-AUDIT.adoc +++ b/docs/governance/TEMPLATE-LINEAGE-AUDIT.adoc @@ -51,7 +51,7 @@ ____ NOTE: 2026-10-02 — rsr-template-repo#209 retired STATE/META/ECOSYSTEM/AGENTIC/CLADE.a2ml; their content is now in the repo deed (`*_chora.deed`) and `docs/status/ROADMAP.adoc`. -The ordinary mint path rewrites `{{OWNER}}`, `{{REPO}}` and friends. Those +The ordinary mint path rewrites `hyperpolymath`, `resource-algebra` and friends. Those tokens *are* consumed widely — 56 files in this repository, including the README badge block, `CITATION.cff`, `.github/CODEOWNERS`, `.github/settings.yml` and the three AI-assistant rule files. The problem is @@ -195,7 +195,7 @@ both files. NOTE: 2026-10-02 — in this template, rsr-template-repo#209 retired CLADE.a2ml; the canonical name now lives in the repo deed header (`:canonical-name`). *Severity is lower than it appears.* Across every `Justfile` and `*.just` in -that repository there are *zero* `{{OWNER}}` or `{{REPO}}` interpolations, so +that repository there are *zero* `hyperpolymath` or `resource-algebra` interpolations, so neither variable is consumed by any recipe. This is a wrong self-description with no runtime effect — worth fixing because a template propagates its own mistakes, not because anything currently misbehaves. diff --git a/docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc b/docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc index 57348e6..079d2aa 100644 --- a/docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc +++ b/docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc @@ -30,7 +30,7 @@ Inventory snapshot at audit time: | Placeholder badge tokens in README | `README.adoc` -| `{{OPENSSF_PROJECT_ID}}`, `{{OWNER}}`, `{{REPO}}` +| `OPENSSF_PROJECT_ID`, `OWNER`, `REPO` (README badge token names) | placeholder | Template placeholders are intentional pre-bootstrap content. | Keep; document clearly as template tokens. diff --git a/docs/onboarding/QUICKSTART-DEV.adoc b/docs/onboarding/QUICKSTART-DEV.adoc index d2c4a5e..bb6e136 100644 --- a/docs/onboarding/QUICKSTART-DEV.adoc +++ b/docs/onboarding/QUICKSTART-DEV.adoc @@ -1,14 +1,14 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell // Template: QUICKSTART-DEV.adoc — clone → build → test → PR -// Replace rsr-template-repo, {{BUILD_CMD}}, {{TEST_CMD}}, {{LANG_STACK}} with actuals -= rsr-template-repo — Quick Start for Developers +// Replace resource-algebra, UNASSIGNED, UNASSIGNED, UNASSIGNED with actuals += resource-algebra — Quick Start for Developers :toc: :toclevels: 2 == Tech Stack -{{LANG_STACK}} +UNASSIGNED == Set Up Development Environment @@ -23,8 +23,8 @@ guix shell [source,bash] ---- -git clone https://github.com/hyperpolymath/rsr-template-repo.git -cd rsr-template-repo +git clone https://github.com/hyperpolymath/resource-algebra.git +cd resource-algebra just setup-dev ---- @@ -32,21 +32,21 @@ just setup-dev [source,bash] ---- -{{BUILD_CMD}} +UNASSIGNED ---- == Test [source,bash] ---- -{{TEST_CMD}} +UNASSIGNED ---- == Project Structure [source] ---- -rsr-template-repo/ +resource-algebra/ ├── src/ # Source code ├── src/interface/Abi/ # Idris2 ABI definitions (if applicable) ├── ffi/zig/ # Zig FFI bridge (if applicable) @@ -84,7 +84,7 @@ just panic-scan # No new security issues Read `.machine_readable/MUST.contractile` before making changes. Key invariants that must never be violated: -{{MUST_INVARIANTS}} +UNASSIGNED == LLM/AI Agent Development @@ -100,5 +100,5 @@ Or read the repo deed (`*_chora.deed` at root) and `.claude/CLAUDE.md` directly. == Get Help * **Architecture**: link:EXPLAINME.adoc[EXPLAINME.adoc] -* **Wiki**: https://github.com/hyperpolymath/rsr-template-repo/wiki +* **Wiki**: https://github.com/hyperpolymath/resource-algebra/wiki * **Report issue**: `just help-me` diff --git a/docs/onboarding/QUICKSTART-MAINTAINER.adoc b/docs/onboarding/QUICKSTART-MAINTAINER.adoc index aaaa348..7b9a343 100644 --- a/docs/onboarding/QUICKSTART-MAINTAINER.adoc +++ b/docs/onboarding/QUICKSTART-MAINTAINER.adoc @@ -1,30 +1,30 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell // Template: QUICKSTART-MAINTAINER.adoc — packaging, deploying, and maintaining -// Replace rsr-template-repo, {{PACKAGE_NAME}}, {{DEPS}} with actuals -= rsr-template-repo — Quick Start for Platform Maintainers +// Replace resource-algebra, UNASSIGNED, UNASSIGNED with actuals += resource-algebra — Quick Start for Platform Maintainers :toc: :toclevels: 2 == Overview -This guide covers packaging, deploying, and maintaining rsr-template-repo for +This guide covers packaging, deploying, and maintaining resource-algebra for distribution on your platform. == Runtime Dependencies -{{DEPS}} +UNASSIGNED == Build from Source [source,bash] ---- -git clone https://github.com/hyperpolymath/rsr-template-repo.git -cd rsr-template-repo +git clone https://github.com/hyperpolymath/resource-algebra.git +cd resource-algebra just build-release ---- -Output: `{{BUILD_OUTPUT_PATH}}` +Output: `UNASSIGNED` == Packaging @@ -40,7 +40,7 @@ guix build -f build/guix.scm [source,bash] ---- just stapeln-export # Generates Containerfile -podman build -t rsr-template-repo . +podman build -t resource-algebra . ---- === Manual Package @@ -59,10 +59,10 @@ Files installed: | `$PREFIX/bin/` | Executables -| `$PREFIX/share/{{PACKAGE_NAME}}/` +| `$PREFIX/share/UNASSIGNED/` | Data files, assets -| `$PREFIX/share/doc/{{PACKAGE_NAME}}/` +| `$PREFIX/share/doc/UNASSIGNED/` | Documentation | `$PREFIX/share/applications/` @@ -74,9 +74,9 @@ Files installed: == Configuration -Default config location: `$XDG_CONFIG_HOME/{{PACKAGE_NAME}}/config.toml` +Default config location: `$XDG_CONFIG_HOME/UNASSIGNED/config.toml` -Fallback: `$HOME/.config/{{PACKAGE_NAME}}/config.toml` +Fallback: `$HOME/.config/UNASSIGNED/config.toml` == Health Checks @@ -96,7 +96,7 @@ just build-release just install --prefix=/usr/local ---- -Or via OPSM: `opsm update {{PACKAGE_NAME}}` +Or via OPSM: `opsm update UNASSIGNED` == Security Notes @@ -111,13 +111,13 @@ For deploying multiple instances (e.g., different users or tenants): [source,bash] ---- -just install --prefix=/opt/{{PACKAGE_NAME}}-instance1 --config=/etc/{{PACKAGE_NAME}}/instance1.toml -just install --prefix=/opt/{{PACKAGE_NAME}}-instance2 --config=/etc/{{PACKAGE_NAME}}/instance2.toml +just install --prefix=/opt/UNASSIGNED-instance1 --config=/etc/UNASSIGNED/instance1.toml +just install --prefix=/opt/UNASSIGNED-instance2 --config=/etc/UNASSIGNED/instance2.toml ---- Each instance has isolated config, data, and logs. == Reporting Issues -* Upstream: https://github.com/hyperpolymath/rsr-template-repo/issues +* Upstream: https://github.com/hyperpolymath/resource-algebra/issues * With diagnostic: `just help-me` (pre-fills context) diff --git a/docs/onboarding/QUICKSTART-USER.adoc b/docs/onboarding/QUICKSTART-USER.adoc index 0893e63..76b2670 100644 --- a/docs/onboarding/QUICKSTART-USER.adoc +++ b/docs/onboarding/QUICKSTART-USER.adoc @@ -1,12 +1,12 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell // Template: QUICKSTART-USER.adoc — 5-minute path to working software -// Replace rsr-template-repo, Rsr Template Repo — See README.adoc for details., just run, Rsr Template Repo started successfully. with actuals -= rsr-template-repo — Quick Start for Users +// Replace resource-algebra, Rsr Template Repo — See README.adoc for details., just run, Rsr Template Repo started successfully. with actuals += resource-algebra — Quick Start for Users :toc: :toclevels: 2 -== What is rsr-template-repo? +== What is resource-algebra? Rsr Template Repo — See README.adoc for details. @@ -38,8 +38,8 @@ Before you begin, ensure you have: [source,bash] ---- # Clone and set up -git clone https://github.com/hyperpolymath/rsr-template-repo.git -cd rsr-template-repo +git clone https://github.com/hyperpolymath/resource-algebra.git +cd resource-algebra just setup ---- @@ -62,7 +62,7 @@ just stapeln-run [source,bash] ---- -just install --portable --prefix=./rsr-template-repo-portable +just install --portable --prefix=./resource-algebra-portable ---- == First Run @@ -103,7 +103,7 @@ just heal * **In-app**: `just run --help` * **Guided tour**: `just tour` * **Report a problem**: `just help-me` (pre-fills diagnostic context) -* **Wiki**: https://github.com/hyperpolymath/rsr-template-repo/wiki +* **Wiki**: https://github.com/hyperpolymath/resource-algebra/wiki == Uninstall diff --git a/docs/onboarding/llm-warmup-dev.adoc b/docs/onboarding/llm-warmup-dev.adoc index 9078f77..8cabc49 100644 --- a/docs/onboarding/llm-warmup-dev.adoc +++ b/docs/onboarding/llm-warmup-dev.adoc @@ -1,12 +1,12 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) -= LLM warm-up — rsr-template-repo (developer) += LLM warm-up — resource-algebra (developer) -Paste this into an AI assistant before changing code in rsr-template-repo. +Paste this into an AI assistant before changing code in resource-algebra. == Orientation -rsr-template-repo (https://github.com/hyperpolymath/rsr-template-repo): a library in idris2, zig. +resource-algebra (https://github.com/hyperpolymath/resource-algebra): a library in idris2, zig. The template's own code is the ABI/FFI seam that every minted repo inherits: diff --git a/docs/onboarding/llm-warmup-maintainer.adoc b/docs/onboarding/llm-warmup-maintainer.adoc index 0ebbfac..52b224e 100644 --- a/docs/onboarding/llm-warmup-maintainer.adoc +++ b/docs/onboarding/llm-warmup-maintainer.adoc @@ -1,9 +1,9 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) -= LLM warm-up — rsr-template-repo (maintainer) += LLM warm-up — resource-algebra (maintainer) Paste this into an AI assistant before release, CI or governance work on -rsr-template-repo. Read `llm-warmup-dev.adoc` first; this adds what a maintainer owns. +resource-algebra. Read `llm-warmup-dev.adoc` first; this adds what a maintainer owns. == The provisioning set diff --git a/docs/onboarding/llm-warmup-user.adoc b/docs/onboarding/llm-warmup-user.adoc index 80b95f6..6f2de84 100644 --- a/docs/onboarding/llm-warmup-user.adoc +++ b/docs/onboarding/llm-warmup-user.adoc @@ -1,14 +1,14 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) -= LLM warm-up — rsr-template-repo (user) += LLM warm-up — resource-algebra (user) Paste this whole file into any AI assistant before asking it about -rsr-template-repo. It tells the assistant what the project is, how a person gets it +resource-algebra. It tells the assistant what the project is, how a person gets it running, and where to look when something goes wrong. == What it is -rsr-template-repo (https://github.com/hyperpolymath/rsr-template-repo) is a library written in idris2, zig. +resource-algebra (https://github.com/hyperpolymath/resource-algebra) is a library written in idris2, zig. It is not a project in its own right: it is the template every new hyperpolymath repository is created from. It ships CI/CD, machine-readable metadata @@ -22,7 +22,7 @@ add a line of your own. The supported routes, in order of ease: . *Ask an AI*: follow `docs/AI_INSTALLATION_GUIDE.adoc` in the repository. -. *The launcher*: `git clone https://github.com/hyperpolymath/rsr-template-repo.git && cd rsr-template-repo && ./launcher.sh --setup` +. *The launcher*: `git clone https://github.com/hyperpolymath/resource-algebra.git && cd resource-algebra && ./launcher.sh --setup` . *By hand*: `docs/SETUP.adoc`, every step explained. Prerequisites are git, a C toolchain and mise; everything else is installed by diff --git a/docs/practice/AI-CONVENTIONS.adoc b/docs/practice/AI-CONVENTIONS.adoc index a2e60d7..d087446 100644 --- a/docs/practice/AI-CONVENTIONS.adoc +++ b/docs/practice/AI-CONVENTIONS.adoc @@ -2,7 +2,7 @@ // Copyright (c) Jonathan D.A. Jewell = AI Conventions // SPDX-License-Identifier: CC-BY-SA-4.0 -// Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) == AI Conventions (Authoritative Source) @@ -38,9 +38,9 @@ Per estate policy (hyperpolymath/standards `LICENCE-POLICY.adoc` Rule 1 + Addend === Author Attribution -- Name: **{{AUTHOR}}** -- Email: **{{AUTHOR_EMAIL}}** -- Copyright: `Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}>` +- Name: **Jonathan D.A. Jewell** +- Email: **j.d.a.jewell@open.ac.uk** +- Copyright: `Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) ` === State Files diff --git a/docs/practice/STATE-VISUALIZER-GUIDE.adoc b/docs/practice/STATE-VISUALIZER-GUIDE.adoc index dc9a561..5c5cec5 100644 --- a/docs/practice/STATE-VISUALIZER-GUIDE.adoc +++ b/docs/practice/STATE-VISUALIZER-GUIDE.adoc @@ -1,7 +1,7 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell = TOPOLOGY.md — Generation Guide -{{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Jonathan D.A. Jewell (hyperpolymath) :toc: :sectnums: @@ -62,7 +62,7 @@ The file must contain exactly three sections: Add a header comment with SPDX-License-Identifier and Last updated date. End with an "Update Protocol" section explaining how to maintain the file. -Use the template at TOPOLOGY.md in rsr-template-repo as a structural reference, +Use the template at TOPOLOGY.md in resource-algebra as a structural reference, but make the content completely specific to THIS project. ---- @@ -70,7 +70,7 @@ but make the content completely specific to THIS project. [source,bash] ---- -cp /path/to/rsr-template-repo/TOPOLOGY.md ./TOPOLOGY.md +cp /path/to/resource-algebra/TOPOLOGY.md ./TOPOLOGY.md # Then edit: replace placeholders, draw the real architecture, fill the dashboard ---- @@ -154,4 +154,4 @@ _structured data_ for tooling. Both should agree. == Copyright -Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> +Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) diff --git a/docs/practice/ci-cost-reduction.adoc b/docs/practice/ci-cost-reduction.adoc index 705c637..c8f2533 100644 --- a/docs/practice/ci-cost-reduction.adoc +++ b/docs/practice/ci-cost-reduction.adoc @@ -214,8 +214,8 @@ Recommendations: === 7. Reusable workflow (longer-term) Ship the above patterns in a single reusable workflow under -`rsr-template-repo/.github/workflows/rsr-ci-defaults.yml`, and adopt -it estate-wide via `uses: hyperpolymath/rsr-template-repo/.github/workflows/rsr-ci-defaults.yml@main` +`resource-algebra/.github/workflows/rsr-ci-defaults.yml`, and adopt +it estate-wide via `uses: hyperpolymath/resource-algebra/.github/workflows/rsr-ci-defaults.yml@main` in downstream repos. Single PR propagates improvements. === 8. Self-hosted runner for heavy work (long-term) @@ -274,5 +274,5 @@ frequency × job count). incident that motivated this spec. * `007-lang/audits/audit-dependabot-automation-gap-2026-04-17.md` — separate defect stack also addressed in the same session. -* `rsr-template-repo/.github/workflows/dependabot-automerge.yml` — +* `resource-algebra/.github/workflows/dependabot-automerge.yml` — canonical pattern for auto-merge pattern referenced above. diff --git a/docs/proposals/root-cleanup.adoc b/docs/proposals/root-cleanup.adoc index 891cb17..1e912b1 100644 --- a/docs/proposals/root-cleanup.adoc +++ b/docs/proposals/root-cleanup.adoc @@ -165,7 +165,7 @@ across `Justfile`, `scripts/`, `.machine_readable/`). Resolved: the repo deed (`_chora.deed` at the root) is the single AI manifest. The family-7 allocation manifest folded into it (standards#837 pilot), and no separate manifest or pointer file remains: no `.a2ml` file -may exist in the template or its downstream repos (rsr-template-repo#209). +may exist in the template or its downstream repos (resource-algebra#209). === Template-only relocations diff --git a/docs/reports/audit/pillar-audit-2026-04-15.adoc b/docs/reports/audit/pillar-audit-2026-04-15.adoc index d94b391..e5d01c5 100644 --- a/docs/reports/audit/pillar-audit-2026-04-15.adoc +++ b/docs/reports/audit/pillar-audit-2026-04-15.adoc @@ -3,10 +3,10 @@ = Gemini Audit Report (M2: Pillar Repo Audits) :date: 2026-04-15 -NOTE: Superseded in part (2026-10-06, rsr-template-repo#209): the `.a2ml` files named below no longer exist; their facts are clauses of the repo deed (`*_chora.deed`). +NOTE: Superseded in part (2026-10-06, resource-algebra#209): the `.a2ml` files named below no longer exist; their facts are clauses of the repo deed (`*_chora.deed`). Date: 2026-04-15 + -Repository: `/var/mnt/eclipse/repos/rsr-template-repo` +Repository: `/var/mnt/eclipse/repos/resource-algebra` == Audit Criteria diff --git a/docs/status/PROOF-NEEDS.adoc b/docs/status/PROOF-NEEDS.adoc index aabe3c2..edb6124 100644 --- a/docs/status/PROOF-NEEDS.adoc +++ b/docs/status/PROOF-NEEDS.adoc @@ -2,7 +2,7 @@ // Copyright (c) Jonathan D.A. Jewell // Template: rsr-template-repo/docs/status/PROOF-NEEDS.adoc // Authoritative master list: ~/Desktop/PROOF-REQUIREMENTS-MASTER.adoc -= Proof Requirements — {{PROJECT}} += Proof Requirements — RESOURCE_ALGEBRA == Proof Tier @@ -26,7 +26,7 @@ == Mandatory Proofs (All RSR Repos) -These proofs come from the rsr-template-repo and MUST be present in every repo: +These proofs come from the resource-algebra and MUST be present in every repo: === ABI/FFI Boundary Proofs (Idris2) diff --git a/docs/status/READINESS.adoc b/docs/status/READINESS.adoc index b34e6a1..8171428 100644 --- a/docs/status/READINESS.adoc +++ b/docs/status/READINESS.adoc @@ -1,10 +1,10 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -= {{PROJECT_NAME}} Component Readiness Assessment += Resource Algebra Component Readiness Assessment -*Standard:* link:https://{{FORGE}}/{{OWNER}}/standards/tree/main/component-readiness-grades[Component Readiness Grades (CRG) v2.0 STRICT] + -*Assessed:* {{CURRENT_DATE}} + -*Assessor:* {{AUTHOR}} + +*Standard:* link:https://github.com/hyperpolymath/standards/tree/main/component-readiness-grades[Component Readiness Grades (CRG) v2.0 STRICT] + +*Assessed:* 2026-10-14 + +*Assessor:* Jonathan D.A. Jewell + *Previous assessment:* __ *Current Grade:* X @@ -59,7 +59,7 @@ Below B, any publication must be explicitly abstract or provisional. ''' -== 2. Headline Evidence (as of {{CURRENT_DATE}}) +== 2. Headline Evidence (as of 2026-10-14) [cols="2,3,3", options="header"] |=== @@ -67,7 +67,7 @@ Below B, any publication must be explicitly abstract or provisional. | Test count | __ | `docs/status/ROADMAP.adoc` or CI | Formal-verification posture | __ | grep of proof dirs -| Dangerous patterns (`assert_total`, `unsafeCoerce`, `Obj.magic`) | __ | grep {{CURRENT_DATE}} +| Dangerous patterns (`assert_total`, `unsafeCoerce`, `Obj.magic`) | __ | grep 2026-10-14 | Per-unit README coverage | __ | filesystem scan of unit dirs | CI status | __ | `.github/workflows/` | RSR mandatory workflows | __ | `.github/workflows/` @@ -87,9 +87,9 @@ unless noted. |=== | Component | Grade | Posture | Evidence Summary | Promotion blocker | Last Assessed -| __ | X/F/E/D/C/B/A | __ | __ | __ | {{CURRENT_DATE}} -| __ | … | … | … | … | {{CURRENT_DATE}} -| __ | … | … | … | … | {{CURRENT_DATE}} +| __ | X/F/E/D/C/B/A | __ | __ | __ | 2026-10-14 +| __ | … | … | … | … | 2026-10-14 +| __ | … | … | … | … | 2026-10-14 |=== *Rules of thumb for populating this table:* @@ -164,7 +164,7 @@ Real-world external feedback confirming value. Populate ''' -== 7. Summary ({{CURRENT_DATE}}) +== 7. Summary (2026-10-14) * Project grade: __. Why: _<1-2 line justification>_. * Delta since last assessment: __. @@ -177,7 +177,7 @@ Real-world external feedback confirming value. Populate * `docs/governance/CRG-CRITERIA.adoc` — grade definitions (boilerplate). * `docs/governance/CRG-AUDIT-.adoc` — formal audit (populate from - `rsr-template-repo/docs/governance/CRG-AUDIT-TEMPLATE.adoc`). + `resource-algebra/docs/governance/CRG-AUDIT-TEMPLATE.adoc`). * `docs/practice/DOGFOOD-LOG.adoc` — dated dogfood evidence (required for C). * `docs/status/ROADMAP.adoc` — evidence journal (sections `== Dogfooding status`, `== External targets`, `== Issues fed back`, diff --git a/docs/status/ROADMAP.adoc b/docs/status/ROADMAP.adoc index 90483f3..79e52f5 100644 --- a/docs/status/ROADMAP.adoc +++ b/docs/status/ROADMAP.adoc @@ -1,69 +1,23 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -= rsr-template-repo Roadmap += Resource Algebra Roadmap -The journal of the template itself: milestones, blockers and next actions. -A repo minted from the template does not inherit it: `just repo-init` -replaces this file with `build/templates/ROADMAP.adoc.in`. +== Current Status -Phase and maturity are not recorded here. They live in the repo deed, -`resource-algebra_chora.deed`, in the `(status …)` and `(maturity …)` -clauses (`just state-phase` prints both). - -This file took over the journal half of the retired STATE record -(rsr-template-repo#209), last -updated there on 2026-09-19. STATE also recorded version 0.3.0; the release -version is 0.1.0 (`Justfile`, `CITATION.cff`, tag `v0.1.0`, deed -`(meta :version …)`). +Initial development phase. == Milestones -[cols="5,1",options="header"] -|=== -| Milestone | Done - -| Phase 0: Core scaffolding (justfile, CI/CD, machine-readable) | 100% -| Phase 1: ABI/FFI standard (Idris2/Zig templates) | 100% -| Phase 1b: AI Gatekeeper Protocol (AI manifest, now the repo deed) | 100% -| Phase 1c: TOPOLOGY.md standard and guide | 100% -| Phase 1d: Maintenance gate (axes, checklist, approach) | 100% -| Phase 1e: Trustfile / contractiles | 100% -| Phase 2: Container ecosystem templates (stapeln) | 100% -| Phase 2b: www/ site-operations bundle + .well-known migration (#53) | 100% -| Phase 2c: Forge & Sustain mechanics — provenance at mint, self-name passes, drift gate, update mechanism (ADR-0003, ratified 2026-09-19) | 100% -| Phase 2d: julia-library archetype overlay + e2e mint test (recon P1.2) | 100% -| Phase 3: Multi-forge sync hardening | 0% -| Phase 4: Guix reproducible shells | 50% -| Phase 4b: RSR oracle dogfood gate in CI (recon P0.2; hypatia M-3 SSOT-path fix is the precondition) | 0% -|=== - -== Blockers - -. Hypatia M-3: `mix hypatia.rsr_score --standards` resolves the SSOT at the - pre-reorg path (`rhodium-standard-repositories/spec/`). A one-line fix is - prepared (recon P0.2/01), pending its PR. The dogfood job works around it - with an explicit `--ssot` until then. -. Estate-wide `actions.lock` sweep (D38/D39 ruling 2026-09-19): the grace - window closed on 2026-10-01. The sweep's estate-wide status is not recorded - here. This repo's own lockfile verifies (`gh actions-lock --no-fix`, rc=0, - 2026-10-02). - -== Next actions - -* Wire the RSR oracle dogfood job in dogfood-gate.yml (recon P0.2) once the hypatia M-3 fix lands -* Record where the estate-wide actions.lock sweep stands now that the 2026-10-01 window has closed (gatekeeper repos first) -* Rebase rsr-julia-library-template-repo onto this spine (recon P1.3 procedure; ADR-0003 now accepted) -* Validate container templates across wolfi-base and static Chainguard images -* Harden multi-forge sync for GitLab/Bitbucket mirroring edge cases -* Expand Guix development shell templates - -== Maintenance runs +=== v0.1.0 - Foundation +* [ ] Core functionality +* [ ] Basic documentation +* [ ] CI/CD pipeline -No maintenance run has been recorded. Reports go to -`docs/reports/maintenance/latest.json`. +=== v1.0.0 - Stable Release +* [ ] Full feature set +* [ ] Comprehensive tests +* [ ] Production ready -== Ecosystem +== Future Directions -Part of the RSR Framework and the stapeln ecosystem. The repos it depends on -(stapeln, selur-compose, cerro-torre, svalinn, vordr, k9-svc) are the -`(related …)` entries of the deed's `(ecosystem …)` clause. +_To be determined based on community feedback._ diff --git a/docs/status/TEST-NEEDS.adoc b/docs/status/TEST-NEEDS.adoc index c6d2e51..59809bf 100644 --- a/docs/status/TEST-NEEDS.adoc +++ b/docs/status/TEST-NEEDS.adoc @@ -1,6 +1,6 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -= TEST-NEEDS: rsr-template-repo += TEST-NEEDS: resource-algebra == CRG Grade: C — ACHIEVED 2026-04-04 @@ -65,7 +65,7 @@ output only. === Zig FFI Tests ✅ * [x] `src/interface/ffi/test/integration_test.zig` — template with examples -** Converted from `{{project}}` placeholders to "template" namespace +** Converted from `resource_algebra` placeholders to "template" namespace ** Added comprehensive comments for how to instantiate ** Tests grouped by category (lifecycle, operations, strings, errors, version, memory safety, threading) ** Compiles and passes placeholder test diff --git a/build/docs-seed/troubleshooting.adoc b/docs/troubleshooting.adoc similarity index 84% rename from build/docs-seed/troubleshooting.adoc rename to docs/troubleshooting.adoc index 8c62e69..b5b086d 100644 --- a/build/docs-seed/troubleshooting.adoc +++ b/docs/troubleshooting.adoc @@ -1,8 +1,8 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -// SPDX-FileCopyrightText: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> -= Troubleshooting — {{PROJECT_NAME}} -:revdate: {{CURRENT_YEAR}}-MM-DD +// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) += Troubleshooting — Resource Algebra +:revdate: 2026-MM-DD This file is a *living FAQ* — known failure modes and recovery paths. Add a new entry every time you debug something that took more than 15 @@ -54,5 +54,5 @@ just log-tail # last N lines of logs * `docs/architecture.adoc` — internals. * `docs/decisions/` — historical record of why things are this shape. -* `https://github.com/{{OWNER}}/{{PROJECT_NAME}}/issues?q=is%3Aissue+` — has anyone hit this before? +* `https://github.com/hyperpolymath/Resource Algebra/issues?q=is%3Aissue+` — has anyone hit this before? * `https://github.com/hyperpolymath/standards/issues` — for estate-wide problems. diff --git a/build/docs-seed/usage.adoc b/docs/usage.adoc similarity index 88% rename from build/docs-seed/usage.adoc rename to docs/usage.adoc index 8ebc533..d9dad60 100644 --- a/build/docs-seed/usage.adoc +++ b/docs/usage.adoc @@ -1,12 +1,12 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // Copyright (c) Jonathan D.A. Jewell -// SPDX-FileCopyrightText: {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> -= Usage — {{PROJECT_NAME}} -:revdate: {{CURRENT_YEAR}}-MM-DD +// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) += Usage — Resource Algebra +:revdate: 2026-MM-DD == Audience -This document is for *consumers* of `{{PROJECT_NAME}}` — people who depend +This document is for *consumers* of `Resource Algebra` — people who depend on it, call it, or include it. For developers working *on* it, see link:./contributing.adoc[contributing.adoc]. @@ -31,7 +31,7 @@ Expected output: [source] ---- -{{PROJECT_NAME}} v0.0.0 +Resource Algebra v0.0.0 Listening on 127.0.0.1:8080 ---- diff --git a/launcher.sh b/launcher.sh index 8fb0d7f..897aca4 100755 --- a/launcher.sh +++ b/launcher.sh @@ -6,12 +6,12 @@ # ;; SPDX-License-Identifier: MPL-2.0 # (praxis-deed # :schema-version "1.0.0" -# :canonical-name "rsr-template-repo-launcher" +# :canonical-name "resource-algebra-launcher" # :beholding-chora #u5"estate/chora" # (artefact :type "launcher" :version "0.1.0" # :generator "provision-set") -# (app :name "rsr-template-repo" :display "rsr-template-repo" -# :url "https://github.com/hyperpolymath/rsr-template-repo" :archetype "library") +# (app :name "resource-algebra" :display "resource-algebra" +# :url "https://github.com/hyperpolymath/resource-algebra" :archetype "library") # (compliance :standard-version "0.6.0" # :standards ("launcher-standard.adoc" # "PROVISIONING-STANDARD.adoc")) diff --git a/mise.toml b/mise.toml index 7703058..6423bc8 100644 --- a/mise.toml +++ b/mise.toml @@ -1,7 +1,7 @@ # SPDX-License-Identifier: MPL-2.0 # SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) # -# The toolchain for rsr-template-repo (idris2, zig). Specs are `latest`; mise.lock +# The toolchain for resource-algebra (idris2, zig). Specs are `latest`; mise.lock # records the concrete version and per-platform checksum of each, so every # checkout installs the same bits. Refresh both with: just toolchain-refresh # Canon: hyperpolymath/standards 3-practice/provisioning (TRUST-DEFAULTS §toolchain). diff --git a/resource-algebra_chora.deed b/resource-algebra_chora.deed index 3ea6799..b20ed04 100644 --- a/resource-algebra_chora.deed +++ b/resource-algebra_chora.deed @@ -39,20 +39,63 @@ ; canon change is a one-line bump. :order "spine-adopts-then-canon-releases") ; >>> repo-identity - ; Repository identity follows the GitHub repository and the Agda library - ; described in README.adoc. Clade assignment remains an owner decision, - ; as in build/templates/identity.deed.in. + ; Written by `just repo-init` from build/templates/identity.deed.in, in + ; place of the block the template repo ships (template issue #209). It replaces + ; descriptiles/CLADE.a2ml and ECOSYSTEM.a2ml; the mapping is standards + ; 1-formats/deed/mappings/clade-to-repo-deed.adoc and + ; meta-ecosystem-to-repo-deed.adoc. + ; + ; THE UUID IS DERIVED, NOT ALLOCATED, NOT INVENTED. It is not stored: it is + ; uuid5(namespace = URL, name = the header :repo-uuid string) + ; and anyone can recompute it (gv-clade-index: + ; docs/SPEC-clade-verisim-portal.adoc §Identity Model): + ; uuidgen --sha1 --namespace @url --name "github.com/hyperpolymath/resource-algebra" + ; The owner is part of the name, so part of the identity: record the owner + ; that is true today, and re-derive if the repo ever moves. + ; + ; CHOOSE A CLADE. A CLOSED TAXONOMY OF 12 CATEGORIES, NOT AN ABBREVIATION + ; SCHEME: the two letters abbreviate the clade's name, never your repo's. + ; fv Formal Verification & Proofs provable correctness, dependent types, theorem proving + ; nl Nextgen Languages compilers, runtimes, language tooling + ; rm Repo Management & Tooling scaffolding, graph analysis, bots, templates + ; gv Governance & Standards licensing, compliance, policy enforcement + ; db Databases database engines, query languages, storage + ; ap Applications end-user apps, web, desktop, services + ; ix Infrastructure & Cloud containers, deployment, sysadmin + ; dx Developer Ecosystem dev tools, package managers, editors, bindings + ; pt Protocols & Interop internet standards, protocol implementations + ; ax AI & Neurosymbolic ML, neural proof synthesis, AI governance + ; gm Games & Interactive game engines, interactive experiences + ; sc Security scanning, vulnerability management, access control + ; paint-type once chose `pt` reading it as "PainT-type" (an image editor is + ; `ap`); gossamer chose `gv` reading it as "Graphical/Visual" (`gv` is + ; GoVernance). Both codes were valid, so every check passed. + ; HOW TO CHOOSE: the primary clade reflects the project's core value + ; proposition, not its implementation. A game written in Idris2 is `gm`. + ; Set BOTH :primary and :primary-name, and make them agree; then set + ; :prefixed-name to "-resource-algebra". `just validate-rsr` fails while + ; :primary is UNASSIGNED. That is deliberate: an unchosen clade must never + ; look like a chosen one. + ; + ; REGISTRATION IS NOT DERIVATION. Registering means an entry in + ; gv-clade-index verisim/seed/repos.a2ml. It is outward-facing and it is the + ; OWNER's act; an agent must not do it. (identity :primary-forge github :owner "hyperpolymath" - :prefixed-name "UNASSIGNED-resource-algebra") + :prefixed-name "fv-resource-algebra") (clade - :primary UNASSIGNED - :primary-name "UNASSIGNED" + :primary fv + :primary-name "Formal Verification & Proofs" :secondary () - :rationale "Clade not yet assigned for resource-algebra.") + :assigned "2026-10-14" + :rationale "Formal Verification & Proofs (`fv`), chosen by the owner 2026-10-14. The core value is checked correctness: an Agda (--safe --without-K) grade algebra whose instances, morphisms and separations are proved, with expected-rejection tests that must fail.") (forges :github "hyperpolymath/resource-algebra") + ; :type is one of standalone monorepo monorepo-child inflated deflated hub + ; satellite. A hub COORDINATES an ecosystem family; a satellite is + ; coordinated by one and keeps :parent "" (parent names a monorepo parent, + ; never the coordinating hub). (lineage :type standalone :parent "" @@ -69,8 +112,8 @@ :successors () :ended "" (history - (entry :phase active :since "2026-10-12" :note "Agda resource-algebra library, created from rsr-template-repo"))) - ; Proofs and remaining adoption obligations are recorded in PROOF-STATUS.adoc. + (entry :phase active :since "2026-10-12" :note "Agda resource-algebra library, created from rsr-template-repo df09a6c with GitHub's template copy; minted by just repo-init 2026-10-14; clade fv chosen 2026-10-14; not yet registered in gv-clade-index"))) + ; Proofs and remaining adoption obligations are recorded in docs/status/PROOF-STATUS.adoc. (maturity :level experimental) ; Ecosystem: mapping meta-ecosystem-to-repo-deed. @@ -84,6 +127,7 @@ "occupancy-types' own algebra, for which HWM is a proposal") :pipeline-position "kernel" :chain "resource-algebra → hyperpolymath type family" + :coordination standards (related :name "rsr-template-repo" :relationship minted-from :notes "Source of the inherited repository scaffolding.")) ; <<< repo-identity ; Meta: mapping meta-ecosystem-to-repo-deed. A minted repo keeps this @@ -996,69 +1040,62 @@ "Axis 2 type governs commit categorisation" "Axis 3 focus governs audit depth"))) ; rsr-profile — this repo's declared RSR v2.0 capabilities. - ; It carries no canon pin: the (canon) clause above is the pin, exactly once. - ; - ; It declares which capabilities this repo has, - ; per 0-canon/TEMPLATE-APPLICABILITY-POLICY.adoc; the RSR v2.0 conformance oracle - ; (hypatia Hypatia.Rules.RsrConformance) uses `capabilities` to compute the - ; APPLICABLE criteria set — a gated criterion is scored only when its gating - ; capability appears below; everything else is `na` and excluded from the - ; denominator. - ; - ; rsr-template-repo is deliberately MAXIMAL: it ships scaffolding for FFI/ABI - ; seams, in-tree formal proofs, a container, a reproducible build, benchmarks, - ; a docs site, and the full governance trio — so a repo scaffolded FROM it can - ; adopt any of them. Its declared set is therefore near-total, which is exactly - ; what makes it the dogfood target (the gate requires Gold on the applicable - ; set). Every capability below is grounded in a file/dir that actually exists - ; in this tree; capabilities it does NOT have (rust, affinescript, mobile, - ; web-ui, api-service, published-package) are omitted so the oracle does not - ; score this repo against modules it does not carry. + ; Written by just repo-init on 2026-10-14. The template's maximal + ; profile was replaced at mint: declare only what this tree carries. (rsr-profile :version "1.0.0" :spec "rsr-criteria-v2" :declares-against "2.1.1-draft" - ; Role in the estate pipeline: standards (canon) -> THIS (spine) -> scaffoldia - ; (composer) -> minted repos. A spine may carry capability-gated modules it - ; does not declare, for the repos minted from it; see [carrier] in the canon - ; gates table. A minted repo doing the same is still drift. - :role "spine" - ; Effective capability set (direct declaration; no preset shorthand used). - :capabilities ( - ; src/interface/ffi/build.zig + Zig FFI layer - "zig" - ; src/interface/abi.ipkg + src/interface/Abi/ (dependent-typed ABI) - "idris2" - ; scripts/*.sh automation - "bash" - ; src/ command-line entry scaffolding - "cli" - ; consumed/published as a library surface - "library" - ; C-ABI FFI seam (Zig), src/interface/ffi/ - "ffi" - ; formally specified ABI: src/interface/abi.ipkg + src/interface/Abi/ proofs - "abi" - ; verification/proofs/ (in-tree mechanised proofs) - "formal-proofs" - ; .github/workflows/pages.yml (casket/Pages) - "docs-site" - ; build/container/ + .devcontainer/Containerfile - "container" - ; build/guix.scm - "reproducible-build" - ; benches/ - "benchmarks" - ; full AUDIT/AFFIRMATION/GOVERNANCE/MAINTAINERS trio - "governance-tier" - ) - (notes - ; Capabilities intentionally NOT declared (no corresponding code in tree): - ; rust — no *.rs / Cargo.toml (the FFI/ABI layer is Zig + Idris2) - ; affinescript — no *.affine - ; mobile — no Tauri/Dioxus app - ; web-ui — no browser UI - ; api-service — not a network daemon - ; published-package — a scaffold template, not itself a registry artifact - :omitted-rationale "Declaring a capability this repo lacks would make the oracle score it against a module it does not carry — the over-scaffolding failure v2.0 fixes. See 0-canon/TEMPLATE-APPLICABILITY-POLICY.adoc.")) + ; UNASSIGNED: declare capabilities (or a preset) — see standards + ; .machine_readable/template-capability-gates.toml + :capabilities ()) + ; variant — provenance contract (ADR-0002 shape; ADR-0003 use). + ; Records what this repo was minted from so the drift gate + ; (scripts/check-variant-drift.sh ) and future + ; re-templating tooling have a defined input. Placeholder rendering + ; means many files differ from the parent by design; folding rendered + ; answers into (normalise) is future work (ADR-0003), so the gate is + ; informational for minted repos until then. + (variant + :project "resource-algebra" + :schema-version "0.1.0" + :last-updated "2026-10-14" + :parent "hyperpolymath/rsr-template-repo" + ; template tip at mint + :parent-pin "df09a6c50c4c77e93abac0fdf162509bf5648611" + :role "minted-repo" + :stack "unspecified" + :direction "generated-from-core" + (normalise :rules "action-pins self-name") + ; Files a minted repo owns from birth are (paths :diverged …). + (paths + :added () + :removed () + :diverged ("resource-algebra_chora.deed" "docs/status/ROADMAP.adoc"))) + ; provenance — what this repo was minted FROM. Written once, at mint, + ; by build/just/repo-init.just. Tools that want "what is this repo" read + ; the rest of the deed; tools that want "where did it come from" read this. + (provenance + :minted-at "2026-10-14" + :template-repo "hyperpolymath/rsr-template-repo" + :template-branch "main" + :template-commit "df09a6c50c4c77e93abac0fdf162509bf5648611" + :template-tree "2c01b6f0627133f0ed2544e1edd07ed49602e117" + ; Contract: branches this repo is EXPECTED to carry beyond the default. + ; Empty means default-only. A mint must never inherit template work + ; branches (coderabbit/, chore/, bot-task or stale branches) — that is + ; how knot-knot received a byte-identical copy of a template work branch + ; with no common ancestor (#203). Enforced by + ; scripts/check-template-conformance.sh. + :extra-branches () + :canon-version "2.1.2" + :criteria-sha256 "6a5aa8857bd0d0d58ef48827938ca17c251b6b854dacf59d306388d61694d82a" + :gates-sha256 "e70efd2f53c9445e30da4baf770366f04a4a84ffd844a01426e587e565b53e6a" + :archetype "" + ; Which minting path actually ran (#201/#203 needed this signal). + :minted-by "repo-init" + :mint-mode "non-interactive" + ; A non-empty :unassigned list means the mint did not fully render; + ; the validation step below already fails on a leftover token. + (substitutions :rendered 34 :unassigned ())) ) diff --git a/scripts/campaigns/www-bundle.campaign b/scripts/campaigns/www-bundle.campaign index c1424ce..36d1dc9 100644 --- a/scripts/campaigns/www-bundle.campaign +++ b/scripts/campaigns/www-bundle.campaign @@ -30,7 +30,7 @@ # # The rest of www/ is deliberately NOT propagated: # -# www/public/ per-repo placeholders ({{PROJECT_NAME}} and friends) +# www/public/ per-repo placeholders (Resource Algebra and friends) # www/policies/ per-repo placeholders # www/dns/ a DNS scaffold most repositories do not operate # www/tls/ as above diff --git a/scripts/check-agda.sh b/scripts/check-agda.sh index 61d5e46..f45754e 100755 --- a/scripts/check-agda.sh +++ b/scripts/check-agda.sh @@ -29,16 +29,36 @@ for file in "${rejects[@]}"; do exit 1 fi log="_build/check-logs/$name.log" + # The lines of the fixture's `invalid` definition: from its first clause + # (the first `invalid` line that is not the type signature) to the last + # clause or continuation line before the next top-level declaration. + read -r def_first def_last < <(awk ' + !start { if (/^invalid([[:space:]]|$)/ && !/^invalid[[:space:]]*:/) start = last = NR; next } + done || !NF || /^--/ { next } + /^invalid([[:space:]]|$)/ || /^[[:space:]]/ { last = NR; next } + { done = 1 } + END { print start + 0, last + 0 }' "$file") + if (( def_first == 0 )); then + echo "ERROR: $file has no \`invalid\` definition to reject" >&2 + exit 1 + fi if "$prover" "${flags[@]}" -i tests/reject "$file" >"$log" 2>&1; then cat "$log" echo "ERROR: invalid proof accepted: $name" >&2 exit 1 fi - if ! grep -Eq "/$name\.agda:[0-9]+,[0-9]+" "$log" || + # Agda stops at its first error, so the first location it reports in this + # file must lie inside `invalid`. Any `when checking that` diagnostic used + # to pass, so an earlier, unrelated type error passed before Agda ever + # reached the claim the fixture exists to refute. + err_line="$(grep -oE "/$name\.agda:[0-9]+," "$log" | head -1 | sed -E 's/.*:([0-9]+),$/\1/' || true)" + if [[ -z "$err_line" ]] || + (( err_line < def_first || err_line > def_last )) || ! grep -q 'when checking that' "$log" || grep -Eq 'Not in scope|Failed to find|Unsolved|Parse error' "$log"; then cat "$log" - echo "ERROR: unexpected failure while checking $name" >&2 + echo "ERROR: unexpected failure while checking $name" \ + "(first error at line ${err_line:-none}; \`invalid\` spans lines $def_first-$def_last)" >&2 exit 1 fi if ! grep -Eq -- "$expect" "$log"; then @@ -46,6 +66,6 @@ for file in "${rejects[@]}"; do echo "ERROR: $name was refused, but not with: $expect" >&2 exit 1 fi - echo "PASS: rejected $name at its invalid declaration ($expect)" + echo "PASS: rejected $name at its invalid declaration (line $err_line: $expect)" done echo "PASS: core proofs, unit tests and all ${#rejects[@]} expected rejections" diff --git a/scripts/check-no-placeholders.sh b/scripts/check-no-placeholders.sh index f33a4b8..7e95baf 100755 --- a/scripts/check-no-placeholders.sh +++ b/scripts/check-no-placeholders.sh @@ -46,10 +46,10 @@ fi # # This check deliberately precedes the template exemption below. That exemption # is why the original incident went unseen: the gate skipped `*-template-repo` -# entirely, so nobody noticed that .github/settings.yml shipped `name: "{{REPO}}"` +# entirely, so nobody noticed that .github/settings.yml shipped `name: "resource-algebra"` # — and .github/settings.yml is not inert content in a template. probot/settings # applies it on every push to the default branch, in the template as much as in -# an instantiation. The template submitted the literal `{{REPO}}` as its own +# an instantiation. The template submitted the literal `resource-algebra` as its own # name; GitHub collapsed the illegal braces to dashes and renamed the repository # to `-REPO-`, which then read as a deleted repo. # @@ -96,11 +96,11 @@ fi # Identity comes from the git remote, not the directory name. # # This used to be `basename "$(pwd)"`, which is right in CI — GITHUB_REPOSITORY -# is set to `owner/rsr-template-repo` and matches — but wrong anywhere the +# is set to `owner/resource-algebra` and matches — but wrong anywhere the # checkout is not literally named `*-template-repo`. A git worktree is the common # case: `git worktree add .claude/worktrees/defects` gives basename `defects`, # the exemption misses, and the gate reports every one of the template's ~85 -# deliberate placeholder files as a failure. A clone into `rsr-template-repo-2`, +# deliberate placeholder files as a failure. A clone into `resource-algebra-2`, # or any renamed directory, does the same. # # The remote URL is the repo's actual identity and survives all of that. The diff --git a/scripts/deed-field.sh b/scripts/deed-field.sh index 57d27c1..e47c4bb 100755 --- a/scripts/deed-field.sh +++ b/scripts/deed-field.sh @@ -6,7 +6,7 @@ # *_praxis.deed: the root is the first form with an ABNF doc-head). # # The repo deed holds what the descriptiles CLADE / META / ECOSYSTEM / STATE / -# AGENTIC .a2ml files used to hold (rsr-template-repo#209). This is the one +# AGENTIC .a2ml files used to hold (resource-algebra#209). This is the one # shell reader for it, so that every gate, extractor and recipe asks the same # question the same way. It is a READER: it never writes the deed. # diff --git a/scripts/migrate-wellknown-to-www.sh b/scripts/migrate-wellknown-to-www.sh index 3135692..42f758f 100755 --- a/scripts/migrate-wellknown-to-www.sh +++ b/scripts/migrate-wellknown-to-www.sh @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MPL-2.0 # # migrate-wellknown-to-www.sh — conflict-safe migration of a repository-root -# .well-known/ tree into www/.well-known/ (rsr-template-repo#53). +# .well-known/ tree into www/.well-known/ (resource-algebra#53). # # Stage 1 established the canonical location. Stage 5 (#119) sweeps it across # ~270 repositories, which changes what "conflict-safe" has to mean: a sweep diff --git a/scripts/sweep-wellknown.sh b/scripts/sweep-wellknown.sh index 1dc6db7..bce032b 100755 --- a/scripts/sweep-wellknown.sh +++ b/scripts/sweep-wellknown.sh @@ -63,7 +63,7 @@ usage() { cat <<'EOF' Usage: scripts/sweep-wellknown.sh [options] [repo ...] -Classify, migrate and test repositories in batches (rsr-template-repo#119). +Classify, migrate and test repositories in batches (resource-algebra#119). Selecting repositories: --repos-file FILE one repository name per line ('#' comments allowed) @@ -356,7 +356,7 @@ sweep_repo() { # repo class -> appends to RESULT_CSV if [ -n "$(cd "$dir" && git status --porcelain)" ]; then # A commit failure is recorded, never fatal: one repository with an # unusual hook or an unwritable ref must not abandon the batch. - if (cd "$dir" && git add -A && git commit -qm "chore(www): migrate root .well-known/ to www/.well-known/ (rsr-template-repo#119)"); then + if (cd "$dir" && git add -A && git commit -qm "chore(www): migrate root .well-known/ to www/.well-known/ (resource-algebra#119)"); then if [ "$PUSH" -eq 1 ]; then (cd "$dir" && git push -q origin "HEAD:$BRANCH") \ || detail="${detail:+$detail; }push failed" diff --git a/scripts/validate-template.sh b/scripts/validate-template.sh index a269090..5d24417 100755 --- a/scripts/validate-template.sh +++ b/scripts/validate-template.sh @@ -187,7 +187,7 @@ log_info "Phase 2: Machine-readable metadata (.machine_readable/)" echo "" # Project state, architecture axes, ecosystem position, the anchor and the -# maintenance axes are clauses of the repo deed (rsr-template-repo#209). +# maintenance axes are clauses of the repo deed (resource-algebra#209). DEED_FILE=$(bash "$REPO_ROOT/scripts/deed-field.sh" --find "$REPO_ROOT" || true) for clause in status maturity meta ecosystem anchor policies/maintenance-axes; do if [ -z "$DEED_FILE" ] || ! bash "$REPO_ROOT/scripts/deed-field.sh" --has "$DEED_FILE" "$clause"; then @@ -321,7 +321,7 @@ echo "" # Note: Template repo is allowed to have placeholders # For derived repos, we'd check that placeholders are replaced -if [ "$(basename "$REPO_ROOT")" = "rsr-template-repo" ]; then +if [ "$(basename "$REPO_ROOT")" = "resource-algebra" ]; then log_pass "Skipping placeholder check for template repo" else # Check that key files don't have unresolved placeholders diff --git a/sonar-project.properties b/sonar-project.properties index 961e208..d8a60d7 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,9 +1,9 @@ # SPDX-License-Identifier: MPL-2.0 # SonarQube Cloud (SonarCloud) configuration. -# Project: https://sonarcloud.io/project/overview?id=hyperpolymath_rsr-template-repo +# Project: https://sonarcloud.io/project/overview?id=hyperpolymath_resource-algebra # Requires the SONAR_TOKEN repository secret + a SonarCloud project (owner setup). sonar.organization=hyperpolymath -sonar.projectKey=hyperpolymath_rsr-template-repo +sonar.projectKey=hyperpolymath_resource-algebra # Analysable surface = shell scripts + any JS/TS the template carries. Idris2, # Zig, Elixir and AffineScript have no SonarCloud analyser; vendored, generated, diff --git a/src/interface/ffi/src/main.zig b/src/interface/ffi/src/main.zig index 129a44a..5f63431 100644 --- a/src/interface/ffi/src/main.zig +++ b/src/interface/ffi/src/main.zig @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MPL-2.0 // Copyright (c) Jonathan D.A. Jewell -// {{PROJECT}} FFI Implementation +// RESOURCE_ALGEBRA FFI Implementation // // This module implements the C-compatible FFI declared in src/abi/Foreign.idr // All types and layouts must match the Idris2 ABI definitions. @@ -10,7 +10,7 @@ const std = @import("std"); // Version information (keep in sync with project) const VERSION = "0.1.0"; -const BUILD_INFO = "{{PROJECT}} built with Zig " ++ @import("builtin").zig_version_string; +const BUILD_INFO = "RESOURCE_ALGEBRA built with Zig " ++ @import("builtin").zig_version_string; /// Thread-local error storage threadlocal var last_error: ?[]const u8 = null; @@ -52,7 +52,7 @@ pub const Handle = struct { /// Initialize the library /// Returns a handle, or null on failure -export fn {{project}}_init() ?*Handle { +export fn resource_algebra_init() ?*Handle { const allocator = std.heap.c_allocator; const handle = allocator.create(Handle) catch { @@ -71,7 +71,7 @@ export fn {{project}}_init() ?*Handle { } /// Free the library handle -export fn {{project}}_free(handle: ?*Handle) void { +export fn resource_algebra_free(handle: ?*Handle) void { const h = handle orelse return; const allocator = h.allocator; @@ -87,7 +87,7 @@ export fn {{project}}_free(handle: ?*Handle) void { //============================================================================== /// Process data (example operation) -export fn {{project}}_process(handle: ?*Handle, input: u32) Result { +export fn resource_algebra_process(handle: ?*Handle, input: u32) Result { const h = handle orelse { setError("Null handle"); return .null_pointer; @@ -111,7 +111,7 @@ export fn {{project}}_process(handle: ?*Handle, input: u32) Result { /// Get a string result (example) /// Caller must free the returned string -export fn {{project}}_get_string(handle: ?*Handle) ?[*:0]const u8 { +export fn resource_algebra_get_string(handle: ?*Handle) ?[*:0]const u8 { const h = handle orelse { setError("Null handle"); return null; @@ -133,7 +133,7 @@ export fn {{project}}_get_string(handle: ?*Handle) ?[*:0]const u8 { } /// Free a string allocated by the library -export fn {{project}}_free_string(str: ?[*:0]const u8) void { +export fn resource_algebra_free_string(str: ?[*:0]const u8) void { const s = str orelse return; const allocator = std.heap.c_allocator; @@ -146,7 +146,7 @@ export fn {{project}}_free_string(str: ?[*:0]const u8) void { //============================================================================== /// Process an array of data -export fn {{project}}_process_array( +export fn resource_algebra_process_array( handle: ?*Handle, buffer: ?[*]const u8, len: u32, @@ -182,7 +182,7 @@ export fn {{project}}_process_array( /// Get the last error message /// Returns null if no error -export fn {{project}}_last_error() ?[*:0]const u8 { +export fn resource_algebra_last_error() ?[*:0]const u8 { const err = last_error orelse return null; // Return C string (static storage, no need to free) @@ -196,12 +196,12 @@ export fn {{project}}_last_error() ?[*:0]const u8 { //============================================================================== /// Get the library version -export fn {{project}}_version() [*:0]const u8 { +export fn resource_algebra_version() [*:0]const u8 { return VERSION.ptr; } /// Get build information -export fn {{project}}_build_info() [*:0]const u8 { +export fn resource_algebra_build_info() [*:0]const u8 { return BUILD_INFO.ptr; } @@ -213,7 +213,7 @@ export fn {{project}}_build_info() [*:0]const u8 { pub const Callback = *const fn (u64, u32) callconv(.c) u32; /// Register a callback -export fn {{project}}_register_callback( +export fn resource_algebra_register_callback( handle: ?*Handle, callback: ?Callback, ) Result { @@ -244,7 +244,7 @@ export fn {{project}}_register_callback( //============================================================================== /// Check if handle is initialized -export fn {{project}}_is_initialized(handle: ?*Handle) u32 { +export fn resource_algebra_is_initialized(handle: ?*Handle) u32 { const h = handle orelse return 0; return if (h.initialized) 1 else 0; } @@ -254,22 +254,22 @@ export fn {{project}}_is_initialized(handle: ?*Handle) u32 { //============================================================================== test "lifecycle" { - const handle = {{project}}_init() orelse return error.InitFailed; - defer {{project}}_free(handle); + const handle = resource_algebra_init() orelse return error.InitFailed; + defer resource_algebra_free(handle); - try std.testing.expect({{project}}_is_initialized(handle) == 1); + try std.testing.expect(resource_algebra_is_initialized(handle) == 1); } test "error handling" { - const result = {{project}}_process(null, 0); + const result = resource_algebra_process(null, 0); try std.testing.expectEqual(Result.null_pointer, result); - const err = {{project}}_last_error(); + const err = resource_algebra_last_error(); try std.testing.expect(err != null); } test "version" { - const ver = {{project}}_version(); + const ver = resource_algebra_version(); const ver_str = std.mem.span(ver); try std.testing.expectEqualStrings(VERSION, ver_str); } diff --git a/tests/aspect_tests.sh b/tests/aspect_tests.sh index d56f6a3..7972b2f 100755 --- a/tests/aspect_tests.sh +++ b/tests/aspect_tests.sh @@ -39,7 +39,7 @@ fail() { red " FAIL: $1"; FAIL=$((FAIL + 1)); } warn() { yellow " WARN: $1"; WARN=$((WARN + 1)); } echo "═══════════════════════════════════════════════════════════════" -echo " {{PROJECT}} — Aspect Tests (Cross-Cutting Concerns)" +echo " RESOURCE_ALGEBRA — Aspect Tests (Cross-Cutting Concerns)" echo "═══════════════════════════════════════════════════════════════" echo "" diff --git a/tests/e2e.sh b/tests/e2e.sh index 1538490..c34a5fa 100755 --- a/tests/e2e.sh +++ b/tests/e2e.sh @@ -62,7 +62,7 @@ skip_test() { } echo "═══════════════════════════════════════════════════════════════" -echo " {{PROJECT}} — End-to-End Tests" +echo " RESOURCE_ALGEBRA — End-to-End Tests" echo "═══════════════════════════════════════════════════════════════" echo "" @@ -123,7 +123,7 @@ echo "" # else # STATUS=$(curl -s -o /dev/null -w "%{http_code}" -X POST "$VERISIM_URL/api/v1/hexads" \ # -H "Content-Type: application/json" \ -# -d '{"tool":"{{PROJECT}}","modality":"document","content":"e2e test"}') +# -d '{"tool":"RESOURCE_ALGEBRA","modality":"document","content":"e2e test"}') # check_status "hexad POST" "201" "$STATUS" # fi diff --git a/tests/e2e/template_instantiation_test.sh b/tests/e2e/template_instantiation_test.sh index 00a8115..c949d20 100755 --- a/tests/e2e/template_instantiation_test.sh +++ b/tests/e2e/template_instantiation_test.sh @@ -12,7 +12,6 @@ # 4. Verifies builds work after instantiation # 5. Cleans up - # Test configuration TEMPLATE_ROOT="${1:-.}" TEST_DIR="${TMPDIR:-/tmp}/rsr-template-test-$$" @@ -223,7 +222,7 @@ for guix_file in build/guix.scm; do log_error "$guix_file does not contain the rendered project home page" exit 1 fi - if grep -q 'rsr-template-repo' "$TEST_REPO_PATH/$guix_file"; then + if grep -q 'resource-algebra' "$TEST_REPO_PATH/$guix_file"; then log_error "$guix_file still contains the template repository identity" exit 1 fi @@ -358,7 +357,7 @@ done log_step "Verifying machine-readable metadata" # Identity, state, meta and ecosystem are clauses of the minted repo's own -# deed (rsr-template-repo#209); the journal is docs/status/ROADMAP.adoc. +# deed (resource-algebra#209); the journal is docs/status/ROADMAP.adoc. CHILD_DEED="${TEST_REPO_NAME}_chora.deed" for file in "$CHILD_DEED" "docs/status/ROADMAP.adoc"; do if [ -f "$TEST_REPO_PATH/$file" ]; then @@ -394,7 +393,7 @@ fi # the {{PLACEHOLDER}} the deed's prose mentions. log_pass "Child deed carries the minted repo's identity" -# Mint-time clauses (rsr-template-repo#209 follow-up): the profile is the +# Mint-time clauses (resource-algebra#209 follow-up): the profile is the # minimal one, not the template's maximal spine profile; provenance and the # variant record name the template commit; exactly one canon pin survives. if [ "$(bash "$DEED_READ" "$CHILD" rsr-profile role 2>/dev/null || true)" = "spine" ]; then diff --git a/tests/workflows/mint_cleanup_test.sh b/tests/workflows/mint_cleanup_test.sh index 5d1ca5c..398c63d 100644 --- a/tests/workflows/mint_cleanup_test.sh +++ b/tests/workflows/mint_cleanup_test.sh @@ -26,7 +26,6 @@ SPDX-License-Identifier: MPL-2.0 --> # Policy Prose mentions TEMPLATE INSTRUCTIONS and must survive. - Actual policy. DOC bash "$repo/scripts/rust-tool.sh" strip-instruction-blocks "$fixture" diff --git a/tests/workflows/template_conformance_test.sh b/tests/workflows/template_conformance_test.sh index 41b1f2e..661745f 100755 --- a/tests/workflows/template_conformance_test.sh +++ b/tests/workflows/template_conformance_test.sh @@ -89,14 +89,14 @@ T_TREE="$(git -C "$TMPL" rev-parse 'HEAD^{tree}')" # ───────────────────────────────────────────────────────────────────────────── say "control: a conforming child must PASS" CHILD="$SCRATCH/child-good" -make_child "$CHILD" "hyperpolymath/rsr-template-repo" "main" "$T_COMMIT" "$T_TREE" +make_child "$CHILD" "hyperpolymath/resource-algebra" "main" "$T_COMMIT" "$T_TREE" rc=$(run_check "$CHILD") if [ "$rc" -eq 0 ]; then ok "conforming child accepted (positive control)"; else bad "conforming child was rejected (rc=$rc)"; cat "$SCRATCH/out"; fi # ───────────────────────────────────────────────────────────────────────────── say "negative control 1: missing provenance must FAIL (#203)" CHILD="$SCRATCH/child-noprov" -make_child "$CHILD" "hyperpolymath/rsr-template-repo" "main" "$T_COMMIT" "$T_TREE" +make_child "$CHILD" "hyperpolymath/resource-algebra" "main" "$T_COMMIT" "$T_TREE" bash "$REPO_DIR/scripts/deed-clause.sh" replace "$CHILD/knot-knot_chora.deed" provenance - "$CHILD/.machine_readable/PROVENANCE.a2ml" +printf '[provenance]\ntemplate_repo = "hyperpolymath/resource-algebra"\n' > "$CHILD/.machine_readable/PROVENANCE.a2ml" rc=$(run_check "$CHILD") if [ "$rc" -ne 0 ] && grep -q "BLOCKED" "$SCRATCH/out"; then ok "retired a2ml provenance blocked (T1)"; else bad "retired a2ml provenance not blocked (rc=$rc)"; cat "$SCRATCH/out"; fi @@ -120,14 +120,14 @@ if [ "$rc" -ne 0 ]; then ok "self-parenting repo rejected (T2)"; else bad "self- # ───────────────────────────────────────────────────────────────────────────── say "negative control 3: UNASSIGNED pin must FAIL" CHILD="$SCRATCH/child-unassigned" -make_child "$CHILD" "hyperpolymath/rsr-template-repo" "UNASSIGNED" "UNASSIGNED" "UNASSIGNED" +make_child "$CHILD" "hyperpolymath/resource-algebra" "UNASSIGNED" "UNASSIGNED" "UNASSIGNED" rc=$(run_check "$CHILD") if [ "$rc" -ne 0 ]; then ok "unresolved parent pin rejected (T3)"; else bad "unresolved parent pin ACCEPTED — T3 is vacuous"; fi # ───────────────────────────────────────────────────────────────────────────── say "negative control 4: a leaked work branch must FAIL (#203)" CHILD="$SCRATCH/child-leak" -make_child "$CHILD" "hyperpolymath/rsr-template-repo" "main" "$T_COMMIT" "$T_TREE" +make_child "$CHILD" "hyperpolymath/resource-algebra" "main" "$T_COMMIT" "$T_TREE" # reproduce the knot-knot shape: a parentless branch whose tree is copied git -C "$CHILD" checkout -q --orphan coderabbit/fix-hypatia-scan-failures/f36ac704 git -C "$CHILD" -c user.email=t@t -c user.name=t commit -qm "Initialize coderabbit/fix-hypatia-scan-failures/f36ac704" @@ -139,7 +139,7 @@ if grep -qi "no common ancestor" "$SCRATCH/out"; then ok "unrelated-history sign # ───────────────────────────────────────────────────────────────────────────── say "negative control 5: drift must be REPORTED (advisory) and visibly found" CHILD="$SCRATCH/child-drift" -make_child "$CHILD" "hyperpolymath/rsr-template-repo" "main" "$T_COMMIT" "$T_TREE" +make_child "$CHILD" "hyperpolymath/resource-algebra" "main" "$T_COMMIT" "$T_TREE" printf 'tampered\n' > "$CHILD/README.adoc" # a template-owned file changed rm "$CHILD/.github/workflows.yml" # a template-owned file deleted rc=$(run_check "$CHILD" "$TMPL") diff --git a/www/.well-known/aibdp.json b/www/.well-known/aibdp.json index a3ca9dd..58e1a41 100644 --- a/www/.well-known/aibdp.json +++ b/www/.well-known/aibdp.json @@ -1 +1 @@ -{"aibdp_version":"0.2","canonical_uri":"https://{{FORGE}}/{{OWNER}}/{{REPO}}/blob/main/www/.well-known/aibdp.json","contact":"mailto:{{SECURITY_EMAIL}}","enforcement":{"contact_before_litigation":true,"mechanism":"none","note":"Declaration-only. HTTP 430 (draft-jewell-http-430-consent-required-00, EXPERIMENTAL) is the mechanism the draft defines for origins that can emit it; this template deliberately does not: minting or installing never enables 430. Enforcement would require a separate, explicit, versioned, provenance-bearing and independently testable profile choice, which this bundle does not ship.","preferred_resolution":"Correspondence and correction via the contact above."},"metadata":{"author":"{{AUTHOR}}","created":"{{CURRENT_DATE}}","last_modified":"{{CURRENT_DATE}}","project":"{{PROJECT_NAME}}","related_standards":["draft-jewell-aibdp-00 (experimental, not a Datatracker submission)","draft-jewell-http-430-consent-required-00 (experimental, not a Datatracker submission)","AIPREF (mapped alternative representation where they overlap)","RFC 8615","RFC 9110","RFC 9309"],"repository":"https://{{FORGE}}/{{OWNER}}/{{REPO}}"},"philosophy":{"note":"Purpose headers are unverified assertions; User-Agent inference is heuristic; unknown purpose remains unknown.","statement":"Without refusal, permission is meaningless."},"policies":{"commercial_training":{"alternatives":"Cite the repository and its documentation instead of training on it.","rationale":"As training, and additionally: contact the maintainer before any commercial incorporation — consent is explicit or it is absent.","scope":"all","status":"disallowed"},"embedding":{"conditions":["Embeddings may serve retrieval over the public material with attribution preserved.","Embedding corpora must not be redistributed or used as training input without explicit consent."],"rationale":"Retrieval aids discovery; corpus redistribution carries the licences (MPL-2.0 code, CC-BY-SA-4.0 docs).","scope":"all","status":"conditional"},"fine_tuning":{"rationale":"Fine-tuning is training with a narrower objective; the ai.txt stance applies unchanged.","scope":"all","status":"disallowed"},"generation":{"rationale":"Mirrors ai.txt Disallow-Generation: yes — generated text must not be presented as this project's own statements.","scope":"all","status":"disallowed"},"indexing":{"rationale":"The site is published to be found; indexing public material crosses no boundary.","scope":"all","status":"allowed"},"question_answering":{"rationale":"Mirrors ai.txt: agents may read and analyse to assist contributors.","scope":"all","status":"allowed"},"summarization":{"rationale":"Mirrors ai.txt Disallow-Summarization: no — describing published material serves readers.","scope":"all","status":"allowed"},"training":{"rationale":"Mirrors ai.txt Disallow-Training: yes — model training on this corpus requires explicit consent, which this declaration does not give.","scope":"all","status":"disallowed"}},"policy_uri":"https://{{FORGE}}/{{OWNER}}/{{REPO}}/blob/main/www/policies/ai-use.adoc","status":"experimental — declaration-only; observing, never enforcing (see www/policies/ai-use.adoc)"} +{"aibdp_version":"0.2","canonical_uri":"https://github.com/hyperpolymath/resource-algebra/blob/main/www/.well-known/aibdp.json","contact":"mailto:j.d.a.jewell@open.ac.uk","enforcement":{"contact_before_litigation":true,"mechanism":"none","note":"Declaration-only. HTTP 430 (draft-jewell-http-430-consent-required-00, EXPERIMENTAL) is the mechanism the draft defines for origins that can emit it; this template deliberately does not: minting or installing never enables 430. Enforcement would require a separate, explicit, versioned, provenance-bearing and independently testable profile choice, which this bundle does not ship.","preferred_resolution":"Correspondence and correction via the contact above."},"metadata":{"author":"Jonathan D.A. Jewell","created":"2026-10-14","last_modified":"2026-10-14","project":"Resource Algebra","related_standards":["draft-jewell-aibdp-00 (experimental, not a Datatracker submission)","draft-jewell-http-430-consent-required-00 (experimental, not a Datatracker submission)","AIPREF (mapped alternative representation where they overlap)","RFC 8615","RFC 9110","RFC 9309"],"repository":"https://github.com/hyperpolymath/resource-algebra"},"philosophy":{"note":"Purpose headers are unverified assertions; User-Agent inference is heuristic; unknown purpose remains unknown.","statement":"Without refusal, permission is meaningless."},"policies":{"commercial_training":{"alternatives":"Cite the repository and its documentation instead of training on it.","rationale":"As training, and additionally: contact the maintainer before any commercial incorporation — consent is explicit or it is absent.","scope":"all","status":"disallowed"},"embedding":{"conditions":["Embeddings may serve retrieval over the public material with attribution preserved.","Embedding corpora must not be redistributed or used as training input without explicit consent."],"rationale":"Retrieval aids discovery; corpus redistribution carries the licences (MPL-2.0 code, CC-BY-SA-4.0 docs).","scope":"all","status":"conditional"},"fine_tuning":{"rationale":"Fine-tuning is training with a narrower objective; the ai.txt stance applies unchanged.","scope":"all","status":"disallowed"},"generation":{"rationale":"Mirrors ai.txt Disallow-Generation: yes — generated text must not be presented as this project's own statements.","scope":"all","status":"disallowed"},"indexing":{"rationale":"The site is published to be found; indexing public material crosses no boundary.","scope":"all","status":"allowed"},"question_answering":{"rationale":"Mirrors ai.txt: agents may read and analyse to assist contributors.","scope":"all","status":"allowed"},"summarization":{"rationale":"Mirrors ai.txt Disallow-Summarization: no — describing published material serves readers.","scope":"all","status":"allowed"},"training":{"rationale":"Mirrors ai.txt Disallow-Training: yes — model training on this corpus requires explicit consent, which this declaration does not give.","scope":"all","status":"disallowed"}},"policy_uri":"https://github.com/hyperpolymath/resource-algebra/blob/main/www/policies/ai-use.adoc","status":"experimental — declaration-only; observing, never enforcing (see www/policies/ai-use.adoc)"} diff --git a/www/.well-known/humans.txt b/www/.well-known/humans.txt index 8891981..644d98e 100644 --- a/www/.well-known/humans.txt +++ b/www/.well-known/humans.txt @@ -2,12 +2,12 @@ # humanstxt.org /* TEAM */ -Maintainer: {{AUTHOR}} ({{OWNER}}) -Contact: {{AUTHOR_EMAIL}} +Maintainer: Jonathan D.A. Jewell (hyperpolymath) +Contact: j.d.a.jewell@open.ac.uk From: United Kingdom /* SITE */ -Last update: {{CURRENT_DATE}} +Last update: 2026-10-14 Standards: RSR (Rhodium Standard Repository) License: MPL-2.0 (code) / CC-BY-SA-4.0 (docs) Components: Idris2 ABI, Zig FFI diff --git a/www/.well-known/security.txt b/www/.well-known/security.txt index 5cdf9cc..c90faac 100644 --- a/www/.well-known/security.txt +++ b/www/.well-known/security.txt @@ -7,8 +7,8 @@ # field had nothing to reference and shipped the literal token instead — which # also made this file unparseable. Report via the Policy: URL below. -Contact: mailto:{{SECURITY_EMAIL}} -Expires: {{CURRENT_YEAR}}-12-31T23:59:59.000Z +Contact: mailto:j.d.a.jewell@open.ac.uk +Expires: 2026-12-31T23:59:59.000Z Preferred-Languages: en -Canonical: https://{{FORGE}}/{{OWNER}}/{{REPO}}/.well-known/security.txt -Policy: https://{{FORGE}}/{{OWNER}}/{{REPO}}/blob/main/.github/SECURITY.md +Canonical: https://github.com/hyperpolymath/resource-algebra/.well-known/security.txt +Policy: https://github.com/hyperpolymath/resource-algebra/blob/main/.github/SECURITY.md diff --git a/www/README.adoc b/www/README.adoc index d87febe..3b96490 100644 --- a/www/README.adoc +++ b/www/README.adoc @@ -112,6 +112,6 @@ heuristic; unknown purpose remains unknown. == Provenance -Bundle shape and constraints: `rsr-template-repo` issue #53. AIBDP schema +Bundle shape and constraints: `resource-algebra` issue #53. AIBDP schema vendored from `metadatastician/consent-aware-web` (MPL-2.0) — see `schemas/aibdp-schema-v0.2.json.license`. diff --git a/www/dns/records/example.invalid.zone b/www/dns/records/example.invalid.zone index 75b5c1c..023d1ac 100644 --- a/www/dns/records/example.invalid.zone +++ b/www/dns/records/example.invalid.zone @@ -29,10 +29,10 @@ www IN CNAME example.invalid. ; your actual issuer(s), or 'issue ";"' to forbid issuance entirely. @ IN CAA 0 issue "ca.example.invalid" @ IN CAA 0 issuewild "ca.example.invalid" -@ IN CAA 0 iodef "mailto:{{SECURITY_EMAIL}}" +@ IN CAA 0 iodef "mailto:j.d.a.jewell@open.ac.uk" ; This zone sends no mail: hard-fail SPF, and declare MTA-STS/TLSRPT so ; senders to a spoofed address get a correct rejection signal (RFC 8461/8460). @ IN TXT "v=spf1 -all" _mta-sts IN TXT "v=STSv1; id=20260917000000Z;" -_smtp._tls IN TXT "v=TLSRPTv1; rua=mailto:{{SECURITY_EMAIL}}" +_smtp._tls IN TXT "v=TLSRPTv1; rua=mailto:j.d.a.jewell@open.ac.uk" diff --git a/www/policies/acceptable-use.adoc b/www/policies/acceptable-use.adoc index 5b214c5..ad0b5d7 100644 --- a/www/policies/acceptable-use.adoc +++ b/www/policies/acceptable-use.adoc @@ -1,6 +1,6 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell -= Acceptable Use — {{PROJECT_NAME}} += Acceptable Use — Resource Algebra Rendered into `public/policies/acceptable-use.html` at deploy time; this AsciiDoc file is the source of record. diff --git a/www/policies/ai-use.adoc b/www/policies/ai-use.adoc index 97745c8..bc1e53b 100644 --- a/www/policies/ai-use.adoc +++ b/www/policies/ai-use.adoc @@ -1,6 +1,6 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell -= AI Use Policy — {{PROJECT_NAME}} += AI Use Policy — Resource Algebra Rendered into `public/policies/ai-use.html` at deploy time; this AsciiDoc file is the source of record. diff --git a/www/policies/privacy.adoc b/www/policies/privacy.adoc index 20b69ab..61b8a19 100644 --- a/www/policies/privacy.adoc +++ b/www/policies/privacy.adoc @@ -1,6 +1,6 @@ // SPDX-License-Identifier: CC-BY-SA-4.0 // SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell -= Privacy Policy — {{PROJECT_NAME}} += Privacy Policy — Resource Algebra Rendered into `public/policies/privacy.html` at deploy time (see `www/runbooks/deploy.adoc`); this AsciiDoc file is the source of record. diff --git a/www/public/index.html b/www/public/index.html index 4d55e91..7261c4a 100644 --- a/www/public/index.html +++ b/www/public/index.html @@ -4,14 +4,14 @@ - {{PROJECT_NAME}} - + Resource Algebra +
-

{{PROJECT_NAME}}

-

{{PROJECT_DESCRIPTION}}

+

Resource Algebra

+

The parametric grade algebra shared by the hyperpolymath type family

This site is served from the www/public/ category of the @@ -31,7 +31,7 @@

Site

diff --git a/www/tests/check-migration.sh b/www/tests/check-migration.sh index 2bfa339..5f2e238 100755 --- a/www/tests/check-migration.sh +++ b/www/tests/check-migration.sh @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MPL-2.0 # # check-migration.sh — prove scripts/migrate-wellknown-to-www.sh honours the -# behaviours stage 5 (#119) depends on (rsr-template-repo#53 acceptance: +# behaviours stage 5 (#119) depends on (resource-algebra#53 acceptance: # "Migration handles identical, missing and divergent root/www copies without # data loss"). Each scenario runs in a throwaway git repository. #