Skip to content
Open
Show file tree
Hide file tree
Changes from 70 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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,850 changes: 987 additions & 863 deletions Cargo.lock

Large diffs are not rendered by default.

21 changes: 18 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ qrcode = "0.14.1"
nix = { version = "0.31.1", features = ["signal"] }
eframe = { version = "0.33.3", features = ["persistence", "wgpu"] }
base64 = "0.22.1"
dash-sdk = { git = "https://github.com/dashpay/platform", rev = "54048b9352c5c8361f4cbfaa6a188dd3244e00c4", features = [
dash-sdk = { git = "https://github.com/dashpay/platform", rev = "17653ba8f9448edc569487b85bb35b27c5f6a14c", features = [
"core_key_wallet",
"core_key_wallet_manager",
"core_bincode",
Expand All @@ -28,7 +28,11 @@ dash-sdk = { git = "https://github.com/dashpay/platform", rev = "54048b9352c5c83
"core_spv",
"shielded",
] }
rs-sdk-trusted-context-provider = { git = "https://github.com/dashpay/platform", rev = "54048b9352c5c8361f4cbfaa6a188dd3244e00c4" }
rs-sdk-trusted-context-provider = { git = "https://github.com/dashpay/platform", rev = "17653ba8f9448edc569487b85bb35b27c5f6a14c" }
platform-wallet = { git = "https://github.com/dashpay/platform", rev = "17653ba8f9448edc569487b85bb35b27c5f6a14c", features = [
"serde",
] }
platform-wallet-storage = { git = "https://github.com/dashpay/platform", rev = "17653ba8f9448edc569487b85bb35b27c5f6a14c" }
zip32 = "0.2.0"
grovestark = { git = "https://www.github.com/dashpay/grovestark", rev = "5b9e289cca54c79b1305d5f4f40bf1148f1eb0e3" }
rayon = "1.8"
Expand All @@ -39,6 +43,7 @@ serde_yaml_ng = { version = "0.10.0" }
tokio = { version = "1.46.1", features = ["full"] }
bincode = { version = "=2.0.1", features = ["serde"] }
hex = { version = "0.4.3" }
async-trait = "0.1.89"
itertools = "0.14.0"
enum-iterator = "2.1.0"
futures = "0.3.31"
Expand All @@ -55,7 +60,12 @@ arboard = { version = "3.6.0", default-features = false, features = [
"windows-sys",
] }
directories = "6.0.0"
rusqlite = { version = "0.38.0", features = ["bundled", "functions", "fallible_uint"] }
rusqlite = { version = "0.38.0", features = [
"bundled",
"functions",
"fallible_uint",
"backup",
] }
dark-light = "2.0.0"
image = { version = "0.25.6", default-features = false, features = [
"png",
Expand Down Expand Up @@ -113,6 +123,11 @@ name = "det-cli"
path = "src/bin/det_cli/main.rs"
required-features = ["cli"]

[[test]]
name = "backend-e2e"
path = "tests/backend-e2e/main.rs"
required-features = ["testing"]

[build-dependencies]
winres = "0.1"

Expand Down
67 changes: 67 additions & 0 deletions docs/ai-design/2026-05-18-platform-wallet-migration/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# DET → platform-wallet: Clean-Slate Backend Rewrite

## Executive Summary

DET becomes a thin adapter: `platform-wallet` owns chain sync, HD wallet management, identity lifecycle, DashPay, asset locks, and persistence. DET's `src/spv/` is deleted entirely — `SpvRuntime` inside `platform-wallet` drives all of it. The `CoreBackendMode` RPC/SPV dual-path disappears; there is one backend. The upgrade path is a one-time from_/into_ migration on first launch (backup → re-register wallets from seed → migrate identity/DashPay state → drop legacy tables). Single-key wallets are mocked with a clean swap boundary for a future upstream non-HD type.

> **STATUS**
>
> P0 — DONE (GREEN). P0.5 — DONE (GREEN). P1 — DONE (GREEN). P2 — DONE (GREEN).
> P3a — DONE (GREEN, commit `6d348566`). P3b — DONE (GREEN, commit `d5a3e51b`; `classify_contact` + 7 tests now DEAD, deleted in P3c).
> P3c–P3e — DONE (GREEN). P4-partial done.
> P3 re-scoped 2026-05-18: drop backwards compatibility, upstream-only DashPay derivation, no quarantine. Run continuing to completion + push.
> P4 split into P4a (UI data-path rewire, blocks P4a.5) → P4a.5 (fund-safety spend-path completion: 3 paths, `FundWithUtxo` removed w/ disclosure, blocks P4b) → P4b (mechanical prune, only after P4a.5; narrowed: `src/database/utxo.rs` + `utxos` table RETAINED — Decision #7 single-key carve-out; P5 adds mandatory single-key regression lane). P5 + Smythe gate pending.
> P4a.5 inserted (P2-completeness gap): `AssetLockKind::Shielded` + shielded Path 1 rewired to `WalletBackend::create_asset_lock_proof`; `FundWithUtxo` variants removed (no upstream funding-outpoint API at #3625 head) w/ disclosure via post-migration notice; `received_transaction_finality` slimmed to asset-lock-finality-only (ZMQ retained). P4b gated on P4a.5 exit.
> P5 gains release-blocking Smythe double-spend/fund-safety audit: invariants I1–I6 must all pass before push.
> Fund-safety spend path is upstream-authoritative from P2 — display gap addressed in P4a; spend-path correctness gap addressed in P4a.5.
> Only release-blocking gates: simplified Stage-B engine + QA lane (P3c–P3e) + post-migration UI data-path test + P5 Smythe I1–I6 audit.
> Supersedes the prior incremental plan (architecture.md, migration-plan.md, spv-rpc-correctness.md, verification.md — all deleted).
> Verified at PR #3625 head `738091f734e05c7a1b822bb1ebff336c93b67891`.

## Load-Bearing Confirmed Assumption

**Decision #1 — `platform-wallet` owns SPV internally: CONFIRMED at source. Not contradicted.**

`packages/rs-platform-wallet/Cargo.toml` declares `dash-spv` as a direct dependency. `SpvRuntime` (`packages/rs-platform-wallet/src/spv/runtime.rs`) constructs `DashSpvClient::new()` internally, owns `PeerNetworkManager` + `DiskStorageManager`, and exposes `run(config, cancel_token)` — its own sync loop. There is no host-feed API. `PlatformWalletManager` owns the `SpvRuntime`. DET's `src/spv/` is deletable; only a thin ConnectionStatus display adapter remains. See [upstream-reality.md](upstream-reality.md) for the full evidence chain.

## Gate Posture (Updated)

With Decision #1 (pin to #3625 head now) and Decision #2 (G2 downgraded via `PersistedWalletLoader` seam), implementation is no longer upstream-blocked.

**G1 — PR #3625 — now a release-hardening track, not a start blocker.**
DET is pinned to PR #3625 head now. P0–P2 proceed immediately. G1 resolves to: track #3625 until it merges, then bump pin to a released rev before shipping P3+. See [phasing.md § Combined Gate Posture](phasing.md#combined-gate-posture).

**G2 — `Wallet::from_persisted` gap — downgraded to deferred swap.**
`ClientStartState.wallets` is not reconstructed by `persister.load()` at PR head (`LOAD_UNIMPLEMENTED = ["ClientStartState::wallets"]` in `rs-platform-wallet-storage/src/sqlite/persister.rs`). Mitigated by the `PersistedWalletLoader` seam: `SeedReregistrationLoader` ships now with seed-re-registration behavior; `UpstreamFromPersisted` is a one-line swap when upstream ships `Wallet::from_persisted`. G2 is no longer a gate. See [g2-mock-boundary.md](g2-mock-boundary.md) and [upstream-reality.md § G2 Caveat](upstream-reality.md#g2-caveat--walletfrom_persisted-load-gap).

**Only release-blocking gate: simplified Stage-B engine + QA lane (P3c–P3e).**
The upstream-only DashPay derivation path must be implemented and QA-proven before P3+P4 ship. Quarantine apparatus WITHDRAWN (user decision 2026-05-18). See [data-model-and-migration.md](data-model-and-migration.md) — "Accepted fund-accessibility trade-off" and [phasing.md](phasing.md).

## Table of Contents

| File | Description |
|---|---|
| [upstream-reality.md](upstream-reality.md) | Verified upstream facts: what `platform-wallet` owns, the `src/spv/`-deletion answer, G2 caveat |
| [backend-architecture.md](backend-architecture.md) | New `src/wallet_backend/` module, `AppContext` placement, threading, event flow replacing reconcile, error model |
| [backendtask-contract.md](backendtask-contract.md) | Full kept/modified/removed/new `BackendTask` table; net frontend impact |
| [data-model-and-migration.md](data-model-and-migration.md) | Conversion table, one-time migration procedure with backup/fail-safe, dead fields |
| [removal-inventory.md](removal-inventory.md) | DELETE vs RETAIN lists; RPC backend mode fate; thin Core-RPC mining utility |
| [single-key-mock.md](single-key-mock.md) | `SingleKeyBackend` trait boundary, stub behavior, user message, isolation |
| [phasing.md](phasing.md) | P0–P5 phase table (including P0.5 compile floor, P4a.5 fund-safety spend-path completion, P5 Smythe release-blocking audit) with gates; skills/agents/crew; QA matrix; highest-risk assumption verdict |
| [g2-mock-boundary.md](g2-mock-boundary.md) | `PersistedWalletLoader` seam design — seed-re-registration now, one-line swap when upstream `Wallet::from_persisted` lands |
| [dip14-migration-hardstop.md](dip14-migration-hardstop.md) | SUPERSEDED 2026-05-18 — quarantine apparatus WITHDRAWN; retained as historical record only. See data-model-and-migration.md "Accepted fund-accessibility trade-off". |
| [open-questions.md](open-questions.md) | All 8 decisions — now fully RESOLVED |
| [feature-coverage.md](feature-coverage.md) | Supporting analysis: RPC-vs-SPV capability matrix; DET features absent from `platform-wallet` |

## Decisions — All Resolved

See [open-questions.md](open-questions.md) for full resolutions:

- **#1** G1 timing — RESOLVED: pin to #3625 head now; release-hardening only
- **#2** G2 seed-re-registration — RESOLVED: `PersistedWalletLoader` seam; G2 downgraded
- **#3** ZMQ listener — RESOLVED: audit before P4; delete if wallet-only
- **#4** Devnet identity discovery — RESOLVED: DET-permanent
- **#5** DashPay scope boundary — RESOLVED: hybrid split confirmed
- **#6** DIP-14/15 parity policy — RE-RESOLVED 2026-05-18: drop backwards compatibility, upstream-only derivation, quarantine apparatus WITHDRAWN (see [open-questions.md #6](open-questions.md#decision-6--dip-1415-parity-policy) and [data-model-and-migration.md](data-model-and-migration.md))
- **#7** Single-key timeline — RESOLVED: mock now, swap later
- **#8** Removed tasks grace — RESOLVED: hard-remove immediately
Loading