[scanner] Importer fabricates cncf.io project URLs for cards without one; 9 fabricated links on 3 architecture pages are live 404s
Maintainers usually reply within 1 day
Assessment
- Difficulty
- 3/5
- Estimated time
- Half a day
- Newbie friendliness
- 55/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- javascript
Research direction
Start in renderProjectCards() in scripts/lib/architecture-content.mjs around line 65, where the slug-based cncf.io fallback is built. Check tests/architecture-content-helpers.test.mjs for the Ev, Wide Thing and Q cases that pin that fallback, and compare with scripts/import-architecture-issue.mjs near line 261, which already uses null. Done means the fallback yields no href, those tests are updated, and the nine dead href attributes in the three architecture docs are removed; confirm with npm test.
Written by the indexing model from the issue text.
Description
Finding
renderProjectCards() in scripts/lib/architecture-content.mjs:65 derives a fallback card href from the card header when the imported Hugo shortcode contains no cncf.io link:
href =
links.find(isCncfProjectHref) ||
'https://www.cncf.io/projects/' + name.toLowerCase().replace(/\s+/g, '-') + '/';
(the real code is a template literal; rewritten here only to keep the issue body shell-safe)
That slugify guess is published unchecked. Two failure modes result, both visible on the live site today:
- Non-CNCF projects get invented URLs that could never exist. PowerDNS, NetBox, NetBox Operator, SDC, and Kubebuilder/controller-runtime are not CNCF projects and have no
www.cncf.io/projects/page; the parens and/-in slugs likesdc-(schema-driven-configuration)andkubebuilder-/-controller-runtimeshow they are machine-derived from the header text. - Sandbox-project pages were removed from cncf.io, so even once-correct slugs now 404: the current https://www.cncf.io/projects/ index lists only graduated/incubating projects (no kueue, externaldns, stargz-snapshotter, or container-storage-interface).
Verified 2026-10-14 against main @ eff33b56 (npm test → check:links), all persistent 404s:
docs/architectures/cern-scientific-computing.md— kueue, stargz-snapshotterdocs/architectures/swisscom-cloud-native-telco.md— sdc-(schema-driven-configuration), externaldns, kubebuilder-/-controller-runtime, powerdns, netbox-operator, netboxdocs/architectures/swisscom-kubernetes-service.md— container-storage-interface-(csi)
Impact is about to get louder: #1404 (merged 2026-10-13) extended the weekly check:links gate from root-level markdown to docs/** and blog/**, so the next scheduled run (Monday) goes red on these nine links. The last weekly run (2026-10-12, fb75c1a) predates the expansion and only checked root-level files, which is why the gate stayed green while the links rotted.
Note the divergence: the newer issue-based importer already does the right thing — scripts/import-architecture-issue.mjs:261 sets the href to null when the card carries no cncf.io link. Only the batch importer fabricates.
Recommendation
- In
renderProjectCards(), fall back tonull(no link) instead of a guessed slug.jsxElement()already omits null attributes, and the security property the fallback was built for — a hostile non-cncf.io destination must never become the card href (pinned intests/architecture-content-helpers.test.mjs) — is preserved, because the href is simply absent rather than attacker-controlled. - Update the three tests that pin the fabricated-slug fallback (
Ev,Wide Thing,Qcases intests/architecture-content-helpers.test.mjs). - Remove the nine dead
href={...}attributes from the three committed architecture docs, matching what a re-import now produces (the docs are import-generated, so hand-substituting project homepages would be reverted by the next daily import).
Follow-up the maintainers may want, deliberately not in scope: CNCFProjectCard still renders the ↗ arrow when there is no href; and if cncf.io restores sandbox project pages, re-importing restores those links automatically.
Filed by scanner agent (ACMM L5 — hold-gated mode)
🐝 Hive Agent: scanner | Instance: hosted-available-lke648397-260827-5n31 | SHA: unknown
— hive: agent=scanner backend=copilot model=kimi-k3 copilot=1.0.88
- Dominant language
- JavaScript
- Stars
- 0
- Forks
- 2
- Avg merge
- 17h 48m
- Merged PRs (30d)
- 553
Getting set up
Starts the project's dev container in your browser, under your own GitHub account.
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from cncf/endusers
-
[scanner] check:spelling skips blog/ — posts and author metadata are never spell-checkedPossibly taken @hivecommons-hive claimed this today. Openagent/scanner bug hive/covered-by-pr hive/hosted-available-lke648397-260827-5n31
Difficulty 1/5 Under an hour Newbie friendliness 72/100
cncf/endusers#1452 · 1 comment ·
Maintainers usually reply within 1 day
-
[scanner] deploy-gh-pages.yml: fetch full git history so the generated changelog renders entriesOpenagent/scanner blocked ci hive/hosted-available-lke648397-260827-5n31
Difficulty 1/5 Under an hour Newbie friendliness 70/100
cncf/endusers#1409 · 1 comment ·
Maintainers usually reply within 1 day
-
[quality] e2e coverage gate's measurement record is stale and nothing guards the suite it was measured againstPossibly taken @hivecommons-hive claimed this today. Openagent/quality hive/covered-by-pr hive/hosted-available-lke648397-260827-5n31 quality testing
Difficulty 3/5 Half a day Newbie friendliness 66/100
Maintainers usually reply within 1 day
-
agent/architect architecture hive/hosted-available-lke648397-260827-5n31 tech-debt
Difficulty 2/5 Under an hour Newbie friendliness 25/100
Maintainers usually reply within 1 day
-
[quality] #1400 left eleven stale src/** line citations across the e2e test tree, and nothing checks themPossibly taken @hivecommons-hive claimed this today. Openagent/quality hive/covered-by-pr hive/hosted-available-lke648397-260827-5n31 quality testing
Difficulty 3/5 1-2 days Newbie friendliness 25/100
Maintainers usually reply within 1 day
Similar issues
-
Awaiting Maintainer Approval Bug
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
processing/p5.js-web-editor#4364 ·
Maintainers usually reply within 4 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
woocommerce/woocommerce-google-analytics-integration#699 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 Under an hour Newbie friendliness 74/100
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
JsCommunity/app-conf#22 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Maintainers usually reply within 1 day