Commit Graph

10945 Commits

Author SHA1 Message Date
Yana Matrosova fcc4cbceea NYM-1199: full member/operator families journey green on sandbox (all 9 cmds)
Add a two-account member/operator journey (`--member`) to the sandbox smoke and
verify the remaining 6 execute commands end-to-end on chain. owner=FAMILY_OWNER
(controls family 1), operator=ACCOUNT_WITH_BONDED_NODE (controls node_id 31):
kick → invite/reject → invite/revoke → invite/accept/leave, each with per-step
state assertions, then restores node 31's membership (verified via --accounts:
family 1 back to 1 member). A real pre-existing family is left exactly as found.

Also adds read-only `--accounts` (prints owner/operator on-chain state) and
generalizes the .env loader to multiple keys (TAURI-WALLET / FAMILY_OWNER /
ACCOUNT_WITH_BONDED_NODE mnemonics) — all read at runtime, never printed.

With the earlier `--write` owner subset (create/update/disband), all 9 families
execute commands + the queries are now confirmed against the deployed sandbox
contract. Tasks 5.2/5.3/5.4 marked done; e2e/README updated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 18:34:40 +03:00
Yana Matrosova 56cafe2370 NYM-1199: add read-only --bond-check to sandbox families smoke
Adds `--bond-check <address>` to report which node (nym-node / mixnode /
gateway, with node_id) an arbitrary account controls on the sandbox mixnet
contract — read-only, no state change. Used to confirm whether a candidate
account can act as the node operator for the invite/accept/kick flow.

Finding on sandbox: the family-owner accounts (n13nrrvw…, n18cuqlr…) control
no bonded node, so exercising the 6 member commands still needs an account
that controls a bonded node + its mnemonic.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 18:08:13 +03:00
Yana Matrosova fcf24f0c33 NYM-1199: extend sandbox smoke to the full 9-command families lifecycle
Expand sandbox_families_smoke.rs from create→rename→disband to the complete
owner+operator journey, exercising all 9 execute commands against sandbox: the
account acts as both family owner and node operator, so one funded account
drives create → invite → revoke / reject / accept → leave / kick → disband,
each step gated on a state-poll assertion (pending present/absent, membership
joined/left).

The numeric node_id is resolved from the mixnet contract (owned nym-node, else
legacy mixnode). When the account controls no node, the harness runs the
owner-only subset (create/update/disband) and skips the 6 member-management
commands with a notice instead of aborting — so it stays useful either way.

Verified on sandbox: read smoke + owner subset green (real tx hashes, state
cleaned up). The member commands are implemented and auto-run once a node is
bonded to the account — currently the funded account `n13jtj2…` is an address,
not a node, and a bond lookup (nym-node/mixnode/gateway) finds nothing for it,
so there is no node_id to invite/accept/kick yet. Tasks 5.2-5.4 updated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 17:45:41 +03:00
Yana Matrosova 645b8c7abf NYM-1199: sync Cargo.lock to workspace 1.21.1 bump 2026-06-10 17:33:02 +03:00
Yana Matrosova 3a77eff16b NYM-1199: sandbox families read smoke + guarded write journey (real IPC verified)
Add a headless sandbox smoke (src-tauri/examples/sandbox_families_smoke.rs) that
exercises the node-families real-IPC layer against the contract deployed to
sandbox, via the same validator-client calls the Tauri commands wrap. GUI
automation of the real wallet can't run on macOS (tauri-driver is Linux/Windows
only; Playwright can't drive the native webview), so this is the runnable
equivalent of the manual Tier-3 smoke.

- Read smoke (task 4.1): resolves the bundled sandbox families contract address,
  reads Config from raw state, lists live families/members/pending invites via
  real IPC. Passes against sandbox (2 families, fee 50 NYM, limits 30/50).
- Guarded write journey (task 5.2, `-- --write`): create -> rename -> disband on
  the funded test account, with on-chain-latency polling and cleanup; refuses to
  run if the account already owns a family. All three txs confirmed on sandbox.
  invite/accept/reject/kick/revoke/leave are wired but need a controllable,
  unaffiliated sandbox node id (5.3 / rest of 5.2 still pending that fixture).

