Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
a22d9e0
docs: add platform-wallet migration design docs
lklimek May 18, 2026
9d6022a
docs: replace incremental migration spec with clean-slate rewrite spec
lklimek May 18, 2026
8608808
docs: resolve all 8 open decisions in platform-wallet backend spec
lklimek May 18, 2026
52ca94d
docs: fold P0 findings — add P0.5 compile-floor phase and bounded DIP…
lklimek May 18, 2026
edc2d5b
refactor(wallet)!: P0.5 compile floor — bump dash-sdk to #3625, delet…
lklimek May 18, 2026
3a7f6af
feat(wallet): P1 WalletBackend skeleton + EventBridge + PersistedWall…
lklimek May 18, 2026
baba200
feat(wallet): P2 rewire BackendTask to WalletBackend (functional rewire)
lklimek May 18, 2026
4dcfce7
feat(wallet)!: P2 hard-remove ListCoreWallets/RecoverAssetLocks (Deci…
lklimek May 18, 2026
b5372bd
docs: ratify two-stage marker-gated P3 migration architecture
lklimek May 18, 2026
6d34856
feat(wallet): P3a Stage-A SQL v35 + migration markers + premigration …
lklimek May 18, 2026
d5a3e51
feat(wallet): P3b DIP-14/15 migrate-or-quarantine predicate (TDD, fun…
lklimek May 18, 2026
e3d7d01
docs: drop DIP-14 back-compat — supersede quarantine apparatus, recor…
lklimek May 18, 2026
107e3c5
feat(migration): P3c simplified Stage-B platform-wallet migration engine
lklimek May 18, 2026
743dbb9
feat(migration): P3d invariants + enable legacy-table DROP
lklimek May 18, 2026
b11534c
feat(migration): P3e QA harness + mandatory one-time post-migration n…
lklimek May 18, 2026
4499c82
refactor(p4): remove withdrawn-quarantine apparatus + orphaned RPC pr…
lklimek May 18, 2026
16094ce
docs: split P4 into UI data-path rewire (P4a) + mechanical prune (P4b…
lklimek May 18, 2026
30d7d15
feat(p4a): WalletSnapshot read model + wallets-screen data-path rewire
lklimek May 18, 2026
aae99d5
docs: P4a.5 fund-safety spend-path completion — upstream-only asset-l…
lklimek May 19, 2026
4695186
feat(p4a.5): fund-safety spend-path completion — upstream-only asset-…
lklimek May 19, 2026
1089b56
refactor(p4b-partial): delete the dead legacy spend / asset-lock-buil…
lklimek May 19, 2026
fbd138c
feat(p4a): complete deferred screen rewire onto WalletBackend snapshot
lklimek May 19, 2026
e3e41f0
docs: narrow P4b — retain utxo.rs for single-key (Decision #7 carve-out)
lklimek May 19, 2026
aa355b3
refactor(p4b-c1): delete dead HD Wallet balance/UTXO/tx fields + methods
lklimek May 19, 2026
c1eb682
refactor(p4b-c2): remove dead HD balance/total-received DB writers
lklimek May 19, 2026
62c701b
refactor(p4b-c3): v36 idempotent dead-settings-column migration
lklimek May 19, 2026
0711f53
test(p5): mandatory single-key carve-out regression lane + story flip
lklimek May 19, 2026
647046c
docs: reconcile utxos-retained carve-out (SEC-001) + correct secrets-…
lklimek May 19, 2026
dd3aa0e
fix(sec-001): retain utxos table through Stage-B legacy drop
lklimek May 19, 2026
8279fc0
test(sec-001): Stage-B-then-load single-key utxos regression
lklimek May 19, 2026
ed56a64
test(qa-001): direct network-free coverage of the real run_stage_b
lklimek May 19, 2026
f67d73a
test(qa-002): crash-retry no-double-broadcast (I4)
lklimek May 19, 2026
a81773b
test(qa-003): Path-3 asset-lock finality without Wallet mutation (I5)
lklimek May 19, 2026
2e52e48
refactor(p4b-c4): remove local-node settings UI + dead RPC plumbing
lklimek May 19, 2026
1cd82a7
fix(sec-002): reject unsupported send-payment options, no silent ignore
lklimek May 19, 2026
2cf9590
test(backend-e2e): wire harness to the real WalletBackend
lklimek May 19, 2026
ed71730
test(backend-e2e): fix peer-wait signal and SpvRuntime lock leak
lklimek May 19, 2026
e48749a
test(backend-e2e): advance workdir slot when SPV lock leaks
lklimek May 19, 2026
71c8baa
fix(wallet): spawn SpvRuntime run loop in WalletBackend::start (CRITI…
lklimek May 19, 2026
a5c2bdd
test(backend-e2e): retry transient wallet-registration in funded-wall…
lklimek May 19, 2026
064f09b
fix(wallet): register identity funding accounts via contained keys-be…
lklimek May 19, 2026
f7b4760
fix(wallet): provision identity funding accounts at the create_asset_…
lklimek May 19, 2026
99f0e92
fix(wallet): default-features build — use AppContext sdk/wallets fiel…
lklimek May 20, 2026
c1ea1c2
fix(context): eager WalletBackend init at AppState — kills SDK retry-…
lklimek May 20, 2026
e2f8346
fix(stage-b): rehydrate wallet store on cold start; stop dropping see…
lklimek May 20, 2026
09a7dfb
feat(wallet): migrate WalletBackend to rs-platform-wallet aab00e6 sig…
lklimek May 28, 2026
d3ffdda
feat(errors): typed TaskError variants for identity rejection + AL ti…
lklimek May 28, 2026
5cc6e89
refactor(wallet_backend): loose seam + staged-AL elimination
lklimek May 28, 2026
35eb07b
chore(deps): bump dashpay/platform aab00e6b → 17653ba8 (k/v storage)
lklimek May 28, 2026
65888df
docs(migration-tool): seed living TODO notes for future migration lib…
lklimek May 28, 2026
2bdb13b
feat(wallet_backend): DetKv typed k/v adapter on upstream KvStore
lklimek May 28, 2026
9d92408
refactor(unwire): delete Stage-B migration scaffolding
lklimek May 28, 2026
e7a3b65
refactor(unwire): delete main_password layer; SecretStore is sole pas…
lklimek May 28, 2026
e4ff962
refactor(unwire): migrate AppSettings user prefs to upstream k/v
lklimek May 28, 2026
0253750
refactor(unwire): migrate selected_wallet hashes to per-network k/v
lklimek May 28, 2026
7778eb6
refactor(unwire): top_ups + scheduled_votes → k/v; proof_log → tracing
lklimek May 28, 2026
e8bc5a6
refactor(unwire): contracts + contested_names → per-network k/v
lklimek May 28, 2026
b14bf32
refactor(unwire): identities + tokens → per-network k/v
lklimek May 28, 2026
ed6ea58
refactor(unwire): wallet platform-address-info + sync cursor → per-wa…
lklimek May 28, 2026
6aa9c39
docs(unwire): finalize PR #860 — document deferrals; reference SHAs
lklimek May 28, 2026
73996e5
refactor(shielded): commitment_tree → per-network SQLite file
lklimek May 28, 2026
68b6cc3
feat(wallet_backend): DashpayView adapter (read-only foundation)
lklimek May 28, 2026
3c26e3a
refactor(dashpay): migrate backend read paths to DashpayView
lklimek May 28, 2026
1f81ef2
refactor(dashpay): migrate write paths; cut DET writes
lklimek May 28, 2026
a345caa
refactor(dashpay): hoist Stored* types; migrate UI read paths
lklimek May 28, 2026
21f58ac
refactor(dashpay): UI writes → drop/k-v; address-index sidecar primit…
lklimek May 28, 2026
91917fe
refactor(dashpay): migrate backend_task callsites to sidecar/adapter
lklimek May 29, 2026
0acb5d9
refactor(dashpay): DELETE DET tables; finalize DashPay unwire
lklimek May 29, 2026
2136403
docs: catalog DET k/v keys at docs/kv-keys.md
lklimek May 29, 2026
b0fecac
Merge pull request #861 from dashpay/feat/unwire-deferred-domains
lklimek May 29, 2026
733f9e2
refactor(unwire): delete dead asset_lock_transaction module
lklimek May 29, 2026
e761cb7
feat(wallet_backend): wire SecretStore + SingleKeyView adapter
lklimek May 29, 2026
fefba73
feat(wallet_backend): ShieldedView per-network sqlite sidecar
lklimek May 29, 2026
c32918a
feat(backend_task): MigrationTask + MigrationStatus scaffolding
lklimek May 29, 2026
68ec561
refactor(database): gate legacy CREATE TABLE on legacy-detected
lklimek May 29, 2026
465a068
feat(migration): single_key_wallet → SecretStore (legacy row mirror)
lklimek May 29, 2026
a546c37
feat(migration): shielded notes + cursor → per-network sidecar
lklimek May 29, 2026
bca0857
docs(adr): finish data.db unwire architecture record
lklimek May 29, 2026
6d41b1f
feat(ui): cold-start migration banner + empty-state + retry
lklimek May 29, 2026
eaf2d52
refactor(shielded): rewire callsites to ShieldedView; add J-3 indicator
lklimek May 29, 2026
6ab7ff7
feat(ui): single-key import dialog + listing rewire
lklimek May 29, 2026
26ac4c4
feat(wallet_backend): wallet-metadata sidecar + one-shot migration
lklimek May 29, 2026
a6ba77b
feat(wallet_backend): seed-bytes SecretStore view; drop DET crypto layer
lklimek May 29, 2026
380b09b
feat(wallet_backend): store full encrypted envelope in SecretStore — …
lklimek May 29, 2026
06ce4c1
refactor(wallet): cut legacy wallet reads — HD sidecars now authorita…
lklimek May 29, 2026
b67d45f
refactor(wallet): cut legacy single_key_wallet reads — SingleKeyView …
lklimek May 29, 2026
42b88a1
refactor(db): drop dead wallet/utxo/single_key_wallet surface
lklimek May 29, 2026
2e6a34f
perf(wallet): criterion benches for cold-start hydration
lklimek May 29, 2026
a4926f5
docs(kv): refresh keyspace reference and cross-link as-shipped state
lklimek May 29, 2026
7ad1a42
docs: cover finish-unwire campaign in changelog and pub-API docs
lklimek May 29, 2026
f13b9cc
refactor(ui): dedup InvalidWif message via TaskError; i18n-ready netw…
lklimek May 29, 2026
5ae36bc
feat(cargo): gate wallet_backend internal modules behind bench featur…
lklimek May 29, 2026
b182f01
docs(changelog): bootstrap CHANGELOG.md with platform-wallet migratio…
lklimek May 29, 2026
0afcf53
test: close out tractable missing TCs from finish-unwire Phase 3
lklimek May 29, 2026
1370603
test(migration): reconcile TC-MIG rustdoc citations with spec (QA-007)
lklimek May 29, 2026
cc887fe
fix(migration): per-network sentinel + dispatch guard (SEC-001)
lklimek May 29, 2026
23be433
refactor(migration): typed MigrationError in Failed state, drop dead …
lklimek May 29, 2026
ce676fa
refactor(migration): typed legacy_table_exists_named pre-check (PROJ-…
lklimek May 29, 2026
24ea553
feat(migration): wire WalletStorageNotReady + NFR-4 short-circuit guards
lklimek May 29, 2026
d30f937
docs(migration): paragraph break in sentinel rationale comment
lklimek May 29, 2026
48cdb8a
feat(wallet-storage): version-tag envelopes, row-level length guards,…
lklimek May 29, 2026
6052dc7
feat(single-key): per-key passphrase at import (SEC-002 Option C)
lklimek May 29, 2026
4d235a5
docs(single-key): TODO marker for SEC-002 sign-time prompt follow-up
lklimek May 29, 2026
a90603a
fix(security,qa): redact private bytes in Debug; pin IdentityTask/Das…
lklimek May 29, 2026
686430a
docs(kv-keys): sync key reference with current source
lklimek Jun 1, 2026
2313089
docs(audit): consolidated gap report for PR 860 platform-wallet rewrite
lklimek Jun 1, 2026
42388c4
fix(spv): wire start_spv() to WalletBackend::start()
lklimek Jun 1, 2026
3165f98
fix(spv): start SPV on backend-wiring completion across all callers
lklimek Jun 1, 2026
36f5a98
fix(spv): surface chain-sync start failures to the user
lklimek Jun 1, 2026
8d35933
docs(audit): mark PROJ-001 resolved on-branch in PR 860 gap report
lklimek Jun 1, 2026
549ddfa
fix(wallet): honest error when wallet data is from a newer app version
lklimek Jun 1, 2026
dbd9435
refactor(kv): reseat DetKv on 08b0ed9 per-object KvStore; seam out up…
lklimek Jun 1, 2026
845ff68
fix(kv): honest error on incompatible wallet schema; finish token-bal…
lklimek Jun 1, 2026
fb50c04
chore(deps): bump platform to 35e4a2f (meta_* FK relaxation + token-b…
lklimek Jun 1, 2026
f6119de
refactor(kv): delete det:token_balance cache, read balances from upst…
lklimek Jun 1, 2026
d7ac9a0
refactor(kv): promote identity + dashpay-overlay keys to Identity scope
lklimek Jun 1, 2026
129d54d
docs(kv): sync DetScope/per-object docs with integrated state
lklimek Jun 1, 2026
bd0ed0e
fix(spv): surface SPV sync progress in the UI from live upstream state
lklimek Jun 1, 2026
5a04735
fix(tokens): make "Stop Tracking Balance" truly un-watch the pair
lklimek Jun 1, 2026
7e2553e
fix(spv): return real per-network platform activation height
lklimek Jun 1, 2026
a7327e7
feat(dashpay): derive contact-request expires_at from created_at
lklimek Jun 1, 2026
5ba4554
feat(mcp): structured, paginated platform_withdrawals_get
lklimek Jun 1, 2026
3ac9b3b
fix(dashpay): persist payment status transitions; document check_addr…
lklimek Jun 1, 2026
6c520a3
fix(dashpay): derive contact-request xpub from HD seed (PROJ-004)
lklimek Jun 1, 2026
450214e
fix(dashpay): per-network coin-type on receive-side contact derivatio…
lklimek Jun 1, 2026
fd20978
chore(deps): bump platform deps 35e4a2f → ffdc28b8 (PR #3625 head)
lklimek Jun 2, 2026
419ef95
docs(gap-audit): refresh PR #860 gaps to as-of-450214e5 state
lklimek Jun 2, 2026
9529aed
refactor(dashpay): remove dead add_contact/remove_contact stubs and o…
lklimek Jun 2, 2026
b2febb7
docs(gap-audit): resolve PROJ-002 (removed); re-file PROJ-012 as MEDI…
lklimek Jun 2, 2026
df38b31
docs(rehydration): design UpstreamFromPersisted re-wire onto PR 3692
lklimek Jun 2, 2026
d681173
docs(unlock-ux): requirements + UX spec for sign-time passphrase prompt
lklimek Jun 2, 2026
bf939c6
docs(unlock-ux): Phase 1c test-case specification for sign-time unloc…
lklimek Jun 2, 2026
f35ea7b
chore(deps): switch platform to PR 3692 head ddfa66ed (rehydration)
lklimek Jun 2, 2026
e6c6c01
feat(wallet): seedless wallet load via UpstreamFromPersisted (PROJ-010)
lklimek Jun 2, 2026
c3695bd
docs(unlock-ux): Phase 1d development plan for sign-time unlock prompt
lklimek Jun 2, 2026
2272bae
fix(wallet): inject seed on no-password unlock so hydrated wallets ca…
lklimek Jun 2, 2026
f329e8f
docs(secret-access): JIT SecretAccess chokepoint design (supersedes g…
lklimek Jun 2, 2026
ed06c01
feat(wallet): SecretAccess JIT chokepoint + SecretPrompt seam + DetSi…
lklimek Jun 2, 2026
29b68a0
feat(ui): egui SecretPrompt host + SecretAccess wiring (additive)
lklimek Jun 2, 2026
db03053
refactor(wallet): JIT secret access — retire R1/R2 eager residencies,…
lklimek Jun 2, 2026
29637b0
docs(secret-access): scope R3 completion (Wallet::Open retirement)
lklimek Jun 2, 2026
4545b1e
refactor(dashpay,identity): fetch HD seed JIT in 4 async readers (R3 D1)
lklimek Jun 2, 2026
d04ba87
refactor(wallet): seed-as-parameter for in-model HD derivation (R3 D2)
lklimek Jun 2, 2026
ca14778
feat(wallet): JIT DetPlatformSigner at the 4 SDK fund sites; xpub-onl…
lklimek Jun 2, 2026
62ab8c4
feat(wallet): WalletTask::DeriveKeyForDisplay; route wallets-screen k…
lklimek Jun 2, 2026
832c345
fix(identity): route address-funding signing through DetPlatformSigne…
lklimek Jun 2, 2026
9e778d9
fix(wallet): use WalletLocked for missing HD seed at the 4 fund sites…
lklimek Jun 2, 2026
a61f56b
refactor(wallet): route remaining seed readers through JIT chokepoint…
lklimek Jun 2, 2026
5c05e91
docs(secret-access): design identity-auth xpub persistence (R3 D4b)
lklimek Jun 2, 2026
cc2875a
docs(secret-access): design 1112 identity-key-chooser redesign (R3 D4)
lklimek Jun 2, 2026
c2e50a1
feat(wallet): memoize identity-auth public keys to retire steady-stat…
lklimek Jun 2, 2026
b1c4079
refactor(identity): public-only key chooser, retire seed readers (R3 …
lklimek Jun 2, 2026
f474403
fix(shielded): JIT platform signer for shield transitions; retire leg…
lklimek Jun 2, 2026
2fdbc26
refactor(identity): route every get_resolve caller through the JIT ch…
lklimek Jun 2, 2026
825ae58
test(e2e): migrate platform-receive derivation off the retired parked…
lklimek Jun 2, 2026
06a4b92
feat(wallet)!: drop parked seed from WalletSeed::Open — full JIT secr…
lklimek Jun 2, 2026
e6bd34e
fix(wallet): align JIT secret-prompt copy and docs to present state (…
lklimek Jun 2, 2026
6c7002f
test(wallet): JIT signer parity + secret-access guards; SEC-103 key z…
lklimek Jun 2, 2026
8b3d9d3
style: rustfmt new R3-QA test code
lklimek Jun 2, 2026
43f412c
test(kittest): isolate AppState tests onto a temp data dir (QA-005)
lklimek Jun 3, 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
41 changes: 41 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# 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]

### Changed

- **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.pwsvault`)
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`.

### 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.

### Fixed

- `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.
Loading