Skip to content

test(e2e): add playwright-utils e2e package with a non-blocking CI job - #7188

Open
yz-anaconda wants to merge 2 commits into
mainfrom
e2e/legacy-tests-on-playwright-utils
Open

yz-anaconda wants to merge 2 commits into
mainfrom
e2e/legacy-tests-on-playwright-utils

Conversation

@yz-anaconda

@yz-anaconda yz-anaconda commented Oct 6, 2026 •

Copy link
Copy Markdown

Summary

Adds e2e/, a UI test package built on @anaconda/playwright-utils, and a GitHub Actions job that runs it. This PR migrates 2 legacy specs (4 tests) to prove the setup; the rest of apps/web/tests/e2e keeps running as before and will move over in small follow-up PRs.

@anaconda/playwright-utils is private and this repo is public, so e2e/ is a separate pnpm package outside the workspace with its own lockfile. Nothing else in the repo depends on the private registry.

The CI job (.github/workflows/e2e.yml) starts Postgres and next dev with fake login, warms up the tested routes, and runs the tests. It is not a required check and is skipped for fork PRs. The package token is used only in the e2e/ install step.

Verification

Visual Changes

N/A

Reviewer Notes

  • The legacy app-shell test checked an "Install" sidebar item that no longer exists; the migrated test checks "Usage".
  • The legacy signed-in test signed up a brand-new user (fake-login provisioning and the customer-source survey); the migrated one signs in a pre-seeded user, so it checks only the /get-started routing.

@socket-security

socket-security Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​types/​pg@​8.23.11001007388100
Addednpm/​@​types/​node@​24.13.21001008196100
Addednpm/​globals@​17.13.01001008695100
Addednpm/​pg@​8.23.19910010089100
Addednpm/​prettier@​3.9.4981009799100
Addednpm/​@​playwright/​test@​1.61.110010010099100

View full report

@socket-security

socket-security Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Priority Alert  (click "▶" to expand/collapse) Action
Low priority
Socket upgrade available: npm array-buffer-byte-length

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/array-buffer-byte-length@1.0.2

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/array-buffer-byte-length@1.0.2. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm array-includes

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/array-includes@3.2.0

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/array-includes@3.2.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm array.prototype.findlastindex

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/array.prototype.findlastindex@1.2.6

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/array.prototype.findlastindex@1.2.6. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm array.prototype.flat

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/array.prototype.flat@1.3.3

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/array.prototype.flat@1.3.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm array.prototype.flatmap

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/array.prototype.flatmap@1.3.3

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/array.prototype.flatmap@1.3.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm arraybuffer.prototype.slice

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/arraybuffer.prototype.slice@1.0.4

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/arraybuffer.prototype.slice@1.0.4. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm function.prototype.name

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/function.prototype.name@1.2.0

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/function.prototype.name@1.2.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm functions-have-names

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/functions-have-names@1.2.3

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/functions-have-names@1.2.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm get-symbol-description

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/get-symbol-description@1.1.0

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/get-symbol-description@1.1.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm globalthis

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/globalthis@1.0.4

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/globalthis@1.0.4. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm has-proto

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/has-proto@1.2.0

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/has-proto@1.2.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm internal-slot

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/internal-slot@1.1.0

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/internal-slot@1.1.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-array-buffer

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-array-buffer@3.0.5

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-array-buffer@3.0.5. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-bigint

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-bigint@1.1.0

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-bigint@1.1.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-boolean-object

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-boolean-object@1.2.2

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-boolean-object@1.2.2. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-date-object

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-date-object@1.1.0

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-date-object@1.1.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-map

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-map@2.0.3

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-map@2.0.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-number-object

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-number-object@1.1.1

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-number-object@1.1.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-set

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-set@2.0.3

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-set@2.0.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-shared-array-buffer

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-shared-array-buffer@1.0.4

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-shared-array-buffer@1.0.4. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-string

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-string@1.1.1

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-string@1.1.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-symbol

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-symbol@1.1.1

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-symbol@1.1.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-weakmap

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-weakmap@2.0.2

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-weakmap@2.0.2. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-weakref

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-weakref@1.1.1

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-weakref@1.1.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm is-weakset

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/is-weakset@2.0.4

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/is-weakset@2.0.4. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Socket upgrade available: npm object.entries

cleanup available: Run npx socket optimize

From: e2e/pnpm-lock.yaml → npm/object.entries@1.1.9

ℹ Read more on: This package | This alert | Using Socket CLI to optimize dependencies

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Run `npx socket optimize` in your repository to optimize your dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/object.entries@1.1.9. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
See 19 more rows in the dashboard

View full report

Copilot AI 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.

Copilot review overview

🟡 Changes recommended

The private dependency must be isolated from Actions caches that fork workflows can restore.

Review effort: Balanced
Findings: 1 High severity

Open (1)
What changed in this PR

Introduces an isolated Playwright package for gradual migration of the web app’s end-to-end tests without adding private-registry requirements to the workspace.

Changes:

  • Migrates two legacy specs covering four authentication and accessibility tests.
  • Adds test fixtures, page objects, database seeding, and navigation helpers.
  • Adds a non-required CI workflow with route warm-up and report uploads.
File Description
e2e/​tsconfig.json Configures type checking and import aliases.
e2e/​tests/​testdata/​ui/​auth/​session-test-data.ts Defines authentication endpoints.
e2e/​tests/​testdata/​ui/​auth/​get-started-test-data.ts Defines redirect expectations.
e2e/​tests/​testdata/​ui/​app-shell/​app-shell-test-data.ts Defines shell cases and layout expectations.
e2e/​tests/​support/​core/​seed-data.ts Creates isolated test users.
e2e/​tests/​support/​core/​hydration.ts Adds hydration waits and overlay handling.
e2e/​tests/​support/​core/​db.ts Provides database access for tests.
e2e/​tests/​specs/​ui/​auth/​get-started-dashboard-link.spec.ts Migrates authentication routing tests.
e2e/​tests/​specs/​ui/​app-shell/​app-shell-accessibility.spec.ts Migrates shell accessibility tests.
e2e/​tests/​pages/​ui/​auth/​session-page.ts Implements fake-login authentication.
e2e/​tests/​pages/​ui/​auth/​get-started-page.ts Encapsulates signed-in routing checks.
e2e/​tests/​pages/​ui/​app-shell/​app-shell-page.ts Encapsulates shell accessibility assertions.
e2e/​tests/​pages/​api/​auth/​get-started-api.ts Checks signed-out HTTP redirects.
e2e/​tests/​fixtures/​fixture.ts Registers isolated test fixtures.
e2e/​README.md Documents installation, execution, and CI.
e2e/​pnpm-lock.yaml Locks standalone package dependencies.
e2e/​playwright.config.ts Configures Chromium and failure artifacts.
e2e/​package.json Defines dependencies and test commands.
e2e/​eslint.config.mjs Configures package-specific linting.
e2e/​ci/​warm-up.mjs Warms tested routes before execution.
e2e/​ci/​start-web.mjs Starts the development app for CI.
e2e/​.prettierrc Defines package formatting settings.
e2e/​.npmrc Configures private-registry authentication.
e2e/​.gitignore Excludes dependencies and generated artifacts.
apps/​web/​tests/​e2e/​get-started-dashboard-link.spec.ts Removes the migrated routing spec.
apps/​web/​tests/​e2e/​app-shell-accessibility.spec.ts Removes the migrated accessibility spec.
.prettierignore Excludes the isolated package.
.oxlintrc.json Excludes package-specific linting scope.
.oxfmtrc.json Excludes package-specific formatting scope.
.github/​workflows/​e2e.yml Adds CI setup, execution, and artifacts.
.github/​CODEOWNERS Assigns ownership of the new package.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread .github/workflows/e2e.yml Outdated
@yz-anaconda
yz-anaconda force-pushed the e2e/legacy-tests-on-playwright-utils branch from 103c540 to c86bcc8 Compare October 6, 2026 01:44
@yz-anaconda
yz-anaconda marked this pull request as ready for review October 6, 2026 01:55
Comment thread e2e/tests/support/core/db.ts
Comment thread e2e/tests/testdata/ui/auth/get-started-test-data.ts Outdated
Comment thread e2e/package.json Outdated
@kilo-code-bot

kilo-code-bot Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

The incremental changes since the prior review are robustness and accuracy refinements — stricter error handling in warm-up.mjs and session-page.ts, context-scoped dev-overlay/hydration setup, and DB URL resolution from .env.local with no guessed default — and no new defects were found in the changed lines.

Files Reviewed (14 files)
  • e2e/README.md
  • e2e/ci/start-web.mjs
  • e2e/ci/warm-up.mjs
  • e2e/playwright.config.ts
  • e2e/tests/fixtures/fixture.ts
  • e2e/tests/pages/api/auth/get-started-api.ts
  • e2e/tests/pages/ui/app-shell/app-shell-page.ts
  • e2e/tests/pages/ui/auth/session-page.ts
  • e2e/tests/support/core/db.ts
  • e2e/tests/support/core/hydration.ts
  • e2e/tests/support/core/seed-data.ts
  • e2e/tests/testdata/api/auth/get-started-api-test-data.ts
  • e2e/tests/testdata/ui/auth/get-started-test-data.ts
  • e2e/tests/testdata/ui/auth/session-test-data.ts
Previous Review Summaries (3 snapshots, latest commit bd5c71e)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit bd5c71e)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The force-push removed the incremental base commit, so this is a full review of the current HEAD: the isolated e2e/ package, its CI workflow, and the migrated specs are consistent with the app's fake-login provider, seed schema, and route expectations, and no new issues were found in the changed lines.

Files Reviewed (31 files)
  • .github/CODEOWNERS
  • .github/workflows/e2e.yml
  • .oxfmtrc.json
  • .oxlintrc.json
  • .prettierignore
  • apps/web/tests/e2e/app-shell-accessibility.spec.ts (removed)
  • apps/web/tests/e2e/get-started-dashboard-link.spec.ts (removed)
  • e2e/.gitignore
  • e2e/.npmrc
  • e2e/.prettierrc
  • e2e/README.md
  • e2e/ci/start-web.mjs
  • e2e/ci/warm-up.mjs
  • e2e/eslint.config.mjs
  • e2e/package.json
  • e2e/playwright.config.ts
  • e2e/pnpm-lock.yaml
  • e2e/tests/fixtures/fixture.ts
  • e2e/tests/pages/api/auth/get-started-api.ts
  • e2e/tests/pages/ui/app-shell/app-shell-page.ts
  • e2e/tests/pages/ui/auth/get-started-page.ts
  • e2e/tests/pages/ui/auth/session-page.ts
  • e2e/tests/specs/ui/app-shell/app-shell-accessibility.spec.ts
  • e2e/tests/specs/ui/auth/get-started-dashboard-link.spec.ts
  • e2e/tests/support/core/db.ts
  • e2e/tests/support/core/hydration.ts
  • e2e/tests/support/core/seed-data.ts
  • e2e/tests/testdata/ui/app-shell/app-shell-test-data.ts
  • e2e/tests/testdata/ui/auth/get-started-test-data.ts
  • e2e/tests/testdata/ui/auth/session-test-data.ts
  • e2e/tsconfig.json

Previous review (commit fd0cb0e)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The three prior findings are resolved at HEAD: the E2E pool now has an idle-client 'error' listener, the signed-in destination regex is anchored to the URL origin/path root, and test:smoke succeeds with no matching tests; no new issues were found in the changed lines.

Files Reviewed (3 files)
  • e2e/package.json - clean (--pass-with-no-tests is a valid Playwright 1.61 flag; resolves prior finding)
  • e2e/tests/support/core/db.ts - clean (pool.on('error', ...) added; prior finding resolved, no memory leak - pool is bounded with max: 2 and allowExitOnIdle)
  • e2e/tests/testdata/ui/auth/get-started-test-data.ts - clean (regex now anchored to ^https?://<host>/ and matches only root /profile or /organizations/..., matching the deleted spec's pathname checks)

Previous review (commit c86bcc8)

Status: 3 Issues Found | Recommendation: Address before merge

Executive Summary

One reliability risk (a pool without an error listener in the new DB helper) plus two test-quality regressions from the migration; the CI workflow's private-package cache isolation is correctly fixed.

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 2
Issue Details (click to expand)

WARNING

File Line Issue
e2e/tests/support/core/db.ts 7 Module-level pg.Pool has no 'error' listener; an idle-client error crashes the Playwright worker. Repo convention requires one for test pools.

SUGGESTION

File Line Issue
e2e/tests/testdata/ui/auth/get-started-test-data.ts 9 signedInDestination regex is unanchored and matches nested paths like /settings/profile, weakening the assertion versus the deleted spec.
e2e/package.json 10 test:smoke runs -g '@smoke' but no test carries @smoke; the documented command exits non-zero with "No tests found".
Files Reviewed (31 files)
  • .github/CODEOWNERS - clean (no other CODEOWNERS shadowed; valid syntax)
  • .github/workflows/e2e.yml - clean (private-package store kept uncached; token scoped to install step; fork PRs skipped; persist-credentials: false; prior Copilot finding resolved)
  • .oxfmtrc.json, .oxlintrc.json, .prettierignore - clean (consistent e2e/** exclusions)
  • apps/web/tests/e2e/app-shell-accessibility.spec.ts (deleted) - clean (migrated; assertions preserved)
  • apps/web/tests/e2e/get-started-dashboard-link.spec.ts (deleted) - clean (migrated)
  • e2e/.gitignore, e2e/.npmrc, e2e/.prettierrc, e2e/README.md, e2e/eslint.config.mjs, e2e/tsconfig.json - clean
  • e2e/ci/start-web.mjs, e2e/ci/warm-up.mjs - clean
  • e2e/package.json - 1 issue
  • e2e/playwright.config.ts - clean
  • e2e/pnpm-lock.yaml - generated; no secrets
  • e2e/tests/fixtures/fixture.ts - clean
  • e2e/tests/pages/api/auth/get-started-api.ts - clean
  • e2e/tests/pages/ui/app-shell/app-shell-page.ts - clean (all legacy assertions preserved)
  • e2e/tests/pages/ui/auth/get-started-page.ts, e2e/tests/pages/ui/auth/session-page.ts - clean
  • e2e/tests/specs/ui/app-shell/app-shell-accessibility.spec.ts, e2e/tests/specs/ui/auth/get-started-dashboard-link.spec.ts - clean
  • e2e/tests/support/core/db.ts - 1 issue
  • e2e/tests/support/core/hydration.ts, e2e/tests/support/core/seed-data.ts - clean (@@fake@@ matches hosted_domain_specials.fake_devonly)
  • e2e/tests/testdata/ui/app-shell/app-shell-test-data.ts - clean
  • e2e/tests/testdata/ui/auth/get-started-test-data.ts - 1 issue
  • e2e/tests/testdata/ui/auth/session-test-data.ts - clean

No memory leaks identified in the changed code (pool is bounded with allowExitOnIdle; per-page hydration patch is scoped to the page lifecycle).

Fix these issues in Kilo Cloud


Reviewed by deepseek-v4.1-flash · Input: 63K · Output: 11.5K · Cached: 585.2K

Review guidance: REVIEW.md from base branch main

@yz-anaconda
yz-anaconda force-pushed the e2e/legacy-tests-on-playwright-utils branch from c86bcc8 to fd0cb0e Compare October 6, 2026 02:09
};

/** A signed-in visitor lands on `/profile` or on an `/organizations/...` page. */
export const signedInDestination = /^https?:\/\/[^/]+\/(profile([?#]|$)|organizations\/)/;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I will change the name to something like signedDestinationRegExp or something similar, so from outside you can know straight away the expression.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Thanks, fixed: renamed to signedInDestinationRegExp.

Comment thread e2e/package.json
"globals": "17.13.0",
"pg": "8.23.1",
"prettier": "3.9.4",
"typescript": "5.9.3"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Small suggestion: typescript, prettier, eslint, and @types/node are already regular dependencies of @anaconda/playwright-utils at these same versions, so we may not need to add them separately here.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

That holds for npm, which hoists them. This package uses pnpm: on a clean --frozen-lockfile install without direct entries, validate/lint/format fail with tsc/eslint/prettier: command not found, and tsc can't resolve @types/node. So they stay, pinned to the same versions.

… CI job

- e2e/: isolated pnpm package (outside the workspace) on @anaconda/playwright-utils; the private
  package is read with a token passed as NODE_AUTH_TOKEN, never stored in the repo
- migrate the get-started and app-shell accessibility specs (4 tests) and remove their legacy copies;
  the other legacy specs keep running from apps/web/tests/e2e
- .github/workflows/e2e.yml: Postgres, migrations, next dev with fake login, route warm-up, tests;
  not a required check, fork PRs skipped, token scoped to the install step
- CODEOWNERS for e2e/; root oxlint/oxfmt/prettier skip e2e/
@yz-anaconda
yz-anaconda force-pushed the e2e/legacy-tests-on-playwright-utils branch from fd0cb0e to bd5c71e Compare October 6, 2026 18:01
Comment thread e2e/ci/warm-up.mjs Outdated
};

async function signIn() {
const { csrfToken } = await (await request('/api/auth/csrf', ROUTE_TIMEOUT_MS)).json();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@yz-anaconda

No status/shape checks here — a failed csrf/login/session call won't throw, so the outer catch may never fires and the script silently warms /admin* while signed out.

const csrfRes = await request('/api/auth/csrf', ROUTE_TIMEOUT_MS);
const { csrfToken } = await csrfRes.json();
if (!csrfToken) throw new Error(`csrf fetch failed: ${csrfRes.status}`);

same check might be needed for session.user after the fake-login call

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Fixed: a failed CSRF or session check now throws and shows up as a ::warning:: in the Actions UI. Warm-up still continues signed out, but no longer silently.

await expect.poll(() => isHydrated(page), { timeout: STANDARD_TIMEOUT }).toBe(true);
} catch {
// See above.
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@yz-anaconda If the hydration fails can we fail it here rather than in test which would hard to trace back

import { STANDARD_TIMEOUT, logger } from '@anaconda/playwright-utils';

async function waitForHydration(page: Page): Promise<void> {
  try {
    await expect.poll(() => isHydrated(page), { timeout: STANDARD_TIMEOUT }).toBe(true);
  } catch {
    logger.warn(`Page did not hydrate within ${STANDARD_TIMEOUT}ms: ${page.url()}`);
  }
}

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Done as in your snippet: it logs a warning with the page URL. I kept it a warning, not a failure, so an external redirect doesn't fail a valid navigation.

Comment thread e2e/tests/support/core/hydration.ts Outdated
await page.addStyleTag({ content: 'nextjs-portal { pointer-events: none !important; }' });
} catch {
// The page navigated away before the style could attach.
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@yz-anaconda
can we try this simplification with one init script instead of re-adding the style after every goto/reload

export function installHydrationWait(page: Page): void {
  // Runs at the start of every document, so it survives navigations that bypass goto/reload.
  void page.addInitScript(() => {
    const sheet = new CSSStyleSheet();
    sheet.replaceSync('nextjs-portal { pointer-events: none !important; }');
    document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
  });

  const originalGoto = page.goto.bind(page);
  page.goto = async (...args: Parameters<Page['goto']>) => {
    const response = await originalGoto(...args);
    await waitForHydration(page);
    return response;
  };

  const originalReload = page.reload.bind(page);
  page.reload = async (...args: Parameters<Page['reload']>) => {
    const response = await originalReload(...args);
    await waitForHydration(page);
    return response;
  };
}

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Agreed, done: one init script on the context (see the fixture thread).

Comment thread e2e/tests/fixtures/fixture.ts Outdated
// Every `goto`/`reload` waits for React hydration (see `tests/support/core/hydration.ts`).
page: async ({ page }, use) => {
installHydrationWait(page);
await use(page);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@yz-anaconda

The overlay fix and hydration wait only cover the fixture's page and only goto/reload. Full navigations (form submits, redirects), new tabs and popups get neither. Suggest moving setup to the context so every tab and navigation is covered:

fixture.ts: replace the page: override with:

context: async ({ context }, use) => {
  // Runs at the start of every document in every tab, so it survives navigations that bypass goto/reload.
  await context.addInitScript(() => {
    const sheet = new CSSStyleSheet();
    sheet.replaceSync('nextjs-portal { pointer-events: none !important; }');
    document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
  });
  context.on('page', installHydrationWait); // fires for the default page, newPage() and popups
  await use(context);
},

hydration.ts: drop neutralizeNextDevOverlay, export waitForHydration, and log instead of failing silently:

export async function waitForHydration(page: Page): Promise<void> {
  try {
    await expect.poll(() => isHydrated(page), { timeout: STANDARD_TIMEOUT }).toBe(true);
  } catch {
    logger.warn(`Page did not hydrate within ${STANDARD_TIMEOUT}ms: ${page.url()}`);
  }
}

export function installHydrationWait(page: Page): void {
  const originalGoto = page.goto.bind(page);
  page.goto = async (...args: Parameters<Page['goto']>) => {
    const response = await originalGoto(...args);
    await waitForHydration(page);
    return response;
  };

  const originalReload = page.reload.bind(page);
  page.reload = async (...args: Parameters<Page['reload']>) => {
    const response = await originalReload(...args);
    await waitForHydration(page);
    return response;
  };
}

A popup's first load doesn't go through goto, so wait explicitly there:

const popup = await page.waitForEvent('popup');
await waitForHydration(popup);

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Good point, done: the context fixture covers the default page, new tabs and popups, and the overlay fix now applies to every document, redirects and form submits included. The hydration wait still covers goto/reload only, and waitForHydration stays private until a test opens a popup.

/**
* Creates the rows a test needs directly in the database, so every test owns its data and never
* depends on shared dev records. Ids and emails are unique per call.
*/

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@yz-anaconda are we cleaning the fake credentials after every test??

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

No, on purpose: each test gets a unique user and a fresh browser context, and the CI database is thrown away after the run. I've added a short note about this to the SeedData JSDoc.

Comment thread e2e/tests/support/core/db.ts Outdated
* independent of the monorepo's Drizzle schema; column names mirror packages/db/src/schema.ts.
*/
const pool = new Pool({
connectionString: process.env.POSTGRES_URL ?? 'postgres://postgres:postgres@localhost:5432/postgres',

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@yz-anaconda This may fall silently to localhost URL, this may seed a different DB than the app reads

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Right, fixed: no default anymore. The URL comes from POSTGRES_URL or the app's .env.local, otherwise the tests fail with a clear error.

- seed the database the app reads: POSTGRES_URL or the root .env.local, no localhost default;
  base URL follows the worktree port offset; DB connect timeout
- overlay fix as one context init script (popups included); hydration wait on every tab via
  context.on('page'); log a warning when a page doesn't hydrate
- warm-up and sign-in check every auth response; errors carry statuses, never the session
- exact path match in the app shell checks; visible-then-measure sidebar boxes; Location check
- start-web reads apps/web/.env.test.local; README, comments and testdata docs updated

This branch has not been deployed

No deployments
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.

5 participants