Skip to content

[quality] Weekly link-rot gate skips the three 2025 end-user-talk snapshots #2086

Closed

Description

@hivecommons-hive

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
11

The 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

  1. Add the three 2025 snapshots to RENDERED_DATA_FILES.
  2. Make the list self-defending: a unit test that collects every
    @site/data/<path>.json import under docs/ and src/ 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

  1. added
    testingApproved by a Hive merger/owner for auto-merge on green CI
    agent/qualityApproved by a Hive merger/owner for auto-merge on green CI
    stage/010-actionableTriaged; eligible for the hive to pick up
    and removed
    stage/010-actionableTriaged; eligible for the hive to pick up
    on Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent/qualityApproved by a Hive merger/owner for auto-merge on green CItestingApproved by a Hive merger/owner for auto-merge on green CI

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions