Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<!--
SPDX-License-Identifier: MPL-2.0
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
## Machine-Readable Artefacts

The following files in `.machine_readable/` contain structured project metadata:
Expand Down Expand Up @@ -43,7 +47,7 @@ The following files in `.machine_readable/` contain structured project metadata:
| Bun | Deno |
| pnpm/yarn | Deno |
| Go | Rust |
| Python | Julia/Rust/ReScript |
| Python | Julia/Rust/AffineScript |
| Java/Kotlin | Rust/Tauri/Dioxus |
| Swift | Tauri/Dioxus |
| React Native | Tauri/Dioxus |
Expand All @@ -61,7 +65,7 @@ Both are FOSS with independent governance (no Big Tech).
### Enforcement Rules

1. **No new TypeScript files** - Convert existing TS to AffineScript
2. **No package.json for runtime deps** - Use deno.json imports
2. **No package.json - use deno.json deps** - Use deno.json imports
3. **No node_modules in production** - Deno caches deps automatically
4. **No Go code** - Use Rust instead
5. **No Python anywhere** - Use Julia for data/batch, Rust for systems, AffineScript for apps
Expand Down
34 changes: 34 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# SPDX-License-Identifier: MPL-2.0
# CODEOWNERS - Define code review assignments for GitHub
# See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners

# Default: sole maintainer for all files
* @hyperpolymath

# Security-sensitive files require explicit ownership
SECURITY.md @hyperpolymath
.github/workflows/ @hyperpolymath
.machine_readable/ @hyperpolymath
contractiles/ @hyperpolymath

# License files
LICENSE @hyperpolymath
LICENSES/ @hyperpolymath

# Configuration
.gitignore @hyperpolymath
.github/ @hyperpolymath

# Documentation
README* @hyperpolymath
CONTRIBUTING* @hyperpolymath
CODE_OF_CONDUCT* @hyperpolymath
GOVERNANCE* @hyperpolymath
MAINTAINERS* @hyperpolymath
CHANGELOG* @hyperpolymath
ROADMAP* @hyperpolymath

# Build and CI
Justfile @hyperpolymath
Makefile @hyperpolymath
*.sh @hyperpolymath
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<!--
SPDX-License-Identifier: MPL-2.0
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
---
name: Bug report
about: Create a report to help us improve
Expand Down
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/custom.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<!--
SPDX-License-Identifier: MPL-2.0
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
---
name: Custom issue template
about: Describe this issue template's purpose here.
Expand Down
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/documentation.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<!--
SPDX-License-Identifier: MPL-2.0
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
---
name: Documentation
about: Report unclear, missing, or incorrect documentation
Expand Down
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<!--
SPDX-License-Identifier: MPL-2.0
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
---
name: Feature request
about: Suggest an idea for this project
Expand Down
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/question.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<!--
SPDX-License-Identifier: MPL-2.0
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
---
name: Question
about: Ask a question about usage or behaviour
Expand Down
7 changes: 7 additions & 0 deletions .github/TEST_CI_SHA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# CI TEST: Hypatia SHA update
# SPDX-License-Identifier: MPL-2.0
# Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>

Test commit to verify Hypatia SHA update from 915139d7 to 6cd37728.

DELETE AFTER VERIFICATION.
6 changes: 6 additions & 0 deletions .github/copilot/coding-agent.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
mcp_servers:
boj-server:
command: npx
args: ["-y", "@hyperpolymath/boj-server@latest"]
env:
BOJ_URL: http://localhost:7700
10 changes: 10 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
# SPDX-License-Identifier: MPL-2.0
# GitHub Actions CI/CD for SafeBruteForce
# Erlang/OTP + LFE project
Expand Down Expand Up @@ -26,6 +27,7 @@ jobs:
build:
name: Build
runs-on: ubuntu-latest
timeout-minutes: 10

steps:
- name: Checkout code
Expand Down Expand Up @@ -66,6 +68,7 @@ jobs:
test:
name: Test (OTP ${{ matrix.otp }})
runs-on: ubuntu-latest
timeout-minutes: 10
needs: build

strategy:
Expand Down Expand Up @@ -106,6 +109,7 @@ jobs:
coverage:
name: Test Coverage
runs-on: ubuntu-latest
timeout-minutes: 10
needs: build

steps:
Expand Down Expand Up @@ -143,6 +147,7 @@ jobs:
dialyzer:
name: Dialyzer Static Analysis
runs-on: ubuntu-latest
timeout-minutes: 10
needs: build

steps:
Expand Down Expand Up @@ -179,6 +184,7 @@ jobs:
security:
name: Security Checks
runs-on: ubuntu-latest
timeout-minutes: 10

steps:
- name: Checkout code
Expand Down Expand Up @@ -210,6 +216,7 @@ jobs:
rsr-compliance:
name: RSR Framework Compliance
runs-on: ubuntu-latest
timeout-minutes: 10

steps:
- name: Checkout code
Expand Down Expand Up @@ -270,6 +277,7 @@ jobs:
docs:
name: Build Documentation
runs-on: ubuntu-latest
timeout-minutes: 10
needs: build

