The e2e suite, 8.3 minutes to 6.8, with every assertion kept #221
No reviewers
Labels
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Grandiras/Ponente!221
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "e2e-leaner"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The e2e suite went from 8.3 minutes to 6.8 (500s → 406s, one worker, same stack), with every assertion kept: 165 tests became 153, and 153/153 pass. The changes come from a per-step profile of a full run: a small custom reporter printing every step over a second.
docs/testing.mdsays how to rerun one.Four wastes
waitForCircuit(permissions,requests,pds,helpers/members.js) waited for a_blazornetwork response, up to 8s. When the circuit came up during the navigation before the call, which is the usual case locally, the response had already passed, so the wait sat out the full 8 seconds. Onerequeststest paid it twice: 16s of 19.helpers/circuit.jsis the one copy now. It asks the page instead: the negotiate request is in the Resource Timing buffer whichever side of the call it happened on.page.clock.install()/runFor), with time still flowing normally. Fixed waits stay where real time is the point: the entrance specs' late-replay windows and the reconnect dialog.app.css). This one is a member-visible fix. I left the changelog alone because it's too small to spend one of the block's seven lines on.reducedMotion: 'reduce', a real setting the app honours by skipping its entrances, and the specs about motion opt back in:board-entrance,auth-entrance, and the calendar's cascade tests.Also: the search helper still types one key event per character, just without 30ms of pause after each (the slow-circuit typing test keeps its own pace). And
goHomewaits for a resumed page's circuit before clicking home: a link clicked mid-startup reached/and was then rendered back to the resumed page (seen once in a full run).Fused, by the fixture rule
filter.spec.js: six questions of one filter (flyout, narrowing, badge, other column, a new card's tags in a filtered and an unfiltered column, the emptied-column message, clearing) are one walk over one tag.calendar.spec.js: one dated card's life (set, reloaded, in its day cell, paged past, moved from the calendar, cleared) is one test instead of five.board.spec.js: create, edit, Escape and confirmed delete are one card's lifecycle. Thejavascript:link probe moved into the comment test's own card. It used to comment on.card.first(), somebody else's card, which is a write teardown cannot undo.Every fused assertion keeps an
expect(…, 'label'), so a failure still names what broke.Checks
Full suite 153/153 in 6.8m. Unit tests 558/558.
docs/testing.mdrecords the four wastes and the rules they leave behind.🤖 Generated with Claude Code
⏳ Held on the OpenCode Go window — the 5-hour window is at 100% (the bot holds at 95%).
This continues automatically after the window resets (2026-09-23T01:12:57.059Z) — nothing to re-trigger.
🤖 Reviewing this PR — the review will link the full session transcript.
✅ Verdict: approve — no blocking issues found.
Good to merge. The four wastes are real and the fixes are sound: the shared
waitForCircuitasks the Resource Timing buffer instead of racing a network response (strictly better than the four copies it replaces, which swallowed failure), the clock usage is correct (page.clock.install()keeps time flowing;runFor(4500)covers the 3800+420 ms rotation), and the reduced-motion default with explicit opt-backs in the three motion specs is the right shape. I traced the three fused tests against their helpers: every deleted test's assertions survive, the cards/tags involved are each test's own, and the filter test'sbadge = 1andbefore > 1assumptions hold even with leftover untagged cards from earlier spec files on the shared board. The toast click-through is a genuine member-visible improvement. Two non-blocking notes: (1)waitForCircuitnow hard-fails after 15 s where the old copies silently carried on — that's the right call, but the Resource Timing buffer is capped (~250 entries per document) and is not cleared by in-app navigations, so a very long-lived page could in principle overflow it before a laterwaitForCircuitcall; not reachable by the current call sites, which all follow a full load. (2) The fused board test's first.column-addclick is not retried the waycreateCard/openFilterretry theirs — pre-existing pattern, not a regression, but it is the one remaining cold-circuit race in the file.⏱ 1m 29s · 4 steps · $0.0090 · tokens: 37.2k in / 3.3k out (+58.4k cache-read) · Go: 5h 0% · wk 46% · mo 56%
📜 Full session transcript
Thanks. On the two notes:
board.spec.js, and passes in 6s.Also rebased onto
main(#222, #223). Unit tests 560/560.16a4fd9c980c04c21c3f🤖 Reviewing this PR — the review will link the full session transcript.
✅ Verdict: approve — no blocking issues found.
Good to merge — re-review of the new commits. Both notes from my last pass are resolved: the fused board test's first
.column-addclick is now retried withtoPasslike every other first click in the file, andhelpers/circuit.jsnow documents the Resource Timing buffer's document-scoped lifetime (in-app navigation answers at once on the same circuit; a full load resets it, which is exactly when a new circuit is needed) — turning the caveat I raised into a stated invariant.Re-verified on disk rather than from the diff: the app really honours
prefers-reduced-motion(App.razor, auth-enter.js, calendar-interop.js, handle-placeholder.js, six CSS blocks), so the suite-widereducedMotion: 'reduce'default runs a real member path and the three motion specs opt back in correctly. The toast click-through is consistent with the container (which was alreadypointer-events: none) and loses nothing — the toast markup has nothing pressable. All four localwaitForCircuitcopies are gone and every call site imports the shared helper; the newgoHomecall site is correctly scoped to the resumed-page branch. The fused tests keep every assertion with labels, the XSS probe now runs on the test's own card, and the clock usage (install()before load,runFor(4500)≥ the 3800+420 ms rotation) is correct, with fixed waits left only where real time is the point.Non-blocking: the Resource Timing buffer's ~250-entry-per-document cap remains a theoretical limit for a very long-lived page, but no current call site can reach it — all follow a full load.
⏱ 9m 14s · 8 steps · $0.0300 · tokens: 127.0k in / 14.7k out (+119.8k cache-read) · Go: 5h 1% · wk 74% · mo 70%
📜 Full session transcript