Skip to content

Expanding widget convex wrapper hooks#18

Merged
djanogly merged 2 commits intodevfrom
openspec/expand-widget-local-convex-wrapper-hooks
Mar 11, 2026
Merged

Expanding widget convex wrapper hooks#18
djanogly merged 2 commits intodevfrom
openspec/expand-widget-local-convex-wrapper-hooks

Conversation

@djanogly
Copy link
Copy Markdown
Contributor

This pull request refactors how Convex queries and mutations are used throughout the widget application. The main goal is to replace direct usage of convex/react and convex/server hooks and helpers with custom hooks and references from ./lib/convex/hooks, improving consistency and maintainability across the codebase.

The most important changes are:

Adoption of Custom Convex Hooks and References

  • Replaced all imports and usages of useQuery, useMutation, and makeFunctionReference from convex/react and convex/server with custom hooks (useWidgetQuery, useWidgetMutation) and reference creators (widgetQueryRef, widgetMutationRef) from ./lib/convex/hooks in all overlay and widget components. [1] [2] [3] [4] [5] [6] [7]

Component-Level Refactoring

  • Updated all query and mutation reference declarations in files such as AuthoringOverlay.tsx, ChecklistOverlay.tsx, CsatPrompt.tsx, OutboundOverlay.tsx, SurveyOverlay.tsx, TooltipAuthoringOverlay.tsx, and Widget.tsx to use the new widgetQueryRef and widgetMutationRef helpers. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

  • Updated all usages of query and mutation hooks within these components to use the new useWidgetQuery and useWidgetMutation hooks instead of the original Convex hooks. [1] [2] [3] [4] [5] [6]

Code Consistency and Clean-up

  • Removed now-unnecessary imports from convex/react and convex/server in all affected files, ensuring only the new custom hooks and helpers are used. [1] [2] [3] [4] [5] [6] [7]

This refactor centralizes and standardizes how Convex queries and mutations are handled in the widget, making the codebase easier to maintain and extend.

@djanogly djanogly requested a review from Copilot March 11, 2026 14:08
@vercel
Copy link
Copy Markdown

vercel Bot commented Mar 11, 2026

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

Project Deployment Actions Updated (UTC)
opencom-landing Ready Ready Preview, Comment Mar 11, 2026 2:20pm
opencom-web Ready Ready Preview, Comment Mar 11, 2026 2:20pm

@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Expand widget local Convex wrapper hooks across all runtime modules

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Migrate all widget hooks and components to use custom Convex wrapper hooks
• Replace direct convex/react imports with useWidgetQuery and useWidgetMutation
• Replace makeFunctionReference calls with widgetQueryRef and widgetMutationRef
• Harden adapter boundary by removing unsafe type casts and using proper Convex types
• Expand test hardening guards to enforce wrapper usage across all widget runtime files
Diagram
flowchart LR
  A["Direct convex/react imports"] -->|"Migrate to"| B["useWidgetQuery/Mutation hooks"]
  C["makeFunctionReference calls"] -->|"Replace with"| D["widgetQueryRef/Mutation helpers"]
  E["Unsafe type casts"] -->|"Harden to"| F["Typed Convex wrappers"]
  G["Limited test coverage"] -->|"Expand to"| H["Comprehensive hardening guards"]
  B --> I["Centralized adapter boundary"]
  D --> I
  F --> I
  H --> I
Loading

Grey Divider

File Changes

1. apps/widget/src/lib/convex/hooks.ts ✨ Enhancement +23/-17

Harden adapter with proper Convex types

apps/widget/src/lib/convex/hooks.ts


2. apps/widget/src/hooks/useEventTracking.ts ✨ Enhancement +5/-8

Migrate to widget-local Convex wrapper hooks

apps/widget/src/hooks/useEventTracking.ts


3. apps/widget/src/hooks/useNavigationTracking.ts ✨ Enhancement +3/-5

Replace direct imports with wrapper hooks

apps/widget/src/hooks/useNavigationTracking.ts


View more (16)
4. apps/widget/src/hooks/useWidgetConversationFlow.ts ✨ Enhancement +5/-8

Adopt widget-local Convex wrapper pattern

apps/widget/src/hooks/useWidgetConversationFlow.ts


5. apps/widget/src/hooks/useWidgetSession.ts ✨ Enhancement +9/-14

Migrate session mutations to wrapper hooks

apps/widget/src/hooks/useWidgetSession.ts


6. apps/widget/src/hooks/useWidgetSettings.ts ✨ Enhancement +3/-5

Replace direct query imports with wrapper

apps/widget/src/hooks/useWidgetSettings.ts


7. apps/widget/src/hooks/useWidgetShellValidation.ts ✨ Enhancement +5/-8

Migrate validation queries to wrapper hooks

apps/widget/src/hooks/useWidgetShellValidation.ts


8. apps/widget/src/hooks/useWidgetTicketFlow.ts ✨ Enhancement +16/-17

Adopt widget-local Convex wrapper pattern

apps/widget/src/hooks/useWidgetTicketFlow.ts


9. apps/widget/src/tourOverlay/useTourOverlaySession.ts ✨ Enhancement +3/-5

Replace direct mutation imports with wrapper

apps/widget/src/tourOverlay/useTourOverlaySession.ts


10. apps/widget/src/AuthoringOverlay.tsx ✨ Enhancement +14/-14

Migrate authoring overlay to wrapper hooks

apps/widget/src/AuthoringOverlay.tsx


11. apps/widget/src/ChecklistOverlay.tsx ✨ Enhancement +12/-11

Replace direct Convex imports with wrappers

apps/widget/src/ChecklistOverlay.tsx


12. apps/widget/src/CsatPrompt.tsx ✨ Enhancement +3/-5

Adopt widget-local Convex wrapper pattern

apps/widget/src/CsatPrompt.tsx


13. apps/widget/src/OutboundOverlay.tsx ✨ Enhancement +10/-8

Migrate outbound overlay to wrapper hooks

apps/widget/src/OutboundOverlay.tsx


14. apps/widget/src/SurveyOverlay.tsx ✨ Enhancement +5/-8

Replace direct imports with wrapper hooks

apps/widget/src/SurveyOverlay.tsx


15. apps/widget/src/TooltipAuthoringOverlay.tsx ✨ Enhancement +15/-11

Migrate tooltip authoring to wrapper hooks

apps/widget/src/TooltipAuthoringOverlay.tsx


16. apps/widget/src/Widget.tsx ✨ Enhancement +31/-47

Migrate main widget to wrapper hooks

apps/widget/src/Widget.tsx


17. apps/widget/src/components/Home.tsx ✨ Enhancement +8/-12

Replace direct Convex imports with wrappers

