Skip to content

DOC-6909 Fix pre-existing broken links across the docs - #3795

Open
andy-stark-redis wants to merge 3 commits into
mainfrom
DOC-6909-1-link-fixes
Open

DOC-6909 Fix pre-existing broken links across the docs#3795
andy-stark-redis wants to merge 3 commits into
mainfrom
DOC-6909-1-link-fixes

Conversation

@andy-stark-redis

@andy-stark-redis andy-stark-redis commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Part 1 of 4 of a stack that splits #3732 into independently reviewable pieces, after @paoloredis noted the single PR was too much to review at once.

Stack: #3795 (this)#3796#3797#3798

What this is

Links that were already broken on main, surfaced by pointing a link render hook at the whole corpus. Every fix stays in relref form and depends on nothing else in the stack, so this can merge on its own.

  • REST API permissions.md — missing # on an anchor, across four versions
  • nodejs/amr.md — a doubled [Authority]([Authority](...)) link
  • Alias canonicalisations, plus setbit, benchmarks and two release-note pages
  • aggregations-syntax.md — removes a note pointing at ./data/products.txt, a dataset that has never existed in the repo (confirmed with the team)

Two things reviewers should weigh

The 5 RedisVL files. @paoloredis asked about these on #3732. They are correct fixes, but RedisVL pages are regenerated from an external site on every sync, so they will be overwritten. While splitting this stack I found that 0.24.0 and 0.25.0 arrived (in ddebc77) carrying the same broken relative link this PR hand-fixes in 0.23.0 and the unversioned copy — so the defect is reproduced by every sync. That's paolo's point demonstrated: the durable fix belongs in build/redisvl_docs_sync.py. I've kept them here to keep the build clean now, but I'm happy to drop them and do the sync-script fix instead.

The aggregations note. Cursor Bugbot argued the removal also dropped useful context (that examples use a hypothetical products dataset), independent of the dead download link. Restoring just the sentence is a one-liner if preferred.


Note

Low Risk
Documentation-only link and anchor fixes; no application code, APIs, or runtime behavior changes.

Overview
Repairs broken links surfaced by a site-wide link check, without changing product behavior. The work is almost entirely markdown link syntax in Hugo content.

Internal docs move from reference-style footnotes ([text][id] plus trailing URL definitions) to {{< relref "..." >}}, including updated paths such as transactions (/develop/using-commands/transactions), key specs, ACL, and cross-command references (BLPOP, BZPOPMIN, etc.).

External URLs are inlined where footnotes pointed off-site (blog posts, Wikipedia, tcmalloc). A few one-off fixes include a doubled [Authority]([Authority](...)) in amr.md, a relative GPG key link, pipelining path under /develop/using-commands/pipelining, and a malformed RediSearch URL in release notes.

REST API permissions.md (four RS versions): the user_manager role list had [view_all_nodes_alerts](view_all_nodes_alerts) missing #, so the anchor did not resolve.

aggregations-syntax.md: removes a note linking to ./data/products.txt, which is not in the repo.

RedisVL: MCP auth pages use relref for transport security; SQL aggregations doc link text fixed; release-guide TOC blocks removed from two versioned _index files (noted as potentially overwritten by doc sync).

Reviewed by Cursor Bugbot for commit 6f22d10. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

DOC-6909

@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Staging links:
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/bitcount/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/bitop/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/brpop/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/bzpopmax/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/bzpopmin/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/command-docs/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/command/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/discard/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/exec/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/expire/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/expireat/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/info/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/latency-doctor/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/latency-graph/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/latency-help/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/latency-history/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/latency-latest/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/latency-reset/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/multi/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/restore/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/setbit/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/sort/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/sync/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/unwatch/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/watch/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/commands/zadd/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/develop/ai/redisvl/0.14.0/user_guide/sql_to_redis_queries/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/develop/ai/redisvl/0.23.0/user_guide/how_to_guides/mcp_authentication/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/develop/ai/redisvl/0.6.0/user_guide/
https://redis.io/docs/staging/DOC-6909-1-link-fixes/develop/ai/redisvl/0.7.0/user_guide/

