The guides cross-link section anchors (building-an-app.md#secrets, #binding-a-param-at-provision, #databases, #production-behavior, …) and the link rewriter preserves the fragments — but website/scripts/render.ts uses markdown-it with no heading-anchor plugin, so rendered headings carry no id attributes. Every such link lands at the top of the target page instead of the section.
Fix shape: add a heading-slug plugin (e.g. markdown-it-anchor with a GitHub-style slugifier so the fragments used in the guides keep working) and a content test asserting that every intra-guide fragment in a rewritten link matches a generated heading id.
Found during the env-param docs pass (PR #94); affects all guides equally and predates that PR.
🤖 Generated with Claude Code
The guides cross-link section anchors (
building-an-app.md#secrets,#binding-a-param-at-provision,#databases,#production-behavior, …) and the link rewriter preserves the fragments — butwebsite/scripts/render.tsuses markdown-it with no heading-anchor plugin, so rendered headings carry noidattributes. Every such link lands at the top of the target page instead of the section.Fix shape: add a heading-slug plugin (e.g.
markdown-it-anchorwith a GitHub-style slugifier so the fragments used in the guides keep working) and a content test asserting that every intra-guide fragment in a rewritten link matches a generated heading id.Found during the env-param docs pass (PR #94); affects all guides equally and predates that PR.
🤖 Generated with Claude Code