apps/widget/src/components/Home.tsx


18. apps/widget/src/test/refHardeningGuard.test.ts 🧪 Tests +89/-16

Expand hardening guards for all runtime files

apps/widget/src/test/refHardeningGuard.test.ts


19. openspec/changes/expand-widget-local-convex-wrapper-hooks/tasks.md 📝 Documentation +12/-12

Mark all implementation tasks as complete

openspec/changes/expand-widget-local-convex-wrapper-hooks/tasks.md


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented Mar 11, 2026

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. Guard misses generic calls🐞 Bug ⛯ Reliability
Description
apps/widget/src/test/refHardeningGuard.test.ts attempts to flag direct makeFunctionReference usage,
but its regex only matches makeFunctionReference( and will not match the typical generic form
makeFunctionReference(...), so new direct ref factories can be added outside the approved boundary
without failing the guard.
Code

apps/widget/src/test/refHardeningGuard.test.ts[R34-36]

+const DIRECT_CONVEX_IMPORT_PATTERN = /from "convex\/react"/;
+const DIRECT_REF_FACTORY_PATTERN = /makeFunctionReference\(/;
+
Evidence
The guard only tests for the literal substring makeFunctionReference(, but the adapter (and prior
codebase usage) calls makeFunctionReference with type parameters, i.e. makeFunctionReference(...),
which is not matched. Since the scan also does not check for from "convex/server" imports, a
non-approved file can import from convex/server and use the generic form without being detected.

apps/widget/src/test/refHardeningGuard.test.ts[34-36]
apps/widget/src/test/refHardeningGuard.test.ts[58-76]
apps/widget/src/lib/convex/hooks.ts[34-50]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`refHardeningGuard.test.ts` is intended to prevent widget modules from directly calling `makeFunctionReference`, but the current regex only matches the non-generic form `makeFunctionReference(`. The common TypeScript usage is `makeFunctionReference<...>(...)`, which bypasses the guard.
## Issue Context
The guard currently scans all `apps/widget/src/**/*.ts(x)` files (excluding an allowlist) and flags:
- `from "convex/react"`
- `makeFunctionReference(`
Because generic calls don’t match, a non-allowlisted file can import from `convex/server` and call `makeFunctionReference<...>(...)` without being detected.
## Fix Focus Areas
- apps/widget/src/test/refHardeningGuard.test.ts[34-36]
- apps/widget/src/test/refHardeningGuard.test.ts[58-76]
## Suggested change
Replace the pattern with something that matches generic calls too, e.g.:
- `const DIRECT_REF_FACTORY_PATTERN = /\bmakeFunctionReference\s*(?:<[^>]*>)?\s*\(/;`
(Optionally consider expanding the guard to also flag `from "convex/server"` imports outside the approved boundary if that aligns with the intent.)

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

Comment thread apps/widget/src/test/refHardeningGuard.test.ts
@qodo-code-review
Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: e2e

Failed stage: Playwright E2E suite [❌]

Failed test name: Web Admin - AI Agent Settings › should display AI Agent section on settings page

Failure summary:

The GitHub Action failed during the Playwright E2E run because the Playwright Chromium browser
executable was not available on the runner.
- Multiple tests (e.g.,
apps/web/e2e/ai-agent-settings.spec.ts:59:7) failed with Error: browserType.launch: Executable
doesn't exist at
/home/runner/.cache/ms-playwright/chromium_headless_shell-1200/.../chrome-headless-shell.
- The log
indicates Playwright was installed/updated but browsers were not downloaded; it suggests running
pnpm exec playwright install.
- As a result, Playwright reported 138 failed and the E2E reliability
gate failed: unexpected exceeded threshold: observed=138 budget=0 allowance=0 threshold=0, causing
the job to exit with code 1.

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

216:  + @vitest/ui 4.0.17
217:  + convex 1.32.0
218:  + eslint 8.57.1
219:  + eslint-plugin-react 7.37.5
220:  + eslint-plugin-react-hooks 5.2.0
221:  + prettier 3.8.0
222:  + tsx 4.21.0
223:  + typescript 5.9.3
224:  + vitest 4.0.17
225:  + wrangler 4.66.0
226:  Done in 9.2s
227:  ##[group]Run missing=0
228:  �[36;1mmissing=0�[0m
229:  �[36;1mfor name in E2E_BACKEND_URL TEST_ADMIN_SECRET; do�[0m
230:  �[36;1m  if [ -z "${!name}" ]; then�[0m
231:  �[36;1m    echo "::error::Missing required secret: $name"�[0m
232:  �[36;1m    missing=1�[0m
...

263:  TEST_RUN_ID: ci-22956727603-1
264:  PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
265:  ##[endgroup]
266:  > opencom@0.1.0 web:test:e2e /home/runner/work/opencom/opencom
267:  > set -a; source packages/convex/.env.local; set +a; pnpm playwright test
268:  sh: 1: source: not found
269:  [WebServer] 
270:  [WebServer]  �[33m�[1m⚠�[22m�[39m The Next.js plugin was not detected in your ESLint configuration. See https://nextjs.org/docs/app/api-reference/config/eslint#migrating-existing-config
271:  Running 190 tests using 4 workers
272:  ✘    2 [chromium] › apps/web/e2e/audit-logs.spec.ts:107:7 › Web Admin - Audit Logs › should navigate to audit logs page (2ms)
273:  -    5 [chromium] › apps/web/e2e/audit-logs.spec.ts:114:7 › Web Admin - Audit Logs › should display seeded audit entries and show detail metadata
274:  -    6 [chromium] › apps/web/e2e/audit-logs.spec.ts:143:7 › Web Admin - Audit Logs › should filter audit logs by resource type
275:  -    7 [chromium] › apps/web/e2e/audit-logs.spec.ts:176:7 › Web Admin - Audit Logs › should trigger filtered export
276:  ✘    1 [chromium] › apps/web/e2e/ai-agent-settings.spec.ts:59:7 › Web Admin - AI Agent Settings › should display AI Agent section on settings page (3ms)
277:  ✘    3 [chromium] › apps/web/e2e/carousels.spec.ts:87:7 › Web Admin - Carousel Management › runs deterministic activate/pause/duplicate/delete lifecycle (1ms)
278:  -    8 [chromium] › apps/web/e2e/carousels.spec.ts:137:7 › Web Admin - Carousel Management › surfaces editor validation errors for CTA URLs and deep links
279:  ✘    4 [chromium] › apps/web/e2e/ai-agent.spec.ts:123:7 › Inbox AI deterministic workflow › shows AI-handled review metadata and deep-links to the source message (1ms)
280:  -    9 [chromium] › apps/web/e2e/ai-agent.spec.ts:170:7 › Inbox AI deterministic workflow › filters handoff conversations and shows handoff reason consistency
281:  ✘   10 [chromium] › apps/web/e2e/audit-logs.spec.ts:107:7 › Web Admin - Audit Logs › should navigate to audit logs page (retry #1) (3ms)
282:  -   14 [chromium] › apps/web/e2e/audit-logs.spec.ts:114:7 › Web Admin - Audit Logs › should display seeded audit entries and show detail metadata (retry #1)
283:  -   15 [chromium] › apps/web/e2e/audit-logs.spec.ts:143:7 › Web Admin - Audit Logs › should filter audit logs by resource type (retry #1)
284:  -   16 [chromium] › apps/web/e2e/audit-logs.spec.ts:176:7 › Web Admin - Audit Logs › should trigger filtered export (retry #1)
285:  ✘   12 [chromium] › apps/web/e2e/ai-agent-settings.spec.ts:59:7 › Web Admin - AI Agent Settings › should display AI Agent section on settings page (retry #1) (2ms)
286:  ✘   11 [chromium] › apps/web/e2e/ai-agent.spec.ts:123:7 › Inbox AI deterministic workflow › shows AI-handled review metadata and deep-links to the source message (retry #1) (1ms)
287:  -   17 [chromium] › apps/web/e2e/ai-agent.spec.ts:170:7 › Inbox AI deterministic workflow › filters handoff conversations and shows handoff reason consistency (retry #1)
288:  ✘   13 [chromium] › apps/web/e2e/carousels.spec.ts:87:7 › Web Admin - Carousel Management › runs deterministic activate/pause/duplicate/delete lifecycle (retry #1) (1ms)
289:  -   18 [chromium] › apps/web/e2e/carousels.spec.ts:137:7 › Web Admin - Carousel Management › surfaces editor validation errors for CTA URLs and deep links (retry #1)
290:  ✘   19 [chromium] › apps/web/e2e/ai-agent-settings.spec.ts:59:7 › Web Admin - AI Agent Settings › should display AI Agent section on settings page (retry #2) (2ms)
291:  ✘   21 [chromium] › apps/web/e2e/audit-logs.spec.ts:107:7 › Web Admin - Audit Logs › should navigate to audit logs page (retry #2) (5ms)
292:  -   23 [chromium] › apps/web/e2e/audit-logs.spec.ts:114:7 › Web Admin - Audit Logs › should display seeded audit entries and show detail metadata (retry #2)
293:  -   24 [chromium] › apps/web/e2e/audit-logs.spec.ts:143:7 › Web Admin - Audit Logs › should filter audit logs by resource type (retry #2)
294:  -   25 [chromium] › apps/web/e2e/audit-logs.spec.ts:176:7 › Web Admin - Audit Logs › should trigger filtered export (retry #2)
295:  ✘   20 [chromium] › apps/web/e2e/ai-agent.spec.ts:123:7 › Inbox AI deterministic workflow › shows AI-handled review metadata and deep-links to the source message (retry #2) (1ms)
296:  ✘   22 [chromium] › apps/web/e2e/carousels.spec.ts:87:7 › Web Admin - Carousel Management › runs deterministic activate/pause/duplicate/delete lifecycle (retry #2) (1ms)
297:  -   26 [chromium] › apps/web/e2e/carousels.spec.ts:137:7 › Web Admin - Carousel Management › surfaces editor validation errors for CTA URLs and deep links (retry #2)
298:  -   27 [chromium] › apps/web/e2e/ai-agent.spec.ts:170:7 › Inbox AI deterministic workflow › filters handoff conversations and shows handoff reason consistency (retry #2)
...

833:  ✘  562 [chromium] › apps/web/e2e/outbound.spec.ts:617:7 › Series Builder › should gate activation with readiness blockers until valid (1ms)
834:  ✘  563 [chromium] › apps/web/e2e/outbound.spec.ts:617:7 › Series Builder › should gate activation with readiness blockers until valid (retry #1) (1ms)
835:  ✘  564 [chromium] › apps/web/e2e/outbound.spec.ts:617:7 › Series Builder › should gate activation with readiness blockers until valid (retry #2) (1ms)
836:  ✘  565 [chromium] › apps/web/e2e/outbound.spec.ts:635:7 › Series Builder › should support connection authoring with explicit default branch labels (1ms)
837:  ✘  566 [chromium] › apps/web/e2e/outbound.spec.ts:635:7 › Series Builder › should support connection authoring with explicit default branch labels (retry #1) (2ms)
838:  ✘  567 [chromium] › apps/web/e2e/outbound.spec.ts:635:7 › Series Builder › should support connection authoring with explicit default branch labels (retry #2) (1ms)
839:  ✘  568 [chromium] › apps/web/e2e/outbound.spec.ts:678:7 › Series Builder › should validate global rule editors before save (1ms)
840:  ✘  569 [chromium] › apps/web/e2e/outbound.spec.ts:678:7 › Series Builder › should validate global rule editors before save (retry #1) (1ms)
841:  ✘  570 [chromium] › apps/web/e2e/outbound.spec.ts:678:7 › Series Builder › should validate global rule editors before save (retry #2) (2ms)
842:  🧹 Cleaning up E2E test environment...
843:  ℹ️ Shared test state not found; continuing cleanup via test email domain match
844:  🗑️ Deleting test data...
845:  ℹ️ No test data to clean up
846:  🎉 Teardown complete!
847:  1) [chromium] › apps/web/e2e/ai-agent-settings.spec.ts:59:7 › Web Admin - AI Agent Settings › should display AI Agent section on settings page 
848:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
849:  ╔═════════════════════════════════════════════════════════════════════════╗
850:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
851:  ║ Please run the following command to download new browsers:              ║
852:  ║                                                                         ║
853:  ║     pnpm exec playwright install                                        ║
854:  ║                                                                         ║
855:  ║ <3 Playwright Team                                                      ║
856:  ╚═════════════════════════════════════════════════════════════════════════╝
857:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
858:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
859:  ╔═════════════════════════════════════════════════════════════════════════╗
860:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
861:  ║ Please run the following command to download new browsers:              ║
862:  ║                                                                         ║
863:  ║     pnpm exec playwright install                                        ║
864:  ║                                                                         ║
865:  ║ <3 Playwright Team                                                      ║
866:  ╚═════════════════════════════════════════════════════════════════════════╝
867:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
868:  test-results/ai-agent-settings-Web-Admi-a8388-nt-section-on-settings-page-chromium-retry1/trace.zip
869:  Usage:
870:  pnpm exec playwright show-trace test-results/ai-agent-settings-Web-Admi-a8388-nt-section-on-settings-page-chromium-retry1/trace.zip
871:  ────────────────────────────────────────────────────────────────────────────────────────────────
872:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
873:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
874:  ╔═════════════════════════════════════════════════════════════════════════╗
875:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
876:  ║ Please run the following command to download new browsers:              ║
877:  ║                                                                         ║
878:  ║     pnpm exec playwright install                                        ║
879:  ║                                                                         ║
880:  ║ <3 Playwright Team                                                      ║
881:  ╚═════════════════════════════════════════════════════════════════════════╝
882:  2) [chromium] › apps/web/e2e/ai-agent-settings.spec.ts:65:7 › Web Admin - AI Agent Settings › should toggle AI agent enable/disable 
883:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
884:  ╔═════════════════════════════════════════════════════════════════════════╗
885:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
886:  ║ Please run the following command to download new browsers:              ║
887:  ║                                                                         ║
888:  ║     pnpm exec playwright install                                        ║
889:  ║                                                                         ║
890:  ║ <3 Playwright Team                                                      ║
891:  ╚═════════════════════════════════════════════════════════════════════════╝
892:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
893:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
894:  ╔═════════════════════════════════════════════════════════════════════════╗
895:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
896:  ║ Please run the following command to download new browsers:              ║
897:  ║                                                                         ║
898:  ║     pnpm exec playwright install                                        ║
899:  ║                                                                         ║
900:  ║ <3 Playwright Team                                                      ║
901:  ╚═════════════════════════════════════════════════════════════════════════╝
902:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
903:  test-results/ai-agent-settings-Web-Admi-09aa3-gle-AI-agent-enable-disable-chromium-retry1/trace.zip
904:  Usage:
905:  pnpm exec playwright show-trace test-results/ai-agent-settings-Web-Admi-09aa3-gle-AI-agent-enable-disable-chromium-retry1/trace.zip
906:  ────────────────────────────────────────────────────────────────────────────────────────────────
907:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
908:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
909:  ╔═════════════════════════════════════════════════════════════════════════╗
910:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
911:  ║ Please run the following command to download new browsers:              ║
912:  ║                                                                         ║
913:  ║     pnpm exec playwright install                                        ║
914:  ║                                                                         ║
915:  ║ <3 Playwright Team                                                      ║
916:  ╚═════════════════════════════════════════════════════════════════════════╝
917:  3) [chromium] › apps/web/e2e/ai-agent-settings.spec.ts:81:7 › Web Admin - AI Agent Settings › should save AI agent settings 
918:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
919:  ╔═════════════════════════════════════════════════════════════════════════╗
920:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
921:  ║ Please run the following command to download new browsers:              ║
922:  ║                                                                         ║
923:  ║     pnpm exec playwright install                                        ║
924:  ║                                                                         ║
925:  ║ <3 Playwright Team                                                      ║
926:  ╚═════════════════════════════════════════════════════════════════════════╝
927:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
928:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
929:  ╔═════════════════════════════════════════════════════════════════════════╗
930:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
931:  ║ Please run the following command to download new browsers:              ║
932:  ║                                                                         ║
933:  ║     pnpm exec playwright install                                        ║
934:  ║                                                                         ║
935:  ║ <3 Playwright Team                                                      ║
936:  ╚═════════════════════════════════════════════════════════════════════════╝
937:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
938:  test-results/ai-agent-settings-Web-Admi-92d18-ould-save-AI-agent-settings-chromium-retry1/trace.zip
939:  Usage:
940:  pnpm exec playwright show-trace test-results/ai-agent-settings-Web-Admi-92d18-ould-save-AI-agent-settings-chromium-retry1/trace.zip
941:  ────────────────────────────────────────────────────────────────────────────────────────────────
942:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
943:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
944:  ╔═════════════════════════════════════════════════════════════════════════╗
945:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
946:  ║ Please run the following command to download new browsers:              ║
947:  ║                                                                         ║
948:  ║     pnpm exec playwright install                                        ║
949:  ║                                                                         ║
950:  ║ <3 Playwright Team                                                      ║
951:  ╚═════════════════════════════════════════════════════════════════════════╝
952:  4) [chromium] › apps/web/e2e/ai-agent-settings.spec.ts:93:7 › Web Admin - AI Agent Settings › should display AI personality settings when enabled 
953:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
954:  ╔═════════════════════════════════════════════════════════════════════════╗
955:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
956:  ║ Please run the following command to download new browsers:              ║
957:  ║                                                                         ║
958:  ║     pnpm exec playwright install                                        ║
959:  ║                                                                         ║
960:  ║ <3 Playwright Team                                                      ║
961:  ╚═════════════════════════════════════════════════════════════════════════╝
962:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
963:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
964:  ╔═════════════════════════════════════════════════════════════════════════╗
965:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
966:  ║ Please run the following command to download new browsers:              ║
967:  ║                                                                         ║
968:  ║     pnpm exec playwright install                                        ║
969:  ║                                                                         ║
970:  ║ <3 Playwright Team                                                      ║
971:  ╚═════════════════════════════════════════════════════════════════════════╝
972:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
973:  test-results/ai-agent-settings-Web-Admi-544e7-ality-settings-when-enabled-chromium-retry1/trace.zip
974:  Usage:
975:  pnpm exec playwright show-trace test-results/ai-agent-settings-Web-Admi-544e7-ality-settings-when-enabled-chromium-retry1/trace.zip
976:  ────────────────────────────────────────────────────────────────────────────────────────────────
977:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
978:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
979:  ╔═════════════════════════════════════════════════════════════════════════╗
980:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
981:  ║ Please run the following command to download new browsers:              ║
982:  ║                                                                         ║
983:  ║     pnpm exec playwright install                                        ║
984:  ║                                                                         ║
985:  ║ <3 Playwright Team                                                      ║
986:  ╚═════════════════════════════════════════════════════════════════════════╝
987:  5) [chromium] › apps/web/e2e/ai-agent.spec.ts:123:7 › Inbox AI deterministic workflow › shows AI-handled review metadata and deep-links to the source message 
988:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
989:  ╔═════════════════════════════════════════════════════════════════════════╗
990:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
991:  ║ Please run the following command to download new browsers:              ║
992:  ║                                                                         ║
993:  ║     pnpm exec playwright install                                        ║
994:  ║                                                                         ║
995:  ║ <3 Playwright Team                                                      ║
996:  ╚═════════════════════════════════════════════════════════════════════════╝
997:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
998:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
999:  ╔═════════════════════════════════════════════════════════════════════════╗
1000:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1001:  ║ Please run the following command to download new browsers:              ║
1002:  ║                                                                         ║
1003:  ║     pnpm exec playwright install                                        ║
1004:  ║                                                                         ║
1005:  ║ <3 Playwright Team                                                      ║
1006:  ╚═════════════════════════════════════════════════════════════════════════╝
1007:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1008:  test-results/ai-agent-Inbox-AI-determin-3c303-links-to-the-source-message-chromium-retry1/trace.zip
1009:  Usage:
1010:  pnpm exec playwright show-trace test-results/ai-agent-Inbox-AI-determin-3c303-links-to-the-source-message-chromium-retry1/trace.zip
1011:  ────────────────────────────────────────────────────────────────────────────────────────────────
1012:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1013:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1014:  ╔═════════════════════════════════════════════════════════════════════════╗
1015:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1016:  ║ Please run the following command to download new browsers:              ║
1017:  ║                                                                         ║
1018:  ║     pnpm exec playwright install                                        ║
1019:  ║                                                                         ║
1020:  ║ <3 Playwright Team                                                      ║
1021:  ╚═════════════════════════════════════════════════════════════════════════╝
1022:  6) [chromium] › apps/web/e2e/audit-logs.spec.ts:107:7 › Web Admin - Audit Logs › should navigate to audit logs page 
1023:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1024:  ╔═════════════════════════════════════════════════════════════════════════╗
1025:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1026:  ║ Please run the following command to download new browsers:              ║
1027:  ║                                                                         ║
1028:  ║     pnpm exec playwright install                                        ║
1029:  ║                                                                         ║
1030:  ║ <3 Playwright Team                                                      ║
1031:  ╚═════════════════════════════════════════════════════════════════════════╝
1032:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1033:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1034:  ╔═════════════════════════════════════════════════════════════════════════╗
1035:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1036:  ║ Please run the following command to download new browsers:              ║
1037:  ║                                                                         ║
1038:  ║     pnpm exec playwright install                                        ║
1039:  ║                                                                         ║
1040:  ║ <3 Playwright Team                                                      ║
1041:  ╚═════════════════════════════════════════════════════════════════════════╝
1042:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1043:  test-results/audit-logs-Web-Admin---Aud-bd280-navigate-to-audit-logs-page-chromium-retry1/trace.zip
1044:  Usage:
1045:  pnpm exec playwright show-trace test-results/audit-logs-Web-Admin---Aud-bd280-navigate-to-audit-logs-page-chromium-retry1/trace.zip
1046:  ────────────────────────────────────────────────────────────────────────────────────────────────
1047:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1048:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1049:  ╔═════════════════════════════════════════════════════════════════════════╗
1050:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1051:  ║ Please run the following command to download new browsers:              ║
1052:  ║                                                                         ║
1053:  ║     pnpm exec playwright install                                        ║
1054:  ║                                                                         ║
1055:  ║ <3 Playwright Team                                                      ║
1056:  ╚═════════════════════════════════════════════════════════════════════════╝
1057:  7) [chromium] › apps/web/e2e/carousels.spec.ts:87:7 › Web Admin - Carousel Management › runs deterministic activate/pause/duplicate/delete lifecycle 
1058:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1059:  ╔═════════════════════════════════════════════════════════════════════════╗
1060:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1061:  ║ Please run the following command to download new browsers:              ║
1062:  ║                                                                         ║
1063:  ║     pnpm exec playwright install                                        ║
1064:  ║                                                                         ║
1065:  ║ <3 Playwright Team                                                      ║
1066:  ╚═════════════════════════════════════════════════════════════════════════╝
1067:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1068:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1069:  ╔═════════════════════════════════════════════════════════════════════════╗
1070:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1071:  ║ Please run the following command to download new browsers:              ║
1072:  ║                                                                         ║
1073:  ║     pnpm exec playwright install                                        ║
1074:  ║                                                                         ║
1075:  ║ <3 Playwright Team                                                      ║
1076:  ╚═════════════════════════════════════════════════════════════════════════╝
1077:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1078:  test-results/carousels-Web-Admin---Caro-e46cf--duplicate-delete-lifecycle-chromium-retry1/trace.zip
1079:  Usage:
1080:  pnpm exec playwright show-trace test-results/carousels-Web-Admin---Caro-e46cf--duplicate-delete-lifecycle-chromium-retry1/trace.zip
1081:  ────────────────────────────────────────────────────────────────────────────────────────────────
1082:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1083:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1084:  ╔═════════════════════════════════════════════════════════════════════════╗
1085:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1086:  ║ Please run the following command to download new browsers:              ║
1087:  ║                                                                         ║
1088:  ║     pnpm exec playwright install                                        ║
1089:  ║                                                                         ║
1090:  ║ <3 Playwright Team                                                      ║
1091:  ╚═════════════════════════════════════════════════════════════════════════╝
1092:  8) [chromium] › apps/web/e2e/chat.spec.ts:153:9 › Inbox chat responsiveness › chat controls remain usable on desktop viewport 
1093:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1094:  ╔═════════════════════════════════════════════════════════════════════════╗
1095:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1096:  ║ Please run the following command to download new browsers:              ║
1097:  ║                                                                         ║
1098:  ║     pnpm exec playwright install                                        ║
1099:  ║                                                                         ║
1100:  ║ <3 Playwright Team                                                      ║
1101:  ╚═════════════════════════════════════════════════════════════════════════╝
1102:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1103:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1104:  ╔═════════════════════════════════════════════════════════════════════════╗
1105:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1106:  ║ Please run the following command to download new browsers:              ║
1107:  ║                                                                         ║
1108:  ║     pnpm exec playwright install                                        ║
1109:  ║                                                                         ║
1110:  ║ <3 Playwright Team                                                      ║
1111:  ╚═════════════════════════════════════════════════════════════════════════╝
1112:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1113:  test-results/chat-Inbox-chat-responsive-e3ec2--usable-on-desktop-viewport-chromium-retry1/trace.zip
1114:  Usage:
1115:  pnpm exec playwright show-trace test-results/chat-Inbox-chat-responsive-e3ec2--usable-on-desktop-viewport-chromium-retry1/trace.zip
1116:  ────────────────────────────────────────────────────────────────────────────────────────────────
1117:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1118:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1119:  ╔═════════════════════════════════════════════════════════════════════════╗
1120:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1121:  ║ Please run the following command to download new browsers:              ║
1122:  ║                                                                         ║
1123:  ║     pnpm exec playwright install                                        ║
1124:  ║                                                                         ║
1125:  ║ <3 Playwright Team                                                      ║
1126:  ╚═════════════════════════════════════════════════════════════════════════╝
1127:  9) [chromium] › apps/web/e2e/csat.spec.ts:137:9 › CSAT deterministic lifecycle › shows CSAT prompt interaction on desktop viewport 
1128:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1129:  ╔═════════════════════════════════════════════════════════════════════════╗
1130:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1131:  ║ Please run the following command to download new browsers:              ║
1132:  ║                                                                         ║
1133:  ║     pnpm exec playwright install                                        ║
1134:  ║                                                                         ║
1135:  ║ <3 Playwright Team                                                      ║
1136:  ╚═════════════════════════════════════════════════════════════════════════╝
1137:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1138:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1139:  ╔═════════════════════════════════════════════════════════════════════════╗
1140:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1141:  ║ Please run the following command to download new browsers:              ║
1142:  ║                                                                         ║
1143:  ║     pnpm exec playwright install                                        ║
1144:  ║                                                                         ║
1145:  ║ <3 Playwright Team                                                      ║
1146:  ╚═════════════════════════════════════════════════════════════════════════╝
1147:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1148:  test-results/csat-CSAT-deterministic-li-f6c78-raction-on-desktop-viewport-chromium-retry1/trace.zip
1149:  Usage:
1150:  pnpm exec playwright show-trace test-results/csat-CSAT-deterministic-li-f6c78-raction-on-desktop-viewport-chromium-retry1/trace.zip
1151:  ────────────────────────────────────────────────────────────────────────────────────────────────
1152:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1153:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1154:  ╔═════════════════════════════════════════════════════════════════════════╗
1155:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1156:  ║ Please run the following command to download new browsers:              ║
1157:  ║                                                                         ║
1158:  ║     pnpm exec playwright install                                        ║
1159:  ║                                                                         ║
1160:  ║ <3 Playwright Team                                                      ║
1161:  ╚═════════════════════════════════════════════════════════════════════════╝
1162:  10) [chromium] › apps/web/e2e/help-center-import.spec.ts:22:7 › Help Center Markdown Import › imports docs folder and shows articles in help center 
1163:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1164:  ╔═════════════════════════════════════════════════════════════════════════╗
1165:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1166:  ║ Please run the following command to download new browsers:              ║
1167:  ║                                                                         ║
1168:  ║     pnpm exec playwright install                                        ║
1169:  ║                                                                         ║
1170:  ║ <3 Playwright Team                                                      ║
1171:  ╚═════════════════════════════════════════════════════════════════════════╝
1172:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1173:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1174:  ╔═════════════════════════════════════════════════════════════════════════╗
1175:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1176:  ║ Please run the following command to download new browsers:              ║
1177:  ║                                                                         ║
1178:  ║     pnpm exec playwright install                                        ║
1179:  ║                                                                         ║
1180:  ║ <3 Playwright Team                                                      ║
1181:  ╚═════════════════════════════════════════════════════════════════════════╝
1182:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1183:  test-results/help-center-import-Help-Ce-36ada-ows-articles-in-help-center-chromium-retry1/trace.zip
1184:  Usage:
1185:  pnpm exec playwright show-trace test-results/help-center-import-Help-Ce-36ada-ows-articles-in-help-center-chromium-retry1/trace.zip
1186:  ────────────────────────────────────────────────────────────────────────────────────────────────
1187:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1188:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1189:  ╔═════════════════════════════════════════════════════════════════════════╗
1190:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1191:  ║ Please run the following command to download new browsers:              ║
1192:  ║                                                                         ║
1193:  ║     pnpm exec playwright install                                        ║
1194:  ║                                                                         ║
1195:  ║ <3 Playwright Team                                                      ║
1196:  ╚═════════════════════════════════════════════════════════════════════════╝
1197:  11) [chromium] › apps/web/e2e/home-settings.spec.ts:74:7 › Web Admin - Home Settings › should load home settings section on settings page 
1198:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1199:  ╔═════════════════════════════════════════════════════════════════════════╗
1200:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1201:  ║ Please run the following command to download new browsers:              ║
1202:  ║                                                                         ║
1203:  ║     pnpm exec playwright install                                        ║
1204:  ║                                                                         ║
1205:  ║ <3 Playwright Team                                                      ║
1206:  ╚═════════════════════════════════════════════════════════════════════════╝
1207:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1208:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1209:  ╔═════════════════════════════════════════════════════════════════════════╗
1210:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1211:  ║ Please run the following command to download new browsers:              ║
1212:  ║                                                                         ║
1213:  ║     pnpm exec playwright install                                        ║
1214:  ║                                                                         ║
1215:  ║ <3 Playwright Team                                                      ║
1216:  ╚═════════════════════════════════════════════════════════════════════════╝
1217:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1218:  test-results/home-settings-Web-Admin----e53d4-gs-section-on-settings-page-chromium-retry1/trace.zip
1219:  Usage:
1220:  pnpm exec playwright show-trace test-results/home-settings-Web-Admin----e53d4-gs-section-on-settings-page-chromium-retry1/trace.zip
1221:  ────────────────────────────────────────────────────────────────────────────────────────────────
1222:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1223:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1224:  ╔═════════════════════════════════════════════════════════════════════════╗
1225:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1226:  ║ Please run the following command to download new browsers:              ║
1227:  ║                                                                         ║
1228:  ║     pnpm exec playwright install                                        ║
1229:  ║                                                                         ║
1230:  ║ <3 Playwright Team                                                      ║
1231:  ╚═════════════════════════════════════════════════════════════════════════╝
1232:  12) [chromium] › apps/web/e2e/home-settings.spec.ts:79:7 › Web Admin - Home Settings › should toggle home enabled/disabled 
1233:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1234:  ╔═════════════════════════════════════════════════════════════════════════╗
1235:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1236:  ║ Please run the following command to download new browsers:              ║
1237:  ║                                                                         ║
1238:  ║     pnpm exec playwright install                                        ║
1239:  ║                                                                         ║
1240:  ║ <3 Playwright Team                                                      ║
1241:  ╚═════════════════════════════════════════════════════════════════════════╝
1242:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1243:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1244:  ╔═════════════════════════════════════════════════════════════════════════╗
1245:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1246:  ║ Please run the following command to download new browsers:              ║
1247:  ║                                                                         ║
1248:  ║     pnpm exec playwright install                                        ║
1249:  ║                                                                         ║
1250:  ║ <3 Playwright Team                                                      ║
1251:  ╚═════════════════════════════════════════════════════════════════════════╝
1252:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1253:  test-results/home-settings-Web-Admin----2a5d3-oggle-home-enabled-disabled-chromium-retry1/trace.zip
1254:  Usage:
1255:  pnpm exec playwright show-trace test-results/home-settings-Web-Admin----2a5d3-oggle-home-enabled-disabled-chromium-retry1/trace.zip
1256:  ────────────────────────────────────────────────────────────────────────────────────────────────
1257:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1258:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1259:  ╔═════════════════════════════════════════════════════════════════════════╗
1260:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1261:  ║ Please run the following command to download new browsers:              ║
1262:  ║                                                                         ║
1263:  ║     pnpm exec playwright install                                        ║
1264:  ║                                                                         ║
1265:  ║ <3 Playwright Team                                                      ║
1266:  ╚═════════════════════════════════════════════════════════════════════════╝
1267:  13) [chromium] › apps/web/e2e/home-settings.spec.ts:86:7 › Web Admin - Home Settings › should add a card to home configuration 
1268:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1269:  ╔═════════════════════════════════════════════════════════════════════════╗
1270:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1271:  ║ Please run the following command to download new browsers:              ║
1272:  ║                                                                         ║
1273:  ║     pnpm exec playwright install                                        ║
1274:  ║                                                                         ║
1275:  ║ <3 Playwright Team                                                      ║
1276:  ╚═════════════════════════════════════════════════════════════════════════╝
1277:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1278:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1279:  ╔═════════════════════════════════════════════════════════════════════════╗
1280:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1281:  ║ Please run the following command to download new browsers:              ║
1282:  ║                                                                         ║
1283:  ║     pnpm exec playwright install                                        ║
1284:  ║                                                                         ║
1285:  ║ <3 Playwright Team                                                      ║
1286:  ╚═════════════════════════════════════════════════════════════════════════╝
1287:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1288:  test-results/home-settings-Web-Admin----50ca2--card-to-home-configuration-chromium-retry1/trace.zip
1289:  Usage:
1290:  pnpm exec playwright show-trace test-results/home-settings-Web-Admin----50ca2--card-to-home-configuration-chromium-retry1/trace.zip
1291:  ────────────────────────────────────────────────────────────────────────────────────────────────
1292:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1293:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1294:  ╔═════════════════════════════════════════════════════════════════════════╗
1295:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1296:  ║ Please run the following command to download new browsers:              ║
1297:  ║                                                                         ║
1298:  ║     pnpm exec playwright install                                        ║
1299:  ║                                                                         ║
1300:  ║ <3 Playwright Team                                                      ║
1301:  ╚═════════════════════════════════════════════════════════════════════════╝
1302:  14) [chromium] › apps/web/e2e/home-settings.spec.ts:106:7 › Web Admin - Home Settings › should change card visibility setting 
1303:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1304:  ╔═════════════════════════════════════════════════════════════════════════╗
1305:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1306:  ║ Please run the following command to download new browsers:              ║
1307:  ║                                                                         ║
1308:  ║     pnpm exec playwright install                                        ║
1309:  ║                                                                         ║
1310:  ║ <3 Playwright Team                                                      ║
1311:  ╚═════════════════════════════════════════════════════════════════════════╝
1312:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1313:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1314:  ╔═════════════════════════════════════════════════════════════════════════╗
1315:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1316:  ║ Please run the following command to download new browsers:              ║
1317:  ║                                                                         ║
1318:  ║     pnpm exec playwright install                                        ║
1319:  ║                                                                         ║
1320:  ║ <3 Playwright Team                                                      ║
1321:  ╚═════════════════════════════════════════════════════════════════════════╝
1322:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1323:  test-results/home-settings-Web-Admin----43b05-nge-card-visibility-setting-chromium-retry1/trace.zip
1324:  Usage:
1325:  pnpm exec playwright show-trace test-results/home-settings-Web-Admin----43b05-nge-card-visibility-setting-chromium-retry1/trace.zip
1326:  ────────────────────────────────────────────────────────────────────────────────────────────────
1327:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1328:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1329:  ╔═════════════════════════════════════════════════════════════════════════╗
1330:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1331:  ║ Please run the following command to download new browsers:              ║
1332:  ║                                                                         ║
1333:  ║     pnpm exec playwright install                                        ║
1334:  ║                                                                         ║
1335:  ║ <3 Playwright Team                                                      ║
1336:  ╚═════════════════════════════════════════════════════════════════════════╝
1337:  15) [chromium] › apps/web/e2e/home-settings.spec.ts:123:7 › Web Admin - Home Settings › should save home settings 
1338:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1339:  ╔═════════════════════════════════════════════════════════════════════════╗
1340:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1341:  ║ Please run the following command to download new browsers:              ║
1342:  ║                                                                         ║
1343:  ║     pnpm exec playwright install                                        ║
1344:  ║                                                                         ║
1345:  ║ <3 Playwright Team                                                      ║
1346:  ╚═════════════════════════════════════════════════════════════════════════╝
1347:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1348:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1349:  ╔═════════════════════════════════════════════════════════════════════════╗
1350:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1351:  ║ Please run the following command to download new browsers:              ║
1352:  ║                                                                         ║
1353:  ║     pnpm exec playwright install                                        ║
1354:  ║                                                                         ║
1355:  ║ <3 Playwright Team                                                      ║
1356:  ╚═════════════════════════════════════════════════════════════════════════╝
1357:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1358:  test-results/home-settings-Web-Admin----ee8d0-s-should-save-home-settings-chromium-retry1/trace.zip
1359:  Usage:
1360:  pnpm exec playwright show-trace test-results/home-settings-Web-Admin----ee8d0-s-should-save-home-settings-chromium-retry1/trace.zip
1361:  ────────────────────────────────────────────────────────────────────────────────────────────────
1362:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1363:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1364:  ╔═════════════════════════════════════════════════════════════════════════╗
1365:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1366:  ║ Please run the following command to download new browsers:              ║
1367:  ║                                                                         ║
1368:  ║     pnpm exec playwright install                                        ║
1369:  ║                                                                         ║
1370:  ║ <3 Playwright Team                                                      ║
1371:  ╚═════════════════════════════════════════════════════════════════════════╝
1372:  16) [chromium] › apps/web/e2e/home-settings.spec.ts:139:7 › Web Admin - Home Settings › should show home preview when cards are added 
1373:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1374:  ╔═════════════════════════════════════════════════════════════════════════╗
1375:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1376:  ║ Please run the following command to download new browsers:              ║
1377:  ║                                                                         ║
1378:  ║     pnpm exec playwright install                                        ║
1379:  ║                                                                         ║
1380:  ║ <3 Playwright Team                                                      ║
1381:  ╚═════════════════════════════════════════════════════════════════════════╝
1382:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1383:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1384:  ╔═════════════════════════════════════════════════════════════════════════╗
1385:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1386:  ║ Please run the following command to download new browsers:              ║
1387:  ║                                                                         ║
1388:  ║     pnpm exec playwright install                                        ║
1389:  ║                                                                         ║
1390:  ║ <3 Playwright Team                                                      ║
1391:  ╚═════════════════════════════════════════════════════════════════════════╝
1392:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1393:  test-results/home-settings-Web-Admin----e0e23-review-when-cards-are-added-chromium-retry1/trace.zip
1394:  Usage:
1395:  pnpm exec playwright show-trace test-results/home-settings-Web-Admin----e0e23-review-when-cards-are-added-chromium-retry1/trace.zip
1396:  ────────────────────────────────────────────────────────────────────────────────────────────────
1397:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1398:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1399:  ╔═════════════════════════════════════════════════════════════════════════╗
1400:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1401:  ║ Please run the following command to download new browsers:              ║
1402:  ║                                                                         ║
1403:  ║     pnpm exec playwright install                                        ║
1404:  ║                                                                         ║
1405:  ║ <3 Playwright Team                                                      ║
1406:  ╚═════════════════════════════════════════════════════════════════════════╝
1407:  17) [chromium] › apps/web/e2e/identity-verification.spec.ts:8:7 › Identity Verification Flow › should display security settings section 
1408:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1409:  ╔═════════════════════════════════════════════════════════════════════════╗
1410:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1411:  ║ Please run the following command to download new browsers:              ║
1412:  ║                                                                         ║
1413:  ║     pnpm exec playwright install                                        ║
1414:  ║                                                                         ║
1415:  ║ <3 Playwright Team                                                      ║
1416:  ╚═════════════════════════════════════════════════════════════════════════╝
1417:  Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
1418:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1419:  ╔═════════════════════════════════════════════════════════════════════════╗
1420:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1421:  ║ Please run the following command to download new browsers:              ║
1422:  ║                                                                         ║
1423:  ║     pnpm exec playwright install                                        ║
1424:  ║                                                                         ║
1425:  ║ <3 Playwright Team                                                      ║
1426:  ╚═════════════════════════════════════════════════════════════════════════╝
1427:  attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
1428:  test-results/identity-verification-Iden-98297-y-security-settings-section-chromium-retry1/trace.zip
1429:  Usage:
1430:  pnpm exec playwright show-trace test-results/identity-verification-Iden-98297-y-security-settings-section-chromium-retry1/trace.zip
1431:  ────────────────────────────────────────────────────────────────────────────────────────────────
1432:  Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
1433:  Error: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1200/chrome-headless-shell-linux64/chrome-headless-shell
1434:  ╔═════════════════════════════════════════════════════════════════════════╗
1435:  ║ Looks like Playwright Test or Playwright was just installed or updated. ║
1436:  ║ Please run the following command to download new browsers:              ║
1437:  ║                                                                         ║
1438:  ║     pnpm exec playwright install                                        ║
1439:  ║                                                                         ║
1440:  ║ <3 Playwright Team                                                      ...

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 standardizes Convex usage in the widget by routing queries/mutations through a widget-local adapter (apps/widget/src/lib/convex/hooks.ts) and updating widget components/hooks to use those wrappers, with tests intended to enforce the boundary.

Changes:

  • Replaced direct convex/react hook usage (useQuery, useMutation) with useWidgetQuery / useWidgetMutation across widget runtime modules.
  • Replaced makeFunctionReference usage with widgetQueryRef / widgetMutationRef in widget modules.
  • Expanded the ref hardening guard test to scan the widget source tree for unexpected direct Convex boundaries.

Reviewed changes

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

Show a summary per file
File Description
openspec/changes/expand-widget-local-convex-wrapper-hooks/tasks.md Marks migration/verification checklist items as completed.
apps/widget/src/lib/convex/hooks.ts Refines the widget-local Convex adapter and improves typing to reduce unsafe casts.
apps/widget/src/test/refHardeningGuard.test.ts Extends guardrails by scanning widget source for direct Convex boundaries and asserting an explicit allowlist.
apps/widget/src/tourOverlay/useTourOverlaySession.ts Migrates tour overlay session mutation to useWidgetMutation and widgetMutationRef.
apps/widget/src/hooks/useWidgetTicketFlow.ts Migrates ticket flow queries/mutations to widget-local Convex wrappers.
apps/widget/src/hooks/useWidgetShellValidation.ts Migrates workspace/origin validation queries to widget-local wrappers.
apps/widget/src/hooks/useWidgetSettings.ts Migrates messenger settings query to widget-local wrappers.
apps/widget/src/hooks/useWidgetSession.ts Migrates session boot/refresh/heartbeat mutations to widget-local wrappers.
apps/widget/src/hooks/useWidgetConversationFlow.ts Migrates conversation mutations to widget-local wrappers.
apps/widget/src/hooks/useNavigationTracking.ts Migrates navigation tracking mutation to widget-local wrappers.
apps/widget/src/hooks/useEventTracking.ts Migrates identify/track event mutations to widget-local wrappers.
apps/widget/src/components/Home.tsx Migrates home/article queries to widget-local wrappers.
apps/widget/src/Widget.tsx Migrates widget-level queries to widget-local wrappers.
apps/widget/src/TooltipAuthoringOverlay.tsx Migrates tooltip authoring query/mutations to widget-local wrappers.
apps/widget/src/SurveyOverlay.tsx Migrates survey mutations to widget-local wrappers.
apps/widget/src/OutboundOverlay.tsx Migrates outbound overlay query/mutation to widget-local wrappers.
apps/widget/src/CsatPrompt.tsx Migrates CSAT mutation to widget-local wrappers.
apps/widget/src/ChecklistOverlay.tsx Migrates checklist query/mutations to widget-local wrappers.
apps/widget/src/AuthoringOverlay.tsx Migrates authoring overlay query/mutations to widget-local wrappers.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

];

const DIRECT_CONVEX_IMPORT_PATTERN = /from "convex\/react"/;
const DIRECT_REF_FACTORY_PATTERN = /makeFunctionReference\(/;
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

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

DIRECT_REF_FACTORY_PATTERN is /makeFunctionReference\(/, which will not match the common typed usage makeFunctionReference<...>(...). As a result, findUnexpectedWidgetDirectConvexBoundaries() will miss direct makeFunctionReference calls and the guard can be bypassed unintentionally. Update the regex to also match optional generic parameters before the ( (or use a broader pattern that reliably detects the identifier).

Suggested change
const DIRECT_REF_FACTORY_PATTERN = /makeFunctionReference\(/;
const DIRECT_REF_FACTORY_PATTERN = /makeFunctionReference(?:\s*<[^>]*>)?\s*\(/;

Copilot uses AI. Check for mistakes.
@djanogly djanogly merged commit 71743f3 into dev Mar 11, 2026
2 of 4 checks passed
@djanogly djanogly deleted the openspec/expand-widget-local-convex-wrapper-hooks branch March 11, 2026 14:19
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.

2 participants