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.