Skip to content

Add desktop Playwright e2e harness - #11

Merged
wesbillman merged 1 commit into
mainfrom
codex/add-desktop-playwright-e2e
Mar 10, 2026
Merged

Add desktop Playwright e2e harness#11
wesbillman merged 1 commit into
mainfrom
codex/add-desktop-playwright-e2e

Conversation

@wesbillman

Copy link
Copy Markdown
Collaborator

Summary

  • add a Playwright-based desktop e2e harness with mocked smoke coverage and relay-backed integration coverage
  • add a browser-side Tauri test bridge, stable UI selectors, deterministic seed tooling, and just/package scripts for local runs
  • update the README MCP launch guidance to point at the stdio server flow through Goose

Testing

  • pnpm check
  • pnpm typecheck
  • pnpm build
  • pnpm exec playwright test --project=smoke
  • pre-push hook: cargo fmt --all -- --check, cargo clippy --workspace --all-targets -- -D warnings, ./scripts/run-tests.sh unit, cd desktop && pnpm check, cd desktop && pnpm build, cargo check --manifest-path desktop/src-tauri/Cargo.toml

@wesbillman
wesbillman force-pushed the codex/add-desktop-playwright-e2e branch 5 times, most recently from 5c8375b to eedeb11 Compare March 10, 2026 02:08
@wesbillman
wesbillman force-pushed the codex/add-desktop-playwright-e2e branch from eedeb11 to ac8cb48 Compare March 10, 2026 02:13
@wesbillman
wesbillman merged commit 6e51cc0 into main Mar 10, 2026
8 checks passed
@wesbillman
wesbillman deleted the codex/add-desktop-playwright-e2e branch March 10, 2026 02:16
tlongwell-block added a commit that referenced this pull request Mar 10, 2026
* origin/main:
  Add desktop Home feed (#12)
  Add desktop Playwright e2e harness (#11)
  Update desktop icon and persist window state (#9)
  feat: add channel creation flow (#8)
  Improve message markdown display and formatting (#7)
  feat(desktop): connect chat to relay (#6)
  docs(readme): clarify desktop setup (#4)
  feat: add desktop app (#3)

# Conflicts:
#	crates/sprout-test-client/tests/e2e_rest_api.rs
tlongwell-block added a commit that referenced this pull request Mar 11, 2026
* origin/main:
  feat: soft-delete for events/channels, enriched API responses, NIP-29 group management (#17)
  feat: Channel management, messaging, threads, DMs, reactions, and NIP-29 support (#16)
  Improve chat scrolling and multiline composer (#14)
  chore: remove redundant inline comments across all crates (#13)
  Initial backend revisions, workflow expansion (#5)
  Add desktop Home feed (#12)
  Add desktop Playwright e2e harness (#11)
  Update desktop icon and persist window state (#9)
  feat: add channel creation flow (#8)
wpfleger96 added a commit that referenced this pull request May 22, 2026
…iew findings

The original implementation created a second parallel Tauri command
(discover_all_acp_providers) alongside the existing one to avoid
changing the return type. This produced two commands, two hooks, two
query keys, and two raw type converters. Consolidates into a single
command returning the full catalog, with a useAvailableAcpProviders
hook that type-narrows for callers needing non-null command/binaryPath.

Also fixes: pipe deadlock in install command (#1), UTF-8 truncation
panic (#2/#4), adds install concurrency guard (#11), exact provider ID
match (#15), error display stdout fallback (#5), success banner
suppression when already available (#12), misleading re-run text (#13),
IIFE refactor in PersonaDialog (#14), hidden internal query lift (#7),
configurable e2e mocks (#9), shared raw type exports (#8), and
classify_provider unit tests (#10).
wpfleger96 added a commit that referenced this pull request May 22, 2026
…iew findings

The original implementation created a second parallel Tauri command
(discover_all_acp_providers) alongside the existing one to avoid
changing the return type. This produced two commands, two hooks, two
query keys, and two raw type converters. Consolidates into a single
command returning the full catalog, with a useAvailableAcpProviders
hook that type-narrows for callers needing non-null command/binaryPath.

Also fixes: pipe deadlock in install command (#1), UTF-8 truncation
panic (#2/#4), adds install concurrency guard (#11), exact provider ID
match (#15), error display stdout fallback (#5), success banner
suppression when already available (#12), misleading re-run text (#13),
IIFE refactor in PersonaDialog (#14), hidden internal query lift (#7),
configurable e2e mocks (#9), shared raw type exports (#8), and
classify_provider unit tests (#10).
wpfleger96 added a commit that referenced this pull request May 22, 2026
…iew findings

The original implementation created a second parallel Tauri command
(discover_all_acp_providers) alongside the existing one to avoid
changing the return type. This produced two commands, two hooks, two
query keys, and two raw type converters. Consolidates into a single
command returning the full catalog, with a useAvailableAcpProviders
hook that type-narrows for callers needing non-null command/binaryPath.

Also fixes: pipe deadlock in install command (#1), UTF-8 truncation
panic (#2/#4), adds install concurrency guard (#11), exact provider ID
match (#15), error display stdout fallback (#5), success banner
suppression when already available (#12), misleading re-run text (#13),
IIFE refactor in PersonaDialog (#14), hidden internal query lift (#7),
configurable e2e mocks (#9), shared raw type exports (#8), and
classify_provider unit tests (#10).
troyhoffman-oss added a commit to troyhoffman-oss/buzz that referenced this pull request Aug 5, 2026
…lowing

U+26A1 HIGH VOLTAGE SIGN is `eaw=W` in UAX block#11 and was missing from
`WIDE_RANGES`. That is not the same class of omission as the Ambiguous set the
table deliberately excludes: Ambiguous is a *policy choice* (the Latin policy
the design's mocks are drawn against), Wide is not — every terminal advances
two cells for it.

The cost was a corrupted frame, not a rounding error. `⚡` rides the
channel-list and fleet status suffixes — exactly the rows §3's list-row rule
works hardest to keep intact — so a row measured one column short overflowed
the pane, the terminal wrapped it, and `⚡claude-1 goose-1` drew as
`⚡claude-1 goose-` with a bare `1` alone on the following line.

**It predates this pass by three milestones.** The same wrap is visible in the
M1 captures, at both 120 and 60 columns, and it reads as a layout bug rather
than a measurement one — which is presumably why three dogfood rounds walked
past it. Found here by auditing the Wave 2 captures glyph by glyph against
UAX block#11 rather than by looking at them.

`scripts/check-mocks.ts` carries a duplicate of the table and gets the same
entry. `src/render/width.ts`'s header states the two must stay identical —
"what stops the doc gate and the renderer disagreeing about what 120 columns
means" — and a fix in one alone would let a mock measure 120 while the app
draws 121.

Also here: the W2 capture script must launch the compiled binary from a scratch
directory, never from `tui/`. The binary re-reads whatever `bunfig.toml` is in
its CWD, and that file declares a dev/test `preload` its embedded module graph
cannot resolve — so it dies on startup with `preload not found` even though the
Solid transform is already baked in. `bunfig.toml` documents this and
`scripts/smoke.sh` does the same thing; the interpreted path needs the opposite,
so the launch CWD now follows the `--binary` flag.

Verified: `⚡claude-1 goose-1` now renders intact inside a 60- and a 120-column
row. bun test test/unit — 464 pass 0 fail; test/render — 47 pass 0 fail;
check-mocks against DESIGN.md — 5 mocks match their declared size; tsc, biome
and check-boundary all clean.

Signed-off-by: Troy Hoffman <troy.hoffman@icloud.com>
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