Skip to content

Polish collapsible Fix with AI error banner - #4351

Merged
wwwillchen merged 4 commits into
mainfrom
codex/collapsible-fix-with-ai-banner
Aug 27, 2026
Merged

Polish collapsible Fix with AI error banner#4351
wwwillchen merged 4 commits into
mainfrom
codex/collapsible-fix-with-ai-banner

Conversation

@keppo-bot

@keppo-bot keppo-bot Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

Make the preview's Fix with AI error banner collapsible while giving the expanded state a calmer, more conventional error-recovery hierarchy.

  • The banner remains expanded by default; collapsing preserves a one-line summary with separate expand and dismiss controls.
  • The header now keeps the error icon and plain-language summary on the left and groups collapse/dismiss controls on the right, avoiding the previous cluster of competing chevrons.
  • Raw diagnostics use an explicit Show details disclosure and monospace styling, while restart guidance is flattened into a quieter inline note and Fix with AI remains the primary action.
  • Leading "Error" text is removed from the displayed summary when redundant, without changing the raw error copied or sent to AI.
  • Focused component tests and the packaged Electron flow cover collapse, dismissal, diagnostic disclosure, copying, and the AI fix action.

Review in cubic

@keppo-bot
keppo-bot Bot requested a review from a team August 21, 2026 23:57

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

πŸ’‘ Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4ff5e858e3

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with πŸ‘.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread src/components/preview_panel/PreviewErrorBanner.tsx

@dyad-assistant dyad-assistant Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Claude review: 2 inline finding(s).

Comment thread src/components/preview_panel/PreviewErrorBanner.tsx
Comment thread src/components/preview_panel/PreviewErrorBanner.tsx Outdated
@dyad-assistant

Copy link
Copy Markdown
Contributor

πŸ” Dyadbot Code Review Summary

Verdict: πŸ€” NOT SURE - Potential issues
Recommendation: ready

