Skip to content

PRDCT-679: repoint 23 anchor links that land readers on the wrong section - #1112

Merged
Iamfle4ka merged 3 commits into
mainfrom
PRDCT-679-anchor-fixes
Sep 23, 2026
Merged

Iamfle4ka merged 3 commits into
mainfrom
PRDCT-679-anchor-fixes

Conversation

@Iamfle4ka

Copy link
Copy Markdown
Collaborator

Linear: PRDCT-679 · first PR under the dev-ported Diátaxis rework epic.

The defect

23 internal links point at anchors that don't exist on the target page. Nothing looks broken — every link resolves to a real page — the reader just lands at the top of a 1,500-line reference instead of the section they clicked. 22 of the 23 are in pages ported from developers.keboola.com.

They were invisible to our tooling. audit-phase2.mjs validates link paths, not fragments, and a markdown-only check can't catch them either: these pages carry kramdown-era ids while Starlight renders github-slugger ids. Found by diffing every internal anchor link against the id="…" attributes in the built HTML.

Four classes

Class Example Fix
Kramdown ids that never survived the Astro migration jobs/#dataType — the heading renders as data-type #data-type, #base-url, #merging-responses, #object-with-nested-object
Root-relative links that lost their page seven ](/#function-contexts) on the Functions page pointed at the site home …/functions/#function-contexts
Links through a redirect stub, which drops the fragment /management/limits/#project-power 301s to /management/project/limits/ /management/project/limits/#project-power--time-credits
Headings renamed after the port #configuration-sections, #modifying-a-configuration, #configuration, #submission, #backends the current ids

The one judgment call

workspace/table-export.md pointed at /integrate/storage/api/importer/#download-a-file — a pre-move path and an anchor that exists on no page in the repo. The importer page only has #parameters and #examples. Repointed to /storage/api/import-export/, which actually documents the download flow, rather than inventing a section to link to.

Verification

  • npm run build clean
  • Anchor check: 23 broken before, 0 after (script diffs every ](/path#frag) against the ids in dist/)
  • audit-phase2.mjs: MISSING IMAGES 0; broken-link and total counts unchanged from main's baseline, as expected — this PR changes fragments, which that audit doesn't inspect

Anchor-only changes: one line per link, no prose touched, no page moved.

Note for the queue: #1073 adds a permanent anchor validator. Until it merges this count can regress silently.

🤖 Generated with Claude Code

…tion

Every one of these resolves to a real page, so nothing looks broken — the
reader just arrives at the top of a 1,500-line reference instead of the
section they clicked. 22 of the 23 are in pages ported from developers.keboola.com.

Our tooling could not see them: audit-phase2 validates paths, not fragments,
and a markdown-only check matches the link against a heading that Starlight
renders under a different id.

Four classes:

- kramdown ids that never survived the Astro migration: #dataType vs the
  rendered data-type, #baseurl vs base-url, #merging-response vs
  merging-responses, #an-object-with-nested-object vs object-with-nested-object
- seven links written as ](/#function-contexts) — root-relative, so they pointed
  at the site home rather than the Functions page's own section
- links through redirect stubs, which drop the fragment: /management/limits/
  301s to /management/project/limits/, where the id is project-power--time-credits
- headings renamed after the port: #configuration-sections, #modifying-a-configuration,
  #configuration, #submission, #backends

One link had no counterpart anywhere. workspace/table-export.md pointed at
/integrate/storage/api/importer/#download-a-file — a pre-move path and an anchor
that exists on no page. Repointed to /storage/api/import-export/, which documents
the download flow; no section invented.

Found by diffing every internal anchor link against the ids in the built HTML.
23 before, 0 after.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@linear-code

linear-code Bot commented Sep 2, 2026

Copy link
Copy Markdown

PRDCT-679

@vercel

vercel Bot commented Sep 2, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
connection-docs Ready Ready Preview Sep 23, 2026 10:26am UTC

Request Review

Four links still pointed at ids that no page renders, all of them missed by
the first pass because they are same-page fragments:

* storage/api/configurations (3x) linked #modifying-a-configuration, while
  the page renders id="modifying-configuration"
* generic-extractor/functions linked #api-default-parameter, while the page
  renders id="api-default-parameters"

Verified against built dist/ ids rather than markdown, since the ported pages
carry kramdown-era anchors. With this commit the anchor checker from #1073
reports BROKEN LINK ANCHORS: 0 on a full build, down from 27 before #1112.

The 29 remaining broken internal links on this branch are the /overview/api/,
/overview/encryption/ and /integrate/jobs/ targets that #1120 supplies, and
are untouched here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@keboola-pr-reviewer-bot keboola-pr-reviewer-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: auto_approve (risk 1/5) · profile connection-docs

Anchor-only link repointing across 12 content pages, and every fixed anchor resolves against a real heading at HEAD.

Iamfle4ka pushed a commit that referenced this pull request Sep 22, 2026
/overview/apis/ and /extend/common-interface/encryption/ are removed together
with their two images; main has /overview/api/ and /extend/encryption/ from
#1132, approved 2026-09-21. Neither removed slug was ever published, so no
redirect stubs are needed.

The 11 links this branch still pointed at the old slugs are repointed
(storage/api/index, management/jobs, flows/schedule-api, artifacts/tutorial,
variables/api/tutorial, running-jobs-in-parallel, ai/index). Navigation loses
the "Jobs API" child under Management > Jobs and the "Encryption" entry under
Common Interface; sidebar.mjs is regenerated.

What this branch still adds that main does not have: Artifacts (reference and
tutorial, the pages that carried all seven CRITICAL review findings),
/flows/schedule-api/ from the dev page /automate/set-schedule/, and
/extend/development-project/.

Verified on a full build: broken internal links 0, missing images 0. The
anchor checker from #1073 reports the same 27 findings as main, none in a
file this branch touches; all 27 are covered by #1112.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@Iamfle4ka
Iamfle4ka enabled auto-merge September 23, 2026 10:25
@Iamfle4ka
Iamfle4ka merged commit 6cb23ce into main Sep 23, 2026
3 checks passed
@Iamfle4ka
Iamfle4ka deleted the PRDCT-679-anchor-fixes branch September 23, 2026 10:26
Iamfle4ka pushed a commit that referenced this pull request Sep 23, 2026
Main landed PR #1112 (PRDCT-679), which fixed the same dangling anchors
this branch did, independently. Three files conflicted; main's side is
taken in all three, and its version is the better one twice over:

- functions/index.md — main writes the absolute path where this branch
  used a same-page fragment. Equivalent in the browser, more explicit.
- incremental/index.md — main points at /management/project/limits/, the
  canonical page. This branch pointed at /management/limits/, which only
  works because a redirect stub catches it. Main's skips the hop.
- table-export.md — this branch repointed "the standard file download
  flow" at /storage/files/#file-links, arguing the Storage API importer
  page is about uploading. Main instead kept the importer page and dropped
  the dangling fragment. That was flagged as an owner's call in the PR
  description and merging #1112 answered it, so main's stands. The defect
  — an anchor that resolves nowhere — is gone either way.

Eleven of the thirteen anchor fixes turned out identical on both sides,
which is reassuring about both. What remains here is only the work main
does not have: the image-dimensions remark plugin and the fragment check
in audit-phase2.mjs — which now validates main's anchor work too.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PEKnDNvPqkNrBonYN6S61r

This branch was successfully deployed

1 active deployment
Preview — 9ea0a55c Deployed Sep 23, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent-approved:connection-docs dev-docs-migration developers.keboola.com → help.keboola.com migration

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants