The e2e/README.md real-IPC + sandbox-smoke docs and the parent change §9.4
cross-ref already landed in ee1e6c4ac; reconcile the task checkboxes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the missing Tauri command layer for the node-families contract and switch
the wallet's real provider onto it (node-families-real-ipc groups 1-3, docs).
Rust command layer (src-tauri/src/operations/families/):
- execute.rs: 9 state-changing commands over NodeFamiliesSigningClient, auto/
simulated gas; create_family attaches create_family_fee as base-denom funds.
Returns TransactionExecuteResult (family_events omitted per D2 - the provider
refreshAll()s reads after every execute).
- query.rs: 9 reads over NodeFamiliesQueryClient, normalised at the IPC boundary
to the wallet shapes in src/types/families.ts: base Coin -> display DecCoin
(paid_fee, create_family_fee), per-page contract envelopes -> { items,
start_next_after }, cw_serde tagged FamilyInvitationStatus -> { kind, at }.
get_family_config reads raw contract state at the "config" key (no smart query).
- Registered all 18 commands in main.rs; added the contract-common path dep.
- cargo build + cargo clippy clean.
Provider wiring:
- Replace the controlledNodeIds = [] stub in FamiliesContextProvider with a
derivation from useBondingContext().bondedNode ([nodeId]/[mixId]/[]); wrap the
/family route in BondingContextProvider (it is per-route, not global). D3.
- Fix the requests/families.ts execute bindings to pass camelCase arg keys
(Tauri maps JS camelCase -> Rust snake_case params).
Types reconciliation + drift guard:
- Fix the generated FamilyInvitationStatus `at` field (bigint -> number) and
export the 18 generated family types from the @nymproject/types barrel.
- Add src/types/families.contract-guard.ts: tsc-checked assertions locking the
wallet families types against the ts-rs-generated contract types; IPC-normalised
fields excluded with documented reasons.
Docs: real-IPC path + guarded sandbox write-flow procedure in e2e/README.md;
design D3 one-bonded-node-per-account note; parent change 9.4/9.5 cross-ref;
update_family arg shape confirmed against the contract (6.2).
Families Jest suites green; contract guard passes. Remaining sandbox read/write
smokes (3.3, groups 4-5) need a wired native build + sandbox + the funded test
account, tracked in tasks.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This change introduces the design, requirements, and tasks for connecting the
Node Families UI to the on-chain contract via the wallet's Tauri IPC layer.
The frontend currently calls 18 commands that are not implemented on the
Rust side, leaving a gap between the mock UI and the deployed contract.
This proposal details how to bridge this gap, replace the mock provider
with real data, and verify journeys against the sandbox environment.
Enhances Playwright E2E tests by capturing full-page screenshots at each
journey step, which are then stitched into a static `e2e-report/index.html`
filmstrip.
This report is uploaded as a CI artifact (even on failure) to provide a
visual overview of test execution, aiding in the detection of UI regressions
and expediting debugging of test failures.
This commit completes the setup for `tauri-driver` E2E tests by correctly wiring the mock binary and resolving a blocking build issue.
Key changes include:
- Implementing the `tauri.mock.conf.json` to boot the mock binary into `main.mock.html` and configuring persona-specific in-webview navigation within the E2E spec.
- Resolving a long-standing `webpack:prod` failure by adjusting `tsconfig.json` with `outDir: ./.tsbuild` and excluding test files from the main program, alongside adding a `declare module '*.css'` type declaration.
- Updating `wdio.conf.ts` and documentation to reflect the completed native leg wiring.
Implements the new Node Families E2E testing strategy, shifting the primary Playwright suite from Storybook iframes to a dedicated mock-wired app shell (`main.mock.html`). This provides higher-fidelity testing against the actual wallet UI and router without a Tauri runtime or login.
Also introduces an optional WebdriverIO + `tauri-driver` suite for native WebKitGTK webview validation, configured as a non-blocking CI job for Linux. A critical fix for `NymCard`'s `data-testid` prop is included to enable robust UI selectors across all E2E tiers.
Updates CI workflows, adds new scripts for mock builds and native tests, and provides comprehensive documentation in `e2e/README.md` for the tiered testing approach.
Resolves open questions, detailing runtime persona selection for the mock server (D2), consolidating the Playwright suite (D10), scoping the native leg to Linux-only (D8), and introducing a manual sandbox smoke test (D9). Updates related tasks accordingly.
Revises the end-to-end testing approach for Node Families. The primary
E2E suite now uses Playwright against the mock-wired dev server, ensuring
cross-platform coverage including macOS and reusing existing tooling. The
WebdriverIO + tauri-driver native-webview suite is re-scoped as an
optional, CI-only validation leg. Additionally, an optional read-only
sandbox IPC smoke test is introduced for higher fidelity.
This commit refines the design, proposal, and tasks for Node Families native webview E2E testing.
It reconciles the plan with recent merges, including the `ci-nym-wallet-frontend.yml` workflow (detailing the separate E2E job), Figma Code Connect, and the Nym 2.0 theme swap. The updates provide clearer guidance on CI integration and potential feature interactions.
Installs @figma/code-connect 1.4.7 as dev dependency. Adds figma.config.json
at nym-wallet root (include: src/**/*.figma.tsx). Creates FamilyPage.figma.tsx
mapping FamilyPage to Figma node 1861:1889 (Node Families composite,
moIK1E6AaXhFz8lI1pZVrI). Publish is Tier-1 gated — run separately with PAT.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This openspec outlines the design, proposal, requirements, and tasks to implement end-to-end tests for the Node Families feature within the actual Tauri desktop shell. It aims to verify the UI and user journeys against the native webview, complementing existing Storybook-based E2E tests.
The plan involves using WebdriverIO and `tauri-driver` to drive a mock-wired Tauri build, ensuring mock code is tree-shaken from production. These tests will run in Linux CI, providing confidence that the feature behaves as expected in its native environment.
```
Introduces interactive versions of the owner and operator lifecycle stories.
These allow developers to manually trigger actions (create, invite, accept,
kick, disband, leave) and observe UI state changes, complementing the
existing automated 'play' function stories.
This commit introduces the complete frontend implementation for the Node Families feature. It includes:
- All owner-side UI (create, edit, invite, manage members, disband) and operator-side UI (view/accept/reject invites, leave family).
- Client-side state management, query hooks, and Tauri IPC bindings.
- A full in-memory mock contract for isolated testing.
- Extensive Storybook component, page, and flow stories.
- Playwright end-to-end tests running against Storybook.
- Updates spec documentation with Figma design sources and resolves open questions.
This commit introduces the foundational setup for developing the Node Families wallet frontend. It integrates the OpenSpec AI development workflow, including prompts and skills, to enable a structured, AI-assisted approach. Additionally, Storybook is configured for comprehensive UI component visualization, mocking, and testing for the new features.
Refers to NYM-1199.
* First sweep packages + some minor tweaking
* Second sweep
* Regenerate lockfile + package.json mods
* Regenerate lockfile again
* Fix CI
* Fix CI again
* All building properly
* unblock
* Tweak examples
* Comments + readme + fix rotten unit test
* First pass docs
* Big pass
* Massive pass on new docs
* Update integrations.md w mobile
* Partial overhaul review
* new playground + big pass
* new fix lychee err
* IPR notice tweak
- Account loading now dedupes in-flight requests per network instead of sharing one global promise across all networks.
- Regression tests cover same-network reuse and cross-network isolation.
- Transaction success is now checked through a shared helper that validates hash, gas usage, and response payloads, not hash presence alone.
- Node settings error helper renamed to match its broader scope.
- Balance refresh now owns the loading flag so nested balance and vesting fetches do not race each other.
- Unbond modal removes the non-null assertion on compounded rewards.
- Unbond totals no longer default malformed amounts to zero; a warning appears when exact totals cannot be calculated.
- Hostname updates no longer treat an empty transaction hash as success.
- Sign-in navigation is gated on successful account load with regression tests.
- Account loading is deduplicated so sign-in no longer fires two concurrent network switches.
- Main window boot relies on the network effect only; rust state init no longer double-loads the account.
- NYM price cache clears on sign-out.
- Wallet no longer forces fullscreen on launch - auth and main windows keep the same size and position when switching.
- Sign-in and balance loading feel smoother, with less layout jump on the home screen.
- Saving a node hostname shows the transaction fee upfront, warns when funds are low, and surfaces clear errors on failure.
- Operator unbond confirmation shows pledge plus compounded operator rewards (delegator stake stays separate).