fix(links): repoint the 73 stale anchors left by the Jekyll/dev era - #1072
Conversation
Anchor targets were never validated by CI — audit-phase2 checks link *paths*
but not the `#fragment` — so every heading rename since the Jekyll days left a
link pointing at nothing. A checker over the built site found 73; this fixes all
of them. Grouped by cause:
- **Heading renamed, article dropped** (~30): `#inviting-a-user` →
`#inviting-user`, `#running-a-component` → `#running-component`,
`#preparing-the-data-folder` → `#preparing-data-folder`, and so on.
- **Section moved to another page** (11): the manifest-files hub became one page
per manifest kind (`#dataouttables-manifests` → `out-tables-manifests/`);
`/storage/file-uploads/#limits` → `/storage/files/#limits`;
`/transformations/{python,r}/#development-tutorial` → the `-plain` pages —
those three paths are redirect stubs, so the anchor never survived the hop.
- **Section is gone** (10): `#new-transformations` (5 links) and
`/management/jobs/#jobs` now link the page itself; `#main-header` was a Jekyll
top-of-page artifact.
- **Starlight has no `{#id}` heading syntax** (1 page): telemetry-dashboards
wrote `### Organization Usage {#ac-organization-usage}` to disambiguate two
same-named sections. Starlight rendered the braces *literally* on the page and
slugged them into the id. Renamed to "Organization Usage (Activity Center)",
which keeps the sections distinct and gives the link a real target.
- **Nothing to point at** (3): the Phases/Dependencies cells in the
transformations comparison table and "output buffering" in the implementation
notes are now plain text — the sections they referenced don't exist anywhere.
Flagged in the PR for someone who knows the original intent.
- **A link that was never a link**: `/overview/` shipped
`our Flows [/tutorial/automate/#main-header], obtaining` as literal text.
Verified with `astro build`: **73 → 0** broken anchors out of 8476 checked
across 500 pages. audit-phase2 unchanged on every category (45 broken internal
links / 0 missing images / 3 multi-h1 / 0 unclosed fences / 0 malformed tables);
its old-docs-smell count goes 99 → 101 for the two `developers.keboola.com/#development-project`
links, the one target with no help equivalent yet — deliberate, and they match
the sibling link already in `/tutorial/`.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The sweep resolved every anchor, but the fact-check found better homes for a few. All verified against the build: - `/workspace/table-export/`: "returns a standard asynchronous storage job" → `/storage/jobs/`, the page that defines the concept, instead of `/management/jobs/#storage-jobs`, which is a UI walkthrough. - `/management/project/limits/` (2 links): how table size is measured → `/storage/#storage-data`, where "backend" is defined. The section I had used, Storage Backend Types and Features, is about tenancy models (MT/KBDB/BYODB). - `/overview/`: the Flows mention now goes to `/flows/`, matching the same page's other two Flows links, rather than to the Part 4 tutorial. - MySQL binlog note: the original `#mysql-purges-binlog-files-used-by-debezium` was copied verbatim from Debezium's own docs and refers to the *failure mode* (connector stops too long → server purges the binlog → new snapshot needed). Our `### Functionality` only says snapshots exist because MySQL purges binlogs, and nothing in-repo covers the failure mode, so the link goes upstream to Debezium. - Five `[advanced mode](…/sqldb/)` links pick up `#advanced-mode`, the anchor sqldb's own prose already uses. Anchors still 0 broken (8480 checked); audit-phase2 unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Fact-check pass done — no CRITICAL, no MAJOR. 66 of the 73 land squarely, all 73 resolve, and every one was already dead before this PR, so nothing regressed. Two things came out of it. Five targets sharpened (commit
Phases stays unlinked — I had this wrong in the description above. I offered to point it at While we're here: that whole legacy-vs-new comparison table is vestigial, and its "output buffering" also stays plain text. A target does exist — Last, unchanged but worth flagging: the five Still 0 broken anchors (8480 checked); |
Stacked on #1070 (base is
docs/em-dash-prose). The follow-up I offered there.Anchor targets have never been validated by CI:
audit-phase2checks link paths but not the#fragment. So every heading rename since the Jekyll days quietly left links pointing at nothing — including the ones #1046 carried over from dev. A checker over the built site found 73; this fixes all of them.By cause:
#inviting-a-user→#inviting-user,#running-a-component→#running-component,#preparing-the-data-folder→#preparing-data-foldermanifest-files/#dataouttables-manifests→manifest-files/out-tables-manifests/;/storage/file-uploads/#limits→/storage/files/#limits;/transformations/{python,r}/#development-tutorial→ the-plainpages#new-transformations(5 links) and/management/jobs/#jobsnow link the page;#main-headerwas a Jekyll top-of-page artifact{#id}heading syntaxThree of those redirect-stub cases are worth calling out:
/transformations/python/,/transformations/r/and/extractors/other/aws-s3/areredirect_fromstubs, so the fragment never survived the hop — the link looked fine and always landed at the top of a different page.{#id}heading syntax:management/telemetry/telemetry-dashboards/wrote### Organization Usage {#ac-organization-usage}to disambiguate two same-named sections. Starlight has no such syntax — it renders the braces literally on the page today and slugs them into the id (organization-usage-ac-organization-usage). Renamed to### Organization Usage (Activity Center), which keeps the two sections distinct and gives the link a real target. It's the only{#…}heading in the repo.Never actually a link:
/overview/shippedour Flows [/tutorial/automate/#main-header], obtaining— a bare bracketed path rendering as literal text. Nowour [Flows](/tutorial/automate/), obtaining.Needs an owner's eye (I dropped the link and kept the words rather than guess):
/transformations/comparison table — thePhasesandDependenciescells linked to sections that don't exist on that page. Both rows say "Not available"; phases now live in Flows (/flows/#phases-and-tasks), dependencies nowhere. Say the word and I'll point Phases at Flows./extend/component/implementation/— "make sure your component does not use any [output buffering]" pointed at#language-specific-notes, a section that vanished when the language notes were split into the php/python/r subpages. Each subpage has a Logging section; the buffering caveat is documented explicitly only on the Python one, so a single target would be misleading.Verified with
astro build:audit-phase2unchanged on every category: 45 broken internal links / 0 missing images / 3 multiple-h1 / 0 unclosed fences / 0 malformed tables.https://developers.keboola.com/#development-project, the one target with no help equivalent. Deliberate — they match the sibling link already in/tutorial/, and they're a to-do for whenever the dev homepage gets migrated.Worth considering separately: adding the anchor check to
audit-phase2so this can't rot again.