Skip to content

[quality] RadarReports' empty-corpus arms have no end-to-end coverage, and a variant build alone cannot fold them #1097

Description

@hivecommons-hive

Finding

src/components/RadarReports/index.js branches on two document-level fields of
data/radar-reports.json, and neither arm is reachable in the browser against
the data the site ships:

 5 function formatDate...
 6   if (!data.generatedAt) return null;            // uncovered: SyncStatus renders nothing
...
24   const radarReports = data.radarReports || [];  // uncovered: the `|| []` fallback

The checked-in corpus always carries a generatedAt and six reports. Both arms
are ordinary shapes rather than defensive dead code: the file is regenerated
daily from cncf.io by npm run collect:radar-reports via
.github/workflows/refresh-radar-reports.yml, so a collector run that fetches
nothing is exactly what produces them.

Evidence and provenance

  • Unit — covered. tests/radar-reports-fallbacks.test.mjs drives both arms
    directly through tests/helpers-component-data.mjs ("no generatedAt renders
    no provenance line while the list still renders"
    , and the
    missing-radarReports case). npm run test:unit:coverage
    (TZ=UTC node tests/tools/coverage-report.mjs, node v26.10.0) run locally on
    2026-10-05 at 8afaa67 reports no sub-100% region for this file; the only
    sub-100% source file in the repository is scripts/lib/svg-active-content.mjs.
  • E2E — not covered. CI artifact e2e-coverage, id 11348560988, from run
    37317061554,
    workflow Validate repository, job End-to-end coverage, main at
    8afaa67 — the same revision as the unit run. report.json:
    {"file":"src/components/RadarReports/index.js","regions":5,"coveredRegions":3,"regionPercent":60,"uncoveredRegions":[6,24]}.
  • Covered by unit tests but not end-to-end tests, so priority 2 under the
    coverage-evidence rules.

What a variant build achieves, and what it does not

Both arms turn on document-level fields read by the single
/resources/radar-reports page, so clearing them in the ordinary coverage
build would trade the provenance line and all six rendered reports for them
rather than add a case. That is the variant-build shape, like AwardsTimeline's
provenance paragraph.

A variant overlay clearing generatedAt and radarReports does make the
browser take both arms. Verified locally at 8afaa67: the variant chunk keeps
the branches (function i(){if(!o.ro)return null;...} and let e=o.Gb||[] in
build/e2e-coverage-variant/assets/js/b8512184.*.js, compiled against
{"ro":null,...,"Gb":null}), the page serves, and the full coverage suite is
green at 300 passed.

The two regions still do not leave the uncovered list. Rendering the same
run reports:

src/components/RadarReports/index.js | 100.00 | 66.67 |  | 6 24

getRegionCoverage in tests/tools/e2e-coverage-report.mjs keys a region on
its exact original coordinates (line:column:endLine:endColumn), and the two
builds' generated code maps back to different ones. Dumped from the union site,
instrumented to print each key with its count:

real build     6:25:6:37   0     24:40:24:46  0     7:2:24:40   1    24:46:29:26  1   29:26:30:30  6
variant build  7:2:21:1    0     21:0:29:26   1                                       29:26:30:30  0

The variant emits no key matching either zero region, so the union keeps both
zeros. This is the region-attribution problem tracked in #1066 and #1079, not
something a fixture can reach.

Recommendation

  • tests/e2e/fixtures/data-variants/radar-reports.json clears generatedAt
    and radarReports, and a spec pairs /resources/radar-reports with
    /e2e-coverage-variant/resources/radar-reports, asserting the provenance
    line and six reports on the first and neither on the second
  • src/components/RadarReports/index.js lines 6 and 24 leave the
    uncovered-region list

The first box is what the PR below lands; the second is gated on the region
union folding the two builds' coordinates, i.e. on #1066 / #1079.

Coordination

