From 8f31346c3a5dc2a4c3d868827b0d23effcf0fd4b Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Wed, 2 Sep 2026 02:06:31 +0100 Subject: [PATCH 1/2] fix(pages): deploy a committed site artifact instead of building casket-ssg in CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "GitHub Pages" workflow (casket-pages.yml) has never produced a green deploy in ~93 runs (issue #74): 46 failures at Setup Pages before Pages was enabled, then 47 cancellations when the cold cabal build of casket-ssg (pandoc >= 3.0, pandoc-types, text-icu, extra-libraries: lol) hit the 15-minute job timeout. Per owner ruling ("prebuild/commit the site artifact"): * site/ now holds the deployed artifact — a hand-authored static index.html (honestly labelled as such; it does not claim casket-ssg provenance), .nojekyll, and a README.adoc stating the deploy-verbatim contract and the path back to casket-ssg rendering if its toolchain becomes viable. * casket-pages.yml is now deploy-only: checkout -> configure-pages -> upload-pages-artifact -> deploy-pages, single job, 5-minute timeout. Name, triggers, permissions, and concurrency are unchanged; the filename is kept to avoid lockfile/context churn. * gh actions-lock (v0.1.6) was run for the same-PR lock contract: no pin changes were needed (all four remaining actions already pinned). The tool warns that actions/cache and haskell-actions/setup entries are now unused but offers no prune in fix mode; the machine-managed lockfile is left untouched per the do-not-edit-by-hand contract. Pages is enabled with build_type=workflow, and the competing Ddraig workflow (pages.yml) is disabled_manually, so this deploy path is the only live writer to the pages concurrency group. Co-Authored-By: Claude Fable 5 --- .github/workflows/casket-pages.yml | 92 +++++------------------------- site/.nojekyll | 0 site/README.adoc | 28 +++++++++ site/index.html | 88 ++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 79 deletions(-) create mode 100644 site/.nojekyll create mode 100644 site/README.adoc create mode 100644 site/index.html diff --git a/.github/workflows/casket-pages.yml b/.github/workflows/casket-pages.yml index b7a5e27..ed16f3b 100644 --- a/.github/workflows/casket-pages.yml +++ b/.github/workflows/casket-pages.yml @@ -1,4 +1,11 @@ # SPDX-License-Identifier: MPL-2.0 +# +# Deploys the prebuilt static site committed under site/ — CI deliberately +# performs NO build step. The previous casket-ssg (Haskell) build never +# completed inside its timeout in ~93 runs (issue #74), so the site artifact +# is committed and this workflow only deploys it. See site/README.adoc for +# the regeneration contract. (Filename kept as casket-pages.yml to avoid +# lockfile/context churn; casket-ssg is no longer involved.) name: GitHub Pages on: push: @@ -13,94 +20,21 @@ concurrency: group: "pages" cancel-in-progress: false jobs: - build: + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest - timeout-minutes: 15 + timeout-minutes: 5 steps: - name: Checkout uses: actions/checkout@v4.1.1 - - name: Checkout casket-ssg - uses: actions/checkout@v4.1.1 - with: - repository: hyperpolymath/casket-ssg - path: .casket-ssg - - name: Setup GHCup - uses: haskell-actions/setup@v2.7.5 - with: - ghc-version: '9.8.2' - cabal-version: '3.10' - - name: Cache Cabal - uses: actions/cache@v4.3.0 - with: - path: | - ~/.cabal/packages - ~/.cabal/store - .casket-ssg/dist-newstyle - key: ${{ runner.os }}-casket-${{ hashFiles('.casket-ssg/casket-ssg.cabal') }} - - name: Build casket-ssg - working-directory: .casket-ssg - run: cabal build - - name: Prepare site source - shell: bash - run: | - set -euo pipefail - rm -rf .site-src _site - - if [ -d site ]; then - cp -R site .site-src - else - mkdir -p .site-src - TODAY="$(date +%Y-%m-%d)" - REPO_NAME="${{ github.event.repository.name }}" - REPO_URL="https://github.com/${{ github.repository }}" - README_URL="" - - if [ -f README.md ]; then - README_URL="${REPO_URL}/blob/${{ github.ref_name }}/README.md" - elif [ -f README.adoc ]; then - README_URL="${REPO_URL}/blob/${{ github.ref_name }}/README.adoc" - fi - - { - echo "---" - echo "title: ${REPO_NAME}" - echo "date: ${TODAY}" - echo "---" - echo - echo "# ${REPO_NAME}" - echo - echo "Static documentation site for ${REPO_NAME}." - echo - echo "- Source repository: [${{ github.repository }}](${REPO_URL})" - if [ -n "${README_URL}" ]; then - echo "- README: [project README](${README_URL})" - fi - if [ -d docs ]; then - echo "- Docs directory: [docs/](${REPO_URL}/tree/${{ github.ref_name }}/docs)" - fi - echo - echo "Project-specific site content can be added later under site/." - } > .site-src/index.md - fi - - name: Build site - run: | - mkdir -p _site - cd .casket-ssg && cabal run casket-ssg -- build ../.site-src ../_site - touch ../_site/.nojekyll - name: Setup Pages uses: actions/configure-pages@v5.0.0 - name: Upload artifact uses: actions/upload-pages-artifact@v3.0.1 with: - path: '_site' - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - timeout-minutes: 15 - needs: build - steps: + path: 'site' - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4.0.5 diff --git a/site/.nojekyll b/site/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/site/README.adoc b/site/README.adoc new file mode 100644 index 0000000..27db3ed --- /dev/null +++ b/site/README.adoc @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: CC-BY-SA-4.0 += site/ — prebuilt GitHub Pages artifact + +Everything in this directory is deployed *verbatim* to +https://hyperpolymath.github.io/vexometer/ by +`.github/workflows/casket-pages.yml` on every push to `main`. +CI performs no build step. + +== Why prebuilt + +The previous workflow built https://github.com/hyperpolymath/casket-ssg[casket-ssg] +(Haskell) in CI to render the site. Its dependency closure (pandoc >= 3.0, +pandoc-types, text-icu, plus a custom `lol` C library) never completed a cold +build inside the 15-minute job timeout: the workflow failed or was cancelled in +all ~93 runs (issue +https://github.com/hyperpolymath/vexometer/issues/74[#74]). Per owner ruling, +the site artifact is now committed here and CI only deploys it. + +== Contract + +* `index.html` is *hand-authored* — it is not casket-ssg output and does not + claim to be. Edit it directly and commit. +* `.nojekyll` must remain: it stops GitHub Pages from running Jekyll over the + artifact. +* If a viable casket-ssg toolchain becomes available later, render the site + locally and replace the contents of this directory with the rendered output + in a normal PR. The workflow needs no change for that. +* Keep the SPDX header comment on line 1 of every non-empty file here. diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..6b5fb8e --- /dev/null +++ b/site/index.html @@ -0,0 +1,88 @@ + + + + + + + + The Vexometer — Irritation Surface Analyser (ISA) + + + +
+

The Vexometer: Irritation Surface Analyser (ISA)

+

Quantifying irritation across 10 dimensions for LLMs and related + tools, with standardised, reproducible metrics.

+

+ MPL-2.0 + RSR-compliant +

+ +

This monorepo contains ISA core, its satellite intervention system, the Lazy + Eliminator completeness enforcer, and the Vext verifiable communications + protocol. ISA is irritation-surface instrumentation — measurement and + mitigation of annoying LLM output patterns — not safety-alignment work.

+ +

Components

+ + + + + + + + + + +
DirectoryWhat it is
vexometer/The Vexometer (ISA) — irritation surface analyser core (Ada). 10 dimensions, standardised metrics.
vexometer-efficacy/Efficacy evaluator (Rust) — scores satellite interventions against baseline measurements; monotone frontier records.
vexometer-satellites/ISA Satellites — umbrella documentation and coordination hub for the satellite intervention system.
satellite-template/Satellite Template — scaffolding template for new ISA satellite projects.
verbosity-compressor/Verbosity Compressor (Rust) — first satellite: information-density analysis of LLM output; filler, hedges, redundancy, padding.
lazy-eliminator/Lazy Eliminator — completeness enforcement for LLM-generated code; detects and eliminates lazy patterns.
vext/Vext — verifiable, extensible communications protocol with cryptographic proof of algorithmic neutrality.
vext-email-gateway/Vext Email Gateway — email bridge for Vext interoperability (prototype).
+ +

Start here

+

+ Source repository · + README · + Efficacy protocol · + docs/ +

+ +
+

Code MPL-2.0 · documentation CC-BY-SA-4.0 · + © Jonathan D.A. Jewell.
+ Hand-authored static page, committed under site/ and deployed + verbatim (see issue #74). Last updated 2026-09-02.

+
+
+ + From 35df58f310176d3b7cea8cfb9c51e92d2abfae9d Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Wed, 2 Sep 2026 02:13:16 +0100 Subject: [PATCH 2/2] fix(ci): prune stale casket-pages lockfile entries the tool will not remove MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gh actions-lock v0.1.6 fix mode warns about unused entries (actions/cache@v4.3.0, haskell-actions/setup@v2.7.5 — orphaned by the deploy-only rewrite) but does not prune them, while the same tool's CI verifier in the governance workflow hard-fails on them (valid: false). Hand-removed per the verifier's own remediation text; validated locally with gh actions-lock --no-fix (14 workflows, no findings). Co-Authored-By: Claude Fable 5 --- .github/workflows/actions.lock | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.github/workflows/actions.lock b/.github/workflows/actions.lock index b781786..90b50a1 100644 --- a/.github/workflows/actions.lock +++ b/.github/workflows/actions.lock @@ -6,12 +6,10 @@ workflows: '.github/workflows/boj-build.yml': - 'actions/checkout@v4.1.7' '.github/workflows/casket-pages.yml': - - 'actions/cache@v4.3.0' - 'actions/checkout@v4.1.1' - 'actions/configure-pages@v5.0.0' - 'actions/deploy-pages@v4.0.5' - 'actions/upload-pages-artifact@v3.0.1' - - 'haskell-actions/setup@v2.7.5' '.github/workflows/codeql.yml': - 'actions/checkout@v4.1.1' - 'github/codeql-action@v3.37.3' @@ -33,11 +31,6 @@ workflows: '.github/workflows/workflow-linter.yml': - 'actions/checkout@v4.1.1' dependencies: - 'actions/cache@v4.3.0': - ref: 'v4.3.0' - commit: 'sha1-0057852bfaa89a56745cba8c7296529d2fc39830' - owner_id: 44036562 - repo_id: 215566462 'actions/checkout@v4.1.1': ref: 'v4.1.1' commit: 'sha1-b4ffde65f46336ab88eb53be808477a3936bae11' @@ -95,11 +88,6 @@ dependencies: commit: 'sha1-4187e74d05793876e9989daffde9c3e66b4acd07' owner_id: 9919 repo_id: 259445878 - 'haskell-actions/setup@v2.7.5': - ref: 'v2.7.5' - commit: 'sha1-ec49483bfc012387b227434aba94f59a6ecd0900' - owner_id: 75048950 - repo_id: 623796603 'peter-evans/repository-dispatch@v4.0.1': ref: 'v4.0.1' commit: 'sha1-28959ce8df70de7be546dd1250a005dd32156697'