Skip to content

chore(release): v0.9.4 release candidate#3461

Merged
CharlVS merged 41 commits intomainfrom
dev
Apr 2, 2026
Merged

chore(release): v0.9.4 release candidate#3461
CharlVS merged 41 commits intomainfrom
dev

Conversation

@CharlVS
Copy link
Copy Markdown
Collaborator

@CharlVS CharlVS commented Mar 23, 2026

Blocked on the conclusion of the KDF release.

Gleec Wallet v0.9.4 Release Notes

This release packages the current dev branch work for the next main update with broader asset support, a stronger web runtime, and a much larger polish pass across the wallet. Highlights include TRON and SIA flows on top of komodo-defi-sdk v0.5.0, Flutter Web WASM support, runtime-loaded legal documents, refreshed wallet and trading surfaces, and the QA/release infrastructure that came out of the documented polish program.

🚀 New Features

SDK Updates (komodo-defi-sdk-flutter)

This release integrates komodo-defi-sdk v0.5.0 with the audited SDK release changes bringing:

  • TRON and TRC20 Asset Support (SDK#316) - Add TRON/TRC20 coin models and activation support across the SDK stack.
  • SIA Activation and Withdrawal Support (SDK#320) - Add first-class SIA activation and withdrawal handling.
  • High-Level Managers and Typed Errors (SDK#312, SDK#314) - Introduce new balance, transaction, and withdrawal manager layers with richer typed error handling and trading stream plumbing.
  • Token Safety, Fee Helpers, and Cleanup Hooks (SDK#319, SDK#321) - Add token safety checks, fee helpers, and custom-token cleanup support.
  • Startup and Withdrawal Hardening (SDK#318, SDK#322) - Tighten startup fallback handling and remove duplicate withdrawal-path behavior.
  • Stream-First RPC and Caching (SDK#262) - Reduce redundant RPC traffic through managed orderbook and swap-status streams, cached preimage and volume requests, bridge depth dedupe, and slower background polling when trading views are idle.
  • Market Data and Derived Asset Coverage (SDK#215, SDK#254) - Add CoinPaprika fallback quotes and broaden derived-asset protocol coverage in the SDK stack.
  • WASM, Auth, and Streaming Hardening (SDK#315, SDK#328, SDK#329, SDK#330, SDK#332) - Tighten browser interop, metadata safety, test coverage, and streaming startup behavior.

See the full SDK changelog for complete details.

🎨 UI/UX Improvements

More polish work...

⚡ Performance & Responsiveness

Completed responsiveness work...

🐛 Bug Fixes

Completed validation and workflow fixes...

🔒 Security & Compliance

💻 Platform-Specific Changes

Web

Native Platforms

🔧 Technical Improvements

More technical work...

Full Changelog: e50aa370...bc0058a


⚠️ Known Issues

  • Full automated test coverage remains triaged in this repository; manual smoke and release QA are still required.
  • Repo-wide flutter analyze is not green in this checkout because bundled SDK product/example directories under sdk/products/... fail analysis; scoped wallet analysis completed with 0 errors, 17 warnings, and 353 infos via flutter analyze lib app_theme packages test_units test_integration --no-pub.
  • The app currently pins komodo-defi-sdk at submodule commit b5626fdc1d507172a8b37e79d6120423343ff6af; the open SDK release PR also includes post-pin fixes from #335 and #336, which are not yet rolled into this branch.

🙏 Contributors

This release includes contributions from:


For developers building with Komodo DeFi SDK: this app release currently integrates komodo-defi-sdk v0.5.0 pinned at b5626fdc1d507172a8b37e79d6120423343ff6af. Review the SDK release PR GLEECBTC/komodo-defi-sdk-flutter#337 and sdk/CHANGELOG.md for the package-level release details and for the two newer fixes that are not yet included in this app branch.

ca333 and others added 29 commits February 11, 2026 09:31
* chore: add generated deprecation notices for legacy rpc errors

* feat: add polish foundation for trading and withdrawals

* chore: roll sdk foundation pointer
* Port full Flutter WASM support

* chore(gitignore): ignore local AI skill bundles

* chore(sdk): roll submodule for wasm-safe interop cleanup

* fix(web): address WASM review feedback
…#3444)

* fix(app): resolve open findings and adopt sdk manager APIs

* chore(app): roll sdk submodule for pr review fixes

* chore(docs): remove local review artifacts from tracked docs

* chore(app): roll sdk submodule to merged dev commit
* fix(web): isolate cache adapters and update JS interop

* fix(app): backfill wallet metadata display

* chore: update CI Flutter version

* chore: update Flutter packages

* chore: roll Flutter constraints

* chore: update Docker Flutter version
* feat(legal): render terms of service from markdown asset

* fix(legal): prevent tos popup freeze on open

* chore: add pubspec assets

* fix(disclaimer): improve ToS markdown rendering and dialog behavior

* feat(legal): load legal docs from GitHub at runtime

* feat(legal): add kyc policy to settings
* feat(wallet): roll SDK and complete TRON integration

* fix(wallet): handle tron custom token import follow-ups

* fix(wallet): address tron review follow-ups

Preserve native TRX fiat support, send Ramp TRON asset codes correctly, and keep imported TRC20 token decimals aligned with token metadata.

* fix(wallet): address banxa and preview cleanup regressions

* fix(wallet): preserve saved assets during preview rollback

Keep previously saved parent/token metadata intact when a custom-token preview is cancelled, while still fully rolling back preview-only activations.
* fix(ci): preserve native desktop assets during builds

* fix(ci): use target-specific build cleanup to preserve native_assets

The blanket removal of the build directory wipe between the asset-fetching
and real build passes caused web workflows to skip copy_assets and reuse
the stale AssetManifest.bin from the warm-up run. Restore the cleanup
using a find command that wipes all build caches except native_assets,
which desktop builds generate and need to reuse.
* fix(sia): finalize app release integration

* chore(sdk): repoint app SIA branch to sdk/test-sia

Point the app's SIA integration branch at the current sdk/test-sia tip so the submodule references a GitHub-visible commit and the dev PR can be reviewed alongside the SDK PR.

* fix(sia): broadcast suspended state for filtered Trezor SIA assets

When a Trezor wallet has SIA in its activated coins from an older build,
the early return in activateAssetsSync would leave those coins stuck in
the "activating" state because no update was ever broadcast via
enabledAssetsChanges. Now we broadcast CoinState.suspended for each
filtered SIA asset before discarding them, so CoinsBloc correctly
removes them from walletCoins.

* chore(sdk): update submodule to include withdrawal fix (#322)
* fix: preserve search focus across rebuilds

* chore(ci): trigger workflows

* fix(search): stabilize scrollbar tree and wallet search rebuilds

* fix(ui): move hide-balance icon into balance cards to save vertical space

Embed the privacy toggle directly in the balance card instead of a
dedicated row, saving ~48px of vertical space on both mobile and desktop.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ui): equalize desktop wallet overview card heights

* fix(ui): remove intrinsic layout from wallet overview cards

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
fix(auth): resolve activated_coins metadata with explicit user checks

Points sdk at komodo-defi-sdk-flutter dev through the merge of JSON
traversal fixes (#329). Kdf auth metadata helpers no longer use
user?.metadata when reading List<String> activated_coins.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…3454)

* chore(sdk): roll submodule for metadata race fix

Points to GLEECBTC/komodo-defi-sdk-flutter#328 which adds
mutex-protected atomic metadata updates to prevent concurrent
coin activations from overwriting each other's state.

* fix(coins): use atomic metadata updates for coin activation

Batch-write all asset IDs to wallet metadata in a single call before
launching parallel activations, then pass addToWalletMetadata: false
to avoid N concurrent read-modify-write cycles that caused
last-write-wins data loss.

Migrate addActivatedCoins/removeActivatedCoins to use the new
updateActiveUserKeyValue API for atomic single-key transforms.

* chore(sdk): roll submodule to dev (9532870)

Includes fix(auth): add mutex-protected atomic metadata updates (#328).

* chore(sdk): advance submodule to 317719d for WASM valueOrNull fix

The merge from dev picked the fix/metadata-race side's SDK pointer
(9532870, #328 only) instead of dev's pointer (317719d) which also
includes #329 — the reified generics fix for _traverseJson that
prevents valueOrNull<List<String>> from silently returning null
in WASM/minified release builds.

* chore(sdk): bump submodule for trezor test compilation fix

Points to fix/trezor-test-missing-method (ea99ec6) which adds the
missing updateActiveUserMetadataKey stub to _FakeAuthService in
trezor_auth_service_test.dart.

* chore(sdk): roll submodule to dev (c70beed)

Includes #328 (atomic metadata updates), #329 (reified generics for
WASM), and #330 (trezor test compilation fix).

* ci: trigger CI rebuild

* chore(sdk): bump submodule to dev after bundled coins commit merge

Points sdk at 869dd00 (komodo-defi-sdk-flutter dev), including PR #331.
Picks up fix(streaming): gate enable_* calls on real SSE first-byte
event (#332), which prevents UnknownClient errors when subscribing to
orderbook and other event streams.
Advances the SDK pointer to include chore(release): publish packages on
komodo-defi-sdk-flutter dev.
* chore: update v0.9.4 changelog

* chore(sdk): roll merged SDK updates
…3460)

* chore(sdk): bump submodule for market data cache fix (merged #335)

* fix(wallet): stabilize profit/loss chart across period changes

Use restartable handling for period changes, skip stale periodic refresh
cycles when the selected range changes mid-flight, filter chart samples
to the visible window with a leading boundary point, and key the line
chart by selected period so Flutter rebuilds the series correctly.

* fix: harden numeric parsing for recent swaps and related models

* chore: bump sdk submodule to merged numeric parsing fix

* feat(wallet): CEX-backed totals, shared computeWalletTotalUsd, tests

- Extract computeWalletTotalUsd with docs on CEX vs SDK price sources
- CoinsBloc/CoinsRepo: defensive unmodifiable price maps, uppercase keys
- Coin details: watchBalance stream; balancePlaceholder for unknown values
- Export ThemeCustomDark/Light from app_theme to fix implementation_imports
- Add unit tests for computeWalletTotalUsd; add code review notes doc

* fix(web): coerce mm2 JS interop results to int via num

Dartify may return int or double from JS; use num.toInt() for stable returns.

* chore: remove pending changes code review notes

* chore: temporarily disable wasm
@CharlVS CharlVS requested a review from DeckerSU March 23, 2026 20:22
@CharlVS CharlVS marked this pull request as ready for review March 23, 2026 20:23
@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@CharlVS CharlVS changed the title chore(release): v0.9.4 release candidate release: v0.9.4 release candidate - TRON, SIA, WASM, and polish Mar 23, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 23, 2026

Visit the preview URL for this PR (updated for commit bcd2752):

https://walletrc--pull-3461-merge-0hkq1grj.web.app

(expires Thu, 09 Apr 2026 13:25:02 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: f66a4ff03faa546f12f0ae5a841bd9eff2714dcc

@CharlVS CharlVS changed the title release: v0.9.4 release candidate - TRON, SIA, WASM, and polish chore(release): v0.9.4 release candidate Mar 23, 2026
* chore(sdk): bump submodule for market data cache fix (merged #335)

* fix(wallet): stabilize profit/loss chart across period changes

Use restartable handling for period changes, skip stale periodic refresh
cycles when the selected range changes mid-flight, filter chart samples
to the visible window with a leading boundary point, and key the line
chart by selected period so Flutter rebuilds the series correctly.

* fix: harden numeric parsing for recent swaps and related models

* chore: bump sdk submodule to merged numeric parsing fix

* feat(wallet): CEX-backed totals, shared computeWalletTotalUsd, tests

- Extract computeWalletTotalUsd with docs on CEX vs SDK price sources
- CoinsBloc/CoinsRepo: defensive unmodifiable price maps, uppercase keys
- Coin details: watchBalance stream; balancePlaceholder for unknown values
- Export ThemeCustomDark/Light from app_theme to fix implementation_imports
- Add unit tests for computeWalletTotalUsd; add code review notes doc

* fix(web): coerce mm2 JS interop results to int via num

Dartify may return int or double from JS; use num.toInt() for stable returns.

* chore: remove pending changes code review notes

* chore: temporarily disable wasm

* fix(wallet): launch TRON explorer URLs correctly

* fix(wallet): preserve charts, improve TRON UX, and roll SDK

* chore(docs): untrack local WASM audit

* fix(wallet): hide HD warning banner

* fix(wallet): confirm back clears preview; explorer address picker

- WithdrawFormStepReverted: from confirm, go to fill and clear preview/previewError/transactionError\n- Coins without tx history: open explorer with showAddressSearch when multiple addresses

* fix(wallet): add GRC20 coin type and enable TRON tx history

Add dedicated GRC20 enum variant and mappings instead of aliasing to
ERC20, and move TRX/TRC20 into the supported transaction-history list
so the wallet displays TRON transactions.

* chore(sdk): bump komodo defi sdk

* fix(wallet): reuse receive dialog and handle empty fees

Update the sdk submodule pointer to the merged dev commit for TRON transaction history.
@CharlVS CharlVS self-assigned this Mar 25, 2026
* fix(wallet): coordinate activation through shared sdk path

Force-refresh app activation checks before enabling assets, route activation through the shared SDK coordinator, and roll the sdk submodule to the TRX market-data and activation fixes.

* chore(sdk): roll submodule to merged TRX activation fix

Update the app to track the merged SDK dev commit that restores TRX market data and coordinates activation deduplication.
CharlVS added 3 commits March 26, 2026 00:26
…3464)

Keep legacy explorer launches working for assets that only expose a base explorer URL by falling back to the base transaction path. Add a regression test to preserve the fallback and 0x-prefix behavior.
…ning & UI redesign (#3465)

* feat(wallet): balance confirmation and withdraw flow updates

- Add CoinDetailsBalanceConfirmationController to confirm balance before showing amounts

- Extend withdraw form BLoC/state/events and coin details UI integration

- Improve coins repo/state USD conversion; update rewards and transaction views

- Add unit tests for balance confirmation and coins USD conversion

* fix: harden withdraw preview and balance confirmation

* chore: update sdk submodule pointer

* feat(wallet): redesign withdraw preview and success receipt UI

Refactor the withdraw confirmation screen into card-based sections
(summary, destination, TRON details) with responsive layouts, status
banners for expiration/refresh state, and a dedicated success receipt
replacing the reused TransactionDetails widget.

* fix(wallet): address PR review feedback on withdraw BLoC and balance widget

Use the live bloc state instead of the stale requestState snapshot when
emitting the Trezor confirmation flag in _generatePreview, preventing
isSending/isPreviewRefreshing from being reset mid-request.

Add didUpdateWidget to _BalanceState so the confirmation controller and
balance stream are torn down and re-bound when the parent supplies a
different coin without remounting the widget.

* fix(wallet): hoist Trezor confirmation flag into caller emissions

Move isAwaitingTrezorConfirmation into the callers' own "in progress"
emits (from requestState.copyWith) instead of emitting from the live
bloc state getter inside _generatePreview. This keeps all emissions
consistent with the explicit requestState snapshot pattern and makes
_generatePreview a pure function with no side effects.

* feat(wallet): add coin details section shortcut chips

Add transactions and addresses chips to the coin details header so users can jump directly to those sections without scanning the full page.

* fix(wallet): decouple coin details shortcut scrolling

Keep section scroll keys in the coin details state and pass semantic callbacks to child widgets so the shortcut chips depend on actions rather than scroll implementation details.

* fix(wallet): guard stale withdraw preview state merges

Preserve unrelated async updates while discarding preview results and errors once the effective withdraw request changes.

* test(wallet): expand coin details coverage across test layers

Add comprehensive coin-details unit/BLoC and widget coverage, plus integration scenarios and aggregate test wiring, so regressions in withdraw, transaction details, rewards, and faucet/address flows are caught earlier.

* fix(wallet): retry failed coin-details balance bootstrap

Schedule bounded startup retries when bootstrap fetch fails so coin-details balance confirmation does not remain stuck unconfirmed when the stream is quiet.

* chore(sdk): roll submodule to komodo-defi-sdk-flutter dev (b8555f1)

Includes merged PR #342: RPC method hint for ambiguous KDF error parsing.

* refactor(errors): centralize KDF user-facing messages in kdf_error_display

Add formatKdfUserFacingError and extractKdfTechnicalDetails (MmRpc,
GeneralErrorResponse, SdkError, activation wrappers). Use across withdraw,
coin addresses, transaction history, bridge/taker fee and preimage paths,
profit/loss and portfolio growth failures, and ARRR activation emit errors.
Drop redundant English prefixes where the underlying error is already
specific. Update withdraw_form_bloc tests.
- Rename library test modules to *_tests.dart so flutter test test_units/ loads
- Update test_units/main.dart imports; fix fract2rat Rational normalization
- Align backoff unit/integration tests with 1-minute default; doc comment fix
- Analytics tests: dispose repository; table_utils: bloc/repo test harness
- Wallet login test: unfocus before password-manager-style input
- Add asset_ticker_group_sort and use in assets/grouped lists
CharlVS and others added 6 commits March 28, 2026 23:28
* fix(ci): stabilize release candidate checks

* fix(ci): use bundle preflight for native assets

* fix(ci): avoid global melos dependency

* fix(ci): scope sdk pub get to validation

* fix(ci): enforce sdk lockfile in validation

* fix(ci): restore validation and web test checks

* fix(ci): resolve linux web and osv failures

* fix(ci): pass configured chrome binary to web tests
Adds BUILD_DATE (ISO 8601 UTC, no spaces) to --dart-define for both the
generate-assets composite action and the Docker Linux build script, so
the Settings page no longer shows 'unknown' for the build date.
* fix(wallet): roll SDK for SIA withdrawal hardening

* fix(wallet): roll SDK for TRC20 badge icon mapping fix

Advance the sdk submodule pointer from 391334d to 6dddeee to pick up
fix(ui): correct TRC20 badge icon mapping (#344).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@CharlVS CharlVS merged commit 5293cc4 into main Apr 2, 2026
14 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants