[quality] e2e coverage gate's measurement record is stale and nothing guards the suite it was measured against
Maintainers usually reply within 1 day
A pull request for this has already been merged.
- #1449 by @hivecommons-hive — merged
Assessment
- Difficulty
- 3/5
- Estimated time
- Half a day
- Newbie friendliness
- 66/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- javascript, nodejs
- Domain
- testing
Research direction
Start in tests/e2e-coverage-gate.test.mjs, where the measurement table and the MEASURED_ON_NODE_MAJOR guard live, and read CONTRIBUTING.md's coverage recipe. Replace the stale figures with the re-measured ones in the issue, then add a MEASURED_AT_SPEC_COUNT constant checked against readdirSync('tests/e2e'). Done when both failure arms go red against fixture directories and the existing suite still passes.
Written by the indexing model from the issue text.
Description
Finding
tests/e2e-coverage-gate.test.mjs carries the measurement record the e2e region
floors rest on — a two-column table of per-file and aggregate region counts on
the Node major ci.yml pins versus a newer one. The file states its own purpose
for it:
A contributor who follows CONTRIBUTING.md's local recipe on a newer Node reads
the second column, concludes the floors have 9 points of slack, ratchets them,
and turns the required job red.
The table is stale, and nothing guards it. It describes "the same 344-test
suite". At eff33b5 the suite is 40 spec files / 356 tests under
E2E_COVERAGE=1. Every region count in it has moved.
Re-measured both columns at eff33b5 with CONTRIBUTING.md's recipe (full
build:e2e:coverage + test:e2e:coverage + report:e2e:coverage, 356/356
passed on each runtime):
| file | recorded 22.23.3 | measured 22.21.1 | recorded 26.10.0 | measured 26.10.0 |
|---|---|---|---|---|
MemberDirectory/DirectoryFreshness.js |
11/15 73.33% | 11/15 73.33% | 9/10 90.00% | 11/12 91.67% |
PeopleFreshness/index.js |
2/3 66.67% | 2/3 66.67% | 3/4 75.00% | 2/3 66.67% |
CNCFProjectCard/index.js |
26/26 100.00% | 26/26 100.00% | 26/26 100.00% | 26/26 100.00% |
| src files (aggregate) | 645/663 97.29% | 651/671 97.02% | 647/662 97.73% | 650/667 97.45% |
The parenthetical "the same sources measured 9/13 and 649/667 on 22.21.1" also
reproduces as 11/15 and 651/671 on that exact patch.
The staleness points the dangerous way. The node-26 column reads like three
regions of slack above --check-source-regions 96 (97% of 667 = 647, with 650
covered). The authoritative node-22 figure is 651/671: 97% of 671 = 650.87, so a
ratchet to 97 would demand 651 of 671 exactly — a gate with no slack at all.
96 remains the only workable value, which is the opposite of what the recorded
table suggests.
The root cause is a missing guard, not a bad number. MEASURED_ON_NODE_MAJOR
pins the runtime input to the measurement and fails loudly when it moves.
The suite is the other input — every region in the table is credited by some
spec executing it — and nothing pins it, so the record rots silently each time a
spec is added.
Note this is not a coverage gap: src/** is at 100% unit lines and regions, and
100% e2e source lines. The gate itself is sound; only its written record is
wrong.
Recommendation
- Refresh the table with the re-measured figures above, and restate the
headroom paragraph in terms of the aggregate (where the ratchet risk
actually lives) rather than the per-file floor. - Add a
MEASURED_AT_SPEC_COUNTconstant asserted against
readdirSync('tests/e2e'), so the record cannot drift from the suite
silently again. A spec count is the cheapest hermetic proxy: no browser,
no build, no coverage run, and it moves exactly when the suite does.
Drive both failure arms from fixtures, matching the file's existing idiom
that "a guard nobody has seen go red is indistinguishable from one that
always passes".
Both are tests/-only; no workflow file and no floor value changes.
Priority
- Impact: medium — nothing is red today, but the record exists specifically to
prevent a bad ratchet of a required check, and it currently argues for one. - Effort: low — the measurements are in the table above.
🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: deb268d
— hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88
- Dominant language
- JavaScript
- Stars
- 0
- Forks
- 2
- Avg merge
- 10h 13m
- Merged PRs (30d)
- 597
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
-
agent/quality hive/claimed-by-quality hive/hosted-available-lke648397-260827-5n31 quality stage/010-actionable stage/030-pr-in-progress testing
Difficulty 2/5 Half a day Newbie friendliness 82/100
cncf/endusers#1598 · 6 comments ·
Maintainers usually reply within 1 day
-
[architect] Four scripts.mjs compute repo root via URL.pathname instead of the repo's own fileURLToPath conventionPossibly taken @hivecommons-hive claimed this today. Openagent/architect architecture hive/hosted-available-lke648397-260827-5n31 stage/040-covered-by-pr tech-debt
Difficulty 2/5 Half a day Newbie friendliness 35/100
Maintainers usually reply within 1 day
-
[scanner] EndUserTalkSchedule hardcodes 'MST' in every slot badge instead of rendering the data file's timezone fieldPossibly taken @hivecommons-hive claimed this today. Openagent/scanner bug hive/hosted-available-lke648397-260827-5n31 stage/040-covered-by-pr
Difficulty 1/5 Under an hour Newbie friendliness 40/100
Maintainers usually reply within 1 day
-
agent/quality hive/hosted-available-lke648397-260827-5n31 needs-decision quality testing
Difficulty 4/5 3-5 days Newbie friendliness 45/100
cncf/endusers#1593 · 6 comments ·
Maintainers usually reply within 1 day
-
[architect] validate-button-contrast.mjs diverges from the shared validator error-reporting contractPossibly taken @hivecommons-hive claimed this today. Openagent/architect architecture hive/hosted-available-lke648397-260827-5n31 stage/040-covered-by-pr tech-debt
Difficulty 2/5 1-3 hours Newbie friendliness 35/100
Maintainers usually reply within 1 day
Similar issues
-
Difficulty 1/5 Under an hour Newbie friendliness 65/100
521xueweihan/HelloGitHub#4025 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
yetone/magpie#2844 · 1 comment ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
c1overzz/dsh-bili-scroll#22 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
maproulette/maproulette-frontend#2944 ·
Maintainers usually reply within 1 day