This PR extracts the inline ErrorBanner from PreviewIframe.tsx into a new PreviewErrorBanner component and adds a banner-level collapse toggle, plus unit tests, e2e page-object helpers, and regenerated aria snapshots. The extraction is faithful β€” I verified that every symbol dropped from PreviewIframe.tsx's imports (X, Sparkles, Lightbulb, ChevronRight, CopyErrorMessage) was used only inside the removed component, and that useState, useStreamChat, and cn are still used elsewhere in that file, so there is no dangling/unused-import breakage. Converting the error-message disclosure from a div onClick to a real <button> with aria-expanded is a genuine accessibility improvement, and keeping the collapse toggle outside the conditional subtree means focus is not lost when toggling. The new unit test file matches the repo's existing src/components/preview_panel/*.test.tsx conventions and will be picked up by the unit Vitest project (happy-dom, globals: true), and the - text: "" nodes in the regenerated aria snapshots are consistent with real Playwright output elsewhere in e2e-tests/snapshots/.

No HIGH issues. Two MEDIUM notes below are behavioral/accessibility polish rather than merge blockers. The diff was not truncated, so confidence is good; I did not run the test suites.

Issues Summary

Severity File Issue
🟑 MEDIUM src/components/preview_panel/PreviewErrorBanner.tsx:23 Collapsed state persists across unrelated errors
🟑 MEDIUM src/components/preview_panel/PreviewErrorBanner.tsx:109 Full error message embedded in the button's accessible name
🟒 Low Priority Notes (6 items)
  • Collapsed summary row is not clickable - When collapsed, only the 14px chevron expands the banner; clicking the one-line error text itself does nothing and the row has no cursor-pointer. Users commonly click the summary row to expand. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Dismiss and collapse controls are ~2px apart - Both are 22px targets (top-1 left-1 and top-1 left-7) with the same red icon styling and no tooltips. Mis-clicking dismiss is destructive-ish (the error banner goes away entirely), and 22px is under the usual 24px minimum target size. Consider a small gap, distinct icon weight, or tooltips. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Unused test id - data-testid="preview-error-banner-toggle" is added but no unit test or e2e helper uses it; both query by role/name instead. Either use it or drop it. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • aria-controls target only exists while expanded - preview-error-banner-content is the id of the expanded branch, so while collapsed the toggle points at a non-existent element. Harmless in practice, but rendering the container unconditionally (and swapping only its contents) would make the relationship valid in both states. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Page-object helpers are not scoped to the banner - collapsePreviewErrorBanner/expandPreviewErrorBanner query this.page globally, whereas the neighbouring clickCopyErrorMessage scopes to getByTestId("preview-error-banner"). Scoping the new helpers the same way keeps them robust if similar labels appear elsewhere. (e2e-tests/helpers/page-objects/components/PreviewPanel.ts)
  • Snapshots lost their trailing newline - Both regenerated .aria.yml files now end without a final newline (\ No newline at end of file), unlike their previous versions. Cosmetic, but it will show up as churn in future regenerations. (e2e-tests/snapshots/fix_error.spec.ts_fix-error-with-AI-1.aria.yml)

Generated by Dyadbot persona-based code review

@github-actions github-actions Bot added the needs-human:review-issue ai agent flagged an issue that requires human review label Aug 22, 2026
@wwwillchen wwwillchen removed the needs-human:review-issue ai agent flagged an issue that requires human review label Aug 25, 2026
@wwwillchen wwwillchen changed the title Make Fix with AI error banner collapsible Polish collapsible Fix with AI error banner Aug 25, 2026
@dyad-assistant

Copy link
Copy Markdown
Contributor

πŸ” Dyadbot Code Review Summary

Verdict: πŸ€” NOT SURE - Potential issues
Recommendation: human-review

This is a contained renderer-only refactor: the inline ErrorBanner is extracted from PreviewIframe.tsx into a new PreviewErrorBanner.tsx, with a collapsible header, an explicit "Show details" disclosure, and a flattened restart hint. No IPC, main-process, schema, or agent-tool surface is touched, so the Electron boundary and DyadError concerns do not apply here. The extraction itself is clean - every import removed from PreviewIframe.tsx (X, Sparkles, Lightbulb, ChevronRight, CopyErrorMessage) is used only by the deleted banner, while ChevronDown, cn, useState, and useStreamChat remain in use elsewhere in that file, so no dangling or unused imports. The raw message sent to onAIFix and to CopyErrorMessage is unchanged, so the AI fix prompt and clipboard payload keep the full original text. New unit tests land in the standard src/**/*.test.tsx unit project (happy-dom), and the e2e page-object additions follow the existing role-based locator style.

Two behavioral issues are worth a look before merge; neither is a hard blocker on its own. The bigger one is that the new collapse and details toggles are component state on a component that stays mounted across errors, so a collapsed banner stays collapsed for the next, unrelated error - hiding the primary "Fix error with AI" recovery action that was previously always visible. The second is the /^Error:?\s+/i summary strip, which is broader than the redundant prefix it targets and can turn a real message into a sentence fragment.

The diff is complete and untruncated, so confidence in the code reading is good. One thing I could not verify from the diff alone: whether the two regenerated .aria.yml snapshots were produced against a fresh packaged build. They must match the new DOM exactly (element order, [expanded] states, the Copy button subtree), so if they were updated by hand rather than by a snapshot run, fix_error.spec.ts will fail in CI.

Issues Summary