The change touches only tests/e2e/fixtures/data-variants/radar-reports.json
(new) and tests/e2e/radar-reports-variant.spec.js (new). It does not edit
tests/e2e-data-fixtures.test.mjs (occupied by #1034 and #1078),
tests/e2e/data-variants.spec.js (occupied by #1034), or
tests/tools/e2e-coverage-report.mjs (occupied by #1040 and #1070) — the
cases lists in tests/e2e-data-fixtures.test.mjs are hardcoded and not
exhaustive, so a new variant overlay needs no edit there, exactly as #1093's
metrics.json variant needed none. A separate spec file follows #1093's
precedent. The CI gate is --check-source-regions 80
(.github/workflows/ci.yml:233), which only rises, so no workflow file is
involved.

Priority

  • Impact: medium (a page regenerated daily whose empty-corpus rendering is
    untested in the shipped bundle; 2 of the report's uncovered regions)
  • Effort: low

🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: 8afaa67

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

Activity

  1. added
    qualityApproved by a Hive merger/owner for auto-merge on green CI
    testingApproved by a Hive merger/owner for auto-merge on green CI
    agent/qualityApproved by a Hive merger/owner for auto-merge on green CI
    hive/covered-by-prHive verified that an open PR references or claims this issue; still actionable until confirmed
    hive/likely-doneHive verified that a merged PR references or claims this issue; pending confirmation
    and removed
    hive/covered-by-prHive verified that an open PR references or claims this issue; still actionable until confirmed
    on Oct 5, 2026
  2. hivecommons-hive commented on Oct 6, 2026

    @hivecommons-hive
    ContributorAuthor

    task-list sweep: 0 of 2 items ticked. Not closing yet — outstanding boxes remain.

    Outstanding items:

    • 🔲 tests/e2e/fixtures/data-variants/radar-reports.json clears generatedAt
    • 🔲 src/components/RadarReports/index.js lines 6 and 24 leave the

    Merged PRs referencing this issue so far:

    This comment is edited in place by the task-list sweep on every cycle; it is not duplicated.

  3. hivecommons-hive commented on Oct 6, 2026

    @hivecommons-hive
    ContributorAuthor

    hive/verified-open: verified at 589c15b after #1098 merged (2026-10-06T00:14Z).

    Not closing: the second checkbox is genuinely outstanding. Labeled hive/verified-open; the remainder lands via #1079 (quality lane), not a new deliverable here.


    🐝 Hive Agent: scanner | Instance: hosted-available-lke648397-260827-5n31 | SHA: unknown

    — hive: agent=scanner backend=copilot model=kimi-k3 copilot=1.0.88

  4. removed
    hive/likely-doneHive verified that a merged PR references or claims this issue; pending confirmation
    on Oct 6, 2026
  5. hivecommons-hive commented on Oct 6, 2026

    @hivecommons-hive
    ContributorAuthor

    The first box here landed in #1098. The second — "src/components/RadarReports/index.js lines 6 and 24 leave the uncovered-region list" — is gated on #1066 / #1079, and that gate has now been measured rather than assumed.

    On the published e2e-coverage artifact 11390121619 (run 37412914368), re-rendered locally at main 7ab301e, this file still reads:

    src/components/RadarReports/index.js | 100.00 | 66.67 |  | 6 24
    

    #1079's proposed containment fold would move line 24 off that list — its zero region 24:40:24:46 is enclosed by a covered region — but it would do so for the wrong reason. Line 24 is a genuine arm, and the same enclosure holds for GroupLinkStatus (#1094) and DirectoryFreshness (PR #1104), which are also genuine. Full measurements are in my comment on #1079; the short version is that enclosure does not distinguish a drifted region from an uncovered one, so the rule that would tick this box is one that should not land.

    Line 6 (6:25:6:37) is enclosed by nothing at all (lineContain=0 spanContain=0 overlap=0), so no coordinate-folding rule proposed so far reaches it either.

    So the second box is not merely waiting on #1066 / #1079 — it is waiting on a mechanism nobody has yet, and I would not expect it to be ticked by the work those issues currently describe. #1114 adds the regression test that keeps a future fold from ticking it incorrectly.

    No change to this issue's first box or to #1098. Flagging it here so the box is not read as simply unstarted.


    🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: 90af8e1

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

  6. hivecommons-hive commented on Oct 6, 2026

    @hivecommons-hive
    ContributorAuthor

    Status at main = 7ab301e, so the next reader does not have to re-derive it.

    Box 1 is done. tests/e2e/fixtures/data-variants/radar-reports.json and
    tests/e2e/radar-reports-variant.spec.js both landed in d2dc077 (#1098) and
    are on main today.

    Box 2 is still open and still not reachable by a PR. CI artifact
    e2e-coverage, id 11428330480, from run
    37496141453, job
    End-to-end coverage, head 4fff765:

    src/components/RadarReports/index.js | 100.00 | 66.67 |  | 6 24
    

    Lines 6 and 24 are exactly where this issue left them — the file moved from
    60% to 66.67% only because the region denominator changed, not because either
    zero region was retired. That is the region-attribution behaviour this issue
    already documented: the variant build's generated code maps back to different
    original coordinates, and getRegionCoverage keys a region on its exact
    line:column:endLine:endColumn, so the union keeps both zeros.

    So this issue is blocked on #1066 / #1079, not on more test code. Writing a
    second variant overlay or a second spec against these two arms would add no
    coverage and would duplicate radar-reports-variant.spec.js. Leaving it open
    as the record of the remaining box, with no PR attached, is deliberate.

    The same wall now holds src/components/PeopleFreshness/index.js lines 7 and
    22 (40% regions) despite
    tests/e2e/fixtures/data-variants/community-people.json and the
    data-variants.spec.js case that drives both arms — a second instance of the
    same union defect, worth noting on #1066 as evidence that it is not specific to
    RadarReports.


    🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: 3571f68

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

  7. hivecommons-hive commented on Oct 7, 2026

    @hivecommons-hive
    ContributorAuthor

    Standing down on the second box — it is occupied, not abandoned

    Box 1 landed in #1098: tests/e2e/fixtures/data-variants/radar-reports.json and tests/e2e/radar-reports-variant.spec.js both exist at 03cfcfe.

    Box 2 — "src/components/RadarReports/index.js lines 6 and 24 leave the uncovered-region list" — is not a change that belongs in this issue's file cluster. As the body states, it is gated on the region union folding the two builds' coordinates (#1066 / #1079), which means an edit to tests/tools/e2e-coverage-report.mjs.

    That file is currently claimed by open hold-gated PR #1163 (fix(coverage): fold e2e regions whose spans cross across artifacts), which touches exactly tests/tools/e2e-coverage-report.mjs and tests/e2e-coverage-report.test.mjs and is awaiting human review. Writing a second fold rule into the same function while that PR is held would produce two competing implementations over the same lines.

    No further work is being done on this issue until #1163 resolves. Re-check box 2 against the union output once it merges — #1163 folds a crossing zero region into its covered twin, and RadarReports' two zeros at 6:25:6:37 and 24:40:24:46 are enclosed by covered spans rather than crossed by them (7:2:24:40 and 24:46:29:26 in the real build), so #1163 by itself is not expected to clear them. That enclosure shape is deliberately preserved by the guard merged in #1114, which means closing box 2 needs the ordinal-key approach in #1066 rather than a further containment rule here.


    🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: 03cfcfe

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

  8. mrbobbytables commented on Oct 8, 2026

    @mrbobbytables
    Member

    Consolidated into #1187 together with #1172: both are blocked on the two-build fixture-mechanism limit and should be solved by one mechanism extension.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent/qualityApproved by a Hive merger/owner for auto-merge on green CIhive/hosted-available-lke648397-260827-5n31Approved by a Hive merger/owner for auto-merge on green CIhive/verified-openqualityApproved by a Hive merger/owner for auto-merge on green CItestingApproved by a Hive merger/owner for auto-merge on green CI

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions