Skip to content

test(e2e): open the "+n" popover on the settled spec page - #142

Merged
codeministry merged 3 commits into
mainfrom
fix/e2e-head-more-flake
Oct 30, 2026
Merged

codeministry merged 3 commits into
mainfrom
fix/e2e-head-more-flake

Conversation

@codeministry

@codeministry codeministry commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

Fixes an intermittent failure of e2e/breadcrumb.spec.ts › a "+n" list link selects the other block on the planning tree, and makes failed e2e runs upload their trace.

Cause

The original failure (seen on a dependency PR: 1509 passed, this one timed out) has this call log: the list link becomes stable, then <ui-card …> from <app-spec-dashboard> subtree intercepts pointer events, then element is not visible until the timeout.

[data-head-more] renders once the planning answer is in. The spec answer (/api/workspaces/harbor/specs/002) can still be on its way. When it arrives it inserts the type chip in front of the stage chip, so everything to its right shifts, the "+n" trigger included. The popover is anchored to that trigger and moves with it. A press measured before the shift lands on the dashboard card beside the panel, the native popover="auto" light-dismisses, and the link stays hidden.

Checked with a throwaway probe (not committed) that holds the spec and dashboard answers until the popover is open: the chip row goes from star, stage, priority, milestone, feature, +n to star, type, stage, …, the open link moves, and the popover itself stays open (so it is the stray press that closes it, not a re-render).

Change

  1. Test: wait for [data-head-chip="type"] before opening the popover. Test only, no app code.
  2. CI: include-hidden-files: true on the Playwright upload. web/e2e/.report/ and web/e2e/.results/ start with a dot, and upload-artifact skips hidden paths by default. Every failed e2e run so far uploaded nothing (No files were found with the provided path), which is why no trace was available here.

History of this PR

The first commit waited for networkidle instead. Its CI run failed in the same test with a bare Test timeout of 30000ms exceeded and no pending action named, which fits the network-idle wait itself not resolving on the runner. The DOM condition replaces it; it does not depend on background traffic.

Verification

  • bun run e2e -- breadcrumb -g '"\+n" list link' --repeat-each=30: 30 passed.
  • bun run e2e -- breadcrumb: 119 passed, 1 skipped (the compact-only fit).
  • Full e2e suite locally with CI=1 (two workers, CI's order): 1510 passed. The failure never reproduced locally; it needs the runner's timing.
  • bun run check:static and bun run check:leak pass.

A single green CI run does not prove an intermittent fix. If it shows up again, the run now carries the trace.

The milestone and feature chip tests next to it also click right after goto. The type chip can shift those too, but a plain link has no light dismiss, so the press still lands on it. Left as is.

The "+n" button is clickable once the planning answer is in, before the
spec and dashboard answers. Those add a chip to the head row, the anchored
popover moves with its trigger, and a press measured before the move lands
outside the panel: a light dismiss, and the link stays hidden until the
test times out. Wait for the network to settle before opening it.
@codeministry codeministry self-assigned this Oct 30, 2026
web/e2e/.report/ and web/e2e/.results/ start with a dot, and
upload-artifact skips hidden paths unless include-hidden-files is set.
Every failed e2e run so far uploaded nothing: no trace, no screenshot.
The first fix waited for networkidle and still timed out once in CI, this
time with no pending action named, which fits the wait itself never
resolving on the runner. The chip that moves the row is the type chip: it
arrives with the spec answer and is inserted in front of the stage chip.
Wait for it instead; a DOM condition does not depend on background
traffic.
@codeministry
codeministry merged commit 2959c5f into main Oct 30, 2026
3 checks passed
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.

1 participant