Severity File Issue
🟑 MEDIUM src/components/preview_panel/PreviewErrorBanner.tsx:29 Collapse state persists across unrelated errors and hides Fix with AI
🟑 MEDIUM src/components/preview_panel/PreviewErrorBanner.tsx:40 Error prefix stripping regex can mangle legitimate error summaries
🟒 Low Priority Notes (6 items)
  • Dangling aria-controls - The collapse button always sets aria-controls="preview-error-banner-content", but that element is unmounted while collapsed, so the reference points at nothing in exactly the state where assistive tech is most likely to follow it. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Unused test id - data-testid="preview-error-banner-toggle" is not referenced by the new unit tests, the e2e spec, or the page object; both suites target the button by aria-label. Either use it or drop it so it does not read as a supported hook. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • No focus-visible styling on the icon buttons - The collapse and dismiss buttons only style hover:, while the sibling toolbar buttons in PreviewIframe.tsx use focus-visible:ring-2 focus-visible:ring-primary/40. Keyboard focus still shows the UA outline, but it is visually inconsistent with the rest of the preview chrome. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Scrollable <pre> is not keyboard reachable - The details block is max-h-40 overflow-auto with no tabIndex={0}, so a long stack trace can only be scrolled with a pointer. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Full stack trace as a native tooltip - title={error.message} on the truncated summary renders the entire multi-line message in an OS tooltip on hover, which is awkward for long traces now that "Show details" exists for the same content. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Weak positive assertions in the unit tests - expect(screen.getByRole(...)).toBeTruthy() adds nothing beyond what getByRole already throws on; the negative queryBy*().toBeNull() assertions are the ones carrying the test. Also, only the preview-app variant is covered - the Docker, dyad-app, and dyad-sync branches (badge rendering, hidden action row) are untested. (src/components/preview_panel/PreviewErrorBanner.test.tsx)

Generated by Dyadbot persona-based code review

@github-actions github-actions Bot added the needs-human:review-issue ai agent flagged an issue that requires human review label Aug 25, 2026

@dyad-assistant dyad-assistant Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Claude review: 2 inline finding(s).

Comment thread src/components/preview_panel/PreviewErrorBanner.tsx
Comment thread src/components/preview_panel/PreviewErrorBanner.tsx Outdated
@dyad-assistant

Copy link
Copy Markdown
Contributor

πŸ” Dyadbot Code Review Summary

Verdict: πŸ€” NOT SURE - Potential issues
Recommendation: ready

This PR extracts the preview ErrorBanner out of PreviewIframe.tsx into a new PreviewErrorBanner component, makes it collapsible, moves raw diagnostics behind a Show details disclosure, and adds unit + E2E coverage. The extraction is clean: every lucide icon and the CopyErrorMessage import removed from PreviewIframe.tsx were only used by the deleted inline component, and cn, useState, ChevronDown, and useStreamChat all still have other call sites, so no dead or missing imports remain. The AI-fix prompt and clipboard payload still use the raw error.message, so the fake-LLM fixtures that match on "Fix error: Error Line 6 error" (testing/fake-llm-server/localAgentHandler.ts:898) stay valid. Accessibility improved meaningfully: the dismiss control is now labeled, decorative icons are aria-hidden, and both disclosures expose aria-expanded, which is reflected correctly in the regenerated aria snapshots. The new unit test lands in the unit Vitest project (happy-dom, src/**/*.test.tsx), which is the right home for a pure presentational component per rules/hybrid-testing.md. No IPC, database, or main-process surface is touched.

Two non-blocking items are noted below. Nothing here is a merge blocker.

Issues Summary

Severity File Issue
🟑 MEDIUM src/components/preview_panel/PreviewErrorBanner.tsx:29 Collapse and details state persist across different errors
🟑 MEDIUM src/components/preview_panel/PreviewErrorBanner.tsx:17 New banner re-declares the exported PreviewError type
🟒 Low Priority Notes (5 items)
  • Dangling aria-controls target - The collapse button always sets aria-controls="preview-error-banner-content", but that element is unmounted while collapsed, so the reference points at nothing in exactly the state where assistive tech is most likely to follow it. Rendering the content div with a hidden attribute instead of conditionally would keep the relationship valid. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Error prefix strip is broader than the app's own prefix - firstLine.replace(/^Error:?\s+/i, "") removes any leading Error word, not just the Error prefix that PreviewIframe.tsx:953 prepends. A message such as Error boundary caught: ... renders as a lowercase sentence fragment. Anchoring on the known prefix (or on ^Error:\s+) would be tighter. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Banner is not announced to screen readers - The banner appears asynchronously but has no role="alert" / aria-live region, so its arrival is silent for assistive tech. This is pre-existing, not a regression, but this PR is the natural place to add it. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Branchy copy is untested - The unit test covers the preview-app path only; the Docker, dyad-app, and dyad-sync branches (badge text, tip copy, and the hidden Copy / Fix with AI row) are the most conditional part of the component and have no coverage. (src/components/preview_panel/PreviewErrorBanner.test.tsx)
  • User-facing strings are hardcoded - All banner copy is inline English while the host PreviewIframe already uses useTranslation. Carried over from the old component, but worth folding into the i18n locales per rules/i18n.md at some point. (src/components/preview_panel/PreviewErrorBanner.tsx)

