You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: AGENTS.md
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -116,7 +116,7 @@ Rule format:
116
116
- Every runnable test project must declare `MaxParallelTestsForPipeline : EnvironmentAwareParallelLimitBase` and rely on the base class limits by default; do not add per-suite `LocalLimit` or `CiLimit` overrides unless a specific suite has a documented exception.
117
117
- Browser-suite CI parallelism is user-tunable. When the user wants higher throughput, keep in-suite browser-test CI parallelism in the `6-9` worker range when the harness can sustain it, and prefer extra GitHub Actions job splitting on top of that before reaching for timeout increases; do not pin browser suites back to `2` workers as a blanket fix.
118
118
- Browser UI tests must be data-isolated and storage-isolated by default: each scenario should create or import its own script or workspace data, avoid shared persisted document IDs or browser-local state, and remain parallel-safe when multiple pages or contexts hit the app at the same time.
119
-
- Local regression verification must include solution-level `dotnet test --solution ./PrompterOne.slnx --max-parallel-test-modules 1`so test-project split changes are proven under the real all-tests entrypoint, not only as isolated per-project runs.
119
+
- Local regression verification must include a solution-level `dotnet test --solution ./PrompterOne.slnx` run so test-project split changes are proven under the real all-tests entrypoint with normal module parallelism; only force `--max-parallel-test-modules 1` when diagnosing a known module-level interference bug.
120
120
- When the user explicitly asks to validate a test fix in actual GitHub Actions, do not spend more time on local `CI=true` emulation; push the fix and monitor the real CI run instead.
121
121
- Do not use local `CI=true` browser-suite runs as a primary reproduction or validation signal unless the user explicitly asks for that exact experiment; in this repo it mostly changes in-suite parallelism and can hide the real CI failure mode instead of reproducing it.
122
122
- When diagnosing browser-suite CI failures, always inspect and preserve Playwright screenshot artifacts from the failing run, and extend the harness so early bootstrap or fixture failures also leave a screenshot whenever the browser page still exists.
@@ -131,6 +131,7 @@ Rule format:
131
131
- Repo-wide cleanup and review passes must explicitly inventory forbidden implementation string literals, `MarkupString` or raw-HTML UI composition, duplicated JS/CSS patterns, architecture-boundary drift, and `foreach`-driven test scenarios that should become isolated TUnit cases.
132
132
- Repo-wide audits should use multiple independent reviewers with distinct focuses when the tooling is available, including external CLI reviewers such as Claude and Copilot plus internal agents, and all review outputs should be captured in root-level task files before remediation starts.
133
133
- When CI browser suites keep flaking, use the available assistant CLIs and internal sub-agents as parallel investigators on the same failure cluster instead of debugging only through one serial line of inquiry.
134
+
- Browser-suite stability fixes must prioritize per-test writable-state isolation and shared-harness correctness over retries, suite serialization, or other band-aids that only hide parallel interference.
134
135
- Legacy, dead, duplicate, or speculative code paths should be deleted aggressively instead of being preserved behind compatibility instincts; if code has no clear runtime owner or authoritative contract, remove it rather than keep it as “just in case” ballast.
135
136
- For repo-wide remediation passes, keep an explicit root-level accounting of fixed versus remaining feedback items, finish the code fixes first, and only then run and stabilize the test suites; do not bounce back into verification mid-remediation unless the user explicitly asks.
136
137
- For task-scoped work, edit, stage, and commit only the files directly required for the requested change; do not widen the change set into unrelated user-owned or parallel worktree edits, do not touch changes owned by another agent, and if a blocker comes from that parallel work, wait briefly and re-check instead of patching around their in-flight fix.
- core tests: `dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Core.Tests/PrompterOne.Core.Tests.csproj`
160
161
- component tests: `dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.Tests/PrompterOne.Web.Tests.csproj`
161
-
- all tests: `dotnet test @./tests/dotnet-test-progress.rsp --solution ./PrompterOne.slnx --max-parallel-test-modules 1`
162
+
- all tests: `dotnet test @./tests/dotnet-test-progress.rsp --solution ./PrompterOne.slnx`
162
163
- ui tests: `dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Shell/PrompterOne.Web.UITests.Shell.csproj && dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Studio/PrompterOne.Web.UITests.Studio.csproj && dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Editor/PrompterOne.Web.UITests.Editor.csproj && dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Reader/PrompterOne.Web.UITests.Reader.csproj`
163
164
- ui shell tests: `dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Shell/PrompterOne.Web.UITests.Shell.csproj`
164
165
- ui studio tests: `dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Studio/PrompterOne.Web.UITests.Studio.csproj`
Copy file name to clipboardExpand all lines: full-suite-stabilization.plan.md
+35-2Lines changed: 35 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -96,12 +96,20 @@ Tracked failing tests from the current baseline:
96
96
Fix path:
97
97
- remove the CI-only per-context routed warmup, keep only the one-time shared-runtime warmup, and make every returned test page follow the same bootstrap path locally and on CI
98
98
-[ ]`StandaloneAppFixture` build break: `WarmUpContextPageIfNeededAsync` missing in `StandaloneAppFixture.cs`
99
+
-[x]`StandaloneAppFixture` build break: `WarmUpContextPageIfNeededAsync` missing in `StandaloneAppFixture.cs`
99
100
Symptom:
100
101
- compiler reports `CS0103` for `WarmUpContextPageIfNeededAsync` from `tests/PrompterOne.Web.UITests/Infrastructure/StandaloneAppFixture.cs`
101
102
Root cause:
102
-
-verify whether the current workspace already contains the moved helper in `StandaloneAppFixture.Warmup.cs`and whether the failing build came from an older not-yet-published tree versus a real current partial-class mismatch
103
+
- the warmup helper had already been split into the partial fixture, but the published tree and the active fixture callers drifted until the shared warmup path and callers were brought back into the same compiled partial surface
103
104
Fix path:
104
-
- confirm the helper is present in the compiled partial, keep the calling signature aligned, and re-run the required local build after the active full-suite run completes
105
+
- keep the helper in the compiled partial, align the callers with that partial surface, and prove the fix with the required local build and full solution test commands
- the blank-draft drop scenario updated the source text and title but intermittently left toolbar undo disabled, especially once untitled autosave assigned a real `?id=` route
109
+
Root cause:
110
+
- dropping onto an untitled draft triggered autosave self-navigation that reloaded the editor and reset document history, so slower runs could lose undo state before the assertion clicked it
111
+
Fix path:
112
+
- preserve editor history across untitled autosave self-navigation and make the browser regression wait for the persisted route before asserting undo/redo on the post-save editor surface
105
113
-[ ]`Release Pipeline` run `24209085607` still fails on GitHub macOS despite the local full-suite baseline being green on the same `727d904` commit
106
114
Symptom:
107
115
-`Shell` and `Studio` fail remotely while local `dotnet build`, targeted suite runs, and the required solution-level `dotnet test` all pass on the exact pushed commit
@@ -197,6 +205,24 @@ Tracked failing tests from the current baseline:
197
205
- detect when `BrowserRouteDriver` is opening the first routed page from the primed blank test page
198
206
- give only that first routed bootstrap the longer runtime-warmup visibility budget and skip the CI blank bounce for that specific path
199
207
- keep the shorter route-visible contract for already-booted routed pages so normal suite latency does not drift upward
208
+
-[ ]`Release Pipeline` run `24221639706` fails remotely in all four browser suites after commit `7983efe`
209
+
Symptom:
210
+
-`Shell` fails `11` tests, mostly while opening `/library`, plus two invalid learn/teleprompter missing-script flows and two onboarding route-changing clicks
211
+
-`Studio` fails `6` tests, split between first-route `/library` boot, `go-live-back` hangs, and `StartRecording` click paths that stall on scheduled navigation waits
212
+
-`Reader` fails `3` tests: two responsive-layout screenshot captures on iPad Pro portrait and one teleprompter muted-chrome visual threshold
213
+
-`Editor` fails multiple route-changing action tests, including `Open in Library` from split results and import/drag-drop flows that do not wait on the real completion signal
214
+
Root cause:
215
+
-`BrowserRouteDriver` still lets `TimeoutException` escape from the page-visible probe, so the shared route retry loop is bypassed on CI
216
+
- the harness still contains route/open divergence between runtime warmup and scenario route opens, and shared contexts can be published before priming fully succeeds
217
+
- several suites still use raw SPA clicks that wait for scheduled navigation even though the tests already do explicit post-click route or readiness waits
218
+
- responsive screenshot capture is still a one-shot operation, so artifact generation itself can fail otherwise healthy route assertions
219
+
- a production Go Live route-leave path still blocks navigation on camera detach work
220
+
Fix path:
221
+
- make route-open retries catch timeout failures at the shared driver boundary and remove CI-only route-open behavior
222
+
- publish shared contexts only after priming succeeds and reuse the shared route driver from runtime warmup
223
+
- introduce a shared `NoWaitAfter` click helper for SPA route/state-changing controls and use it in the failing Shell, Studio, and Editor flows
224
+
- retry page screenshot capture in the shared artifact helper
225
+
- stop awaiting camera detach inside `GoLivePage` location-changing so route leaves are not blocked by cleanup
200
226
201
227
## Ordered Plan
202
228
@@ -234,6 +260,7 @@ Tracked failing tests from the current baseline:
-`dotnet test @./tests/dotnet-test-progress.rsp --solution ./PrompterOne.slnx --max-parallel-test-modules 1` passed with `1162/1162` green in `7m 42.943s`
263
+
- post-format verification repeated successfully with `dotnet build ./PrompterOne.slnx -warnaserror` and `dotnet test @./tests/dotnet-test-progress.rsp --solution ./PrompterOne.slnx --max-parallel-test-modules 1`, ending at `1162/1162` green in `7m 35.996s`
237
264
238
265
-[ ] Step 5. Publish directly to `main`.
239
266
Actions:
@@ -258,6 +285,12 @@ Tracked failing tests from the current baseline:
-`dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Studio/PrompterOne.Web.UITests.Studio.csproj` passed with `38/38`
288
+
-[ ] Follow-up remediation for remote run `24221639706`
289
+
Pending focused validation:
290
+
-`dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Shell/PrompterOne.Web.UITests.Shell.csproj`
291
+
-`dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Studio/PrompterOne.Web.UITests.Studio.csproj`
292
+
-`dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Reader/PrompterOne.Web.UITests.Reader.csproj`
293
+
-`dotnet test @./tests/dotnet-test-progress.rsp --project ./tests/PrompterOne.Web.UITests.Editor/PrompterOne.Web.UITests.Editor.csproj`
261
294
-`dotnet test @./tests/dotnet-test-progress.rsp --solution ./PrompterOne.slnx --max-parallel-test-modules 1` passed with `1162/1162` green in `7m 50.591s`
262
295
-[x] Follow-up local verification after the first-route primed-blank bootstrap change
0 commit comments