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
12 changes: 0 additions & 12 deletions .github/workflows/actions.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -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'
Expand Down Expand Up @@ -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'
Expand Down
92 changes: 13 additions & 79 deletions .github/workflows/casket-pages.yml
Original file line number Diff line number Diff line change
@@ -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:
Expand All @@ -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
Empty file added site/.nojekyll
Empty file.
28 changes: 28 additions & 0 deletions site/README.adoc
Original file line number Diff line number Diff line change
@@ -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.
88 changes: 88 additions & 0 deletions site/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<!-- SPDX-License-Identifier: CC-BY-SA-4.0 -->
<!--
Hand-authored static page, deployed verbatim by .github/workflows/casket-pages.yml.
This page is NOT rendered by casket-ssg: building casket-ssg (Haskell; pandoc,
text-icu) never completed inside the CI timeout in ~93 runs (issue #74), so the
site artifact is committed instead and CI only deploys it. If a viable casket-ssg
toolchain appears later, its rendered output can replace this file wholesale —
see site/README.adoc for the contract.
-->
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The Vexometer — Irritation Surface Analyser (ISA)</title>
<style>
:root {
--bg: #faf9f6; --fg: #1c1c1c; --muted: #5a5a5a;
--accent: #7a3e9d; --border: #ddd8d0; --card: #ffffff;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #16141a; --fg: #e8e4ee; --muted: #a89fb5;
--accent: #c79ae0; --border: #3a3444; --card: #201c28;
}
}
body {
margin: 0; background: var(--bg); color: var(--fg);
font: 16px/1.6 system-ui, -apple-system, "Segoe UI", sans-serif;
}
main { max-width: 46rem; margin: 0 auto; padding: 3rem 1.25rem 4rem; }
h1 { font-size: 1.7rem; line-height: 1.3; margin: 0 0 .4rem; }
h2 { font-size: 1.15rem; margin: 2.2rem 0 .6rem; color: var(--accent); }
p.lede { color: var(--muted); margin-top: 0; }
a { color: var(--accent); }
table { border-collapse: collapse; width: 100%; font-size: .95rem; }
th, td { text-align: left; padding: .45rem .6rem; border-bottom: 1px solid var(--border); vertical-align: top; }
th { font-weight: 600; }
td:first-child { white-space: nowrap; font-family: ui-monospace, monospace; font-size: .85rem; }
footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid var(--border); color: var(--muted); font-size: .85rem; }
.badge { display: inline-block; background: var(--card); border: 1px solid var(--border); border-radius: 4px; padding: .1rem .5rem; font-size: .8rem; margin-right: .4rem; }
</style>
</head>
<body>
<main>
<h1>The Vexometer: Irritation Surface Analyser (ISA)</h1>
<p class="lede">Quantifying irritation across 10 dimensions for LLMs and related
tools, with standardised, reproducible metrics.</p>
<p>
<span class="badge">MPL-2.0</span>
<span class="badge">RSR-compliant</span>
</p>

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

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

<h2>Start here</h2>
<p>
<a href="https://github.com/hyperpolymath/vexometer">Source repository</a> ·
<a href="https://github.com/hyperpolymath/vexometer/blob/main/README.adoc">README</a> ·
<a href="https://github.com/hyperpolymath/vexometer/blob/main/docs/EFFICACY-PROTOCOL.adoc">Efficacy protocol</a> ·
<a href="https://github.com/hyperpolymath/vexometer/tree/main/docs">docs/</a>
</p>

<footer>
<p>Code MPL-2.0 · documentation CC-BY-SA-4.0 ·
© Jonathan D.A. Jewell.<br>
Hand-authored static page, committed under <code>site/</code> and deployed
verbatim (see issue #74). Last updated 2026-09-02.</p>
</footer>
</main>
</body>
</html>
Loading