why
Green build, broken page.
A static site generator will happily ship a page with a missing title, a dead canonical, a broken link, and no description. The build passes because nothing looked at the output. poststruct looks.
The problem: nothing audits the output
Every generator tests its inputs. Almost none audits what it wrote to disk. The gap is the whole class of bug that ships: the tag that never rendered, the relative link that resolved to a 404, the feed that points at a URL the host does not serve.
The fix is an audit that reads the baked tree the way a crawler would: every page, every link, every head field, checked against a contract that lives in the repo. The output is the input.
The thesis: findings that fail, not warn
An audit that warns is an audit nobody reads. poststruct classifies every finding and exits non-zero on the FAIL class, so a regression stops the merge instead of landing in a log. A check that cannot fail is not a check.
The contract is explicit and per-check disableable. A project turns a check off by naming it, so the set of live checks is a decision on record, not a default nobody chose.
Who it is for
Anyone shipping baked HTML: the docs site that must not deploy a broken canonical, the marketing page that must not ship a dead link, and the CI that has to prove the output is as good as the source.