Skip to content

Dashboard: Stop counting skipped/xfailed tests as passing coverage (#211) - #327

Merged
tadani3 merged 26 commits into
mainfrom
tommasoadani/dashboard_fix
Jun 5, 2026
Merged

Dashboard: Stop counting skipped/xfailed tests as passing coverage (#211)#327
tadani3 merged 26 commits into
mainfrom
tommasoadani/dashboard_fix

Conversation

@tadani3

@tadani3 tadani3 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes a class of user-visible dashboard defects whose common root cause is the
data-collection layer of scripts/generate_dashboard.py marking tests as
"passed" when they did not actually run, then layers on L2 expected-failure
tracking
, a unified per-level status model, and a round of UI/legibility
polish
.

Per the repo guideline "root-cause before remedy — never mask symptoms by
adding compensating logic"
, correctness fixes are applied at the producers
(scanners + ModelInfo/summary properties), not at the downstream consumers.

1. Coverage-correctness fixes (skipped/xfailed tests no longer count as passing)

Two independent producers were setting "this test passed" flags for tests that
never ran:

  1. _scan_l4_golden_files / _scan_l5_generation_golden set l4_golden_files /
    l5_generation_golden whenever a JSON file existed under testdata/golden/,
    even when the YAML case had a skip_reason.
  2. ModelInfo.confidence_level and one _compute_summary branch read the raw
    l3_synthetic_parity flag without checking l3_status == "pass".

Bugs addressed (Issue #211):

# Symptom Producer flag fixed
1 Badge says "L4: Golden Match" for skipped models l4_golden_files, confidence_level
2 L4/L5 summary card numbers too high l4_golden_files, l5_generation_golden
3 "Not Tested" card undercount l4_golden_files, l5_generation_golden, confidence_level (L3)
4 L4/L5 dots solid green instead of dotted-skipped l4_golden_files, l5_generation_golden
5 "✅ L4 golden data: available" for skipped test l4_golden_files
6 ✅ on "L4: Golden Match" row for skipped test l4_golden_files
7 Family histogram L4:N counts skipped models l4_golden_files
8 Heatmap cells darker than actual coverage l4_golden_files, confidence_level
9 Skipped models pass "L4+" Min-Level filter confidence_level

L3 analogs (skipped/xfailed L3 inflating confidence_level and escaping the
"Not Tested" bucket) are fixed via the new ModelInfo.l3_passes property and the
l3_status == "pass" guards.

Additionally, min_token_match_ratio is no longer recorded for skipped YAML
cases, so the dashboard never shows an "L5 token match threshold" for a test that
doesn't run.

2. L2 expected-failure tracking + unified status model

  • New L2 xfail detection (_XFAIL_REASONS) with dots, badges, and CI-skip
    annotations.
  • L3 scan scope expanded to encoder/seq2seq models; YAML→model_type mapping made
    authoritative via the model_type field (disambiguates registry entries that
    share a test_model_id, e.g. dinov2/dinov3_vit).
  • ModelInfo reworked so L2–L5 share a {status, configured} contract
    (status ∈ {pass, xfail, skip, None}). Status badge classes unified across
    levels.
  • L3 status breakdown now surfaces untested + awaiting-data counts.

3. UI / legibility polish

  • Color system unified: table dots, component-matrix cells, and the legend
    all use the --l1..--l5 palette; xfail given a distinct purple outside the
    L0–L5 spectrum. Matrix cells switched to solid fills so same-hue neighbors
    (L1/L2 amber, L3/L4 green) are distinguishable.
  • Badge semantics: only exception states (xfail/skip) are badged inline;
    positive states rely on the Confidence column + dot strip (removes
    redundant/duplicate badges).
  • Capitalization standardized across footer buckets, status labels,
    confidence labels, tooltips, and the matrix legend.
  • Series histogram set to nowrap so the L1–L5 family badges stay on one row.
  • Comment clarifications: by_level[0] semantics ("no passing coverage at any
    level"), L2 xfail bucketing, and the YAML disambiguation rule.

Template note: the Jinja template's skipped-aware branches already existed;
once the upstream flags are correct they render the right output.

Files changed

  • scripts/generate_dashboard.py
  • scripts/templates/dashboard.html.j2

@tadani3 tadani3 self-assigned this Jun 1, 2026
@tadani3 tadani3 added the bug Something isn't working label Jun 1, 2026
@tadani3 tadani3 changed the title Sashboard: Stop counting skipped/xfailed tests as passing coverage (#211) Dashboard: Stop counting skipped/xfailed tests as passing coverage (#211) Jun 1, 2026
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

Performance Comparison

Comparing 5423421305cc69

Model Metric Baseline Current Delta
bert (feature-extraction) model_size_bytes 359 KB 359 KB +0.0%
bert (feature-extraction) num_nodes 60 60 +0.0%
falcon model_size_bytes 364 KB 364 KB +0.0%
falcon num_nodes 66 66 +0.0%
gemma2 model_size_bytes 428 KB 428 KB +0.0%
gemma2 num_nodes 107 107 +0.0%
gpt2 model_size_bytes 388 KB 388 KB +0.0%
gpt2 num_nodes 53 53 +0.0%
llama model_size_bytes 425 KB 425 KB +0.0%
llama num_nodes 61 61 +0.0%
llama (static-cache) model_size_bytes 425 KB 425 KB +0.0%
llama (static-cache) num_nodes 58 58 +0.0%
mamba (ssm-text-generation) model_size_bytes 296 KB 296 KB +0.0%
mamba (ssm-text-generation) num_nodes 98 98 +0.0%
phi3 model_size_bytes 421 KB 421 KB +0.0%
phi3 num_nodes 59 59 +0.0%
phi3 (static-cache) model_size_bytes 421 KB 421 KB +0.0%
phi3 (static-cache) num_nodes 56 56 +0.0%
qwen2 model_size_bytes 425 KB 425 KB +0.0%
qwen2 num_nodes 61 61 +0.0%
qwen2 (static-cache) model_size_bytes 425 KB 425 KB +0.0%
qwen2 (static-cache) num_nodes 58 58 +0.0%
qwen3_5_moe (hybrid-text-generation) model_size_bytes 506 KB 506 KB +0.0%
qwen3_5_moe (hybrid-text-generation) num_nodes 275 275 +0.0%
qwen3_5_text (hybrid-text-generation) model_size_bytes 458 KB 458 KB +0.0%
qwen3_5_text (hybrid-text-generation) num_nodes 129 129 +0.0%
qwen3_5_vl (hybrid-qwen-vl) model_size_bytes 977 KB 977 KB +0.0%
qwen3_5_vl (hybrid-qwen-vl) num_nodes 413 413 +0.0%
t5 (seq2seq) model_size_bytes 836 KB 836 KB +0.0%
t5 (seq2seq) num_nodes 166 166 +0.0%
whisper (speech-to-text) model_size_bytes 1008 KB 1008 KB +0.0%
whisper (speech-to-text) num_nodes 128 128 +0.0%

No performance regressions.

@codecov

codecov Bot commented Jun 1, 2026

Copy link
Copy Markdown

The author of this PR, tadani3, is not an activated member of this organization on Codecov.
Please activate this user on Codecov to display this PR comment.
Coverage data is still being uploaded to Codecov.io for purposes of overall coverage calculations.
Please don't hesitate to email us at support@codecov.io with any questions.

@tadani3 tadani3 linked an issue Jun 2, 2026 that may be closed by this pull request
Comment thread tests/generate_dashboard_test.py Fixed
@tadani3
tadani3 marked this pull request as ready for review June 2, 2026 22:47
@tadani3
tadani3 requested review from a team and Copilot June 2, 2026 22:47
Comment thread tests/generate_dashboard_test.py Fixed
@justinchuby

Copy link
Copy Markdown
Member

@tadani3 thanks! Could you share two screenshots of before and after the change?

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes the confidence dashboard’s coverage accounting so skipped and xfailed tests no longer inflate “passing” coverage, by correcting the producer-side flags in scripts/generate_dashboard.py and aligning the UI’s L2/L3 semantics with the new pass-gating.

Changes:

  • Fix producer logic to gate L4/L5 golden coverage on YAML skip_reason, and gate L2/L3 “passing” on explicit status (l2_status == "pass", l3_status == "pass").
  • Add L2 status scanning (parse+graph vs graph-only xfail) and expose L2 status/configured fields to the rendered JSON for correct dot/badge rendering.
  • Add a comprehensive regression test suite for the dashboard generators/scanners/aggregations/rendering pipeline.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
scripts/generate_dashboard.py Corrects producer flags and introduces L2 status scanning + pass-gating (l2_passes/l3_passes) across confidence, summary, and JSON emission.
scripts/templates/dashboard.html.j2 Updates dot rendering and adds L2 xfail UI affordances (badges, detail rows, summary annotations).
tests/generate_dashboard_test.py Adds end-to-end regression tests covering scanner, aggregation, rendering, and meta-invariants against the live repo.

Comment thread scripts/templates/dashboard.html.j2
Comment thread scripts/generate_dashboard.py Outdated
@justinchuby

Copy link
Copy Markdown
Member

Please ping me again when this is ready to review, thanks!

@tadani3

tadani3 commented Jun 5, 2026

Copy link
Copy Markdown
Contributor Author

Before (DinoV3 Original Issue)
image

After (DinoV3 Original Issue) image

@tadani3

tadani3 commented Jun 5, 2026

Copy link
Copy Markdown
Contributor Author

Before (Dashboard Flat Page)
image

After (Dashboard Flat Page) image

@tadani3
tadani3 merged commit f972184 into main Jun 5, 2026
21 of 22 checks passed
@tadani3
tadani3 deleted the tommasoadani/dashboard_fix branch June 5, 2026 22:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dashboard misleading

3 participants