The funded account mnemonic is read from .env (TAURI-WALLET-MNEMONIC, gitignored)
at runtime and never printed or committed. Run instructions added to e2e/README.md;
tasks 4.1/4.2 marked done, 5.2/5.4 partial, 5.3 still blocked on a node fixture.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 17:25:19 +03:00
Yana Matrosova b0dbb174cb NYM-1199: mark node-families-real-ipc docs tasks (6.3, 6.4) complete
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>
2026-06-10 16:51:47 +03:00
Yana Matrosova 50382553c2 NYM-1199: implement real Node Families IPC (Rust command layer + provider wiring)
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>
2026-06-10 16:51:46 +03:00
Yana Matrosova 1bb7b1f68b NYM-1199: generate TypeScript types for node-families contract via ts-rs 2026-06-10 16:49:44 +03:00
Yana Matrosova 44a87e79de NYM-1199: resolve open questions for node-families-real-ipc 2026-06-10 16:49:44 +03:00
Yana Matrosova 2baf9aca95 NYM-1199: Propose implementation of real Node Families IPC in wallet
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.
2026-06-10 16:49:39 +03:00
Yana Matrosova c9e2d18ef3 NYM-1199: Add visual flow report for Node Families E2E tests
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.
2026-06-10 16:49:39 +03:00
Yana Matrosova 2007894ee6 NYM-1199: wire + verify mock Tauri binary for WebdriverIO) 2026-06-10 16:49:39 +03:00
Yana Matrosova f25bc99e5c NYM-1199: Finalize native webview E2E wiring / unblock mock binary build
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.
2026-06-10 16:49:39 +03:00
Yana Matrosova 0e386b3b92 NYM-1199: Node Families E2E with mock app shell & native webview tests
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.
2026-06-10 16:49:39 +03:00
Yana Matrosova 7b061caf46 NYM-1199: Finalize Node Families E2E design for mock and native tests
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.
2026-06-10 16:49:34 +03:00
Yana Matrosova 919ea1e981 NYM-1199: Realign Node Families E2E strategy with Playwright as primary
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.
2026-06-10 16:49:33 +03:00
Yana Matrosova cdb88cc08f NYM-1199: Update Node Families E2E openspec for CI and recent merges
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.
2026-06-10 16:49:33 +03:00
huximaxi 1d9215a0c0 [DEV] add Code Connect scaffold for FamilyPage (NYM-1199)
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>
2026-06-10 16:49:33 +03:00
huximaxi eb774da916 [DEV] apply Nym 2.0 token swap to wallet MUI theme (NYM-1199)
Seven palette values updated from Nym 2.0 design system (nym-color-tokens_fin.html):
highlight #5BF0A0, info #485ECA, error #E73E14, linkHover #5BF0A0,
bg.main #0A0A0A, bg.paper #1A1A1C, text.subdued #AEACB1.

