Canonical Schema Publication (termverify.dev)¶
This guide records how the canonical schema publication at
https://termverify.dev operates and how to troubleshoot it. The governing
decisions live in the accepted design
canonical-schema-publication.md:
the schema $id stays on the owner-controlled domain, the published bytes
must be identical to the committed resource, and nothing in the library or
required validation gate may depend on the site being reachable.
How publication works¶
Every push to main runs the Pages workflow
(.github/workflows/pages.yml):
- Build —
scripts/build_site.py --docsassembles the static site from the checkout: each committed resource undersrc/termverify/schemas/is copied byte-for-byte to/schemas/<protocol>/<version>.schema.json, and the curated documentation renders at the root with MkDocs + Material (mkdocs.yml, lockeddocsdependency group):README.mdbecomes the landing page, plus thedocs/knowledge/anddocs/developer-guide/trees;docs/agent/is never staged. During staging, relative links that point at unpublished repository files are rewritten to GitHub URLs, and the MkDocs build runs--strict, so a broken link fails the deploy. The build fails closed on any file that does not match the publishable schema layout, on docs output under the reserved/schemas/prefix, and on a non-empty output directory. - Deploy — the artifact is deployed with the GitHub Actions Pages flow
(
actions/upload-pages-artifact+actions/deploy-pages). There is nogh-pagesbranch; the site is always a pure function of onemaincommit. - Verify —
scripts/check_published_schema.pyfetches every published schema URL over HTTPS and fails the workflow on any byte difference with the committed resource, so a drifted publication cannot exist silently. A failure here means the live site is wrong or stale — fix and push; library correctness and CI are unaffected by design.
The site build never joins the required build/test path. pytest covers the
staging, link-rewriting, guard, and comparison logic
(tests/test_site_publication.py) without any network access; the tests
that exercise a real MkDocs build skip themselves when the docs dependency
group is not installed, so the required gate never depends on the docs
build tooling.
DNS and domain state (configured 2026-07-19)¶
Registrar and DNS: IONOS (termverify.dev). The configured records:
| Record | Host | Value |
|---|---|---|
| A ×4 | @ |
185.199.108.153, 185.199.109.153, 185.199.110.153, 185.199.111.153 |
| AAAA ×4 | @ |
2606:50c0:8000::153, 2606:50c0:8001::153, 2606:50c0:8002::153, 2606:50c0:8003::153 |
| CNAME | www |
hoelzl.github.io |
| TXT | _github-pages-challenge-hoelzl |
GitHub domain-verification challenge — keep permanently |
GitHub-side state: the domain is a verified domain on the owner account
(this closes the Pages domain-takeover window and must stay verified), and
the repository's Pages settings use build source GitHub Actions with
custom domain termverify.dev. "Enforce HTTPS" is enabled (certificate
issued and enforcement turned on 2026-07-19); the .dev TLD is
HSTS-preloaded, so the site is HTTPS-only regardless. Keep both the domain
verification and HTTPS enforcement in place.
Troubleshooting¶
- Verify job fails right after a deploy: the checker already retries
fetch errors and stale bytes for roughly two minutes per URL, so a
failure usually means more than CDN propagation lag. Re-run the failed
job once; if it still fails, compare
curl -s https://termverify.dev/schemas/termverify.transcript/v1.schema.json | sha256sumagainst the committed file. - Certificate or connection errors on
termverify.dev: check the apex A/AAAA records against the table above (Resolve-DnsName termverify.dev -Type A), then the repository Pages settings for certificate-provisioning state. Plain HTTP never works on.dev; that is expected. www.termverify.devnot redirecting: confirm thewwwCNAME targetshoelzl.github.io(not an IONOS redirect service, which would break the certificate).- Adding a new schema: commit it as
src/termverify/schemas/<protocol>/<version>.schema.jsonwith an$idofhttps://termverify.dev/schemas/<protocol>/<version>.schema.json; the build publishes it automatically and the verify job starts covering it. New schema versions are protocol changes and follow the protocol's versioning and review rules first. - Changing published bytes: never edit the site or a published file directly — change the committed resource under the protocol's amendment rules and let the workflow republish it.