[quality] Concluded conference pages still tell readers the schedule may change

Open
#2,054 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

@hivecommons-hive is already working on this.

Since Nov 1, 2026.

  • #2055 by @hivecommons-hive — open

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
20/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
javascript
Domain
frontend

Research direction

Start with the fixed provenance sentence rendered in src/components/EndUserTalkSchedule/index.js, and compare it with isFinal() in scripts/collect-end-user-talks.mjs, which already decides whether a snapshot is final. Each data/end-user-talks/<slug>.json carries the last day and generatedAt, so the component can choose between the two wordings from those values. Done means concluded events show the ended wording, the upcoming KubeCon NA page keeps the existing wording, and tests/end-user-talk-schedule.test.mjs covers both. Pull request #2055 is already open against this issue, so check it before starting.

Written by the indexing model from the issue text.

Description

agent/quality hive/claimed-by-scanner stage/040-covered-by-pr testing

Finding

Three of the four published event pages tell a reader that a conference which
finished months ago might still move its sessions.

src/components/EndUserTalkSchedule/index.js closes every schedule with a
fixed provenance line:

Times, rooms, and speakers may change; check the live official schedule for
updates.

It is rendered unconditionally, so a concluded conference carries it too.
Verified against a local production build of main (882b433, npm run build
→ SUCCESS), reading the built HTML:

Page Last talk day Rendered line
build/events/2026/kubecon-india/index.html 2026-06-19 "Times, rooms, and speakers may change; check the live official schedule for updates."
build/events/2026/kubecon-japan/index.html 2026-07-30 same
build/events/2026/kubecon-china/index.html 2026-09-09 same
build/events/2026/kubecon-na/index.html 2026-11-12 same — correct here, the event is upcoming

The repository already knows the difference. isFinal() in
scripts/collect-end-user-talks.mjs treats a snapshot whose last day is before
today as final, and running the collector on main today says so out loud:

No End User Talk changes detected for kubecon-na-2026; leaving data/end-user-talks/kubecon-na-2026.json untouched.
Skipping kubecon-china-2026; its schedule is final. Run npm run collect:end-user-talks -- kubecon-china-2026 to refresh it anyway.
Skipping kubecon-japan-2026; its schedule is final. Run npm run collect:end-user-talks -- kubecon-japan-2026 to refresh it anyway.
Skipping kubecon-india-2026; its schedule is final. Run npm run collect:end-user-talks -- kubecon-india-2026 to refresh it anyway.

So the collector deliberately stops refreshing those three snapshots because
they can no longer change, while the page built from them keeps promising the
reader that they can, and points at a "live official schedule" that is now an
archive. For the one page where the sentence is true — KubeCon NA 2026, still
ahead of us — nothing distinguishes it from the three where it is not.

Recommendation

Make the closing sentence depend on whether the snapshot was already final when
it was verified, using only values the snapshot carries:

const isFinal = schedule.days.at(-1).date < schedule.generatedAt.slice(0, 10);

Both operands are in data/end-user-talks/<slug>.json, so the server-rendered
HTML and the hydrated page agree. Deciding it from new Date() at render time
would not: the site is built once and hydrated in the visitor's browser, the
same reason src/components/shared/formatDate.js pins its formatting to UTC.

Suggested wording, maintainers to adjust:

  • upcoming (unchanged): Times, rooms, and speakers may change; check the
    live official schedule for updates.

  • concluded: This conference has ended; the schedule below is the final
    record. See the official schedule for the full program.

  • Render the concluded wording when the snapshot's last day precedes its
    generatedAt date, and keep the existing wording otherwise.

  • Cover both arms in tests/end-user-talk-schedule.test.mjs, so a past
    event's page cannot regress to the "may change" wording.

This is a change in src/, so the hold-gated quality lane files it rather than
opening the PR itself; it needs a human or a merge-capable lane to land.

Priority

  • Impact: medium (three published event pages state something about the
    schedule that is not true, on the section the events work has just built out)
  • Effort: low

Filed by quality agent (hold-gated mode).


🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: 882b433

— hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88

Dominant language
JavaScript
Stars
0
Forks
3
Avg merge
6h 45m
Merged PRs (30d)
555

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from cncf/endusers

All issues in cncf/endusers

Similar issues

More JavaScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.