packs
Check what shipped, per build shape.
A pack is a self-contained bundle of pure-reading verifiers over files on disk - no transport, no mocks. poststruct ships the family's check profile: each pack knows the head and routing sins one build shape reliably produces, and each carries a permanent negative test.
The packs, live
Eleven SPEC v1 check-profile packs under packs/public/, each a declarative verifier over files on disk. Lint the manifest grammar with npx packstruct lint packs/; run a pack through the audit lane with poststruct lint-packs --deep.
| pack | what it verifies | verdict |
|---|---|---|
| eyes-reference | the eye companion every og/twitter image a baked page declares must be real pixels the scrapers see | PASS |
| prestruct-shapes | the engine's own contract the SSR marker on every app mount, one deploy-id across the tree, og:url in step with rel=canonical, no shell placeholder surviving the inject pass | PASS |
| freestruct-shapes | the docs layer's contract one build hash across the tree and on every cache-bust param, no head tag doubled by a rebuild, canonicals absolute on one origin, the 404 noindex contract | PASS |
| eyestruct-shapes | an eyestruct-shaped lab's .eyes canon tree ledger honesty, dangling rows, the manifest pin + route matrix, verdict coverage, receipt provenance | PASS |
| jekyll-shapes | the Jekyll ecosystem shape excerpt-as-description via jekyll-seo-tag, head tags doubled by hand meta, hreflang links pointing at unbuilt language siblings | PASS |
| wp-seo-shapes | the WordPress ecosystem shape an SEO plugin and a theme both emitting head SEO so description / og:title / the JSON-LD graph ship twice, attachment pages inheriting the front canonical | PASS |
| astro-shapes | a site baked by Astro the head and routing sins the Astro build shape reliably produces | PASS |
| eleventy-shapes | a site baked by Eleventy the URL and collection sins the 11ty build shape reliably produces | PASS |
| gatsby-shapes | a site baked by Gatsby the head and indexing sins the Gatsby build shape reliably produces | PASS |
| hugo-shapes | a site baked by Hugo the head and taxonomy sins the Hugo build shape reliably produces | PASS |
| shopify-liquid-shapes | a Shopify storefront via Liquid the head and pagination sins the Liquid render reliably produces | PASS |
Each pack ships a permanent negative test: a good bake comes clean, every bad bake hits exactly its expected id, and an absent tree dockets BOUNDED rather than a fabricated pass. The ledger rides packs/eye-ledger.json.
The verdict taxonomy
Every scenario lands in exactly one of four buckets. Adoption is explicit - a new verdict only enters the ledger through a reviewed commit, never a silent rebuild.
REFUSED
The surface said no, cleanly, with its named code. A regression here is loud, not quiet.
BOUNDED
The damage was contained to a documented limit - a byte cap, a fixture lifespan. Bounds live in the ledger, not in prose.
PASSED
The safe path works end to end: checks, gates, roundtrips.
FAILED
A check that should have caught the bad bake did not. A new FAILED or the regression of any recorded row fails CI.
Running the lane
The audit lane reads each pack's declared checks over the tree. Exit 0 on green, 1 on findings.
# run every pack over the repo npm run packs # manifest + entry + id-census grammar (packstruct) npm run lint:packs # conformance audit against the family runner shape npm run conform:packs