poststruct
Audit what shipped.
A zero-dependency CLI that walks a directory of baked HTML and verifies it against a head/site contract. FAIL findings exit non-zero - CI gates regressions, not vibes.
# walk the built output; one human line per finding npx poststruct audit dist/ # machine output for CI: {schema: 1, counts, findings} npx poststruct audit dist/ --json # pack lane: the defaults audit runs over the repo's own packstruct npx poststruct lint-packs --deep
What the two lenses see
The family sits in a line: prestruct puts SEO in before the build (source-time), freestruct injects after an SSG, and poststruct verifies the baked artifact that both of them (and everyone else) actually shipped.
1head module
Per page: title and description present in their length bands, canonical absolute, the OG(7) and Twitter(4) sets, og:image raster-format (an SVG og:image FAILs), JSON-LD that parses plus recommended LocalBusiness fields, h1 sanity. A 404 keeps only its noindex contract.
2site module
sitemap.xml exists and carries real lastmod entries; robots.txt points at the sitemap with a Sitemap directive. Site-level hygiene the per-page walk cannot see.
3packs lane
The pack runs as the discoverable wrapper verb lint-packs, riding the repo's own packstruct install with an exact pin; the conform leg proves the loader itself conforms. Future shape packs keep landing per the PRD.