Adds nym2-tokens.ts (canonical Nym 2.0 values, dark + light) and
nym2-map.ts (documents confirmed vs deferred changes). Light mode
and success semantic split deferred to follow-up.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 16:49:29 +03:00
Mark Sinclair 84fd7fe57f GitHub Actions: try another way 2026-06-10 16:49:28 +03:00
Mark Sinclair 5723a828fa GitHub Actions: rsync args 2026-06-10 16:49:28 +03:00
Mark Sinclair e63ed3fb99 GitHub Actions: path typo 2026-06-10 16:49:28 +03:00
Mark Sinclair da69934be1 GitHub Actions: typo 2026-06-10 16:49:28 +03:00
Mark Sinclair ce1739fe5a GitHub Actions: add storybook upload 2026-06-10 16:49:28 +03:00
Yana Matrosova 7d72526405 NYM-1199: Add openspec for Node Families native webview E2E testing
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.
```
2026-06-10 16:49:28 +03:00
Yana Matrosova 5650bfbd4e NYM-1199: Add manual Storybook variants for Node Families flows
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.
2026-06-10 16:49:27 +03:00
Yana Matrosova 5baccc4a97 NYM-1199: Add Node Families wallet feature with comprehensive UI and E2E tests
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.
2026-06-10 16:49:27 +03:00
Jędrzej Stuczyński c0a1c77709 giving the AI friends a bit of reality check 2026-06-10 16:49:19 +03:00
Yana Matrosova 4f51e50fb1 Refine specs with open questions 2026-06-10 16:49:19 +03:00
Yana Matrosova 41fadee392 Update README 2026-06-10 16:49:19 +03:00
Yana Matrosova 87b5dcfd05 NYM-1199: integrate OpenSpec AI for Node Families UI
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.
2026-06-10 16:49:19 +03:00
Jędrzej Stuczyński 52949f825a chore: add retries for retrieving chain data (#6847)
* chore: add retries for retrieving chain data

* added retry backoff
2026-06-10 09:54:36 +01:00
Jędrzej Stuczyński 2705330595 feat: introduce node families contract query for Config retrieval (#6870) 2026-06-10 09:54:13 +01:00
benedetta davico fa842ceb4f Merge pull request #6871 from nymtech/master 2026-06-09 18:17:22 +02:00
Jędrzej Stuczyński 3730260cf0 feat(nym-node): mixnet packet latency instrumentation (#6852)
- PacketTrace stopwatch + generic Traced<T> carrier threaded receive -> socket-write
- TraceStage enum owns each stage's metric name/help/buckets; observations go straight
  to the global nym-metrics registry under a uniform mixnet_packet_* family
- stages: Unwrap, ReplayCheck (incl. deferral), ForwarderQueue, DelayQueue,
  DelayQueueOverrun (lateness beyond target release), EgressQueue, SocketWrite, Total
- node-side 1-in-N sampling via MixnetDebug.egress_trace_sample_rate (default 100, 0 disables)
2026-06-09 16:22:14 +01:00
benedetta davico 6bf48de7ba Merge pull request #6869 from nymtech/release/2026.11-xynomizithra
merge release/2026.11 xynomizithra to master
2026-06-09 16:25:10 +02:00
benedettadavico 799dfd59bb Merge branch 'release/2026.11-xynomizithra' into develop 2026-06-09 16:24:28 +02:00
Jędrzej Stuczyński f944348216 bugfix: restore and fix node throughput tester (#6849) 2026-06-09 15:19:37 +01:00
Merve 26955dd74b [DOCs/operators]: Release notes for v2026.11-xynomizithra (#6866)
* test identity

* docs: add changelog for v2026.11-xynomizithra

* operators tools and updates

* add automated stats

* add hosting domains

* add ts sdk to changelog

* fix lang flow

---------

Co-authored-by: serinko <97586125+serinko@users.noreply.github.com>
Co-authored-by: mfahampshire <maxhampshire@pm.me>
2026-06-09 16:14:01 +02:00
mfahampshire 7c890ea0c5 TS SDK docs (#6840)
* 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
2026-06-09 13:31:08 +00:00
benedetta davico 1bc5169691 Remove TODO comments for contract addresses nym-binaries-v2026.11-xynomizithra 2026-06-09 15:07:03 +02:00
benedettadavico a900656ec8 add NF contract address 2026-06-09 15:04:40 +02:00
import this 4fcec99cc2 feat: automated bond (#6860)
* initialise bonding automation

* initialise autobond flow

* docs for autobond

* tweak docs and add scraped stats

* resolve issues

* fix issues

* add extra command advice

* fix rabbitai suggestions

* fix rabbitai suggestions
2026-06-09 14:48:53 +02:00
Tommy Verrall 8ce06dbc0e Merge pull request #6867 from nymtech/wallet/bump-for-release
Wallet version bumps
2026-06-09 10:51:54 +02:00
Tommy Verrall b866be4fcf Wallet version Bumps
- Update the wallet to the latest version
nym-wallet-v1.2.21
2026-06-09 09:54:35 +02:00
Tommy Verrall 37bd66236a Merge pull request #6865 from nymtech/fix/wallet-ux-improvements
Fix wallet minor UX improvements
2026-06-09 09:48:24 +02:00
Tommy Verrall 906a93719f Fix CI Ubuntu 2026-06-08 20:02:37 +02:00
Tommy Verrall 54779175f1 Fix CI linting 2026-06-08 19:19:59 +02:00
Tommy Verrall 6f5e831127 PR comments
- 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.
2026-06-08 19:10:36 +02:00
Tommy Verrall 13d48b4bb6 Another round of fixes
- 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.
2026-06-08 19:06:13 +02:00