Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
251 changes: 251 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
# 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/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.0.0-dev.1] - 2026-04-16
Comment on lines +7 to +8

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Nitpick: Missing [Unreleased] section

The file declares adherence to Keep a Changelog 1.1.0 on line 5, which calls for an ## [Unreleased] section at the top to collect in-flight entries between releases. Since v1.0-dev will continue to accumulate changes before the final v1.0.0 tag, adding this section now makes it easier to append entries as PRs land instead of reconstructing them at release time.

💡 Suggested change
Suggested change
## [1.0.0-dev.1] - 2026-04-16
## [Unreleased]
## [1.0.0-dev.1] - 2026-04-16

source: ['claude']

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Nitpick: Release date set to commit day rather than tag day

2026-04-16 matches the commit author date, but per the PR description the tag/release is created post-merge. If this PR sits open before merging, the date here will not match when v1.0.0-dev.1 is actually published. Consider updating the date during the tagging step (and aligning with flatpak.yml, which prefers github.event.release.published_at).

source: ['claude']


Comment on lines +7 to +9

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Nitpick: Add an [Unreleased] section to seed the post-release pattern

Keep a Changelog recommends maintaining an ## [Unreleased] section above the latest release to collect changes between releases. Adding it now sets the convention for subsequent contributors and avoids per-PR churn debating where to add new entries.

source: ['claude']

### Added