steps:
Expand Down Expand Up @@ -305,6 +313,7 @@ jobs:
release:
name: Create Release
runs-on: ubuntu-latest
timeout-minutes: 10
needs: [test, coverage, security, rsr-compliance]
if: startsWith(github.ref, 'refs/tags/v')

Expand Down Expand Up @@ -339,6 +348,7 @@ jobs:
notify:
name: Notify on Failure
runs-on: ubuntu-latest
timeout-minutes: 10
needs: [test, coverage, security, rsr-compliance]
if: failure()

Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
# SPDX-License-Identifier: MPL-2.0
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
Expand Down Expand Up @@ -31,6 +32,7 @@ jobs:
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: 10
permissions:
# required for all workflows
security-events: write
Expand Down
14 changes: 4 additions & 10 deletions .github/workflows/dependabot-automerge.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
# SPDX-License-Identifier: MPL-2.0
#
# dependabot-automerge.yml — enable GitHub's native auto-merge on
Expand Down Expand Up @@ -35,29 +36,25 @@
# bumps for dependabot/fetch-metadata flow through the same path.

name: Dependabot Auto-Merge

on:
pull_request:
types: [opened, reopened, synchronize]

permissions:
contents: write # needed to enable auto-merge
pull-requests: write # needed to approve
contents: write # needed to enable auto-merge
pull-requests: write # needed to approve
# NB: keep narrow — do NOT add secrets: read or id-token: write here.

jobs:
automerge:
# Only run for PRs actually authored by Dependabot.
if: github.actor == 'dependabot[bot]' && github.event.pull_request.user.login == 'dependabot[bot]'
runs-on: ubuntu-latest

timeout-minutes: 15
steps:
- name: Fetch Dependabot metadata
id: meta
uses: dependabot/fetch-metadata@25dd0e34f4fe68f24cc83900b1fe3fe149efef98 # v3.1.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

# --- Policy gate -------------------------------------------------------
# Outputs from fetch-metadata we care about:
# update-type → version-update:semver-{patch,minor,major}
Expand Down Expand Up @@ -106,7 +103,6 @@ jobs:
echo "security=$is_security" >> "$GITHUB_OUTPUT"
echo "update_type=$UPDATE_TYPE" >> "$GITHUB_OUTPUT"
echo "ghsa=$GHSA_ID" >> "$GITHUB_OUTPUT"

- name: Approve PR (if policy allows)
if: steps.policy.outputs.action == 'automerge'
env:
Expand All @@ -115,15 +111,13 @@ jobs:
run: |
gh pr review --approve "$PR_URL" \
--body "Auto-approving Dependabot security update (${{ steps.policy.outputs.ghsa }}, ${{ steps.policy.outputs.update_type }}). Policy: low/moderate security patches/minors only."

- name: Enable auto-merge (if policy allows)
if: steps.policy.outputs.action == 'automerge'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_URL: ${{ github.event.pull_request.html_url }}
run: |
gh pr merge --auto --squash "$PR_URL"

- name: Write decision to step summary
env:
ACTION: ${{ steps.policy.outputs.action }}
Expand Down
8 changes: 3 additions & 5 deletions .github/workflows/governance.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
# SPDX-License-Identifier: MPL-2.0
# governance.yml — single wrapper calling the shared estate governance bundle
# in hyperpolymath/standards instead of carrying per-repo copies.
Expand All @@ -11,24 +12,21 @@
# (rust-ci, codeql, dependabot, release, scan/mirror/pages plumbing).

name: Governance

on:
push:
branches: [main, master]
pull_request:
workflow_dispatch:

# Estate guardrail: cancel superseded runs so re-pushes / rebased PR
# updates do not pile up queued runs against the shared account-wide
# Actions concurrency pool. Applied only to read-only check workflows
# (no publish/mutation), so cancelling a superseded run is always safe.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
governance:
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@main
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@861b5e911d9e5dcfb3c0ab3dd2a9a3c8fd0a1613
timeout-minutes: 10
8 changes: 3 additions & 5 deletions .github/workflows/hypatia-scan.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
# SPDX-License-Identifier: MPL-2.0
# Thin wrapper around hyperpolymath/standards hypatia-scan-reusable.yml.
# See standards#191 for the reusable's purpose and design.

name: Hypatia Security Scan

on:
push:
branches: [main, master, develop]
Expand All @@ -12,18 +12,16 @@ on:
schedule:
- cron: '0 0 * * 0'
workflow_dispatch:

# Estate guardrail: cancel superseded runs so re-pushes don't pile up.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read
security-events: write
pull-requests: write

jobs:
hypatia:
uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@915139d73560e65a8240b8fc7768698658502c89
uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@6cd3772824e59c8c9affeab66061e25383544242
timeout-minutes: 10
secrets: inherit
6 changes: 2 additions & 4 deletions .github/workflows/instant-sync.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
# SPDX-License-Identifier: MPL-2.0
# Instant Forge Sync - Triggers propagation to all forges on push/release
name: Instant Sync

on:
push:
branches: [main, master]
release:
types: [published]

permissions:
contents: read

jobs:
dispatch:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Trigger Propagation
uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1
Expand All @@ -28,6 +27,5 @@ jobs:
"sha": "${{ github.sha }}",
"forges": ""
}

- name: Confirm
run: echo "::notice::Propagation triggered for ${{ github.event.repository.name }}"
Loading
Loading