Skip to content

Release: develop -> main - #146

Merged
TaprootFreak merged 6 commits into
mainfrom
develop
May 31, 2026
Merged

Release: develop -> main#146
TaprootFreak merged 6 commits into
mainfrom
develop

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automatic Release PR

Commits: 1 new commit(s)

  • Review all changes
  • Verify CI passes
  • Merge when ready for production

Adds src/__tests__/components/Onboarding-create.test.tsx (10 tests).
Onboarding.tsx is 869 LOC; SetPassword.test.tsx (password stage)
and Onboarding-restore.test.tsx (restore path) leave the SeedFlow
create path + Welcome routing uncovered. Coverage on Onboarding.tsx
rises from ~57 % to ~80 %+ on lines.

Covers:
- Welcome render: heading + three benefit cards + both CTAs
- Welcome → SeedFlow routing on CREATE WALLET (PRD bundle);
  Back via StepHeader returns to Welcome
- SeedFlow stages: blurred grid + Tap-to-reveal overlay →
  revealed mnemonic + "I've written it down" → "Continue"
  confirm → password stage
- Full create happy path: account written, authMethod='seed',
  balance fetched
- Non-fatal balance error: restore still completes, balance null
- create() error rollback: createAccountFromMnemonic throws →
  stage rolls back to password, seed-error visible, no store
  writes
…direct (#106)

Adds src/__tests__/app/receive.test.tsx (7 tests).
ReceivePage was at 0 % unit coverage — e2e/08-receive.spec.ts
locks in the styled output but not the copy-feedback timer or the
100 ms grace window on the no-account redirect.

Covers:
- funded render: heading, QR, address card, copy button; back
  link routes to /
- copy feedback: button flips to "Copied" + data-copied="true";
  zk-form address actually lands in happy-dom's clipboard
- revert: 1.5 s setTimeout collapsed → button reverts to "Copy
  address" (targeted setTimeout stub preserves other timers)
- no-account redirect: placeholder render; router.replace('/')
  after 100 ms grace; suppressed when account lands inside grace
…107)

Adds src/__tests__/app/settings.test.tsx (13 tests).
SettingsPage was at 0 % unit coverage. e2e/05-disconnect.spec.ts
covers the styled output but cannot inspect Zustand stores from
Playwright, so the store-side effects of the disconnect flow
were unverified — and the authMethod → recovery-copy mapping
was a build-time output not asserted anywhere.

Covers:
- header + sections: heading, network badge, three always-on
  sections; badge hidden when networkName is empty; Privacy
  section gated by ADDRESS_ROTATION OR TOR_ROUTING
- recovery copy: seed → 12-word phrase text; passkey →
  passkey-derived text; null → "Not configured"
- disconnect flow: accept → wallet + auth stores wiped;
  dismiss → stores untouched; button hidden when no account
- no-account redirect: router.replace('/') after 100 ms grace;
  suppressed when account lands inside
- Toggle interaction (Auto-lock card): defaultOn + disabled →
  click is a no-op
…148)

The staging → develop flow introduced in #138 left every staging-bound
PR without CI: `ci.yaml` and `audit-button-coverage.yml` both filtered
`pull_request.branches: [develop]`, which silently skipped any PR
opened against a non-develop base. The bootstrap PR #138 only
exercised the develop-bound trigger so the gap stayed invisible until
the first staging-bound PR (#147, rebased E2E toast pipeline) tried
to run.

Both workflows now use the node-side trigger shape:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

— no `branches:` filter, so CI runs against every PR regardless of
target branch. Stacked-PR shapes (feature/* → staging → develop, or
deeper) all get a pre-merge gate at every layer.

`push: develop` is preserved as the authoritative post-merge gate;
the audit workflow keeps its `paths:` scope so unrelated file
changes still skip cleanly.

Targets develop directly because this is a bootstrap fix for the
new staging flow — there is currently no way to land it through
staging without CI silently skipping it.
* Add E2E specs for ApiError → German toast pipeline

Three screenshot baselines for the 4xx/5xx error paths introduced by
server PR #31 and surfaced by issue #99:

  - 422 Insufficient funds  → 'Nicht genug Guthaben…'
  - 404 Unknown account     → 'Dieser Account ist auf dem Server…'
  - 500 prove failed        → 'Beweisgenerierung fehlgeschlagen…'

Plus a text-only assertion for the 'Serverfehler <status>: <raw>'
fallback so an unmapped server string can never regress into a raw
Error.message blob.

The mocks use page.route() to return a deterministic structured body,
which avoids the unmount-on-Confirm race that retired the old
err-banner snapshot in 07-send.spec.ts. New spec is staged behind
E2E_REGENERATING in playwright.config.ts; once the regenerate-visual-
baselines workflow commits the linux PNGs, the testIgnore line for
13-send-server-errors.spec.ts must be removed in a follow-up commit.

* fix: block service worker + context-level route for /api/send mock

First regen run timed-out on all four 13-server-error tests with
'Serverfehler 200: legacy: success false with no error string' —
the PWA service worker was passing /api/send through to DEV before
page.route() could intercept, so the real response (200 with no
error field) leaked into the legacy-normalisation path.

  - test.use({ serviceWorkers: 'block' }) takes the SW out of the
    request path entirely
  - page.context().route(/\/api\/send$/, ...) registers the mock
    at the context level with a regex match — bullet-proof against
    cross-origin URL composition and any future SW edge case.

* Land regenerated baselines, activate 13-send-server-errors

  - Pull 3 chromium-linux baselines from bot branch
    e2e/regen-baselines-26058684086 (regen run 26058684086): the new
    13-server-error-insufficient-funds / unknown-account / prove-failed
    PNGs are now committed alongside the spec.
  - Remove 13-send-server-errors.spec.ts from playwright.config.ts
    testIgnore so the regular CI run executes it against the committed
    baselines.
  - Revert the temporary --grep 'issue #99' narrow in
    regenerate-visual-baselines.yml back to the full --grep-invert
    Accessibility scope. The narrow was a workaround for a pre-
    existing DEV FEATURES.FAUCET regression that broke
    06-balance::balance-zero-empty-banner; that test is unrelated to
    this PR and should be reconciled separately.

* docs(handbook): add SPEC 13 section for ApiError toast tests

scripts/sync-handbook-baselines.mjs fails the prebuild if any e2e
chromium-linux baseline isn't referenced from public/handbook/. Adds
a spec-13 section to both index.html and de/index.html describing the
four new tests (3 visual + 1 no-shot text assertion) and pointing to
the freshly generated PNGs.
Promote: staging -> develop
@github-actions

Copy link
Copy Markdown
Contributor Author

[OK] Button-Inventory-Audit — all clear

Checked 72 testid(s) in src/ against 70 reference(s) in e2e/. Nothing to do.

@TaprootFreak
TaprootFreak merged commit b088f20 into main May 31, 2026
20 checks passed
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