Note on confidence: neither the diff nor the patches were truncated, so the review covers the full change. I could not execute the Playwright suite in this environment, so the two regenerated aria snapshots were checked by reasoning about DOM order and role mapping rather than by running the tests; they look consistent with the new markup (paragraph before controls, aria-hidden icons dropped, adjacent text nodes merged in snapshot 2 now that no img separates them).


Generated by Dyadbot persona-based code review

- Reset error-banner disclosures when a new error arrives\n- Reuse the shared PreviewError type\n- Add regression coverage for disclosure reset
@keppo-bot

keppo-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

πŸ€– Claude Code Review Summary

PR Confidence: 4/5

All trusted review threads are resolved and focused tests plus formatting, lint, and type checks pass; confidence is held below 5 because the packaged E2E flow could not be rerun after Electron Forge failed rebuilding better-sqlite3 in its temporary package directory.

Unresolved Threads

No unresolved threads

Resolved Threads

Issue Rationale Link
Disclosure state persisted across new errors Keyed the banner by the shared error identity and unmounted it when no error exists, resetting collapse/details state so every new error exposes recovery actions. This follows Principle #4: Transparent Over Magical. Codex, Dyad review 1, Dyad review 2
Banner duplicated the preview error type Replaced the inline shape with the exported PreviewError type from preview state. View
Raw stack trace appeared in the disclosure button name Confirmed the rebased implementation already uses action-only Show details / Hide details names and renders diagnostics separately, consistent with Principle #4: Transparent Over Magical. View

πŸ€– Generated by Claude Code

@dyad-assistant dyad-assistant Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Claude review: 2 inline finding(s).

}
aria-expanded={!isBannerCollapsed}
aria-controls="preview-error-banner-content"
className="rounded p-1 text-red-500 transition-colors hover:bg-red-100 hover:text-red-700 dark:text-red-400 dark:hover:bg-red-900 dark:hover:text-red-200"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟑 MEDIUM

New banner controls are missing cursor-pointer

The collapse toggle (line 76), the dismiss button (line 89), and the "Show details" toggle (line 100) have no cursor-pointer class, while the "Fix error with AI" button in the same banner explicitly sets it. This project is on Tailwind v4, whose preflight no longer applies cursor: pointer to buttons, and there is no global CSS rule restoring it, so these three new affordances will show the default arrow cursor. Sibling components such as PreviewLoadingScreen's error toggle set cursor-pointer explicitly for exactly this reason, so the banner ends up inconsistent with the rest of the preview panel in a PR whose goal is polish.

πŸ’‘ Suggestion: Add cursor-pointer to the collapse, dismiss, and Show details button class strings.

expect(screen.getByRole("button", { name: "Hide details" })).toBeTruthy();
});