@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

🧠 Redis Memory

Found 9 related items from repository history:

Memory updated at 6f22d10

@dwdougherty dwdougherty left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Just the one bit of snark. Otherwise, LGTM.

Comment thread content/commands/unwatch.md Outdated
Flushes all the previously watched keys for a [transaction][tt].

[tt]: /develop/interact/transactions
[tt]: /develop/using-commands/transactions

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Gotta admit, these are weird. tt is defined separately, but only used once (same for the other pages below). I think these are a remnant from the site migration. It would be better to just use a normal relref here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@dwdougherty Thanks for the warning. Would it be OK for me to replace these with normal links or is there some reason to keep them as they are?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Sorry I wasn't clear. Please replace them with normal links.

andy-stark-redis and others added 3 commits August 14, 2026 14:20
Corrects links that were already broken on main, found by pointing a link
render hook at the whole corpus. Every fix here stays in relref form and
depends on nothing else, so it stands alone.

Covers the REST API permissions anchor across four versions, a doubled link
in the Node.js AMR page, alias canonicalisations, and the setbit, benchmarks
and release-note pages. The malformed auto-tiering path in the flex overview
is absent because that fix reached main independently in the meantime. Also removes an aggregations-syntax note whose products.txt dataset
has never existed in the repo, which was confirmed with the team.

The redisvl pages are pulled from an external site on every sync, so these
hand-edits there will be overwritten within about a week; the durable fix
belongs in build/redisvl_docs_sync.py. They are included to keep the build
clean now, which was a deliberate call.

Ticket: DOC-6909
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Replaces the [text][label] form, with its separate [label]: target
definition, with ordinary inline links. A reviewer on #3795 pointed out the
indirection buys nothing here: the labels are opaque two-letter codes, the
definition sits paragraphs away from the text that uses it, and most labels
are used exactly once. 35 labels across 28 files, all in command pages bar
two.

Internal targets are wrapped in relref to match the surrounding convention
and to keep a bad target loud at build time; the six external URLs go inline
as plain URLs. Every internal target was checked to resolve to a real content
file first, because relref makes a missing target a build failure whereas the
bare path this replaces would have failed silently.

Two traps worth recording for anyone repeating this. A naive definition regex
also matches the URI templates in the import and export pages, where lines
like [protocol]://[username]:[password]@[host]:[port]/ sit inside fenced code
blocks; converting those would corrupt the page, so fenced content is excluded
and those files are untouched. And a usage can straddle a line break, as in
zadd.md where the text wraps between "sorted" and "sets][tdtss]" -- a
line-by-line matcher silently misses those, which cost three of the 35.

One definition is deliberately left in place: keyspace.md defines [tdts] but
never references it, so there is nothing to inline. It is dead weight rather
than a broken link, and removing it is a separate decision.

Learned: reference-link definitions cannot be found with a line-anchored regex alone, because fenced URI templates match the same shape and real usages can wrap across lines
Constraint: only convert an internal target to relref after confirming it resolves, since relref turns a missing target into a build failure while a bare path degrades silently
Ticket: DOC-6909
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Each of these is a link that Markdown does not recognise as a link, so the
page shows the raw syntax to the reader. Found while sanity-checking the
reference-style conversion, and each pattern occurs exactly once in the
corpus.

The Kubernetes release note used the reference-style form but put a relref
shortcode where the label belongs, so nothing defined that label and the
whole construct rendered as text. The Redis OM for Java page used a relref as
the link *text* as well as the destination, so the reader saw a bare URL
instead of a title; it now shows the target page's own title. The clients
reference wrapped an already-complete link in a second link to the same page,
which nests an anchor inside an anchor.

All three targets were confirmed to exist before editing.

Ticket: DOC-6909
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants