Skip to content

feat(recording): pacing rings + spec 03 consolidation + public-view wrap-up - #84

Merged
AquiGorka merged 3 commits into
mainfrom
recording/click-ring-pacing
May 6, 2026
Merged

feat(recording): pacing rings + spec 03 consolidation + public-view wrap-up#84
AquiGorka merged 3 commits into
mainfrom
recording/click-ring-pacing

Conversation

@AquiGorka

Copy link
Copy Markdown
Contributor

Summary

Three commits on top of main, all under the recording rig:

  • single-pulse ring + 2s pre-click delay (9b6e994) — pacing primitive overhaul.
  • pace every moonlight UI click in spec 02 (62fca63) — replace bare clicks with clickWithPause so the ring + pre-click pause apply.
  • consolidate spec 03 + public-view wrap-up (d2cb043) — collapse the original 03a/03b/03c split into a single continuous Bob+Alice flow ending with both wallets toggled back to public view; also fixes the Add Channel scrollbar via CSS injection in openWalletPopup, hardens deposit against late validation, clicks Copy MLXDR on Bob's receive screen, and refreshes the README.

Test plan

  • Full RUN_ID=… npm run record against local stack — all 4 specs pass (~11.3m total)
  • Spec 01 council onboarding — 2.4m ✓
  • Spec 02 provider create + join + approve — 3.2m ✓
  • Spec 03 private transfer (Bob receive → Alice deposit + send → Bob withdraw → both wallets to public view) — 5.0m ✓
  • Spec 04 dashboard tour — 39.6s ✓
  • Verify Add Channel form has no scrollbar in 1280×1080 viewport
  • Verify Bob's public XLM visibly grows after withdraw on the closing public-view beat

AquiGorka added 3 commits May 5, 2026 15:50
Telegraph each automated click with one 700ms ring pulse followed by a
2s pause before the click fires. The global pointerdown listener no
longer double-rings clicks routed through clickWithPause (suppress
flag).

Also paces the Connect Wallet, Freighter modal pick, and Sign In
clicks in the shared auth fixture, gated on __moonlightClickHighlight
so verification runs are unaffected.

Spec 01 holds 3s on the assets step and routes the final done-btn
through clickWithPause.
Wraps create-pp / next / fund / discover / join / council-link /
approve clicks with clickWithPause and replaces .fill() with
typeSlowly so the provider create + join + approve flow paces
identically to spec 01 in the recording.

Adds scrollIntoViewIfNeeded inside paceForRecording so the
Connect Wallet ring lands in-viewport on consoles (e.g.
provider-console) where the button renders below the fold.
Section 03 is now a single continuous Bob+Alice flow: Bob receive →
Alice deposit + send → Bob withdraw. Both wallets toggle back to
public view at the end so the recording surfaces the on-chain XLM
balances proving deposit + withdraw landed.

Also:
- openWalletPopup injects CSS to override the wallet's hardcoded
  h-[600px] so the Add Channel form no longer shows a scrollbar.
- deposit waits on :not([disabled]) Review button so validation can
  catch up to the last keystroke.
- Click the Copy MLXDR button on Bob's receive screen as a viewer cue.
- README updated to reflect the 4-spec layout, runtime, and consolidated 03.
@AquiGorka
AquiGorka merged commit 31194d8 into main May 6, 2026
6 checks passed
@AquiGorka
AquiGorka deleted the recording/click-ring-pacing branch May 6, 2026 13:01
AquiGorka added a commit that referenced this pull request May 6, 2026
…ate local-dev PRs on invite-gate spec (#85)

## Summary

Two related changes:

1. **Fix the regression** — restore CI-safe defaults in the shared
`playwright/fixtures/contexts.ts`; push recording-only overrides to the
recording specs.
2. **Prevent recurrence** — gate local-dev PRs on the invite-gate spec
so this failure class is caught at the source.

## 1. The regression

PR #82 ([`feat(recording): rig improvements for Tranche 2
demo`](#82)) added
macOS-specific browser launch args + `viewport: null` + 80% page zoom
directly into the **shared** `playwright/fixtures/contexts.ts`. That
file is also imported by the invite-gate playwright spec, which runs in
CI Docker xvfb at `1280x960`.

The `--window-size=1728,1080` override (larger than the xvfb display)
causes Chromium's GPU process to fail initialization in CI:

```
TimeoutError: browserType.launch: Timeout 180000ms exceeded.
[err] [...:ERROR:components/viz/service/main/viz_main_impl.cc:189]
       Exiting GPU process due to errors during initialization
```

This has broken every council-console / moonlight-pay / provider-console
PR opened since 2026-05-05 (PR #82's merge). Recording itself was
unaffected because it runs on macOS host with a real display.

### Fix (commit 1)

- **`playwright/fixtures/contexts.ts`**: restore CI-safe defaults (no
`--start-maximized`, no `--window-size`, viewport `1280x800`, no zoom).
Add a third `options` parameter (`CreateUserContextOptions`) for
per-call overrides.
- **`recording/playwright/fixtures/recording-context.ts`** (new):
exports `RECORDING_CONTEXT_OPTIONS` with the recording-host args +
`viewport: null` + `applyZoom: true`.
- **`recording/playwright/specs/01-council-onboard.spec.ts`** +
**`02-provider-create-join-approve.spec.ts`**: pass
`RECORDING_CONTEXT_OPTIONS` to `createUserContext`.

`invite-gate.spec.ts` and `full-flow.spec.ts` are unchanged — they call
`createUserContext` without overrides and now get the CI-safe shape.

## 2. Why local-dev's own CI didn't catch it

The invite-gate spec only runs from consumer-repo PRs via the reusable
workflow (`invite-gate-reusable.yml`), and that workflow's local-dev
checkout was hardcoded to `main`. local-dev's own E2E pipeline runs the
`e2e/` Docker stack, not playwright. PR #82 went green on local-dev CI
while silently breaking every downstream PR.

### Fix (commit 2)

- **`invite-gate-reusable.yml`**: new `local_dev_ref` input (defaults to
`main`, so existing consumer-repo callers are unchanged).
- **`.github/workflows/invite-gate.yml`** (new): triggers on local-dev
PRs and calls the reusable with `local_dev_ref: ${{ github.head_ref }}`.
PR #82-class regressions now fail CI here on the source PR.

Trade-off: adds ~8 min to every local-dev PR run, plus playwright flake
risk. Worth it given recent infra churn (PRs #82, #83, #84 all touched
test infra in 10 days).

## Test plan

- [ ] After merge, re-run the four open hardening PRs on the consumer
repos (council-console #34, moonlight-pay #26, provider-console #25,
network-dashboard #11) and confirm `invite-gate / invite-gate` goes
green.
- [ ] This PR's own `Invite Gate` CI run (newly added) should pass.
- [ ] Run a recording spec locally (`bash
recording/setup-recording-keys.sh` + `npx playwright test
--config=recording/playwright/playwright.config.ts`) and confirm
Chromium still launches maximized with 80% zoom and click-highlight
intact.
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