skills.sgit.ai / admin

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 / toolOwns
admin/build/chrome.pyThe 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.pycatalogue/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.pyEvery reader page under documents/, from the dict list at the top of the script plus the raw file under briefs/.
Everything elseHand-written HTML. The chrome inside it (<nav> / <footer>) is still owned by chrome.py and rewritten in place.

Release process

  1. Bump admin/build/version.txt (vX.Y.Z, exactly once per release) and add a row to admin/versions.html.
  2. Regenerate: python3 admin/build/gen_catalogue.py && python3 admin/build/gen_documents.py (only if the catalogue or a document changed), then python3 admin/build/chrome.py to propagate the version and any nav/footer change to every page.
  3. node admin/build/validate.js
  4. git 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.