- Tokens system with full lifecycle support: create, mint, burn, transfer, freeze, unfreeze, pause, destroy, set price, and direct purchase (#185, #206, #207, #208)
- Token creator with presets, multi-language names, plural forms, keywords, document schemas, dashpay.io link, and convention editing (#211, #218, #222, #246, #247, #249, #257, #260, #266, #268, #288, #384)
- Token configuration updates with group actions, change control rules, and key selector (#239, #251, #259, #263, #266, #284, #292, #293, #383)
- Token claims history screen with estimated unclaimed rewards (#210, #215, #216)
- Token info popup and public notes with token transitions (#240, #242, #361)
- Token direct purchase and price setting with decimal handling (#280, #342, #343)
- Pay tokens for document operations (#291)
- HD wallet system with BIP44 key derivation, multi-account support, and wallet locking/unlocking (#464, #415, #459)
- Shielded transactions (ZK) integration with unified shield screen and address selection (#793, #801)
- Unified send screen supporting all source/destination combinations (#798)
- MCP server and det-cli command-line interface for programmatic tool access (#773)
- Manual DAPI node discovery with SDK update and network config improvements (#767)
- SPV (Simplified Payment Verification) light wallet support replacing full Core RPC dependency (#525)
- SPV mempool transaction detection via bloom filters (#776)
- SPV sync status panel on wallet screen (#642)
- DashPay contacts integration with profile/username resolution, contact request display, timestamps, and filtering (#564)
- Dark mode with proper text colors and theme-aware components (#375, #515)
- Accessibility: force eager AccessKit activation and label sidebar buttons (#775)
- FeatureGate system for conditional UI visibility (#805)
- Platform info screen (#390)
- Dash Masternode List and Quorum Viewer (#428)
- Contract visualizer screen (#219, #296)
- Contract updates support (#285)
- Contract context menu for actions in chooser panel (#378)
- Create document screen with improvements (#221, #231)
- View claims screen improvements (#232)
- Document action screens with left panel support (#303, #314, #315)
- Asset lock creation and detail screens (#418)
- DAPI-based asset lock operations replacing Core RPC in SPV mode (#528)
- Identity key contract bounds (#362)
- Add existing identity by wallet and identity index (#444)
- Derive keys from loaded wallets when loading identity by ID (#446)
- Identity registration cost estimation improvements (#261)
- Per-wallet Core RPC routing with auto-detection and selection dialog (#695)
- Core RPC auto-detection of dash-qt binary location (#297, #377)
- Graceful shutdown of dash-qt on Unix (#380)
- Mine Blocks dialog for Regtest/Devnet dev mode (#638)
- Auto Update button for dashmate RPC password (#641)
- GroveSTARK ZK proofs integration (#450)
- Tri-state connection indicator (red/orange/green) with DAPI endpoint tracking (#533, #628)
- Unified MessageBanner component for all screens with global display and details panel (#601, #604)
- ConfirmationDialog component used throughout the app (#413, #430)
- Amount type and AmountInput component (#417)
- AddressInput component (#786)
- Secret type with zeroize-on-drop and PasswordInput component (#709)
- ResponseExt trait to enforce tooltip cursor policy (#738)
- Unified identity selector (#408)
- Left panel scroll and button labels (#441, #443)
- Vertical scrolling on network chooser screen (#366)
- Local DPNS name validation with instant feedback (#393)
- Enhanced input decoding supporting multiple formats (#376)
- User-friendly file path display (#403)
- Log rotation on startup (#670)
- Enhanced key display in developer mode with WIF and Hex formats (#258, #424)
- Fee multiplier caching used across all UI screens (#506)
- Hide zero-balance addresses by default (#606)
- Nonce column for Platform Payment addresses (#637)
- Network field added to identity structures (#423)
- ZMQ URI configuration via .env (#425)
- Dev mode toggle with screen restrictions for mainnet (#250, #298)
- Keyword search improvements (#318)
- Additional font and language support (#246)
- Configure-local.sh script for dashmate network setup (#640)
- Flatpak packaging and CI workflow (#589)
- Snapcraft profile for bundled dash-evo-tool + dash-qt (#332)
- Signed DMG for macOS (#437)

### Fixed

- macOS: order windows out on exit to prevent KVO crash (#820)
- DashPay: read label instead of normalizedLabel and use records.identity in profile search (#822)
- DashPay: DPNS normalization, contact resolution, key type, and privateData fixes (#810)
- Database: clean orphaned FK rows and add startup consistency checks (#816)
- SPV: apply InstantSend locks to self-broadcast transactions (#815)
- SPV: restore sync progress bars via EventHandler (#809)
- SPV: zero out stale per-address balances during reconciliation (#627)
- SPV: distinct error state for sync failures (#650)
- SPV: notify wallet after broadcast to update balance immediately (#674)
- SPV: skip best chain lock polling in SPV mode (#567)
- SPV: add iteration limit to fee calculation loop (#620)
- Send Dash screen improvements with unified shield screen merge (#802)
- Wallet screen identity, state management, and input validation (#797, #800)
- Prevent platform address balance doubling after transfer and refresh (#502, #507)
- Take from multiple platform addresses in simple send flow (#501)
- Reserve fees when using max button for platform address identity funding (#511)
- Identity registration: fetch fresh nonces from platform (#509)
- Identity creation from address due to wrong identity ID (#470)
- Identity not found error when refreshing identities (#374)
- Identity refresh errors handled gracefully (#178)
- Identity registration default key using wrong ContractBounds (#487)
- Duplicate identity keys created in multiple wallets (#289)
- Empty identity wallets after get_local_user_identities (#335)
- Critical wallet bugs: balance calculation, address handling (#522, #476, #478, #85, #534)
- Wallet balance not showing as option for top up (#388)
- Wallet screen not updating wallets after network change (#451)
- Platform address: update prefix from dashevo to evo (#505)
- View platform address popup showing wrong address format (#500)
- Top up with QR code handling and validation fixes (#410, #447, #492)
- Not enough balance to pay fee in platform-to-core transfers (#513)
- Invalid min amount when transferring funds (#523)
- Obtain change address once before fee retry loop (#676)
- Preserve nonces on platform address refresh (#652, #677)
- Duplicate address error when registering identity or refreshing wallet (#264)
- Don't auto-generate platform address when opening receive dialog (#508)
- Prevent duplicate main account labels (#607)
- Display balances for key-only addresses and load RPC transactions (#692, #752)
- Prevent stacking banners during batch wallet identity search (#735)
- Show user-friendly error for duplicate identity keys (#729)
- Move list_core_wallets() RPC off the UI thread (#719)
- Token screens not enabled for mainnet (#405)
- Token reorder assignment and distribution field checks (#535)
- Token balance decimals (#379)
- Token purchasability not refreshing unless app restart (#432)
- Token action buttons alignment and spacing fixes

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Nitpick: Several Fixed entries lack PR references

Most entries in the changelog include a (#NNN) reference, but nine do not, which makes them stand out as inconsistent and harder to trace:

  • Line 125: Token action buttons alignment and spacing fixes
  • Line 129: Confirm token pause had incorrect message
  • Line 132: Fetching forever when searching for non-existent contract in add token screen
  • Line 139: Confirmation dialog on withdrawal screen always showing "loading"
  • Line 167: Screen button labels display hard to see in dark mode
  • Line 168: Unable to click anything except back button in success screens
  • Line 178: Refresh receive dialog balances from wallet on each frame
  • Line 196: Remove automatic network fallback behavior to prevent silent mainnet fallback
  • Line 245: Parallelize contact profile/username fetching with chunked join_all

If these correspond to merged PRs or commits, add the references; if they were direct commits with no PR, leaving them is fine but worth a quick pass to confirm.

source: ['claude']

- Incorrect decimals handling on token create, mint and burn screens (#419)
- Replace token properly after config update (#270)
- Get critical key for token action screens (#269)
- Confirm token pause had incorrect message
- Handle RegisteredTokenContract result to clear token creation spinner (#529)
- Token refresh takes forever when no identity defined (#290)
- Fetching forever when searching for non-existent contract in add token screen
- Document actions auto-selecting master keys incorrectly (#493)
- Error loading identities from local DB on token creation screen (#364)
- Cleaner key selection for documents (#230)
- Security level validation for authentication and encryption keys (#254, #494)
- Security level validation for add key screen (#494)
- Panic when withdrawal destination address is invalid (#395)
- Confirmation dialog on withdrawal screen always showing "loading"
- Invalid amount in identity create broke screen (#278)
- Show error if duplicate contract keywords in creator (#279)
- Message unclear when identity doesn't have appropriate private keys loaded (#360)
- Could not load identity with owner key (#357)
- Display error for invalid seed phrase in import wallet (#356)
- Import Wallet Screen step numbering and error message for unique wallet constraint (#354)
- Transfer tokens to Other should clear the text input (#352)
- No error display when importing a wallet twice on different networks (#466)
- Scrollable unused asset locks on identity creation (#460)
- Showing used asset locks as unused (#448)
- Profile bio guideline text and unsaved changes dialog (#554)
- Prevent false 'No users found' flash in profile search (#748)
- Use correct DashPay profile field "publicMessage" instead of "bio" (#582)
- Keyword search required new platform version plus error handling (#449)
- Handle malformed YAML gracefully in load_testnet_nodes_from_yml (#613)
- Classify DAPI transport errors and decode gRPC domain errors (#766)
- Detect 401 auth errors and show actionable credential message (#783)
- Throttle system theme detection to prevent white flash (#781)
- UI repaint only when needed to reduce CPU usage (#344)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Nitpick: Several PRs appear in multiple sections

Six PR numbers are listed in more than one section, which makes the changelog harder to scan and inflates the perceived scope of each section:

Place each PR under the single section that best describes its primary intent (e.g. #344/#781/#420/#549 under Performance only; #709/#562 under Security only) and drop the duplicate entry from Fixed/Added.

source: ['claude']

- Dialog button visibility and close-on-click-outside (#703)
- Prevent overlapping banner details when multiple expanded (#681, #699)
- Message banner icons, dismiss button, text wrapping, and duplicate errors (#654)
- Timed message countdown freezes without user interaction (#556)
- Add scroll to keys popup for identities with many keys (#602)
- Right side margin for top panel buttons (#313)
- Dark mode text colors (#515)
- Hard to see password strength text with color (#359)
- Screen button labels display hard to see in dark mode
- Unable to click anything except back button in success screens
- Platform address validation consistency across UI screens (#592)
- Async graceful shutdown to prevent UI hang on window close (#679)
- Remove dead code with guaranteed mutex deadlock (#559)
- Handle errors instead of panicking on corrupted database blobs (#561)
- Database migration process for version 9 (#300)
- Consolidate migrations v28-v32 into v33 (#788)
- Add missing contact_private_info table to migration 28 (#702)
- Add indexes, transaction atomicity, and N+1 query elimination (#549)
- Resolve wallet creation issue with QR code (#301)
- Refresh receive dialog balances from wallet on each frame
- Overwrite dash.conf setting not persisting (#358, #372)
- Dash-qt path autodetection fails (#377, #409)
- Handle dash-qt spawn and wallet DB update failures gracefully (#536)
- Settings read from DB 20 times a second (#420)
- Change of wallet on top up does not update the address (#414)
- Refresh UTXOs with no address in wallet gives invalid total balance (#334)
- Dev mode toggle in left panel when unchecked in settings if config load failed (#488)
- Ensure dev mode is off and SPV sync off for new users (#504)
- Logging should interpret RUST_LOG env variable (#467)
- Some document actions were showing error when it was success (#452)
- Embed .env.example and core configs into the binary (#331)
- Build fails for Windows target (#527)
- Statically link MinGW runtime for Windows builds (#769)
- Bundle sqlite3 lib for Windows cross-compilation (#664)
- macOS wgpu renderer fix (#662)
- Force Core RPC mode on app start if not in dev mode (#489)
- Connection status not clear (#532)
- Remove automatic network fallback behavior to prevent silent mainnet fallback
- Harden cookie parsing, config save, and logger init (#537)
- Compute relative timestamps from actual data (#581)
- Replace 50+ panicking unwrap/expect calls with proper error propagation across the codebase (#562)
- CI: derive version from Cargo.toml in release artifacts (#804)

### Changed

- Redesign wallet screen information architecture (#791)
- Lazy network contexts with unified network switch and MCP network tools (#814)
- Migrate from Result<T, String> to typed TaskError error envelope throughout backend (#660, #665, #739)
- Return typed TaskError from identity backend tasks (#730)
- Replace RwLock<Sdk> with ArcSwap<Sdk> for better concurrent access (#600)
- SPV architecture: eliminate separate thread/runtime, improve shutdown and UX (#577)
- SPV: replace auto-stop with Connecting state and degraded warning (#658)
- SPV: migrate event handling to broadcast channels
- Centralize inline colors to DashColors constants (#572)
- Unify action buttons to use ComponentStyles helpers (#708)
- Simplify wallets UI helpers and send flow (#519)
- Extract address table, asset locks, and single-key view from wallets screen (#542)
- Split context.rs into focused submodules (#543)
- Refactor masternode list diff screen state (#520)
- Extract dialog rendering into wallets_screen/dialogs.rs module (#539)
- Remove unused Insight API and show_in_ui config fields (#597)
- Replace println/eprintln with tracing macros across codebase (#550)
- Wrap database connection in Arc<Mutex> and add shared_connection (#643)
- Simplify platform sync by removing PlatformSyncMode (#635)
- Replace Option<&AppContext> with &AppContext in register_addresses params (#649)
- Unify document action screen files (#303)
- Use identity key chooser helper instead of custom chooser for each screen (#316)
- Rename "Developer mode" to "Expert mode" in UI (#737)
- Upgrade to egui 0.33, rusqlite 0.37, Rust edition 2024 (#404, #406)
- Update dash-sdk to Platform v3.1-dev (#806, #690, #526, #253)
- Update dash-sdk for DIP-18 HRP support (#575)
- Update platform to v2.1.2
- Update bincode to 2.0.1
- Replace deprecated serde_yaml with serde_yaml_ng (#553)

### Security

- Add Secret type with zeroize-on-drop for sensitive data and PasswordInput component (#709)
- Enforce security level validation for ENCRYPTION/DECRYPTION keys in Identity Create (#254)
- Replace panic on missing signing key with validation in 8 token screens
- Replace expect() panics with error propagation across database, identity, wallet, and platform modules (#562)
- Safe cargo wrapper for CI to strip secrets from environment before running build scripts

### Performance

- Repaint UI only when needed, reducing idle CPU usage (#344)
- Parallelize contact profile/username fetching with chunked join_all
- Add database indexes and eliminate N+1 queries (#549)
- Throttle system theme detection to prevent white flash on startup (#781)
- Cache settings reads to avoid 20 queries per second (#420)
- Optimize x86-64 builds for base x86-64 CPU (#267)

[1.0.0-dev.1]: https://github.com/dashpay/dash-evo-tool/releases/tag/v1.0.0-dev.1

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Nitpick: Reference link points to tag, not compare URL

The Keep a Changelog convention is to link versions to GitHub compare URLs so readers can diff between releases. The current link points only to the release tag, which shows the tag page but not the changes relative to the previous release. Since this changelog covers a large span since v0.8.5, a compare link is especially useful here.

💡 Suggested change
Suggested change
[1.0.0-dev.1]: https://github.com/dashpay/dash-evo-tool/releases/tag/v1.0.0-dev.1
[1.0.0-dev.1]: https://github.com/dashpay/dash-evo-tool/compare/v0.8.5...v1.0.0-dev.1

source: ['claude']

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Nitpick: Use a compare URL instead of a release-tag URL for the version link

Keep a Changelog (which this file's header cites) conventionally uses compare URLs at the bottom — they're more useful to readers and don't 404 between merge and tag-publication. Using a tag URL here means the link will be broken until the post-merge tagging step runs.

💡 Suggested change
Suggested change
[1.0.0-dev.1]: https://github.com/dashpay/dash-evo-tool/releases/tag/v1.0.0-dev.1
[1.0.0-dev.1]: https://github.com/dashpay/dash-evo-tool/compare/v0.8.0...v1.0.0-dev.1

source: ['claude']

2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "dash-evo-tool"
version = "1.0.0-dev"
version = "1.0.0-dev.1"
license = "MIT"
edition = "2024"
default-run = "dash-evo-tool"
Expand Down
2 changes: 1 addition & 1 deletion flatpak/org.dash.DashEvoTool.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,6 @@

<!-- Version and date are auto-synced from Cargo.toml by CI (flatpak.yml) -->
<releases>
<release version="1.0.0-dev" date="2026-02-17" type="development" />
<release version="1.0.0-dev.1" date="2026-04-16" type="development" />

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Nitpick: Manual version/date edit duplicates CI auto-sync

The comment on line 46 states that version and date are auto-synced from Cargo.toml by .github/workflows/flatpak.yml (confirmed at lines 43-62 of that workflow, which uses sed to rewrite the version/date and then fails the build if the rewrite did not take effect). The manually edited values are harmless because CI overwrites them, but they invite drift (the date here is the commit day, while CI uses the release publication day). Either leave this file untouched in release-bump PRs or drop the auto-sync step to have a single source of truth.

source: ['claude']

</releases>
</component>
Loading