Skip to content

chore(playwright): refresh timing-baseline.json from run 30802611748 - #30871

Merged
chirag-madlani merged 2 commits into
mainfrom
chore/refresh-timing-baseline
Aug 3, 2026
Merged

chore(playwright): refresh timing-baseline.json from run 30802611748#30871
chirag-madlani merged 2 commits into
mainfrom
chore/refresh-timing-baseline

Conversation

@chirag-madlani

Copy link
Copy Markdown
Collaborator

Why

timing-baseline.json on main was captured on 2026-07-22 (sha ccc86fe243) — 12 days ago. Since then 51 commits have touched spec files. The planner's data on origin/main today has drifted heavily:

Signal Count
Current spec files with zero baseline coverage 30
Baseline titles referencing tests that no longer exist 1007 / 4384 (23%)
Files with title drift (leaf renames, @tag adds, describe restructures) 66 / 322 (20%)
Worst-case dead-baseline: ExplorePageRightPanel 218 / 234 orphans (93%)
Worst-case dead-baseline: AdvancedSearch 107 / 131 orphans (82%)
Worst-case dead-baseline: Lineage/DataAssetLineage 79 / 85 orphans (93%)

That much stale data means LPT is planning against ghosts — the fallback path (30 s per unknown test) is picking up hundreds of tests, and the atomic-unit gate is firing on aggregates that the planner didn't correctly weight.

What

Refresh from the most recent successful full-mode merge_group run (30802611748, 2026-08-03 09:43 UTC, sha 79df9aed95). Its playwright-timing-history-full artifact is retained until 2026-09-02, so this is a clean, verifiable source.

Metadata delta

  • 4384 → 4409 tests (25 net additions)
  • 322 → 325 files (4 newly covered: Features/ColumnBulkOperationsTagsGlossary, Features/IncidentManagerPagination, Pages/AssetHealthWidget, Pages/PipelineValidation)
  • 49 → 14 zero-duration entries (35 previously-skipped tests now have real durations)
  • BulkImport correctly recorded under the ImportExport project — PR fix(playwright): route BulkImport back to import-export lane and audit-split the atomic describe #30834's route fix is reflected in the fresh capture (Database service 449 s, Database Schema 366 s, etc.)

Preserved from the current baseline

  • retainedUnstableTestIds (68-entry curated allowlist for known flaky tests)
  • retainedSourceRunId / retainedSourceSha retention pointers

Schema normalization

Fresh reporter output uses title = › <project> › <file> › <describe> › <leaf> and leafTitle = the short name. Current baseline uses title = short name. Normalized entries to the current baseline's schema (short title, dropped retryDurationMs) so the diff stays a one-line JSON re-serialization.

Test change

Removed a stale assertion in test_versioned_baseline_omits_all_zero_ids_from_weights that required at least one zero-duration entry with outcome=expected. The fresh capture contains only legitimately-skipped zero-ms entries (all outcome=skipped), which is the healthy state. The meaningful part of the test (load-time filtering behavior) still asserts.

Verified

  • 64 planner tests pass.
  • Simulated load_history against the refreshed baseline: 4395 test_weights entries + 3498 identity_weights (up from partial coverage today).
  • BulkImport project correctly on ImportExport with 6 tests × real weights totaling 25.3 min — AUDITED_PARALLEL_SUITES splits into per-spec parallel units so no unit exceeds the 20-min atomic ceiling.

Follow-up (separate PR)

The next PR I'll draft is the workflow step that opens this same refresh PR automatically after every successful full-mode merge_group run — so this doesn't need to be done by hand again.

🤖 Generated with Claude Code

The checked-in `.github/playwright/timing-baseline.json` had drifted 12
days behind the tree — captured 2026-07-22 (sha ccc86fe), but 51
commits since then have added, renamed, or re-tagged specs. Concrete
drift as measured on origin/main today:

  * 30 current spec files have zero baseline coverage
    (Auth/SSOAuthentication.spec.ts + 25 tests, KnowledgeGraph, the 8
    Features/SearchSeparation files, etc.)
  * 1007 baseline titles (23 %) reference tests that no longer exist —
    dead weight in load_history
  * 66 files (20 % of covered) have title drift — leaf renames, @tag
    additions, describe restructures
  * Worst offenders — Pages/ExplorePageRightPanel (218/234 orphaned,
    93 % dead), Features/AdvancedSearch (107/131, 82 %),
    Pages/CustomProperties (98/149, 66 %),
    Pages/Lineage/DataAssetLineage (79/85, 93 %)

Refresh from the most recent successful full-mode merge_group run
(30802611748, 2026-08-03 09:43 UTC, sha 79df9ae). Its
`playwright-timing-history-full` artifact is retained until 2026-09-02
and reflects the CI's actual runtime under the current tree.

Metadata delta:

  * 4384 → 4409 tests (25 net additions)
  * 322 → 325 files (4 new covered: AssetHealthWidget,
    ColumnBulkOperationsTagsGlossary, IncidentManagerPagination,
    PipelineValidation)
  * 49 → 14 zero-duration entries (35 previously-skipped tests now
    have real durations captured)
  * BulkImport correctly recorded under the `ImportExport` project
    (PR #30834 route fix reflected in the fresh capture)

Preserved unchanged from the current baseline:

  * `retainedUnstableTestIds` (68-entry curated allowlist for known
    flaky tests)
  * `retainedSourceRunId` / `retainedSourceSha` pointers

Normalized entries to the current baseline's schema
(short `title` instead of the reporter's ` › proj › file › describe ›
leaf` breadcrumb; dropped `retryDurationMs`) so the diff stays a
one-line JSON reserialization on the payload.

Also removed a stale assertion in
`test_versioned_baseline_omits_all_zero_ids_from_weights` that required
at least one zero-duration entry with outcome=expected — a bug-case
sanity check that no longer holds now that the fresh capture only
contains legitimately-skipped zero-ms entries. The load-time filtering
behavior (the meaningful part of the test) still asserts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 3, 2026 11:15
@chirag-madlani
chirag-madlani requested review from a team, harshach and tutte as code owners August 3, 2026 11:15
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

❌ PR checklist incomplete

This PR cannot be merged until the following are addressed on its linked issue:

  • No GitHub issue is linked. Link an issue in the Development section of the PR (or add Fixes #12345 to the description). For a same-org cross-repo issue, add Fixes open-metadata/<repo>#123 to the description.

The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically.

Maintainers can bypass this check by adding the skip-pr-checks label.

@github-actions github-actions Bot added safe to test Add this label to run secure Github workflows on PRs UI UI specific issues labels Aug 3, 2026

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

Refreshes the checked-in Playwright timing baseline used by the CI shard planner, so planning/weighting reflects the current spec/test structure and avoids fallback-time inflation due to baseline drift.

Changes:

  • Updated .github/playwright/timing-baseline.json from a recent successful full-mode run to realign test IDs/titles/durations with origin/main.
  • Adjusted test_versioned_baseline_omits_all_zero_ids_from_weights to remove a stale assertion about zero-duration entries having outcome=expected.

Reviewed changes

Copilot reviewed 1 out of 2 changed files in this pull request and generated 1 comment.

File Description
.github/playwright/timing-baseline.json Refreshes the timing history baseline consumed by the Playwright CI planner.
.github/scripts/tests/test_playwright_ci_planning.py Updates planner test expectations to match the refreshed baseline’s zero-duration entry shape.

Comment thread .github/scripts/tests/test_playwright_ci_planning.py
`test_versioned_baseline_omits_all_zero_ids_from_weights` builds
`zero_tests = [t for t in baseline if durationMs == 0]` and then asserts
`all(t.id not in weights for t in zero_tests)`. If a future baseline
refresh captures a run with no zero-duration entries, `zero_tests` is
empty and the `all(...)` passes vacuously — the test would go green
without actually exercising the load_history filter.

Add an explicit `assert zero_tests` before the filter check with a
message telling the next baseline-refresher to either construct a
synthetic fixture or convert the test to synthetic input. Today's
refreshed baseline still has 14 skipped 0-ms entries, so the guard is
a no-op right now — it just catches the future case.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 3, 2026 11:20

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

Copilot reviewed 1 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (1)

.github/scripts/tests/test_playwright_ci_planning.py:379

  • The new assert zero_tests makes this unit test dependent on the checked-in baseline always containing at least one 0-ms entry. A future baseline refresh that happens to have no skipped tests would fail CI even though load_history would still behave correctly. Consider skipping (or switching to a synthetic fixture) when the baseline has no zero-duration entries to avoid false-negative failures during baseline refreshes.
    # Ensure there's something to check — if a future baseline refresh
    # produces a run with zero skipped/0-ms entries, the `all(...)` below
    # would pass vacuously without exercising the filter. Fail loudly
    # instead so whoever refreshed the baseline knows to either construct
    # a synthetic fixture or convert this to a synthetic test.
    assert zero_tests, (
        "checked-in baseline has no zero-duration entries; this test can "
        "no longer exercise the load_history filter path against real data"
    )

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

✅ Playwright Results — workflow succeeded

Validated commit 53cea00bce573bfb3487743fe6b8fffd934644b5 in Playwright run 30809113084, attempt 1.

✅ 550 passed · ❌ 0 failed · 🟡 0 flaky · ⏭️ 3 skipped · 🧰 0 lifecycle flaky

Performance

Blocking targets: ✅ met · Optimization targets: 🟡 in progress

Shard-job maxima below are not the full workflow wall time; the linked run includes build, fixture, planning, and reporting.

🕒 Full workflow signal wall (to summary) 51m 15s

⏱️ Max setup 2m 50s · max shard execution 17m 26s · max shard-job elapsed before upload 20m 24s · reporting 4s

🌐 201.36 requests/attempt · 2.83 app boots/UI scenario · 6.02% common-shard skew

Optimization targets still in progress:

  • Browser traffic was 201.36 requests per attempt (convergence target: fewer than 200).
  • Application boot ratio was 2.83 per UI scenario (1618 boots / 571 scenarios; convergence target: at most 1).
Shard Passed Failed Flaky Skipped Lifecycle failed Lifecycle flaky
✅ Shard chromium-01 143 0 0 3 0 0
✅ Shard chromium-02 134 0 0 0 0 0
✅ Shard chromium-03 122 0 0 0 0 0
✅ Shard data-asset-rules-01 61 0 0 0 0 0
✅ Shard domain-isolation-01 14 0 0 0 0 0
✅ Shard global-state-01 34 0 0 0 0 0
✅ Shard ingestion-01 1 0 0 0 0 0
✅ Shard reindex-01 2 0 0 0 0 0
✅ Shard search-01 10 0 0 0 0 0
✅ Shard search-rbac-01 29 0 0 0 0 0

📦 Download artifacts

How to debug locally
# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip    # view trace

@chirag-madlani
chirag-madlani added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit 6c85483 Aug 3, 2026
76 of 77 checks passed
@chirag-madlani
chirag-madlani deleted the chore/refresh-timing-baseline branch August 3, 2026 16:51
@gitar-bot

gitar-bot Bot commented Aug 3, 2026

Copy link
Copy Markdown
Code Review ✅ Approved 1 resolved / 1 findings

Refreshes the Playwright timing baseline and updates test assertions, addressing the vacuous pass finding. No issues found.

✅ 1 resolved
Quality: Test can pass vacuously if no zero-duration entries exist

📄 .github/scripts/tests/test_playwright_ci_planning.py:369-373
After removing the any(...) assertion, test_versioned_baseline_omits_all_zero_ids_from_weights relies solely on assert all(test['id'] not in weights for test in zero_tests), which is vacuously true when zero_tests is empty. A future baseline refresh with zero zero-duration entries would silently make this test meaningless. Consider adding assert zero_tests, ... to guarantee the filtering behavior is actually exercised.

Options

Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar | Powered by Gitar — free for open source

github-actions Bot pushed a commit to aokimoon/OpenMetadata that referenced this pull request Aug 4, 2026
…ful full merge_group (open-metadata#30872)

Follow-up to PR open-metadata#30871's one-shot manual refresh. Without this,
`.github/playwright/timing-baseline.json` drifts fast — 12 days between
captures produced 23 % dead titles and 30 uncovered spec files on main,
enough to make the planner materially wrong on both LPT balance and
atomic-unit weight decisions.

Adds a `refresh-timing-baseline` job that runs after `playwright-summary`
on every successful full-mode merge_group run. The job:

  * downloads the same `playwright-timing-history-full-*` artifact the
    summary already uploaded
  * normalizes it to the checked-in baseline schema via a new
    `.github/scripts/refresh_timing_baseline.py`
  * preserves `retainedUnstableTestIds`, `retainedSourceRunId`,
    `retainedSourceSha` from the current baseline (curated fields)
  * writes compact JSON so the diff stays a one-line reserialization
  * skips if the file is byte-identical
  * force-pushes a single tracked branch `ci/auto-refresh-timing-baseline`
    and opens or updates one PR against main
  * refuses (exit 2) if drift > 40 % of test-id entries — a safety valve
    against an accidentally-broken source run

Guards:
  * merge_group event only (safest ci-status signal)
  * full execution mode only (targeted runs miss coverage)
  * playwright-summary success only (no partial data)
  * single tracked PR — successive runs update it in place rather than
    piling up

The auto-PR still requires human merge. It just eliminates the
"regenerate the file" busywork that PR open-metadata#30871 did by hand.

6 new pytest cases in `test_refresh_timing_baseline.py` cover the
normalization, retention-field preservation, diff computation, drift
cap, non-full rejection, and end-to-end `main()` behavior. 94 total
tests in `.github/scripts/tests/` pass.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

safe to test Add this label to run secure Github workflows on PRs UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants