Admin & engineering
How this site is built, validated, tagged and deployed. Hand-written static HTML with programmatically injected chrome and a generated catalogue, on the same pipeline as pki.sgit.ai (the house pattern) and standards.sgit.ai (its most recent carrier) — because a site arguing that skills should be built and reviewed like software should itself be built and reviewed like software.
The pipeline
push to dev | +-- 1. validate node admin/build/validate.js | version agreement across every page, llms.txt, llms-full.txt, index.md · | internal links resolve · canonical/CNAME agreement · | key-leak tripwire · nothing ignored by git that the site needs | +-- 2. tag-release every push to dev is a minor release, | tagged v{{release}}.{{major}}.{{minor}}, verified against | admin/build/version.txt and the release commit's subject | +-- 3. deploy publish to GitHub Pages, only if validate passed
Pull requests run validate only, so branch work is gated before it reaches dev. See .github/workflows/deploy-pages.yml for the full logic, ported line-for-line from standards.sgit.ai.
What is generated, and what is hand-written
| File / tool | Owns |
|---|---|
admin/build/chrome.py | The nav and footer on every page, and the version stamp in llms.txt / llms-full.txt / index.md. Run after any nav or footer change. |
admin/build/gen_catalogue.py | catalogue/index.html and catalogue/divergence.html, entirely, from catalogue/skills.json. Editing the HTML directly has no effect — the next build overwrites it. |
admin/build/gen_documents.py | Every reader page under documents/, from the dict list at the top of the script plus the raw file under briefs/. |
| Everything else | Hand-written HTML. The chrome inside it (<nav> / <footer>) is still owned by chrome.py and rewritten in place. |
Release process
- Bump
admin/build/version.txt(vX.Y.Z, exactly once per release) and add a row to admin/versions.html. - Regenerate:
python3 admin/build/gen_catalogue.py && python3 admin/build/gen_documents.py(only if the catalogue or a document changed), thenpython3 admin/build/chrome.pyto propagate the version and any nav/footer change to every page. node admin/build/validate.jsgit commit -am "site vX.Y.Z: …" && git push origin dev
Provenance, stated plainly
This build could not reach SGraph-AI__App__Send or SGraph-AI__Service__Playwright directly. Every number about the eight shipped skills — word counts, description capture, the 43-word divergence — comes from the survey dated 24 August 2026 that was supplied with the brief pack (catalogue/skills.json, itself built from briefs/skills__catalogue.json), not from a live frontmatter read. When the repositories become reachable from this site’s CI, gen_catalogue.py should be extended to read frontmatter directly, and every page that says “survey” should say “live” instead.