Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
640 commits
Select commit Hold shift + click to select a range
d965ca5
fix(wallet-backend): seal new keys on a protected identity Tier-2, ne…
lklimek Jun 23, 2026
fcf6da1
fix(identity): fail closed before broadcast when adding a key to a pr…
lklimek Jun 23, 2026
cf8beab
fix(identity): harden SEC-001 identity-key paths (r2 review)
lklimek Jun 24, 2026
2f40b30
docs(single-key): correct has_passphrase on-disk-shape doc to Tier-2-…
lklimek Jun 24, 2026
cea3512
feat(wallet): unify wallet secret storage on one vault seam with per-…
lklimek Jun 24, 2026
1fcd3fd
fix(identity): fail closed when opt-in protection leaves resident pla…
lklimek Jun 24, 2026
2242bc7
test(identity): prove the protect fail-closed guard is wired into the…
lklimek Jun 24, 2026
925bf08
test(dashpay-e2e): use real curve points in tc_045 fixture (QA-008)
lklimek Jun 24, 2026
ab658a4
fix(wallet-backend): return WalletNotFound for an unknown seed hash (…
lklimek Jun 24, 2026
338d81a
test(core-e2e): expect SingleKeyWalletsUnsupported in tc_009 (QA-001)
lklimek Jun 24, 2026
25c97b6
fix(identity): compute a meaningful top-up fee after a backend reload…
lklimek Jun 24, 2026
00d21b5
test(spv-e2e): assert restart-in-place reconnect contract (QA-003)
lklimek Jun 24, 2026
3609d44
fix(wallet): gate sends on spendable balance, not confirmed (QA-010)
lklimek Jun 24, 2026
7567087
test(identity-e2e): poll for key visibility after broadcast (QA-004)
lklimek Jun 24, 2026
a530367
test(harness): retry transient wallet registration with backoff (QA-013)
lklimek Jun 24, 2026
3150d23
test(wallet-e2e): mark tc_012 address-advance assertion PENDING (QA-005)
lklimek Jun 24, 2026
e71e68e
docs(wallet-lifecycle): correct stop_spv rustdoc to restart-in-place …
lklimek Jun 24, 2026
36b6f2b
test(identity-e2e): widen cold-boot funding to clear top-up minimum (…
lklimek Jun 24, 2026
cf6497f
test(dashpay-e2e): defer dashpay backend-e2e module pending upstream …
lklimek Jun 24, 2026
f2936c0
test(harness): widen funded-wallet SPV-pickup budget to 120s (QA-017)
lklimek Jun 24, 2026
a0411a3
fix(identity): fail closed when opt-in protection leaves resident pla…
lklimek Jun 24, 2026
dedead2
test(identity): prove the protect fail-closed guard is wired into the…
lklimek Jun 24, 2026
a846acd
fix(fee-estimation): fall back to estimate when balance_before is sta…
lklimek Jun 24, 2026
a1cb9b4
fix(identity-db): zeroize rollback clone after successful vault migra…
lklimek Jun 24, 2026
3774a7a
fix(error): reword IdentityKeyProtectionIncomplete message (PROJ-002)
lklimek Jun 24, 2026
1b13d43
docs(wallet-lifecycle): correct inline comment to reflect restart-in-…
lklimek Jun 24, 2026
ed98fe6
docs(backend-e2e): fix dashpay-deferral TODO — count 12 tests, correc…
lklimek Jun 24, 2026
ec4527c
test(backend-e2e): strengthen tc_012 with positive assertion on secon…
lklimek Jun 24, 2026
f0608db
docs(harness): replace history narrative with present-state comment (…
lklimek Jun 24, 2026
7918d82
fix(identity): fail-closed the protect guard for legacy Encrypted key…
lklimek Jun 24, 2026
6d460c7
docs(wallet-lifecycle): note dash-spv reinit-window filter-gap (dashp…
lklimek Jun 25, 2026
d63ad9f
Merge remote-tracking branch 'origin/docs/platform-wallet-migration-d…
lklimek Jun 26, 2026
b98515d
fix(identity): preflight-verify all protected keys before unseal down…
lklimek Jun 26, 2026
2042153
fix(fee): reject partial-stale top-up fee deltas via estimate band
lklimek Jun 26, 2026
d78b930
fix(identity): give legacy Encrypted keys an honest recovery instruction
lklimek Jun 26, 2026
e97592e
fix(identity): minimize migrated-key plaintext residency before DB write
lklimek Jun 26, 2026
5957c1a
fix(identity): use the active fee estimator for the top-up estimate
lklimek Jun 26, 2026
ad8738a
test(wallet): regression for WalletNotFound vs WalletNotLoaded split
lklimek Jun 26, 2026
829c1d3
test(backend-e2e): drop dead single-key funding block, fix stale comment
lklimek Jun 26, 2026
aa78ed7
fix(identity): use the active fee estimator for the top-up-from-addre…
lklimek Jun 26, 2026
9218eb5
test(backend-e2e): present-state the TC-009 header comment
lklimek Jun 26, 2026
43bed20
fix(backend-e2e): stabilize PR #860 platform-wallet e2e suite + SEC-0…
lklimek Jun 26, 2026
d557feb
fix(wallet): drive platform "Addresses synced" label from the upstrea…
lklimek Jun 26, 2026
3465e65
fix(wallet): advance platform sync cursor on every completed pass
lklimek Jun 26, 2026
b6395c5
feat(wallet): network-independent platform-address warm-start
lklimek Jun 26, 2026
50ae7f9
fix(wallet): guard warm-start per-address seed against clobbering a l…
lklimek Jun 26, 2026
b881b22
feat(wallet): warn when a platform sync pass empties found beside a c…
lklimek Jun 26, 2026
14b0e55
refactor(fee): use the active fee estimator for all backend estimate …
lklimek Jun 26, 2026
e22328a
fix(identity): register DET identities into the upstream manager (Ide…
lklimek Jun 26, 2026
16e400d
fix(identity): fail-closed top-up when the target identity is not wal…
lklimek Jun 26, 2026
6ca5bb1
docs: document system layers, layer rules, and standard flows (#656)
lklimek Jun 29, 2026
47c2254
chore(deps): repoint platform crates to git branch dash-evo-tool
lklimek Jun 29, 2026
1c75dd2
fix(deps): adapt DET to dash-evo-tool platform API
lklimek Jun 29, 2026
d62fc3e
Merge security/secret-handling-hardening into platform-wallet-migrati…
lklimek Jun 29, 2026
581d22e
chore(deps): upgrade egui to 0.35.0 (#857)
lklimek Jun 29, 2026
82fbd24
fix(migration): gate cold-start FinishUnwire on wallet-backend readiness
lklimek Jun 29, 2026
2af867d
fix(migration): close copy/hydration asymmetry + fail-safe lock under…
lklimek Jun 29, 2026
97c3ea0
fix(migration): count unregistered wallets over the raw map so poison…
lklimek Jun 29, 2026
56ad313
chore(deps): bump platform to dash-evo-tool@10d9ff25 + migrate API drift
lklimek Jun 30, 2026
03221f8
fix(boot): prompt for legacy vault passphrase instead of aborting
lklimek Jun 30, 2026
bbe29b3
refactor(boot): reuse shared passphrase_modal for the unlock gate
lklimek Jun 30, 2026
d7107f3
fix(boot): address review nits — fatal retry symmetry, headless copy,…
lklimek Jun 30, 2026
1c21a9a
feat(spv): auto-connect on startup and soften initial-sync warning
lklimek Jun 30, 2026
2284229
fix(mcp): gate identity_credits_withdraw on SPV sync
lklimek Jun 30, 2026
637dc60
feat(identity-hub): unified Identities hub + app-scoped wallet/identi…
lklimek Jul 1, 2026
7369d38
feat(identity): fund-first onboarding, friendly funding labels, F1 av…
lklimek Jul 1, 2026
4119a2a
fix(identity): QA fixes — balance-gated funding default, de-jargon as…
lklimek Jul 1, 2026
e8d40d8
fix(theme): log OS theme-detection failure once instead of every poll…
lklimek Jul 1, 2026
c9ba1fc
Merge branch 'docs/platform-wallet-migration-design' into feat/identi…
lklimek Jul 1, 2026
a43c5ee
fix(wallet): reflect InstantSend lock in tx-history status and fix 19…
lklimek Jul 1, 2026
59e010d
fix(identity): gate wallet-balance funding on spendable balance, not …
lklimek Jul 1, 2026
db2b79d
fix(identity): avoid RwLock panic-on-poison in Top-Up funding pre-sel…
lklimek Jul 1, 2026
a2b8ad7
fix(identity): add insufficient-funds gate to Top-Up wallet-balance flow
lklimek Jul 1, 2026
d4c1728
fix(identity): pre-select wallet funding only when it can afford the fee
lklimek Jul 1, 2026
52a1d57
fix(identity): standardize local-identity label on "alias", drop "nic…
lklimek Jul 1, 2026
d3d9405
fix(identity): give Top-Up funding methods context-appropriate labels
lklimek Jul 1, 2026
7b35f46
fix(identity): use sentence-case label for Platform address selector
lklimek Jul 1, 2026
426901a
fix(identity): de-jargon Top-Up's asset-lock recovery screen
lklimek Jul 1, 2026
65b1fd8
docs(identity): align design-spec wording with shipped Wallets link
lklimek Jul 1, 2026
40181d9
fix(identity): close sibling RwLock panic-on-poison gaps in funding UI
lklimek Jul 2, 2026
8b4c776
fix(identity): base Top-Up Max amount on spendable balance, not total
lklimek Jul 2, 2026
f51c514
fix(identity): base Create-Identity Max amount on spendable balance, …
lklimek Jul 2, 2026
9ca7cf5
test(backend-e2e): route direct SDK fetches through 32MB-stack runtim…
lklimek Jul 1, 2026
5c45c47
docs(backend-e2e): drop stale RUST_MIN_STACK from per-test run exampl…
lklimek Jul 1, 2026
c391ccb
fix(identity): show wallet balance in identity key wallet selection d…
lklimek Jul 2, 2026
9d6596c
fix(tokens): drive add-token-by-id status from typed results, not ban…
lklimek Jul 2, 2026
904e345
chore(deps): bump platform to dash-evo-tool@93120ba4 + migrate API drift
lklimek Jul 2, 2026
d845cd9
Merge remote-tracking branch 'origin/docs/platform-wallet-migration-d…
lklimek Jul 2, 2026
23b148a
feat(wallet_backend): surface skipped persisted wallets via banner
lklimek Jul 2, 2026
e1c357e
test(wallet_backend): kittest coverage for skipped-wallets banner
lklimek Jul 2, 2026
5f5b665
chore(deps): bump platform to dash-evo-tool@e6b508f1 + adapt to Exten…
lklimek Jul 2, 2026
84a22c8
Merge remote-tracking branch 'origin/docs/platform-wallet-migration-d…
lklimek Jul 2, 2026
55ab571
fix(wallet): reconcile platform-payment addresses for signing
lklimek Jul 6, 2026
4bf4ed7
docs(changelog): record platform-address signer reconciliation fix
lklimek Jul 6, 2026
bc104b5
Merge branch 'docs/platform-wallet-migration-design' into feat/identi…
lklimek Jul 6, 2026
d956704
fix(wallet_backend): supersede skipped-wallets banner across re-entra…
lklimek Jul 6, 2026
6fcf22b
fix(wallet): add cold-start migration readiness timeout; prove double…
lklimek Jul 6, 2026
1bba8a7
docs(changelog): record wallet-preparation timeout banner fix
lklimek Jul 6, 2026
ba8ad71
refactor(ui): add OptionBannerExt::raise, keep replace as a legacy alias
lklimek Jul 6, 2026
3be91d5
Merge pull request #871 from dashpay/feat/load-skip-banner
lklimek Jul 6, 2026
b75179d
Merge remote-tracking branch 'origin/docs/platform-wallet-migration-d…
lklimek Jul 6, 2026
829ce57
fix(wallet): replace debug_assert! invariant guards with runtime checks
lklimek Jul 6, 2026
f566317
chore(build): set RUST_MIN_STACK=8MiB via .cargo/config.toml
lklimek Jul 6, 2026
048acf5
refactor(settings): drop inert core_backend_mode field, keep reserved…
lklimek Jul 6, 2026
3c327d0
chore(db): add v38 migration dropping the retired core_backend_mode c…
lklimek Jul 6, 2026
cebfdf0
refactor(feature-gate): remove always-false RpcBackend gate
lklimek Jul 6, 2026
c6807c7
Merge remote-tracking branch 'origin/docs/platform-wallet-migration-d…
lklimek Jul 6, 2026
cf9c16d
chore(deps): bump platform to dash-evo-tool@c2135800 + adapt to DashP…
lklimek Jul 6, 2026
866bbf5
Merge branch 'docs/platform-wallet-migration-design' into feat/identi…
lklimek Jul 6, 2026
d5e61e2
docs(qa): retest asset-lock FinalityTimeout post platform-bump — stil…
lklimek Jul 7, 2026
2e00379
test(backend-e2e): add TC-012 late-added-wallet asset-lock check; doc…
lklimek Jul 7, 2026
9044d1b
docs(qa): retest — real-money deposit does not fix the framework wall…
lklimek Jul 7, 2026
5becb92
docs(qa): attribute asset-lock finality defect to key-wallet's UTXO-r…
lklimek Jul 7, 2026
443fb8e
docs(qa): independent ground-truth balance oracle confirms 11x phanto…
lklimek Jul 7, 2026
9c0f94c
fix(wallet): categorize balances from authoritative upstream data
lklimek Jul 7, 2026
077bf73
test(wallets): add dedup + unwatched-address regression coverage for …
lklimek Jul 7, 2026
12ec5bc
fix(wallets): thread platform credits in summary pass 2; cover exact …
lklimek Jul 7, 2026
7392ca4
docs(changelog): note the balance-breakdown-vs-tab mismatch fix
lklimek Jul 7, 2026
5e90202
Merge remote-tracking branch 'origin/docs/platform-wallet-migration-d…
lklimek Jul 7, 2026
2bf01d1
docs(qa): forensically trace the real defect to an intra-batch out-of…
lklimek Jul 7, 2026
ce8dda3
docs(qa): confirm the merged display-layer fix does not affect asset-…
lklimek Jul 7, 2026
25698f3
feat(ui): add persistent-banner API for messages that must not auto-d…
lklimek Jul 7, 2026
a7ac8fa
feat(wallets): balance health check on SPV sync completion
lklimek Jul 7, 2026
84f48df
fix(ui): keep damaged-wallet banners on screen in DashPay/DPNS screens
lklimek Jul 7, 2026
f3387d6
fix(ui/tokens): keep wallet-open failure banners from auto-dismissing
lklimek Jul 7, 2026
82ddc30
Merge branch 'banner-audit-tokens' into feat/identity-onboarding-ux
lklimek Jul 7, 2026
bb8aefb
fix(ui): keep important identity banners from auto-dismissing
lklimek Jul 7, 2026
21b338f
Merge branch 'banner-audit-identities' into feat/identity-onboarding-ux
lklimek Jul 7, 2026
f83be76
fix(ui): keep important banners from auto-dismissing in contracts/wal…
lklimek Jul 7, 2026
dbf8f25
Merge branch 'banner-audit-contracts-wallets-tools' into feat/identit…
lklimek Jul 7, 2026
6d15ddd
fix(wallets): drop the "known issue" framing from the health-check ba…
lklimek Jul 7, 2026
6644353
docs(changelog): note the wallet balance health check
lklimek Jul 7, 2026
55922e2
style: fix rustfmt drift in message_banner.rs from foundation commit
lklimek Jul 7, 2026
ec2d2e5
docs(changelog): note the banner auto-dismiss fix
lklimek Jul 7, 2026
b50972b
feat(address-input): add tag search, pills, and dynamic legend
lklimek Jul 7, 2026
8a220b9
Merge branch 'feat-address-input-tags' into feat/identity-onboarding-ux
lklimek Jul 7, 2026
5671b9c
docs(changelog): note the address-search-tags feature
lklimek Jul 7, 2026
930c10c
chore(deps): bump platform-wallet to 44c20e3 and port removed APIs
lklimek Jul 8, 2026
da6d963
docs(triage): resolve DOC-002/DOC-003, note deferred CODE-023/CODE-027
lklimek Jul 8, 2026
f46c0a8
chore(cleanup): strip ephemeral review-ID references from committed c…
lklimek Jul 8, 2026
4ba2ca6
fix(wallet_backend): stop send_payment giving wrong error advice
lklimek Jul 8, 2026
ff8e8c2
Merge branch 'fix/pr860-ephemeral-review-ids' into docs/platform-wall…
lklimek Jul 8, 2026
2913b82
Merge branch 'chore/bump-platform-wallet-dep' into docs/platform-wall…
lklimek Jul 8, 2026
c0cc77d
test: fix 6 triaged simplification findings across kittest, benches, ADR
lklimek Jul 8, 2026
d510c0b
Merge branch 'fix/pr860-triage-tests-benches' into docs/platform-wall…
lklimek Jul 8, 2026
41b092f
refactor(ui): remove unreferenced ContactRow/ActivityRow widgets
lklimek Jul 8, 2026
9bb9c7f
Merge branch 'fix/pr860-triage-ui-deadcode' into docs/platform-wallet…
lklimek Jul 8, 2026
948e556
refactor(model): type stringly-encoded DashPay status/direction fields
lklimek Jul 8, 2026
ef419a1
fix(model): stop settings deserialize from doing filesystem IO
lklimek Jul 8, 2026
1572230
refactor(model): drop vestigial FeatureGate::SpvBackend gate
lklimek Jul 8, 2026
2c93f2d
refactor(model): delete dead SpvStatusSnapshot fields
lklimek Jul 8, 2026
eb65443
refactor(wallet_backend): drop one-impl TokenBalanceView trait
lklimek Jul 8, 2026
7ddc305
refactor(wallet_backend): delete dead DetScope::Token variant
lklimek Jul 8, 2026
3975d00
refactor(backend_task): extract shared secret-chokepoint helpers for …
lklimek Jul 8, 2026
bcaa5b6
Merge branch 'fix/pr860-triage-model-wallet-safe' into docs/platform-…
lklimek Jul 8, 2026
6eaf1b9
docs(migration): remove stale roadmap comments and trim narration
lklimek Jul 8, 2026
2ca7ccc
fix(wallet): stop leaking raw sync errors into the refresh banner
lklimek Jul 8, 2026
e7f8987
refactor(error): merge near-twin KV sidecar TaskError variants
lklimek Jul 8, 2026
8569f13
refactor(wallet): name identity-auth key-map tuples, drop dead wrapper
lklimek Jul 8, 2026
57d2f34
Merge branch 'fix/pr860-triage-backend-model' into docs/platform-wall…
lklimek Jul 8, 2026
4c1d22e
refactor(ui): trim dev-history comments and dedupe identity home helpers
lklimek Jul 8, 2026
86076c2
Merge branch 'fix/pr860-triage-home-cleanup' into docs/platform-walle…
lklimek Jul 8, 2026
712304c
refactor(wallet_backend): delete dead one-impl PersistedWalletLoader …
lklimek Jul 8, 2026
88e2306
test(wallet_backend): dedupe InMemoryKv test fake across 14 files
lklimek Jul 8, 2026
8681ec3
Merge branch 'fix/pr860-triage-kv-dedup' into docs/platform-wallet-mi…
lklimek Jul 8, 2026
73ce754
Merge remote-tracking branch 'origin/docs/platform-wallet-migration-d…
lklimek Jul 8, 2026
4a883ed
refactor(wallet_backend): split god-impl into shielded/identity_ops/p…
lklimek Jul 8, 2026
f219679
Merge branch 'fix/pr860-triage-walletbackend-split' into docs/platfor…
lklimek Jul 8, 2026
84a7186
refactor(wallets): remove redundant balance-consistency health check
lklimek Jul 8, 2026
13ccca0
refactor(wallets): single-source the per-account balance breakdown
lklimek Jul 8, 2026
f4c47cc
Merge branch 'fix/pr860-triage-balance-derivation' into docs/platform…
lklimek Jul 8, 2026
485bd09
Merge commit 'f4c47cc333b42f7f767add4f9f95755bb331e669' into merge-86…
lklimek Jul 8, 2026
38e4d1f
docs(context): correct platform_sync_info doc to "sync completed", no…
lklimek Jul 8, 2026
aa60af2
fix(wallets): read header total and per-account breakdown from one sn…
lklimek Jul 8, 2026
daf4aaf
fix(wallets): reconcile default-mode tabs and show Platform tab on load
lklimek Jul 8, 2026
3cf5991
docs(wallets): note the accepted first-contended-recompute zero-snaps…
lklimek Jul 8, 2026
8bd1d1d
Merge branch 'fix/pr860-balance-qa-followup' into docs/platform-walle…
lklimek Jul 8, 2026
67b8103
Merge commit '8bd1d1d2ae4bec5a69120cb53d11c0607a19d587' into merge-86…
lklimek Jul 8, 2026
f39d08b
Merge remote-tracking branch 'origin/feat/identity-onboarding-ux' int…
lklimek Jul 8, 2026
6fd0abf
Merge pull request #869 from dashpay/feat/identity-onboarding-ux
lklimek Jul 8, 2026
302b05f
fix(identity): show spendable balance, not total, on funding screens
lklimek Jul 8, 2026
819f27c
docs(wallets): document deferred non-remember-unlock registration gap
lklimek Jul 8, 2026
2f36ed1
refactor(wallets): tidy wallet-backend caches and trim dead surface
lklimek Jul 8, 2026
d864397
Merge branch 'fix/r2-w9' — Wave 9: wallet-backend caches & nits
lklimek Jul 8, 2026
b072970
refactor(context): consolidate identity_db kv access, errors, and vot…
lklimek Jul 8, 2026
0cebdc0
Merge branch 'fix/r2-w6' — Wave 6: identity_db + scheduled votes
lklimek Jul 8, 2026
08a1a9f
refactor(ui): delete dead UI surface and dedup icon loaders
lklimek Jul 8, 2026
33fb75e
Merge branch 'fix/r2-w20' — Wave 20: dead UI surface deletion
lklimek Jul 8, 2026
6f13a25
refactor(wallet_backend): dedup funds paths and harden error typing (…
lklimek Jul 8, 2026
c657aeb
Merge branch 'fix/r2-w2' — Wave 2: wallet-backend funds paths & error…
lklimek Jul 8, 2026
f1494a2
refactor(wallet): scope test-only single-key signing helpers to tests
lklimek Jul 8, 2026
8474757
refactor(wallet): dedup secret decrypt, bincode framing, prompt meta …
lklimek Jul 8, 2026
ed6580f
refactor(wallet-backend): dedup KV/sidecar layer
lklimek Jul 8, 2026
584c1dc
refactor(dashpay): typed errors + move derivation to model/ (Wave 13)
lklimek Jul 8, 2026
842b46e
refactor(wallets): single-source fee/amount/dpns and drop dead send s…
lklimek Jul 8, 2026
2ead530
refactor(dashpay): unify avatar pipeline, profile validation, delete …
lklimek Jul 8, 2026
0ec637f
Merge branch 'fix/r2-w8' — Wave 8: wallet-backend KV/sidecar dedup
lklimek Jul 8, 2026
834dc55
refactor(tokens): honest fees, shared token executor, grouped contrac…
lklimek Jul 8, 2026
a64cf2c
refactor(backend): typed contract recovery + document mutation helper
lklimek Jul 8, 2026
bf01fff
Merge branch 'fix/r2-w1' — Wave 1: secret access & signing surface
lklimek Jul 8, 2026
180a214
refactor(model): enforce model-layer purity and tidy MCP tool boundary
lklimek Jul 8, 2026
d616018
Merge branch 'fix/r2-w3' — Wave 3: backend contracts/documents/tokens
lklimek Jul 8, 2026
b409df6
refactor(app): collapse boot/reconcilers, fold context_provider, drop…
lklimek Jul 8, 2026
dbbb192
Merge branch 'fix/r2-w4' — Wave 4: amount/fee/unified-send single-sou…
lklimek Jul 8, 2026
02e8e6e
Merge branch 'fix/r2-w13' — Wave 13: DashPay backend typed errors + d…
lklimek Jul 8, 2026
9ab7d85
Merge branch 'fix/r2-w17' — Wave 17: DashPay UI
lklimek Jul 8, 2026
19ac684
Merge branch 'fix/r2-w15' — Wave 15: model-layer purity + MCP tools
lklimek Jul 8, 2026
7885ffd
fix(backend_task): update stale proof_log_item import after Wave 15 r…
lklimek Jul 8, 2026
38af70a
Merge branch 'fix/r2-w12' — Wave 12: app.rs/boot/feature flags/contex…
lklimek Jul 8, 2026
d7873d2
refactor(context): tidy contract_token_db — typed encode error, dedup…
lklimek Jul 8, 2026
bab96be
Merge branch 'fix/r2-w7' — Wave 7: context/contract_token_db.rs
lklimek Jul 8, 2026
9a60134
refactor(backend_task): consolidate error.rs and replace message-as-p…
lklimek Jul 8, 2026
184472d
refactor(context): consolidate wallet_lifecycle orchestration (Wave 11)
lklimek Jul 8, 2026
e089261
refactor(identities): consolidate funding-method chooser + preserve e…
lklimek Jul 8, 2026
1eddaa5
Merge branch 'fix/r2-w5' — Wave 5: identity funding screens + PR-869 …
lklimek Jul 8, 2026
c529550
Merge branch 'fix/r2-w11' — Wave 11: wallet_lifecycle.rs orchestration
lklimek Jul 8, 2026
5900627
Merge branch 'fix/r2-w14' — Wave 14: error.rs consolidation + typed m…
lklimek Jul 8, 2026
10f7a0f
refactor(context): remove write-only Core-RPC health plumbing (CODE-016)
lklimek Jul 8, 2026
b1b5c9d
fix(context): make settings updaters atomic, drop dead shims (CODE-02…
lklimek Jul 8, 2026
e89fd68
refactor(context): extract shared platform-address seeding loop (CODE…
lklimek Jul 8, 2026
9027547
refactor(context): name DPNS contest-duration constants (CODE-040)
lklimek Jul 8, 2026
e3c3a99
refactor: small context/kv one-liner cleanups (CODE-045)
lklimek Jul 8, 2026
e2c5876
Merge branch 'fix/r2-w10' — Wave 10: settings / connection-status / c…
lklimek Jul 8, 2026
60fd161
refactor(ui): Wave 19 — dedup UI component surface
lklimek Jul 8, 2026
f35046a
refactor(wallet): Wave 16 — wallet model internals
lklimek Jul 8, 2026
fa11602
Merge branch 'fix/r2-w19' — Wave 19: UI components dedup
lklimek Jul 8, 2026
39de7f2
Merge branch 'fix/r2-w16' — Wave 16: wallet model internals
lklimek Jul 8, 2026
0ccf1c9
refactor(wallet): fold shielded screens into unified send screen (COD…
lklimek Jul 8, 2026
36da999
refactor(tokens): Wave 18 — unify token action screens + dedup rules …
lklimek Jul 8, 2026
7c7ad3f
Merge branch 'fix/r2-w18' — Wave 18: tokens UI dedup
lklimek Jul 8, 2026
a49c1de
fix(wallet): address QA findings on shielded send-flow fold
lklimek Jul 8, 2026
4104827
Merge branch 'fix/r2-code098' — CODE-098: fold shielded screens into …
lklimek Jul 8, 2026
4dc8380
docs(comments): Wave 21 — comment/narration hygiene sweep
lklimek Jul 8, 2026
20fb1ab
Merge branch 'fix/r2-w21' — Wave 21: comment/narration hygiene sweep …
lklimek Jul 8, 2026
1fd13b6
docs(changelog): add round-2 audit user-facing changes
lklimek Jul 8, 2026
12ff20e
fix(identity): confine hero card gradient to card bounds
lklimek Jul 9, 2026
a44a684
refactor(errors): replace stringly-typed error variants with typed so…
lklimek Jul 9, 2026
f6120bf
docs(contested-names): point contract-not-found TODOs at issue #875
lklimek Jul 9, 2026
dc6a36f
fix(wallet): unify lock-poison recovery, route single-key I/O through…
lklimek Jul 9, 2026
847a3a6
fix(address): centralize network-prefix validation in model/ and gate…
lklimek Jul 9, 2026
d8db185
refactor(wallet): add AppContext::wallet_arc helper; log skipped corr…
lklimek Jul 9, 2026
7eea2a3
fix: replace panicking unwrap/expect in production paths with error p…
lklimek Jul 9, 2026
2aa822b
chore: remove ephemeral review-IDs, tombstones, speculative dead_code…
lklimek Jul 9, 2026
9f0fede
docs(database): restore the upstream-ownership note in get_wallets
lklimek Jul 9, 2026
ecd9cfa
refactor(context): split wallet_lifecycle god-file into responsibilit…
lklimek Jul 9, 2026
ae618f5
fix(identity): flat hero card — drop the gradient for the theme surface
lklimek Jul 9, 2026
8efc7bc
fix: update legacy-table allow-list for relocated wallet_lifecycle te…
lklimek Jul 9, 2026
61df418
Merge pull request #873 from dashpay/fix/round-2-architecture-audit
lklimek Jul 9, 2026
4343d03
feat(masternodes): add Masternodes tab, retargeted onto platform-wall…
Claudius-Maginificent Jul 10, 2026
ee1ce81
chore: ignore local Codex config
lklimek Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,7 @@ CC_x86_64_pc_windows_gnu = "x86_64-w64-mingw32-gcc-posix"
CXX_x86_64_pc_windows_gnu = "x86_64-w64-mingw32-g++-posix"
AR_x86_64_pc_windows_gnu = "x86_64-w64-mingw32-ar"
CFLAGS_x86_64_pc_windows_gnu = "-O2"
# 8 MiB minimum stack for spawned threads (incl. tokio worker threads), up from
# Rust's smaller default. Deep call chains (grovedb proof verification, nested
# serde/protobuf decoding) can overflow the default on debug builds.
RUST_MIN_STACK = "8388608"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,4 @@ test_db*
explorer.log
.gitaipconfig
.claude/worktrees
.codex/
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Read and follow all instructions in [CLAUDE.md](./CLAUDE.md) before starting any task.
220 changes: 220 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

### Added

- **Search tags in the "Send to" field**: type `type:core`, `type:platform`,
`type:shielded`, or `wallet:<name>` to narrow the address suggestions
instead of scrolling through everything; plain words still search like
before. Each suggestion now shows a small label for its wallet and its
type, and the field shows a hint listing the tags you can use when it's
empty.

- **Masternodes tab**: a new "Masternodes" entry in the left nav (visible when
Expert mode is on) for loading and managing masternode and evonode (HP
masternode) identities by ProTxHash. Loaded nodes appear as a card list
showing type, voter-key readiness, key status, and DPNS-voting status;
opening a card shows a detail view with inline DPNS contested-name voting,
Withdraw / Top up / Transfer actions, key management, and — for evonodes
only — a link to claim token rewards. The load form accepts an optional
password to encrypt the entered voting/owner/payout keys immediately
instead of only after a separate step; leaving it blank keeps today's
behavior, and protection can always be added later from the key screen.
This replaces loading a masternode or evonode from *Identities → Load
Existing Identity → Show Advanced Options*, which no longer offers those
identity types.

- **Wallet/identity indicator on more screens (rollout in progress)**: the
wallet and identity picker previously shown only at the top of the Identity
Hub now also appears at the top of the Identities, DashPay, DPNS, and
Wallets screens. On the Identity Hub and the new Masternodes tab it's fully
interactive — you can change which wallet or identity you're acting as
right there. On the other four it's currently a read-only preview of your
active wallet/identity, with a tooltip on where to change it; making it
interactive there, and adding it to the remaining screens, is tracked as a
follow-up.

### Changed

- **Masternode and evonode identities no longer appear in the Identity Hub or
Identities picker**: they now live exclusively on the new Masternodes tab,
so you're never offered actions (like registering a username) that don't
apply to a node's collateral/voting identity.

- **Wallet balance breakdown is single-sourced**: the per-account tabs and the
wallet header now derive every balance from one place. The Core header total
and the Core per-account breakdown are read from the same generation of synced
wallet data — even while the wallet is busy syncing, the header and the tabs
are never spliced from different moments — and the Platform tab shows the exact
same Platform total as the header. Any funds held on addresses outside your
main and Platform accounts now always appear in a visible tab, so the tabs
always add up to the header total. This removes an earlier internal cross-check
(and its occasional "balances didn't fully add up" warning), no longer needed
now that the figures come from one consistent source.

- **Platform tab shows immediately**: a newly created or imported wallet now
shows its Platform tab (empty until funded) as soon as it loads, instead of
waiting for the first Platform-address sync to complete. Your Platform receive
address is reachable right away, even before or without a network sync.

- **Sign-time wallet unlock**: the passphrase is now requested just-in-time, the
moment an operation actually needs your secret (sending funds, registering an
identity, signing). The prompt offers an optional "Keep this wallet unlocked
until I close the app" checkbox so a busy session asks only once. This replaces
the old upfront unlock gate that held the wallet open for the whole session —
the HD seed is no longer kept in memory between operations; it is decrypted on
demand and wiped as soon as the operation finishes.

- **Wallet storage backend**: HD wallet seeds and single-key private keys are now
stored in an upstream `platform-wallet-storage` encrypted vault
(`secrets/det-secrets.pwsvault` in the app data directory) rather than in the legacy
`data.db` SQLite database. Wallet metadata (alias, main flag,
Core wallet name) moves to a new `det-app.sqlite` key-value sidecar. The legacy
`data.db` file is left intact for safety; it is no longer read at runtime.

- **Cold-start migration**: on the first launch after upgrading, DET automatically
migrates wallet seeds, metadata, and imported single-key data from `data.db` into
the new storage layout. A progress banner is shown during migration (typically
under one second on local storage). The migration is idempotent — subsequent
launches skip it via a completion sentinel in `det-app.sqlite`.

- **Identity funding now goes through one spend engine**: registering or topping up
an identity always funds from your wallet balance through the upstream
asset-lock engine, which selects coins and tracks the lock to confirmation. The
separate "fund directly from a specific transaction output" path was removed so
there is a single, double-spend-safe funding flow.

- **DashPay profile no longer requires a display name**: you can save your profile
with the display name left blank; only the length limits on name, bio, and
avatar URL are still enforced.

- **Shield, Send Privately, and Unshield are now one screen**: each of these
actions opens the same Send screen, already set up for what you clicked, instead
of a separate dedicated screen per action. The steps and options are unchanged,
including pasting a raw shielded address in hex form — there are just fewer
screens to navigate between.

### Known Limitations

- **Single-key wallets — send and balance refresh not available**: importing a
single-key wallet (WIF), viewing it, and signing with it all work in this
release. Sending funds and refreshing the balance or UTXO list are not yet
supported. Your key data is preserved and these actions will be available in a
future update. To send funds now, use an HD (recovery-phrase) wallet.

- **DashPay contacts — non-mainnet / non-account-0 legacy addresses**: this
release drops back-compat for contact-request addresses derived outside mainnet
account 0 under the old DIP-14 scheme (non-mainnet networks, or secondary
account indices). If you used DashPay on testnet or devnet with a non-default
account, existing contact payment addresses for those contacts may not be
reproduced. Re-establishing the contact from both sides restores full
functionality.

### Removed

- Proof log screen (internal developer tool, not part of the public feature set).
- QR-code wallet import flow for identity funding and top-up screens.
- The "fund identity directly from a transaction output" option on the identity
registration and top-up screens (replaced by the single asset-lock funding flow
described under Changed).
- The unused "Memo (optional)" field on the wallet send dialog and the single-key
send screen — the note was never attached to the transaction, so it has been
removed to avoid implying a memo would be saved.
- The "Core Only" wallet refresh option. Core wallet balances and UTXOs now stay
current automatically, so a manual Core-only refresh had nothing to do; refresh
now covers Core plus Platform, or Platform only.
- The unused ZMQ Core-event listener subsystem and the non-functional "Disable ZMQ"
setting. The listener was already gated off and never delivered events, so the
toggle did nothing; both have been removed (the `zmq`, `zeromq`, and
`crossbeam-channel` dependencies are no longer needed).
- The unreachable Dash-Qt launcher and its settings — the executable path, the
overwrite-config option, and the close-on-exit option. There was no way to launch
Dash-Qt from the app, so the controls had no effect and have been removed.

### Fixed

- **Expert mode now reveals the Masternodes tab without a restart**: turning on
Expert mode in Settings immediately shows the "Masternodes" entry in the left
nav. Previously the Expert-mode flag was stored separately per network, so the
nav entry could stay hidden (reading a stale value on whichever network context
the app was showing) until the app was restarted. Expert mode is now a single
app-wide flag shared across all networks.

- **Clearer error when loading a masternode by an unknown ProTxHash**: entering a
valid-looking but unregistered ProTxHash in the masternode load form now says no
masternode or evonode was found for that ProTxHash, instead of the misleading
generic "Identity not found — check the ID or name" message.

- **Withdrawal key selection**: the Withdraw screen now pre-selects only a key
whose private key you actually hold (a payout/Transfer key preferred, Owner as
fallback). Previously it could pick a key that exists on the identity but whose
private key isn't loaded locally — common on loaded masternode/evonode
identities where only the Owner key was supplied — which made the withdrawal
fail at signing with an unhelpful technical error. When no usable key is
loaded, the screen guides you to add one instead of failing mid-withdrawal.
- `WalletBackend` is now initialised eagerly at `AppState` start, eliminating a
retry-loop spam on the SDK connection during cold boot.
- Wallet store is rehydrated on cold start, resolving a regression where wallets
were not visible after the storage migration.
- The Disconnect button on the network settings screen now actually disconnects:
it stops the wallet backend and updates the connection indicator instead of
silently doing nothing. A fast double-click can no longer start two disconnects
at once.
- Shielded balances no longer overstate after upgrading or after using
"Resync Notes": the spent-note scan cursor is reset so previously spent notes
are detected again. Previously a migrated or resynced wallet could show notes as
available that had already been spent, causing later spends to fail.
- The unused-asset-lock picker on the identity registration and top-up screens now
shows a plain-language status and the funding address for each lock, instead of
an internal status name, so you can tell which lock is which.
- A failed wallet-funded identity registration now tells you that your funds are
safe as a funding lock and how to finish: start a new identity and fund it from
your existing asset lock.
- Platform and identity features stay reachable during initial sync. Previously,
on a fresh connection the app contacted Platform network nodes before its local
masternode list had finished syncing; every node it tried was wrongly marked as
failed and set aside, and once all of them were set aside Platform stopped
working until restart. The app now waits for the masternode list to be ready
before contacting those nodes.
- Silent crashes now leave a trace: the app captures stderr output and fatal
signals to its log file, so an unexpected exit can be diagnosed from the logs
instead of vanishing without a record.
- Withdrawing from a Platform address to a Core address could fail with an
internal error even though the address's balance was clearly visible in the
withdrawal picker. A Platform address discovered by background syncing was
not always recognized as one the wallet could sign for. The wallet now
reconciles this automatically, so a visible balance can always be withdrawn.
No funds were ever at risk — the withdrawal simply failed before anything
was sent.
- If your wallet's storage was ever unusually slow to finish preparing (e.g.
after a network switch or on a cold start), the app could wait forever with
no indication anything was wrong. It now tells you after 30 seconds and
suggests restarting, instead of leaving the wallet silently invisible.
- The wallet screen's overall balance could show more Dash than its Core or
Platform account tabs added up to, especially on wallets that have handed
out many addresses. Funds on addresses the wallet had not yet finished
indexing into an account tab were counted in the total but missing from the
per-account breakdown and address list. All known funds now appear in their
correct account tab.
- Important messages — a saved wallet that couldn't be reopened, a failed
send or identity operation, a lost connection — could disappear on their
own after a few seconds, before you had a chance to read them. These now
stay on screen until you dismiss them yourself. Routine notices (a
successful action, a validation hint, an in-progress status) still clear
automatically as before.
- Choosing a funding method on the identity registration or top-up screen and
then switching wallets no longer silently discards your choice and reverts
to the default funding method.
- The top-up screen's automatic wallet selection no longer pre-selects a
wallet whose spendable balance is too small or currently locked to actually
cover the top-up, which would then be immediately rejected.
- The "My Tokens" tab no longer gets stuck on a loading spinner when you have
no identities yet; it now shows the expected empty state.
- Two settings changes made in quick succession could occasionally cause one
of them to be silently lost. Saving settings is now a single atomic step,
so no change is dropped.
Loading
Loading