v6.11.0 - #2251
Merged
Merged
Conversation
…I timeouts to 30s
26-05-16_Update Translation_de_DE
Add null check to order error object check. Add timeout to order api client.
…nsuring a better review workflow
…ithub-translations refactor: remove Weblate for translation contributions ensuring reviews from every maintainers on Github
Consolidate 5 separate FRB packages (ark_wallet, dart_bbqr, boltz, lwk, plus bitbox_flutter split into bitbox_transport) behind a single bull_sdk monorepo dep. Replaces per-package init with BullSdk.init() and renames ark Transaction* types to ArkTransaction*. Ports SwapStreamStatusConverter for the boltz-Rust SwapStreamStatus type. payjoin_flutter bumped to a FRB-2.12 commit so it links against the same FRB runtime. bull-sdk's satoshifier dep was bumped to i5hi/bdk-dart @ 6ddecbb for ElectrumClient timeout/retry support (strict descendant of the prior ethicnology fork — preserves all reproducibility commits).
The pre-commit hook captured flutter analyze into a variable, hiding all progress and making it look stuck. It also referenced an undefined REPO_ROOT and inherited git's hook env vars, which made Flutter detect its own SDK version as the host repo's branch and fail with version "0.0.0-unknown".
fix(hooks): pre-commit flutter analyze
- Pre-commit: stream flutter analyze output (no more "stuck" silence), scope $REPO_ROOT correctly, unset git env vars that made Flutter misdetect its SDK version, gate on `dart fix --dry-run`, print per-step timings. - CI: add a `dart fix --dry-run` check after `flutter analyze`. - Rename build-android workflow display name.
chore(ci,hooks): tighten lint gates + fix flaky pre-commit hook
Introduces SyncCoordinator (lib/core/sync/) that schedules bitcoin, liquid and swaps syncs sequentially with per-kind dedup, drops requests while the app is paused, and auto-fires a fresh sync on `paused → resumed`. Eliminates the foreground-trigger overlap (wallet sync vs swap watcher restart) that surfaced as "database is locked" on the shared drift db. WalletState gains `isRefreshing` set eagerly in _onRefreshed; the bloc serializes refreshes with bloc_concurrency's droppable() transformer. WalletHome surfaces the pull-to-refresh spinner via GlobalKey<RefreshIndicatorState> on first mount or whenever isRefreshing flips false→true. Post-activity redirects now dispatch WalletRefreshed so the spinner appears on walletHome arrival: broadcast, RBF, swap "go home", buy success (incl. accelerate), receive payment received / in progress / payjoin, vault recovery, recovery test, ARK setup, PIN unlock. Imports and wallet delete already trigger refresh upstream (WalletStarted / _onDeleted) and are unchanged. Resume-driven swap watcher restart in main.dart removed — the coordinator's lifecycle listener now owns it.
The five per-state handlers each just logged the state name (with two also flushing the log). Now that resume-driven sync moved to the SyncCoordinator, the indirection is dead weight. Inline both bits directly into _onStateChanged.
Architecture doc update
feat(bull_sdk): optimizations for faster and smaller builds
Address PR review and the architectural concerns surfaced during audit.
SyncCoordinator
- Fix lifecycle resume: replace the dead `previous==paused && state==resumed`
check with a `_wasBackgrounded` flag. Flutter routes the state machine
through `paused -> hidden -> inactive -> resumed`, so the prior direct
transition condition never fired and the foreground auto-sync was
effectively disabled.
- Match `_isAppResumed` semantics between constructor and handler so a
brief `inactive` state (iOS Control Center, system dialog) no longer
drops every queued kind.
- Sanitize the SEVERE log: replace the raw exception in the Sentry payload
with a synthetic `StateError` carrying the kind + runtimeType so wallet
identifiers embedded in underlying messages don't reach Sentry.
- Aggregate per-kind failures into `SyncCoordinatorState.errors` and throw
`SyncCoordinatorException` from `sync()` so callers (WalletBloc) emit
a failure state instead of silently treating a failed drain as success.
- Iterate `SyncKind.values.where(only.contains)` so the documented
bitcoin -> liquid -> swaps order holds regardless of how callers
constructed the `only` set.
- Add a per-kind throttle: a kind that succeeded within
`_minSyncInterval` (2s) is skipped on the next enqueue unless the
caller passes `force: true`.
Route-aware refresh
- `AppRouter.routeObserver` registered on the GoRouter (already configured
with `notifyRootObserver: true` on the shell). `_WalletHomeScreenState`
mixes in `RouteAware` and dispatches `WalletRefreshed()` on `didPush`
and `didPopNext`, replacing the 17 manual dispatches scattered across
12 feature widgets (buy success, swap progress, RBF router, ark setup,
recoverbull pages, receive screens, broadcast tx page, pin unlock,
backup success).
- `WalletRefreshed({force})` carries the user-gesture flag. Pull-to-
refresh on wallet home, wallet detail, and transactions all pass
`force: true`. Route-triggered and lifecycle-triggered refreshes
leave it at `false` and benefit from the coordinator throttle.
Cleanup
- Revert `test_completed_page.dart` to the `BackupSuccessScreen` wrapper
now that the only reason for the inline copy (the manual
`WalletRefreshed` dispatch) is gone.
docs(agents): add AGENTS.md as cross-tool agent contract
…ap-expiry-time chore: add warning about swap expiry time
fix(localization): improve zh wallet and payment translations
chore: bump build number +181
The price is fetched live and ticks between calls; a slow setUpAll (Tor bootstrap) can delay these tests by tens of seconds, so exact-equality assertions against a price captured at registration time fail. Fetch the reference price next to each conversion and assert with a ~1% tolerance.
tool/gen_all_test.dart globs integration_test/*_test.dart and writes the all_test.dart aggregator; make integration-test regenerates it on every run. all_test.dart is now a gitignored build artifact (untracked), so adding a test file needs no manual wiring and can't be silently left out of the suite.
Cold CI runners re-downloaded the Flutter SDK, re-resolved pub, and re-fetched Rust crates on every PR. Restore actions/cache for ~/fvm/versions (keyed on .fvmrc), ~/.pub-cache and ~/.cargo (keyed on pubspec.lock, which pins the bull_sdk git commit) before the toolchain steps that use them.
harden - checkout v4 -> v6 - pull_request[opened] on develop -> auto-review same-repo (collaborator) PRs; external/fork PRs stay on-demand via @claude (write-access only) - install RTK (pinned v0.42.1), load its PreToolUse hook via the action's settings input, and print `rtk gain` to confirm savings - drop unused id-token perm; add timeout-minutes and concurrency
ci: integration tests running in linux desktop
ci: remove rtk from claude ci
ci(claude): force tag mode on PR review so comments post
fix: use getUserPaymentProcessorCode API and remove currency gate from isKycOk
fix: missing localizations
…fficient balance errors should be part of form validation. continue should be disabled until form is validated. Split warning into two boxes. Split backup warning into bull points.
fix: transfer flow should allow receive exact amount option for liquid. better errors in form validation. escalation backup warning content as a bulleted list.
chore: bump version
Resolve conflicts: - pubspec.yaml: keep 6.11.0+185 - lib/main.dart: keep SyncCoordinator-based lifecycle handler, re-add 6.10.6 inactive-state log flush - CHANGELOG.md: keep 6.11.0 entry plus main's 6.10.6/6.10.1 release notes
chore: resolve conflicts with main
Member
Author
|
conflicts resolved |
Member
Author
|
Once the CI is green I will trigger the build for the unsigned release candidate @i5hi |
Member
Author
|
Claude finished @ethicnology's task in 1m 41s —— View job Release readiness check — v6.11.0I went through the release-critical pieces (version, changelog, Android build/signing, CI). Excluded iOS per your note — @i5hi will bump ✅ Looks good
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.