7.5 KiB
E2E and UX Report
Date: 2026-03-14
Repo: fiscal clone
Command run: bun run test:e2e
Executive Summary
The full Playwright suite did not pass. Result: 4 passed, 6 failed, 1 did not run.
The most important product issues surfaced by the run and manual pass were:
- The overview workflow can land in a non-recovering loading state with no actionable guidance.
- Auth/session reliability appears unstable under realistic navigation and parallel activity.
- Filing sync creates noisy, duplicated notifications that follow the user across pages.
- The filings workflow communicates one filter state while showing data from multiple tickers.
Automated E2E Outcome
Artifacts are under output/playwright/.
Failed specs:
-
e2e/analysis.spec.ts:shows the overview skeleton while analysis is loading- Failure: timed out waiting for
Microsoft Corporation. - Observed state: app chrome rendered, but the page remained on
Loading company overview. - Artifacts:
output/playwright/test-results/analysis-shows-the-overvie-6b9b1-n-while-analysis-is-loading/error-context.mdoutput/playwright/test-results/analysis-shows-the-overvie-6b9b1-n-while-analysis-is-loading/test-failed-1.png
- Failure: timed out waiting for
-
e2e/financials.spec.ts:renders the standardized operating expense tree and inspector details- Failure: timed out waiting for
Normalization Summary. - Observed state: page stayed in a loading shell in the failing run.
- Artifacts:
output/playwright/test-results/financials-renders-the-sta-7a51f--tree-and-inspector-details/error-context.mdoutput/playwright/test-results/financials-renders-the-sta-7a51f--tree-and-inspector-details/test-failed-1.png
- Failure: timed out waiting for
-
e2e/financials.spec.ts:shows not meaningful expense breakdown rows for bank pack filings- Failure: sign-up flow never reached
Command Center. - Observed state: browser ended on
Secure Sign In. - Inference: auth/session creation or post-signup redirect is intermittently failing.
- Artifacts:
output/playwright/test-results/financials-shows-not-meani-c9d8d--rows-for-bank-pack-filings/error-context.mdoutput/playwright/test-results/financials-shows-not-meani-c9d8d--rows-for-bank-pack-filings/test-failed-1.png
- Failure: sign-up flow never reached
-
e2e/graphing.spec.ts:supports graphing compare controls and partial failures- Failure: sign-up flow never reached
Command Center. - Observed state: browser ended on
Secure Sign In.
- Failure: sign-up flow never reached
-
e2e/graphing.spec.ts:distinguishes not meaningful metrics from missing data in the latest values table- Failure: sign-up flow never reached
Command Center. - Observed state: browser ended on
Secure Sign In.
- Failure: sign-up flow never reached
-
e2e/research-mvp.spec.ts:supports the core coverage-to-research workflow- Failure: strict-mode locator conflict on
NVDA status. - Observed state: the page exposed two matching controls for the same accessible name.
- Inference: duplicated DOM or duplicated accessible controls in the coverage row.
- Artifacts:
output/playwright/test-results/research-mvp-supports-the-core-coverage-to-research-workflow/error-context.mdoutput/playwright/test-results/research-mvp-supports-the-core-coverage-to-research-workflow/test-failed-1.png
- Failure: strict-mode locator conflict on
Runtime notes from the run:
sqlite-vecfell back to table-backed storage repeatedly.- workflow-local reported
concurrency limit (1) reached. - Live server logs repeatedly failed background filing workflows with:
SQLiteError: table filing_taxonomy_snapshot has no column named parser_engine- Inference: the local/e2e database schema is behind the code path used by filing taxonomy persistence.
- The suite completed in about 1.2 minutes before failing.
Manual Workflow Findings
Critical
-
Overview page does not distinguish loading vs failure vs empty data.
- Visiting
/analysisrendered the full page shell but stayed onLoading company overview. - The user gets no timeout, error explanation, retry guidance, or indication that background filing tasks failed.
- The local server logs showed repeated filing workflow failures caused by a schema mismatch on
filing_taxonomy_snapshot.parser_engine, which likely contributes directly to this broken state. - This is a broken primary workflow, not just a cosmetic state issue.
- Visiting
-
Auth confidence is too low.
- Three failed specs fell back to
Secure Sign Inimmediately after supposed account creation. - A user-facing version of this would feel like silent account creation failure or dropped session state.
- Three failed specs fell back to
-
Filings filter messaging is misleading.
- The page header said
100 records loaded for NVDA, but the ledger visibly contained bothNVDAandMSFTrows. - This breaks user trust because the UI claims a scoped result set while showing cross-ticker data.
- The page header said
High
-
Notification spam degrades every workflow.
- Coverage creation and navigation produced stacked
Filing synctoasts. - Multiple toasts showed nearly identical states and remained visible across pages.
- Because failed background jobs keep retrying or re-reporting progress, the user sees noise instead of one durable status surface.
- The notifications panel becomes ambient noise instead of actionable feedback.
- Coverage creation and navigation produced stacked
-
Coverage actions can trigger expensive side effects without clear consent.
- Adding one coverage record immediately started sync-related background activity.
- There is no up-front explanation of what will be fetched, how long it may take, or whether it can be deferred.
-
Research workspace has high cognitive load on first entry.
- Filters, note capture, uploads, memo editing, and packet review all appear at once.
- The page is powerful, but the first-time path is unclear and there is no obvious recommended sequence.
Medium
-
Empty states on Financials and Graphing are under-instructive.
- Financials:
No rows available,No trend data, and zeroed normalization metrics do not tell the user whether they need to sync, change ticker, or wait. - Graphing:
No chart data availableappears after opening a prefilled compare set, which makes the default state feel broken.
- Financials:
-
Upload interaction in Research is confusing.
- The page exposes two controls with the label
Upload file, one active and one disabled. - That is confusing visually and poor for keyboard/screen-reader users.
- The page exposes two controls with the label
-
Navigation context is inconsistent.
- Some links carry ticker context and others drop back to untickered routes such as
/analysis. - The app often compensates by defaulting to
MSFT, but that is implicit and can feel arbitrary.
- Some links carry ticker context and others drop back to untickered routes such as
-
Filings table density is too high by default.
- Loading 100 records into a single ledger creates a long scan path before the user can find the next action.
- Pagination, grouped sections, or stronger filter summaries would reduce cognitive load.
Low
favicon.icoreturns 404.- The boot splash and auth handoff add a short delay before the real screen appears, but do not communicate whether the app is loading, redirecting, or checking session state.
Suggested Fix Order
- Stabilize post-signup session creation and redirect behavior.
- Make
/analysisfail loudly and recoverably instead of hanging in a loader. - Fix filings filter truthfulness so the page never claims
NVDAwhile rendering mixed results. - Deduplicate or batch filing sync notifications.
- Add next-step empty states to Financials and Graphing.
- Reduce first-run complexity in Research with a guided progression or collapsed sections.
- Remove duplicate accessible controls and labels in Coverage and Research upload flows.
Notes
The manual pass used the repo's e2e server entrypoint: bun run e2e:webserver.