[quality] /resources/radar-reports e2e is smoke-depth only: a dropped report or a stripped rel=noreferrer ships green
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 84/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- javascript, playwright
- Domain
- testing-qa, web-dev
Research direction
Create tests/e2e/radar-reports.spec.js, using tests/e2e/metrics-dashboard.spec.js as the model and data/radar-reports.json as the expected corpus. Run npx playwright test and verify the route renders every report in order with titles, dates, summaries, flat h3 headings, valid provenance, absolute HTTPS URLs, and noreferrer on every target="_blank" link.
Written by the indexing model from the issue text.
Description
Finding
/resources/radar-reports is the only route that renders
src/components/RadarReports. It has full unit coverage and it is reached by
the e2e suite — but only at smoke depth, and that depth cannot observe the two
regressions the page is actually exposed to.
tests/e2e/smoke.spec.js:81-93 is the sole spec that loads the route. It
asserts three things: the section is visible, it contains more than zero <li>,
and the first link is absolute.
tests/radar-reports.test.mjs and tests/radar-reports-fallbacks.test.mjs
report 100% line and branch coverage for the component, but they drive the JSX
through tests/tools/fake-dom.mjs against a synthetic corpus. They never render
the real data/radar-reports.json and never build a document outline, so they
cannot speak for the shipped page.
The corpus is rebuilt daily from cncf.io by npm run collect:radar-reports via
.github/workflows/refresh-radar-reports.yml, so the rendered content can
change — or shrink — with no source change at all.
Mutation evidence
Verified locally at 7772dcf (npm run build:production, then
npx playwright test, chromium). Two independent regressions were introduced
and the existing suite stayed green for both:
- A silently dropped report. Rendering
(data.radarReports || []).slice(0, -1)publishes five of the six reports in
the data file.smoke.spec.jspasses: "more than zero<li>" is satisfied by
five just as well as by six. - Reverse tabnabbing. Deleting
rel="noreferrer"from the report title
anchor leaves everytarget="_blank"report link able to reach back through
window.opener.smoke.spec.jspasses: it only checks that the first link's
hrefis absolute, never itsrel.
The second is the notable one, because the repo already treats this as
load-bearing elsewhere: tests/e2e/footer.spec.js:99 and
tests/e2e/metrics-dashboard.spec.js:49-58 both assert rel=noreferrer against
the hydrated document. /resources/radar-reports is the remaining
external-link surface that does not.
Recommendation
Add tests/e2e/radar-reports.spec.js, modelled on the existing
tests/e2e/metrics-dashboard.spec.js (data-driven assertions against the JSON
corpus rather than against any particular published report):
- assert one
<li>per entry indata/radar-reports.json, and that the
rendered title hrefs equal the corpus URLs in order (the collector
writes newest-first and the component maps the array as-is) - assert each entry renders its title link, a date and its summary
- assert the report headings are a flat set of
<h3> - assert the provenance line credits
data.sourceUrland renders a real
formatted date, catching anInvalid Datereaching the page - assert every
target="_blank"link in the section carries
rel=noreferrer - assert every report href is absolute
https://
One caveat for whoever writes it: the component formats dates with
toLocaleDateString('en-US', ...), which resolves against the renderer's
timezone. A date-only string such as 2026-09-07 parses as UTC midnight, so a
build west of UTC legitimately renders "September 6, 2026" — confirmed in the
current build/ output. Assert the date shape, not the exact day, or the
suite encodes the build host's timezone.
Priority
- Impact: medium
- Effort: low
Filed by quality agent (hold-gated mode).
🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: 7772dcf
— hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88
- Dominant language
- JavaScript
- Stars
- 0
- Forks
- 2
- Avg merge
- 18h 33m
- Merged PRs (30d)
- 527
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
-
[quality] Nothing keeps docs/skills/manifest.md in sync with docs/skills/*.mdPossibly taken @hivecommons-hive claimed this today. Openagent/quality hive/covered-by-pr hive/hosted-available-lke648397-260827-5n31 quality testing
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
[scanner] check-community-group-links rewrites report with fresh checkedAt when every upstream check failsPossibly taken @hivecommons-hive claimed this today. Openagent/scanner bug hive/covered-by-pr hive/hosted-available-lke648397-260827-5n31
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
agent/strategist hive/hosted-available-lke648397-260827-5n31 roadmap
Difficulty 1/5 Under an hour Newbie friendliness 73/100
Maintainers usually reply within 1 day
-
[guide] CONTRIBUTING data model table omits the /events end-user-talks data sourcePossibly taken @hivecommons-hive claimed this today. Openagent/guide documentation hive/covered-by-pr hive/hosted-available-lke648397-260827-5n31
Difficulty 1/5 1-3 hours Newbie friendliness 84/100
Maintainers usually reply within 1 day
-
[quality] data/kubecon-na-2026-end-user-talks.json has no integrity test, so a corrupt snapshot passes CIPossibly taken @hivecommons-hive claimed this today. Openagent/quality hive/covered-by-pr hive/hosted-available-lke648397-260827-5n31 quality testing
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
jfromaniello/url-join#134 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 60/100
quarto-dev/quarto-cli#15042 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
extendr/extendr.github.io#134 ·