it("resets disclosure state when a different error arrives", () => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟑 MEDIUM

Remount test asserts React behavior, not the component contract

The "resets disclosure state when a different error arrives" test supplies the key prop itself in both render and rerender, so changing the key remounts the component and resets useState regardless of anything PreviewErrorBanner does. It passes even if the component were rewritten, and it does not cover the piece that can actually regress: the key={${errorMessage.source}:${errorMessage.message}} in PreviewIframe.tsx. If someone drops that key, this test stays green while a stale collapsed banner is shown for a brand-new error.

πŸ’‘ Suggestion: Render through a small wrapper that mirrors the PreviewIframe call site (passing only the error prop and letting the wrapper own the key), or assert the reset behavior in a test that renders PreviewIframe's banner slot.

@dyad-assistant

Copy link
Copy Markdown
Contributor

πŸ” Dyadbot Code Review Summary

Verdict: πŸ€” NOT SURE - Potential issues
Recommendation: ready

This PR extracts the preview error banner into PreviewErrorBanner.tsx, makes it collapsible, and adds a Show details disclosure plus unit and E2E coverage. The diff is complete (not truncated). No main-process, IPC, database schema, or agent-tool code is touched, so the Electron boundary, DyadError, Drizzle-migration, and tool-mutation rules do not apply here.

Things that check out:

  • Import cleanup in PreviewIframe.tsx is correct β€” X, Sparkles, Lightbulb, ChevronRight, and CopyErrorMessage were only used by the deleted inline ErrorBanner, while cn, useState, useStreamChat, and ChevronDown are still used elsewhere in the file, so no dangling or unused imports.
  • PreviewError is a real exported type in src/preview_iframe/state.ts, and the null-guard moved correctly from inside the component (if (!error) return null) to the !loading && errorMessage && call site, which also makes the errorMessage?.message non-null in the AI-fix prompt.
  • The regenerated aria snapshots are internally consistent with the new markup: aria-hidden on CircleAlert/Lightbulb/Sparkles explains the dropped - img nodes, the merged text node in snapshot 2 follows from removing the Lightbulb node between the two text runs, and the - button "Fix error with AI" (no children) form matches an icon-hidden button whose only child is its accessible name. The Copy button keeps the - img / - text: "" shape because CopyErrorMessage was not changed. No other spec or snapshot in e2e-tests/ still references the old Error Line 6 error / Tip: ... strings.
  • The new unit test lands in the unit Vitest project (src/**/*.{test,spec}.{ts,tsx}, happy-dom, globals: true so RTL auto-cleanup applies), and @testing-library/react is already a dependency.

The two MEDIUM items below are polish/maintainability notes, not merge blockers.

Issues Summary

Severity File Issue
🟑 MEDIUM src/components/preview_panel/PreviewErrorBanner.tsx:76 New banner controls are missing cursor-pointer
🟑 MEDIUM src/components/preview_panel/PreviewErrorBanner.test.tsx:87 Remount test asserts React behavior, not the component contract
🟒 Low Priority Notes (6 items)
  • Show details toggle is not wired to its region - The collapse toggle sets aria-controls="preview-error-banner-content", but the details toggle only sets aria-expanded and the <pre> has no id. MigrationPanel.tsx wires both sides of the same disclosure pattern. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • aria-controls target is unmounted when collapsed - preview-error-banner-content only exists while expanded, so the reference dangles in the collapsed state. This matches the existing pattern in RecordingBanner.tsx, so it is consistent with the codebase rather than a new defect. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Icon-only controls have no hover tooltip - The chevron and X buttons carry aria-label but no title; RecordingBanner.tsx sets both so sighted mouse users get a hint on hover. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • No role="alert" / aria-live on the banner - A newly appearing error is not announced to screen readers. This is pre-existing behavior carried over from the old banner, not a regression. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Hardcoded English strings - "Show details" / "Hide details" / the restart guidance and aria-labels bypass the repo's i18n setup, which already has translated showDetails / hideDetails keys used by MigrationPanel.tsx. The old banner was also hardcoded, so this is unchanged, not worse. (src/components/preview_panel/PreviewErrorBanner.tsx)
  • Collapse state resets on every distinct error - The key={source:message} remount in PreviewIframe.tsx is intentional and re-surfaces new errors, but it also discards a user's deliberate collapse whenever the message text changes, and could in principle make the new collapse assertions in fix_error.spec.ts flaky if a fresh error lands between the collapse click and the toBeHidden() check. (src/components/preview_panel/PreviewIframe.tsx)

Generated by Dyadbot persona-based code review

@wwwillchen
wwwillchen merged commit 389ec5b into main Aug 27, 2026
16 of 24 checks passed
@wwwillchen
wwwillchen deleted the codex/collapsible-fix-with-ai-banner branch August 27, 2026 23:13
@github-actions

Copy link
Copy Markdown
Contributor

🎭 Playwright Test Results

❌ Some tests failed

OS Passed Failed Flaky Skipped
🍎 macOS 408 2 4 151
πŸͺŸ Windows 407 20 3 151

Summary: 815 passed, 22 failed, 7 flaky, 302 skipped

Failed Tests

🍎 macOS

  • concurrent_chat.spec.ts > concurrent chat
    • Error: expect(received).toBe(expected) // Object.is equality
  • local_agent_auto.spec.ts > local-agent - auto model
    • Error: expect(string).toMatchSnapshot(expected) failed

πŸͺŸ Windows

Show all 20 failures
  • app_search.spec.ts > app search - basic search dialog functionality
    • Error: expect(locator).toBeVisible() failed
  • app_search.spec.ts > app search - search functionality with different terms
    • Error: expect(locator).toBeVisible() failed
  • app_search.spec.ts > app search - navigation and selection
    • Error: expect(locator).toBeVisible() failed
  • app_search.spec.ts > app search - empty search shows all apps
    • Error: expect(locator).toBeVisible() failed
  • app_search.spec.ts > app search - search by app name
    • Error: expect(locator).toBeVisible() failed
  • attach_image.spec.ts > attach image - chat
    • Error: expect(locator).toBeVisible() failed
  • attach_image.spec.ts > attach image via drag - chat
    • Error: expect(locator).toBeVisible() failed
  • chat_history.spec.ts > should open, navigate, and select from history menu
    • Error: expect(locator).toBeVisible() failed
  • chat_history.spec.ts > should handle edge cases: guards, escape, and sending after cancel
    • Error: expect(locator).toBeVisible() failed
  • edit_code.spec.ts > edit code edits the right file during rapid switches
    • Error: expect(locator).toBeHidden() failed
  • editor_commit_menu.spec.ts > editor commit menu commits multiple staged files at once
    • Error: expect(locator).toBeHidden() failed
  • fix_error.spec.ts > fix all errors button
    • Error: expect(locator).toBeVisible() failed
  • home_chat_existing_app.spec.ts > home chat - start new chat in existing app
    • Error: expect(locator).toBeVisible() failed
  • mention_app.spec.ts > mention app (without pro)
    • Error: expect(locator).toBeVisible() failed
  • mention_app.spec.ts > mention app (with pro)
    • Error: expect(locator).toBeVisible() failed
  • mention_files.spec.ts > mention file
    • Error: expect(locator).toBeVisible() failed
  • per_chat_input.spec.ts > chat input is preserved when switching between chats
    • Error: expect(locator).toBeVisible() failed
  • per_chat_input.spec.ts > closing a chat tab clears its stored input
    • Error: expect(locator).toBeVisible() failed
  • per_chat_input.spec.ts > input preserved when switching back and forth multiple times
    • Error: expect(locator).toBeVisible() failed
  • queued_message.spec.ts > queued messages > fires queued message while on another page
    • Error: expect(locator).not.toBeVisible() failed

πŸ“‹ Re-run Failing Tests (macOS)

Copy and paste to re-run all failing spec files locally:

npm run e2e \
  e2e-tests/concurrent_chat.spec.ts \
  e2e-tests/local_agent_auto.spec.ts

⚠️ Flaky Tests

🍎 macOS

  • annotator.spec.ts > annotator - capture and submit screenshot (passed after 1 retry)
  • local_agent_pre_commit.spec.ts > local-agent - pre-commit hook fixes files and passes when rerun (passed after 1 retry)
  • refresh.spec.ts > reload shortcuts stay scoped to the focused preview (passed after 1 retry)
  • version_preview_lifecycle.spec.ts > version preview is drained and isolated when switching apps (passed after 1 retry)

πŸͺŸ Windows

  • app_screenshot.spec.ts > captures an app screenshot after the first generated commit (passed after 1 retry)
  • concurrent_chat.spec.ts > concurrent chat (passed after 2 retries)
  • screenshot_prompt.spec.ts > upload a chat session and report it with a screenshot (passed after 1 retry)

πŸ“Š View full report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-human:review-issue ai agent flagged an issue that requires human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant