Skip to content

Commit 7445587

Browse files
hyperpolymathclaudemistral-vibe
authored
Claude/safedom res stale sweep (#74)
<!-- SPDX-License-Identifier: CC-BY-SA-4.0 Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> --> ## Summary <!-- What does this PR do, and why? --> Closes # ## Type of change - [ ] 🐛 Bug fix (non-breaking change that fixes an issue) - [ ] ✨ New feature (non-breaking change that adds functionality) - [ ] 💥 Breaking change (would change existing behaviour) - [ ] 🕳️ Soundness fix (fixes a checker/proof false-negative) - [ ] 📖 Documentation - [ ] 🧹 Refactor / tech debt (behaviour-preserving) - [ ] ⚡ Performance - [ ] 🔧 Build / CI / tooling ## How has this been verified? <!-- Establish ground truth: which tool did you RUN, and what did it report? Don't cite a status doc — cite the command and its output. --> ## Checklist - [ ] My commits are **signed** (`git commit -S`). - [ ] I ran the project's own checks/tests locally and they pass. - [ ] New files carry the correct `SPDX-License-Identifier` (code/config `MPL-2.0`, prose `CC-BY-SA-4.0`); I did not relicense existing files. - [ ] Docs are updated, and no public claim now overstates what the code does. - [ ] I have not introduced a soundness hole (or I have flagged where I might have). ## Notes for reviewers <!-- Anything that needs special attention, follow-up, or context. --> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Mistral Vibe <vibe@mistral.ai>
1 parent 29e94d6 commit 7445587

77 files changed

Lines changed: 982 additions & 844 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/CLAUDE.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
<!--
2+
SPDX-License-Identifier: MPL-2.0
3+
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
-->
15
# CLAUDE.md - AI Assistant Instructions
26

37
## Machine-Readable Artefacts

.github/CODEOWNERS

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# CODEOWNERS - Define code review assignments for GitHub
3+
# See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
4+
5+
# Default: sole maintainer for all files
6+
* @hyperpolymath
7+
8+
# Security-sensitive files require explicit ownership
9+
SECURITY.md @hyperpolymath
10+
.github/workflows/ @hyperpolymath
11+
.machine_readable/ @hyperpolymath
12+
contractiles/ @hyperpolymath
13+
14+
# License files
15+
LICENSE @hyperpolymath
16+
LICENSES/ @hyperpolymath
17+
18+
# Configuration
19+
.gitignore @hyperpolymath
20+
.github/ @hyperpolymath
21+
22+
# Documentation
23+
README* @hyperpolymath
24+
CONTRIBUTING* @hyperpolymath
25+
CODE_OF_CONDUCT* @hyperpolymath
26+
GOVERNANCE* @hyperpolymath
27+
MAINTAINERS* @hyperpolymath
28+
CHANGELOG* @hyperpolymath
29+
ROADMAP* @hyperpolymath
30+
31+
# Build and CI
32+
Justfile @hyperpolymath
33+
Makefile @hyperpolymath
34+
*.sh @hyperpolymath

.github/copilot/coding-agent.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
mcp_servers:
2+
boj-server:
3+
command: npx
4+
args: ["-y", "@hyperpolymath/boj-server@latest"]
5+
env:
6+
BOJ_URL: http://localhost:7700

.github/workflows/boj-build.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ on:
77
jobs:
88
trigger-boj:
99
runs-on: ubuntu-latest
10+
timeout-minutes: 15
1011
steps:
1112
- name: Checkout
1213
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

.github/workflows/casket-pages.yml

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
11
# SPDX-License-Identifier: MPL-2.0
22
name: GitHub Pages
3-
43
on:
54
push:
65
branches: [main, master]
76
workflow_dispatch:
8-
97
permissions:
108
contents: read
119
pages: write
1210
id-token: write
13-
1411
concurrency:
1512
group: "pages"
1613
cancel-in-progress: false
17-
1814
jobs:
1915
build:
2016
runs-on: ubuntu-latest
17+
timeout-minutes: 15
2118
steps:
2219
- name: Checkout
2320
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4
@@ -27,13 +24,11 @@ jobs:
2724
with:
2825
repository: hyperpolymath/casket-ssg
2926
path: .casket-ssg
30-
3127
- name: Setup GHCup
3228
uses: haskell-actions/setup@cd0d9bdd65b20557f41bea4dbe43d0b5fbbfe553 # v2
3329
with:
3430
ghc-version: '9.8.2'
3531
cabal-version: '3.10'
36-
3732
- name: Cache Cabal
3833
uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0
3934
with:
@@ -42,11 +37,9 @@ jobs:
4237
~/.cabal/store
4338
.casket-ssg/dist-newstyle
4439
key: ${{ runner.os }}-casket-${{ hashFiles('.casket-ssg/casket-ssg.cabal') }}
45-
4640
- name: Build casket-ssg
4741
working-directory: .casket-ssg
4842
run: cabal build
49-
5043
- name: Prepare site source
5144
shell: bash
5245
run: |
@@ -89,26 +82,23 @@ jobs:
8982
echo "Project-specific site content can be added later under site/."
9083
} > .site-src/index.md
9184
fi
92-
9385
- name: Build site
9486
run: |
9587
mkdir -p _site
9688
cd .casket-ssg && cabal run casket-ssg -- build ../.site-src ../_site
9789
touch ../_site/.nojekyll
98-
9990
- name: Setup Pages
10091
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
101-
10292
- name: Upload artifact
10393
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
10494
with:
10595
path: '_site'
106-
10796
deploy:
10897
environment:
10998
name: github-pages
11099
url: ${{ steps.deployment.outputs.page_url }}
111100
runs-on: ubuntu-latest
101+
timeout-minutes: 15
112102
needs: build
113103
steps:
114104
- name: Deploy to GitHub Pages

.github/workflows/codeql.yml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
1-
# SPDX-License-Identifier: PMPL-1.0
1+
# SPDX-License-Identifier: MPL-2.0
22
name: CodeQL Security Analysis
3-
43
on:
54
push:
65
branches: [main, master]
76
pull_request:
87
branches: [main, master]
98
schedule:
109
- cron: '0 6 * * 1'
11-
1210
# Estate guardrail: cancel superseded runs so re-pushes / rebased PR
1311
# updates do not pile up queued runs against the shared account-wide
1412
# Actions concurrency pool. Applied only to read-only check workflows
1513
# (no publish/mutation), so cancelling a superseded run is always safe.
1614
concurrency:
1715
group: ${{ github.workflow }}-${{ github.ref }}
1816
cancel-in-progress: true
19-
2017
permissions:
2118
contents: read
22-
2319
jobs:
2420
analyze:
2521
runs-on: ubuntu-latest
22+
timeout-minutes: 15
2623
permissions:
2724
contents: read
2825
security-events: write
@@ -32,7 +29,6 @@ jobs:
3229
include:
3330
- language: javascript-typescript
3431
build-mode: none
35-
3632
steps:
3733
- name: Checkout
3834
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
@@ -42,7 +38,6 @@ jobs:
4238
with:
4339
languages: ${{ matrix.language }}
4440
build-mode: ${{ matrix.build-mode }}
45-
4641
- name: Perform CodeQL Analysis
4742
uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v3
4843
with:

.github/workflows/dogfood-gate.yml

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,21 @@
55
# Validates that the repo uses hyperpolymath's own formats and tools.
66
# Companion to static-analysis-gate.yml (security) — this is for format compliance.
77
name: Dogfood Gate
8-
98
on:
109
pull_request:
1110
branches: ['**']
1211
push:
1312
branches: [main, master]
14-
1513
permissions:
1614
contents: read
17-
1815
jobs:
1916
# ---------------------------------------------------------------------------
2017
# Job 1: A2ML manifest validation
2118
# ---------------------------------------------------------------------------
2219
a2ml-validate:
2320
name: Validate A2ML manifests
2421
runs-on: ubuntu-latest
25-
22+
timeout-minutes: 15
2623
steps:
2724
- name: Checkout repository
2825
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
@@ -35,14 +32,12 @@ jobs:
3532
if [ "$COUNT" -eq 0 ]; then
3633
echo "::warning::No .a2ml manifest files found. Every RSR repo should have 0-AI-MANIFEST.a2ml"
3734
fi
38-
3935
- name: Validate A2ML manifests
4036
if: steps.detect.outputs.count > 0
4137
uses: hyperpolymath/a2ml-validate-action@59145c7d1039fa3059b3ecacdb50ee23d7505898 # main
4238
with:
4339
path: '.'
4440
strict: 'false'
45-
4641
- name: Write summary
4742
run: |
4843
A2ML_COUNT="${{ steps.detect.outputs.count }}"
@@ -59,14 +54,13 @@ jobs:
5954
echo "" >> "$GITHUB_STEP_SUMMARY"
6055
echo "Scanned **${A2ML_COUNT}** .a2ml file(s). See step output for details." >> "$GITHUB_STEP_SUMMARY"
6156
fi
62-
6357
# ---------------------------------------------------------------------------
6458
# Job 2: K9 contract validation
6559
# ---------------------------------------------------------------------------
6660
k9-validate:
6761
name: Validate K9 contracts
6862
runs-on: ubuntu-latest
69-
63+
timeout-minutes: 15
7064
steps:
7165
- name: Checkout repository
7266
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
@@ -83,14 +77,12 @@ jobs:
8377
if [ "$COUNT" -eq 0 ] && [ "$CONFIG_COUNT" -gt 0 ]; then
8478
echo "::warning::Found $CONFIG_COUNT config files but no K9 contracts. Run k9iser to generate contracts."
8579
fi
86-
8780
- name: Validate K9 contracts
8881
if: steps.detect.outputs.k9_count > 0
8982
uses: hyperpolymath/k9-validate-action@2d96f43c538964b097d159ed3a56ba5b5ceca227 # main
9083
with:
9184
path: '.'
9285
strict: 'false'
93-
9486
- name: Write summary
9587
run: |
9688
K9_COUNT="${{ steps.detect.outputs.k9_count }}"
@@ -108,14 +100,13 @@ jobs:
108100
echo "" >> "$GITHUB_STEP_SUMMARY"
109101
echo "Validated **${K9_COUNT}** K9 contract(s) against **${CFG_COUNT}** config file(s)." >> "$GITHUB_STEP_SUMMARY"
110102
fi
111-
112103
# ---------------------------------------------------------------------------
113104
# Job 3: Empty-linter — invisible character detection
114105
# ---------------------------------------------------------------------------
115106
empty-lint:
116107
name: Empty-linter (invisible characters)
117108
runs-on: ubuntu-latest
118-
109+
timeout-minutes: 15
119110
steps:
120111
- name: Checkout repository
121112
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
@@ -153,7 +144,6 @@ jobs:
153144
REL_PATH="${filepath#$GITHUB_WORKSPACE/}"
154145
echo "::warning file=${REL_PATH}::Invisible Unicode characters detected (zero-width space, BOM, NBSP, etc.)"
155146
done < /tmp/empty-lint-results.txt
156-
157147
- name: Write summary
158148
run: |
159149
if [ "${{ steps.lint.outputs.ready }}" = "true" ]; then
@@ -172,14 +162,13 @@ jobs:
172162
echo "" >> "$GITHUB_STEP_SUMMARY"
173163
echo "Skipped: empty-linter not available." >> "$GITHUB_STEP_SUMMARY"
174164
fi
175-
176165
# ---------------------------------------------------------------------------
177166
# Job 4: Groove manifest check (for repos that should expose services)
178167
# ---------------------------------------------------------------------------
179168
groove-check:
180169
name: Groove manifest check
181170
runs-on: ubuntu-latest
182-
171+
timeout-minutes: 15
183172
steps:
184173
- name: Checkout repository
185174
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
@@ -220,7 +209,6 @@ jobs:
220209
if [ "$HAS_SERVER" = "true" ] && [ "$HAS_MANIFEST" = "false" ] && [ "$HAS_GROOVE_CODE" = "false" ]; then
221210
echo "::warning::This repo has server code but no Groove endpoint. Add .well-known/groove/manifest.json for service discovery."
222211
fi
223-
224212
- name: Write summary
225213
run: |
226214
echo "## Groove Protocol Check" >> "$GITHUB_STEP_SUMMARY"
@@ -230,16 +218,15 @@ jobs:
230218
echo "| Static manifest (.well-known/groove/manifest.json) | ${{ steps.groove.outputs.has_manifest }} |" >> "$GITHUB_STEP_SUMMARY"
231219
echo "| Groove endpoint in code | ${{ steps.groove.outputs.has_groove_code }} |" >> "$GITHUB_STEP_SUMMARY"
232220
echo "| Has HTTP server code | ${{ steps.groove.outputs.has_server }} |" >> "$GITHUB_STEP_SUMMARY"
233-
234221
# ---------------------------------------------------------------------------
235222
# Job 5: Dogfooding summary
236223
# ---------------------------------------------------------------------------
237224
dogfood-summary:
238225
name: Dogfooding compliance summary
239226
runs-on: ubuntu-latest
227+
timeout-minutes: 15
240228
needs: [a2ml-validate, k9-validate, empty-lint, groove-check]
241229
if: always()
242-
243230
steps:
244231
- name: Checkout repository
245232
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
@@ -306,4 +293,3 @@ jobs:
306293
*Generated by the [Dogfood Gate](https://github.com/hyperpolymath/rsr-template-repo) workflow.*
307294
*Dogfooding is guinea pig fooding — we test our tools on ourselves.*
308295
EOF
309-

.github/workflows/governance.yml

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,16 @@
1-
# SPDX-License-Identifier: MPL-2.0
2-
# governance.yml — single wrapper calling the shared estate governance bundle
3-
# in hyperpolymath/standards instead of carrying per-repo copies.
4-
#
5-
# Replaces the per-repo governance scaffolding removed in the same commit:
6-
# quality.yml, guix-nix-policy.yml, npm-bun-blocker.yml, ts-blocker.yml,
7-
# security-policy.yml, rsr-antipattern.yml, wellknown-enforcement.yml,
8-
# workflow-linter.yml
9-
#
10-
# Load-bearing build/security workflows stay standalone in the repo
11-
# (rust-ci, codeql, dependabot, release, scan/mirror/pages plumbing).
12-
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
132
name: Governance
143

154
on:
165
push:
176
branches: [main, master]
187
pull_request:
8+
branches: [main, master]
199
workflow_dispatch:
2010

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

3214
jobs:
3315
governance:
34-
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@main
16+
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@5a93d9d57cc04de4002d6d0ecd336fc7a8698910

.github/workflows/instant-sync.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# Instant Forge Sync - Triggers propagation to all forges on push/release
33
name: Instant Sync
4-
54
on:
65
push:
76
branches: [main, master]
87
release:
98
types: [published]
10-
119
permissions:
1210
contents: read
13-
1411
jobs:
1512
dispatch:
1613
runs-on: ubuntu-latest
14+
timeout-minutes: 15
1715
steps:
1816
- name: Trigger Propagation
1917
uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v3
@@ -28,6 +26,5 @@ jobs:
2826
"sha": "${{ github.sha }}",
2927
"forges": ""
3028
}
31-
3229
- name: Confirm
3330
run: echo "::notice::Propagation triggered for ${{ github.event.repository.name }}"

0 commit comments

Comments
 (0)