Repository navigation
[quality] Member profile Sources renders a dead link (www.walmartlabs.com); data-rendered URLs have no link-rot gate #1856
Description
Finding
The member directory renders a dead outbound link on the production site.
src/components/MemberDirectory/MemberProfile.js renders every entry of
member.sourceAttribution as a clickable link in the profile Sources
list. For Walmart (data/members.json, .members[96]), that list contains:
https://www.walmartlabs.com
That host no longer exists:
$ getent hosts www.walmartlabs.com
(no A record)
$ getent hosts walmartlabs.com
192.237.192.239 walmartlabs.com # apex still resolves
$ getent hosts www.walmart.com
184.30.252.175 ...www.walmart.com # control: resolver is fine
$ curl -sS -o /dev/null -L --max-time 25 -w '%{http_code}\n' https://www.walmartlabs.com
000
So a visitor opening the Walmart profile and clicking its source link gets a
connection failure. This is a broken link on the live site.
Why it rotted silently
The repository already has a link-rot gate, and it deliberately covers
markdown only:
.github/workflows/check-links.ymlruns weekly and executes
npm run check:links.check:links->_check:links->_check:links-md, which pipes
_list:check:md(afind . -name '*.md') intomarkdown-link-check.
URLs that reach the page from data/*.json rather than from a .md file are
therefore never liveness-checked. The dead Walmart link is the symptom; the
absent coverage is the cause, and nothing stops the next one.
I swept the 121 URLs the site actually renders from data/members.json and
data/awards.json (member sourceAttribution, award announcementUrl /
caseStudyUrl / talkUrl). www.walmartlabs.com is the only genuinely dead
one. The other non-2xx responses (403 from adobe.com, ebay.com, blackrock.com,
mercedes-benz.com, ...; 406 from uber.com) are WAF/bot blocking — those hosts
answer, so they are reachable and must not be treated as rot. Any gate added
here has to make that distinction or it will sit permanently red.
Recommendation
Two separable parts.
-
The gate (pull request follows). Add
scripts/check-data-links.mjs
plus a private_check:links-datascript, and have_check:linksrun it
after_check:links-md. Because the weekly workflow already invokes
npm run check:links, this needs no change to
.github/workflows/check-links.yml, and becausecheck:linksis not run
byci.yml, it adds no network dependency to pull request checks.
Liveness semantics: a host that answers with any HTTP status other than
404/410counts as reachable (so bot-blocking403/406passes);
DNS ENOTFOUND,404and410count as rot. Following the precedent in
scripts/check-community-group-links.mjs, a run in which every probe is
inconclusive fails loudly rather than reporting a false all-clear. -
The data itself (needs a maintainer). The Walmart URL is generated,
not hand-written: it comes fromdata/enduser-landscape.json, which
scripts/collect-enduser-members.mjsderives from the pinned
cncf/landscapesnapshot. Editingdata/members.jsonby hand would be
overwritten by the nextnpm run generate:members. The durable fix is
upstream incncf/landscape(Walmart'shomepage_url), which is outside
this repository. Until that lands, the gate added in part 1 will report it
on each weekly run.
Remit
ADR 0008 rule 1, first bullet: a defect an end user can observe on the
production site — a broken link. The gate in part 1 is in scope under rule 2
because that user-observable effect depends on it; it is not a coverage- or
mutation-metric change, and it moves none of the frozen thresholds in rule 3.
Priority
- Impact: medium
- Effort: low
🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: aee93a8
— hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88
Activity
hivecommons-hive commentedon Oct 23, 2026
🛠️ Hive agent
quality(hive hosted-available-lke648397-260827-5n31) started work on this issue at 2026-10-23T21:26:20Z. A pull request referencing this issue supersedes this mark; it lapses on its own at 2026-10-23T23:26:20Z if none appears.hivecommons-hive commentedon Oct 23, 2026
Correcting the diagnosis in the issue body, and recording what it changed in the fix.
I originally described
www.walmartlabs.comas having "no A record", based ongetent hostsreturning nothing. That was imprecise. The authoritative answer is SERVFAIL from a broken delegation, not NXDOMAIN:So the
wwwlabel is a CNAME intoprod.wmtcdev.com, whose authority no longer answers. The link is still broken for a visitor — the conclusion in the issue stands — but the mechanism is not the one I named.This mattered for the fix rather than being a point of pedantry. A resolver reports SERVFAIL to Node as
EAI_AGAIN, the code that ordinarily means "temporary", notENOTFOUND. The gate I first wrote treated onlyENOTFOUNDas rot, so when I ran it against the real data it reported Walmart as merely unverified and exited0— it would have missed the single defect it was built for. #1857 therefore also treats a name that never resolved as dead, but only when another probe in the same run succeeded, which is what distinguishes link rot from a CI runner whose DNS is down.Part 2 of the recommendation is unchanged and still needs a human: the URL is generated from the pinned
cncf/landscapesnapshot, so the durable correction is upstream and outside this repository.🐝 Hive Agent:
quality| Instance:hosted-available-lke648397-260827-5n31| SHA:1c42af1— hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88
mrbobbytables commentedon Oct 24, 2026
Keeping this open as the user-observable tracking issue. The URL is generated:
data/members.jsonis built from the pinned cncf/landscape snapshot (data/enduser-landscape.json), and upstreamlandscape.ymlstill listshttps://www.walmartlabs.comas thehomepage_urlforWalmart (member). A hand edit here would be reverted by the nextcollect:enduser-members, so the fix is an upstream landscape change followed by a snapshot refresh. Waiting on upstream. #1857 (a new data link-rot gate) was closed under ADR 0008 rule 2; it did not change the link.31 remaining items
mrbobbytables commentedon Oct 25, 2026
Status after today's refresh:
https://www.walmartlabs.comin cncf/landscapelandscape.ymland has to be corrected upstream before the lane can pick it up.hivecommons-hive commentedon Oct 25, 2026
PR #1904 covers this issue: #1904
The PR body says this is partial/non-closing work (
Refs/Part ofor leave-open wording), so Hive will not add a closing keyword. GitHub will not show its issue-list PR icon without a closing keyword; the stage comment is the link.hivecommons-hive commentedon Oct 25, 2026
Verification (2026-10-25): the remainder is still open and still upstream-blocked.
www.walmartlabs.comstill returns SERVFAIL (brokenprod.wmtcdev.comdelegation, confirmed via Cloudflare DoH,curlexit 56), and cncf/landscapelandscape.ymlstill setsWalmart (member)→homepage_url: https://www.walmartlabs.comon master. Nothing in this repository can close it until the upstream homepage correction lands and the member-refresh lane propagates it. Labelledhive/verified-open; the logo/refresh half is confirmed done per #1898/#1900/#1901.🐝 Hive Agent:
scanner| Instance:hosted-available-lke648397-260827-5n31| SHA:unknown— hive: agent=scanner backend=copilot model=kimi-k3 copilot=1.0.88
mrbobbytables commentedon Oct 25, 2026
Closing as upstream-blocked (maintainer decision; ADR 0008 applies to any later finding on this link).
Everything this site controls is done: the dead URL is allowlisted in
scripts/lib/data-links.mjswith a reason, the data URL link check (#1904) covers the rest of the member directory, and the scheduled data refresh (#1903) will pick up the corrected value automatically once the source changes. The remaining defect is thehomepage_urlin cncf/landscapelandscape.yml, now tracked at cncf/landscape#5222. When that lands, the allowlist entry can be dropped in the same refresh.Follow-up tests of the member directory's outbound links (#1857, #1863, #1888) were already declined; please do not re-file.