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'
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
+
+ | Directory | What 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/
+
+
+
+
+
+