Repository navigation
Description
Finding
RENDERED_DATA_FILES in scripts/lib/data-links.mjs is the entire input to
the weekly link-rot gate. .github/workflows/check-links.yml describes that
gate as running "scripts/check-data-links.mjs over every outbound URL the site
renders from the data/ files it lists", and CONTRIBUTING.md repeats the
claim. The list holds all five 2026 end-user-talk snapshots and none of the
three 2025 ones:
$ grep -rhoE '@site/data/[A-Za-z0-9._/-]+\.json' docs src | sort -u | wc -l
14
$ grep -c "'data/" scripts/lib/data-links.mjs # entries on the list
11The missing three are imported by published pages:
| data file | imported by |
|---|---|
data/end-user-talks/kubecon-eu-2025.json |
docs/events/2025/kubecon-eu.md |
data/end-user-talks/kubecon-na-2025.json |
docs/events/2025/kubecon-na.md |
data/end-user-talks/kubecon-india-2025.json |
docs/events/2025/kubecon-india.md |
src/components/EndUserTalkSchedule renders their sourceUrl, apiUrl,
talk.url and talk.recording values as anchors, so 446 outbound URLs on
/events/2025/kubecon-eu, /events/2025/kubecon-na and
/events/2025/kubecon-india are published with nothing resolving them — the
exact class of reader-visible rot the gate was added for (#1856, #1904).
This is drift, not a decision. Each 2025 snapshot was added after the list
existed (f0f41e9, #2066, ffb1829) and none reached it, while every 2026
snapshot did (#2045, #2048, #2052, #2057). The file's own comment documents
only two deliberate exclusions, enduser-landscape.json and
community-roster.json, and neither is imported by a page.
scripts/validate-end-user-talks.mjs is immune to the same drift because it
walks data/end-user-talks/ with readdirSync.
Nothing failed, because nothing held the list against the pages:
tests/check-data-links.test.mjs only asserted that two known files are on it
and two known files are not.
No URL is rotten today: all 209 YouTube recording links in the three snapshots
answered HTTP 200 through the YouTube oEmbed endpoint on 2026-11-02. The
defect is that the next one to rot is invisible to the gate that exists to
find it.
Recommendation
- Add the three 2025 snapshots to
RENDERED_DATA_FILES. - Make the list self-defending: a unit test that collects every
@site/data/<path>.jsonimport underdocs/andsrc/and fails naming
any that is not on the list, so the next event page cannot ship its links
unchecked.
Priority
- Impact: medium
- Effort: low
🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: e3f4f9d
— hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88
Activity