Skip to content

Commit b5f815f

Browse files
fix(ci): make main green — test-suite syntax, workflow YAML/SPDX, Pages timeout (#25)
- test: remove invalid trailing message strings from @test macro calls in e2e_test.jl and property_test.jl (Julia's @test takes no positional message; the LoadError aborted the entire 478-test suite at load time, so the E2E + Aspect workflow had never passed) - ci(dogfood-gate): move inline eclexiaiser validator to .github/scripts/validate_eclexiaiser.py — the column-0 Python heredoc broke out of the YAML block scalar (startup_failure at 0s) - ci(instant-sync): remove dangling step fragment at jobs: level (merge artifact that made the workflow YAML invalid) - ci: put SPDX header on line 1 in the 7 workflows the Governance linter flagged (it checks line 1; copyright line moved to line 2) - ci(pages): raise build job timeout 15→60 min — cold cabal build of casket-ssg always exceeded 15 min, so the job was cancelled every run and the cache never saved - tests: remove tests/fuzz/placeholder.txt (fake-fuzz false-impression artifact flagged in TEST-NEEDS.md) - docs: purge remaining template placeholders (QUICKSTART-MAINTAINER deps/paths, ABI-FFI-README delete-me marker); refresh stale TEST-NEEDS state table (benchmarks and e2e/property tests now exist) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent ebd8aa4 commit b5f815f

15 files changed

Lines changed: 99 additions & 89 deletions
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
# Owner: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
#
5+
# Validates eclexiaiser.toml structure (called by dogfood-gate.yml).
6+
import sys
7+
import tomllib
8+
9+
with open("eclexiaiser.toml", "rb") as f:
10+
data = tomllib.load(f)
11+
12+
project = data.get("project", {})
13+
if not project.get("name", "").strip():
14+
print("ERROR: project.name is required", file=sys.stderr)
15+
sys.exit(1)
16+
17+
functions = data.get("functions", [])
18+
if not functions:
19+
print("ERROR: at least one [[functions]] entry is required", file=sys.stderr)
20+
sys.exit(1)
21+
22+
for fn in functions:
23+
if not fn.get("name", "").strip():
24+
print("ERROR: function name cannot be empty", file=sys.stderr)
25+
sys.exit(1)
26+
if not fn.get("source", "").strip():
27+
print(f'ERROR: function {fn["name"]} has no source path', file=sys.stderr)
28+
sys.exit(1)
29+
30+
print(f'Valid: {project["name"]} ({len(functions)} function(s))')

.github/workflows/boj-build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
21
# SPDX-License-Identifier: MPL-2.0
2+
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
33
name: BoJ Server Build Trigger
44
on:
55
push:

.github/workflows/casket-pages.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
21
# SPDX-License-Identifier: MPL-2.0
2+
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
33
name: GitHub Pages
44
on:
55
push:
@@ -15,7 +15,9 @@ concurrency:
1515
jobs:
1616
build:
1717
runs-on: ubuntu-latest
18-
timeout-minutes: 15
18+
# Cold cabal build of casket-ssg (GHC 9.8) exceeds 15 min and was being
19+
# cancelled before the cache could ever save; warm-cache runs are fast.
20+
timeout-minutes: 60
1921
steps:
2022
- name: Checkout
2123
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4

.github/workflows/codeql.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
21
# SPDX-License-Identifier: MPL-2.0
2+
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
33
name: CodeQL Security Analysis
44
on:
55
push:

.github/workflows/dependabot-automerge.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
21
# SPDX-License-Identifier: MPL-2.0
2+
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
33
#
44
# dependabot-automerge.yml — enable GitHub's native auto-merge on
55
# Dependabot pull requests that match a declared severity / ecosystem

.github/workflows/dogfood-gate.yml

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -262,27 +262,7 @@ jobs:
262262
echo "has_manifest=true" >> "$GITHUB_OUTPUT"
263263
264264
# Validate TOML structure using Python 3.11+ tomllib
265-
python3 -c "
266-
import tomllib, sys
267-
with open('eclexiaiser.toml', 'rb') as f:
268-
data = tomllib.load(f)
269-
project = data.get('project', {})
270-
if not project.get('name', '').strip():
271-
print('ERROR: project.name is required', file=sys.stderr)
272-
sys.exit(1)
273-
functions = data.get('functions', [])
274-
if not functions:
275-
print('ERROR: at least one [[functions]] entry is required', file=sys.stderr)
276-
sys.exit(1)
277-
for fn in functions:
278-
if not fn.get('name', '').strip():
279-
print('ERROR: function name cannot be empty', file=sys.stderr)
280-
sys.exit(1)
281-
if not fn.get('source', '').strip():
282-
print(f'ERROR: function {fn[\"name\"]} has no source path', file=sys.stderr)
283-
sys.exit(1)
284-
print(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')
285-
" || {
265+
python3 .github/scripts/validate_eclexiaiser.py || {
286266
echo "::error file=eclexiaiser.toml::Invalid eclexiaiser.toml — see step output for details"
287267
exit 1
288268
}

.github/workflows/instant-sync.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
21
# SPDX-License-Identifier: MPL-2.0
2+
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
33
# Instant Forge Sync - Triggers propagation to all forges on push/release
44
name: Instant Sync
55

@@ -33,8 +33,3 @@ jobs:
3333
3434
- name: Confirm
3535
run: echo "::notice::Propagation triggered for ${{ github.event.repository.name }}"
36-
37-
- name: K9-SVC Validation
38-
run: |
39-
echo "K9-SVC validation"
40-
[ -d .machine_readable/contractiles ] && echo "Contractiles present" || echo "No contractiles"

.github/workflows/mirror.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
21
# SPDX-License-Identifier: MPL-2.0
2+
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
33
name: Mirror to Git Forges
44

55
on:

.github/workflows/secret-scanner.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
21
# SPDX-License-Identifier: MPL-2.0
2+
# // Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
33
# Prevention workflow - scans for hardcoded secrets before they reach main
44
name: Secret Scanner
55
on:

ABI-FFI-README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
SPDX-License-Identifier: CC-BY-SA-4.0
33
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
44
-->
5-
{{~ Aditionally delete this line and fill out the template below ~}}
6-
75
# STATISTEASE ABI/FFI Documentation
86

97
## Overview

0 commit comments

Comments
 (0)