Add dead-link CI policy and document the design in a preamble
Partition dead links into two buckets with different CI treatment:
Actionable (FAILS CI) — CHaP packages the probe couldn't resolve
to any doc site. Usually a gap in IOG_DOC_BASES. Fix by adding
the doc site, or by adding the package to KNOWN_UNDOCUMENTED
if it genuinely has no published Haddocks anywhere.
Unfixable (logged for visibility, does NOT fail CI) — three sub-
causes, all outside this repo:
a. Module-level 404s on otherwise-valid upstream sites.
Empirically the cause is upstream publishing only their
umbrella "exposed-modules" (e.g. Cardano-Binary.html) while
Haddock generates hrefs to the defining sub-module (e.g.
Cardano-Binary-FromCBOR.html).
b. Packages in KNOWN_UNDOCUMENTED with no published Haddocks
anywhere (currently kes-agent and kes-agent-crypto —
verified no gh-pages branch, no CloudFront deployment).
c. Haddock-emitted versionless Hackage URLs that Hackage's
routing doesn't accept.
Add typed-protocols to IOG_DOC_BASES: its Haddocks are published at
input-output-hk.github.io/typed-protocols, which the heuristic now
reaches via the fallback list.
In GitHub Actions, actionable entries emit ::warning:: annotations so
they surface in the job UI; unfixable entries are plain log lines so
they don't flood the annotations panel. Env escape
FIX_HADDOCK_LINKS_ALLOW_DEAD=1 forces exit 0 regardless.
Rewrite the preamble to summarise the pipeline, the doc-site
resolution strategy, the rationale for skipping non-CHaP packages,
and the two-bucket CI policy with empirical justification.