feat: run E2E flow collections in parallel stacks (backlog 132) - #400
Draft
s205109 wants to merge 19 commits into
Draft
feat: run E2E flow collections in parallel stacks (backlog 132)#400s205109 wants to merge 19 commits into
s205109 wants to merge 19 commits into
Conversation
Item already reads Stage 2-design; this marker gives the branch a commit so the draft PR can open. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
adr says why hand-picked groups are right here and wrong in 0013. item: 57 -> 62 tests, criterion 2 gains SPA host + shared container, measured baseline 306.96s. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
serilog freeze throws on concurrent host build, not just lost logs. eager capture at AddSerilog, lazy freeze at first ILogger resolve, so the gate must span both. xunit matches fixtures by exact type, so constructors name their group's type. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
nothing-mutable-is-shared was false: serilog's static crosses every collection. say so up front and point at the gate rule. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ApiFactory takes a discriminator and stops building its own container. E2ESqlServer keeps the process at one container so CI does not gain three more. ApiFactoryTests moves to the exclusive collection because it mutates a process-wide env var. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
AddSerilog keeps the static Log.Logger it finds and freezes it at the first ILoggerFactory resolve. two hosts can keep the same instance and the second freeze throws. Program.cs catches it, so the test sees 'entry point exited without ever building an IHost'. proven: 20 overlapped rounds fail without the gate, pass with it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
four stacks starting together would run four installs into one shared browser folder. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
StackFixture loses sealed and takes a discriminator. four collections, four fixture subclasses, 18 classes moved. xunit matches fixtures by exact type so each constructor names its group's type. 64 tests pass. wall 241.62s -> 128.29s, host 196s -> 86s. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
the guard read E2ETestCollection.cs and required the literal ICollectionFixture<StackFixture>. the rule it protects is unchanged - a stack belongs to a collection, never to a flow class - so it now matches any StackFixture subtype and adds a check that no two collections share one fixture type. mutation-proven. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Test Results64 tests 64 ✅ 7m 21s ⏱️ Results for commit 28af49d. ♻️ This comment has been updated with latest results. |
SummarySummary
Coverageahkflow - 96.6%
AHKFlowApp.API - 84.1%
AHKFlowApp.Application - 98.3%
AHKFlowApp.Domain - 100%
AHKFlowApp.Infrastructure - 100%
AHKFlowApp.Launcher - 71.7%
AHKFlowApp.TestUtilities - 93.6%
AHKFlowApp.UI.Blazor - 91.2%
Per-assembly thresholds: Domain line>=85% br>=70% ; Application line>=85% br>=45% ; Infrastructure line>=70% br>=50% ; API line>=57% br>=50% ; UI.Blazor line>=65% br>=28% |
cap proven read, not just shipped: 257.14s at 1 thread, 128.29s at 4. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
median 110.60s over 5 runs vs 257.14s serial on the same tree. 2.33x. baseline corrected: 306.96s was a cold first run. test count 62 -> 64, two serilog lifecycle tests added. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
30 of 30, 64 tests each, no failure line. no new flake filed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backlog 132 — Run E2E flow collections in parallel stacks.
Draft opened at Pickup. The work is at Design.
What the item asks
Decide whether the E2E slice can run its flows at the same time, each with its own
database, API host and browser. A decision not to do it is a real outcome, and it gets
recorded with its reason.
Starting facts
tests/AHKFlowApp.E2E.Testshas one collection,E2E, withDisableParallelization = true. All 18 test classes join it.StackFixtureowns oneApiFactory, oneSpaHost, one Playwright browser and onedatabase. Every test calls
ResetDataAsync, which deletes every table.Acceptance criteria
See
backlog/132-run-e2e-flow-collections-in-par-59789baa.md.🤖 Generated with Claude Code