Skip to content

🧪 test(ci): gate Playwright on fixture readiness#585

Open
scttbnsn wants to merge 4 commits into
mainfrom
fix/playwright-qa-readiness
Open

🧪 test(ci): gate Playwright on fixture readiness#585
scttbnsn wants to merge 4 commits into
mainfrom
fix/playwright-qa-readiness

Conversation

@scttbnsn

@scttbnsn scttbnsn commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

What changed

  • make Playwright’s existing authenticated setup wait for the built-in local and remote startup scans to produce the complete 29-container QA snapshot
  • verify representative groups, registry results, and update availability instead of treating /health as fixture readiness
  • park later watcher cron runs and disable Docker-event refreshes in the browser-only compose stack
  • add a regression test and record the exact-main failure mode in the reliability report and rc.5 changelog

Why

The two exact-main attempts failed in different places because browser scenarios could start while watcher enrichment was still running. The second attempt passed the first failure, then hit partial group and update-result state. Launching an explicit scan is not the answer because it can overlap Drydock’s built-in startup scan; the authenticated setup now waits for that scan to finish and keeps the accepted snapshot stable. Production watcher defaults are unchanged.

Proof

  • cold QA stack: one remote startup scan and one local startup scan; all 29 fixtures reached the readiness contract with no follow-on scan
  • full pinned-image Playwright run after the final design: 33 passed, 1 intentional skip, 0 failed in 2.1m, retries disabled
  • Gitleaks: amended commit and tracked working tree clean
  • workflow invariants: 46/46 passed
  • full pre-push gate: lint, 125 script tests, UI typecheck, 100% app/UI coverage, app/UI builds, and zizmor all passed

Changelog

  • ✨ Added authenticated Playwright polling for a complete 29-container QA snapshot before Chromium starts.
  • ✨ Added workflow regression coverage for startup ordering, polling behavior, and QA Compose settings.
  • 🔧 Changed browser-only QA watchers to disable cron/event refreshes and prevent scan interference.
  • 🔧 Updated reliability documentation and rc.5 changelog with the startup race mitigation.
  • 🐛 Fixed incomplete fixture data causing flaky browser assertions despite /health passing.
  • 🔒 Production watcher defaults remain unchanged.

Concerns

  • Verify the 29-container readiness criteria remain aligned with fixture changes.
  • Ensure the Feb 29 cron expression is intentionally inert across the supported cron implementation.
  • Preserve the distinction between browser-only Compose overrides and production watcher configuration.

@vercel

vercel Bot commented Jul 23, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
drydock-website Ready Ready Preview, Comment Jul 23, 2026 1:29am
drydockdemo-website Ready Ready Preview, Comment Jul 23, 2026 1:29am

@biggest-littlest biggest-littlest left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The readiness contract matches the browser fixtures, keeps production watcher behavior untouched, and the cold-stack/full-suite proof covers the original race.

ALARGECOMPANY
ALARGECOMPANY previously approved these changes Jul 23, 2026

@ALARGECOMPANY ALARGECOMPANY left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Approved. Waiting for the startup scan instead of launching a competing scan is the right fix, and the no-retry Playwright proof is clean.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@scttbnsn, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 13 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 63b80b3a-4027-4163-ace0-481af42b5d9c

📥 Commits

Reviewing files that changed from the base of the PR and between 96bd6ea and aae8b3d.

📒 Files selected for processing (3)
  • .github/tests/e2e-playwright-workflow.test.ts
  • docs/cucumber-reliability.md
  • e2e/playwright/auth.setup.ts
📝 Walkthrough

Walkthrough

Playwright authentication now polls the containers API after login until a complete 29-container fixture snapshot is available. QA compose watchers use parked cron schedules, zero jitter, and disabled event refreshes. The workflow test verifies orchestration ordering, setup polling implementation, and watcher configuration. Reliability documentation records the startup race, mitigation, and cold-stack validation results.

Possibly related PRs

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/playwright-qa-readiness

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/cucumber-reliability.md`:
- Line 64: Update the readiness description to state that Playwright waits for
at least 29 containers, replacing the inaccurate “exact 29-container snapshot”
wording while preserving the rest of the documented behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 28ac98a2-4cad-456e-81f8-638f54c3f8fe

📥 Commits

Reviewing files that changed from the base of the PR and between ec0ee18 and c49f61a.

⛔ Files ignored due to path filters (1)
  • CHANGELOG.md is excluded by !CHANGELOG.md
📒 Files selected for processing (4)
  • .github/tests/e2e-playwright-workflow.test.ts
  • .github/workflows/e2e-playwright.yml
  • docs/cucumber-reliability.md
  • test/qa-compose.yml

Comment thread docs/cucumber-reliability.md Outdated
@scttbnsn
scttbnsn dismissed stale reviews from ALARGECOMPANY and biggest-littlest via 96bd6ea July 23, 2026 00:54
@scttbnsn
scttbnsn force-pushed the fix/playwright-qa-readiness branch from c49f61a to 96bd6ea Compare July 23, 2026 00:54

@biggest-littlest biggest-littlest left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Re-reviewed the amended commit. Authenticated setup owns readiness now, Gitleaks is clean, and the final cold-stack browser run proves the exact path.

ALARGECOMPANY
ALARGECOMPANY previously approved these changes Jul 23, 2026

@ALARGECOMPANY ALARGECOMPANY left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Approved again after the history rewrite. The credential-free readiness gate and single-scan fixture stack are the right final shape.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@e2e/playwright/auth.setup.ts`:
- Around line 33-36: Update the container sentinel check in the auth setup flow
to compare against the fixture’s actual displayName, “Traefik,” instead of
“Traefik Proxy.” Preserve the existing dd.group infrastructure-label condition
and readiness behavior.
- Around line 59-77: Increase the timeout for the Playwright setup project in
playwright.config.ts, or configure the setup suite via setup.describe.configure,
to exceed the 180-second expect.poll window and accommodate login/setup waits.
Keep the existing global timeout unchanged for other projects.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 32996fbe-284c-4b1d-9718-3450aef69a91

📥 Commits

Reviewing files that changed from the base of the PR and between c49f61a and 96bd6ea.

⛔ Files ignored due to path filters (1)
  • CHANGELOG.md is excluded by !CHANGELOG.md
📒 Files selected for processing (4)
  • .github/tests/e2e-playwright-workflow.test.ts
  • docs/cucumber-reliability.md
  • e2e/playwright/auth.setup.ts
  • test/qa-compose.yml
🚧 Files skipped from review as they are similar to previous changes (3)
  • test/qa-compose.yml
  • .github/tests/e2e-playwright-workflow.test.ts
  • docs/cucumber-reliability.md

Comment thread e2e/playwright/auth.setup.ts
Comment thread e2e/playwright/auth.setup.ts
@scttbnsn
scttbnsn dismissed stale reviews from ALARGECOMPANY and biggest-littlest via 1506735 July 23, 2026 01:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants