Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
111c632
fix(spv): zero out stale per-address balances during reconciliation (…
lklimek Feb 24, 2026
435c98b
fix: handle malformed YAML gracefully in load_testnet_nodes_from_yml …
lklimek Feb 24, 2026
8404cdd
chore: let Claude write manual test scenarios for PRs (#634)
lklimek Feb 24, 2026
9b42950
build(flatpak): use only-arches for dynamic protoc architecture selec…
lklimek Feb 24, 2026
3cbf5ba
Merge remote-tracking branch 'origin/v1.0-dev' into zk
lklimek Feb 24, 2026
f6a09ee
refactor(database): wrap connection in Arc<Mutex> and add shared_conn…
lklimek Feb 24, 2026
d4ac7ab
backport: feat(ui): add Auto Update button for dashmate RPC password …
lklimek Feb 24, 2026
6adbb5d
fix(wallet): use mode-aware broadcast for platform funding in SPV mod…
lklimek Feb 24, 2026
a8f4901
backport: feat(scripts): add configure-local.sh for dashmate network …
lklimek Feb 24, 2026
18d4df8
backport: fix(wallet): calculate asset lock tx fee dynamically based …
lklimek Feb 24, 2026
21fd7e3
fix(wallet): defer UTXO removal until asset lock tx is fully built an…
Copilot Feb 24, 2026
79e1479
fix(wallet): address audit findings from PR #645 review (#648)
lklimek Feb 24, 2026
cb837f3
backport: feat(wallet): add Mine Blocks dialog for Regtest/Devnet dev…
lklimek Feb 24, 2026
513cc87
backport: feat(ui): show nonce column for Platform Payment addresses …
lklimek Feb 24, 2026
5a13ded
refactor(wallet): replace Option<&AppContext> with &AppContext in reg…
lklimek Feb 24, 2026
0cde65f
fix(spv): zero out stale per-address balances during reconciliation (…
lklimek Feb 24, 2026
0879c45
fix: handle malformed YAML gracefully in load_testnet_nodes_from_yml …
lklimek Feb 24, 2026
4d8b2b2
chore: let Claude write manual test scenarios for PRs (#634)
lklimek Feb 24, 2026
17650e9
build(flatpak): use only-arches for dynamic protoc architecture selec…
lklimek Feb 24, 2026
da00777
Merge branch 'v1.0-dev' into zk-extract/all-merged
lklimek Feb 24, 2026
7668de9
Merge remote-tracking branch 'origin/zk-extract/all-merged' into zk-e…
lklimek Feb 24, 2026
1ec2e7e
fix(ci): remove local path patches, use git deps for platform crates
lklimek Feb 24, 2026
0710295
fix(test): store wallet in DB before registering addresses
lklimek Feb 25, 2026
aa25793
test: use in-memory database for e2e and kittest tests (#655)
lklimek Feb 25, 2026
967a520
fix(ui): fix message banner icons, dismiss button, text wrapping, and…
lklimek Feb 25, 2026
e078d0b
Merge remote-tracking branch 'origin/v1.0-dev' into zk-extract/all-me…
lklimek Feb 25, 2026
260d18d
backport: feat(ui): add sync status panel to wallet screen (#642)
lklimek Feb 25, 2026
3c7fb0b
backport: refactor(wallet): simplify platform sync by removing Platfo…
lklimek Feb 25, 2026
7e95598
Merge remote-tracking branch 'origin/v1.0-dev' into zk-extract/all-me…
lklimek Feb 25, 2026
afd7a4c
fix(build): restore shielded module declaration removed during merge
lklimek Feb 25, 2026
64651c5
fix(test): restore store_wallet calls lost in merge (#663)
Copilot Feb 25, 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
9 changes: 0 additions & 9 deletions .github/workflows/flatpak.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,8 @@ jobs:
include:
- arch: x86_64
runs-on: ubuntu-latest
protoc-zip: protoc-25.2-linux-x86_64.zip
protoc-sha256: 78ab9c3288919bdaa6cfcec6127a04813cf8a0ce406afa625e48e816abee2878
- arch: aarch64
runs-on: ubuntu-24.04-arm
protoc-zip: protoc-25.2-linux-aarch_64.zip
protoc-sha256: 07683afc764e4efa3fa969d5f049fbc2bdfc6b4e7786a0b233413ac0d8753f6b

runs-on: ${{ matrix.runs-on }}
timeout-minutes: 20
Expand Down Expand Up @@ -59,11 +55,6 @@ jobs:
echo "=== Disk space after SDK install ==="
df -h

- name: Patch manifest for architecture
run: |
sed -i "s|protoc-25.2-linux-x86_64.zip|${{ matrix.protoc-zip }}|g" flatpak/org.dash.DashEvoTool.yml
sed -i "s|sha256: 78ab9c3288919bdaa6cfcec6127a04813cf8a0ce406afa625e48e816abee2878|sha256: ${{ matrix.protoc-sha256 }}|" flatpak/org.dash.DashEvoTool.yml

- name: Prepare Cargo cache
run: mkdir -p cargo-cache/registry cargo-cache/git cargo-target

Expand Down
25 changes: 23 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,22 @@ cargo test --test kittest --all-features # UI integration tests (egui_
cargo test --test e2e --all-features # End-to-end tests
```


Test locations:
- Unit tests: inline in source files (`#[test]`)
- UI integration: `tests/kittest/`
- E2E: `tests/e2e/`

Always run `cargo clippy` and `cargo +nightly fmt` when finalizing your work.


### Manual test scenarios

You MUST identify manual tests needed for the changes and write a manual test scenarios. Use the `claudius:qa-engineer` agent if available.
Skip the manual test file only for non-functional changes (CI, docs, formatting, pure refactoring) — state why in the PR description.
Put tests in docs directory, as described in "Documentation" section below. Reference the file in the PR description under "Test plan".
Before creating a PR, re-review test scenarios and update them if needed.

## CI: Safe Cargo Wrapper

In GitHub Actions (Claude Code workflow), use `scripts/safe-cargo.sh` instead of `cargo` directly. This wrapper strips CI secrets from the environment before running cargo, preventing build scripts from accessing credentials.
Expand All @@ -46,13 +55,25 @@ scripts/safe-cargo.sh clippy --all-features --all-targets -- -D warnings
scripts/safe-cargo.sh +nightly fmt --all
```


## Coding Conventions

### Parameter ordering

When a method takes `&AppContext` (or `Option<&AppContext>`), place it as the first parameter after `self`. Example:

```rust
fn remove_selected_utxos(&mut self, context: Option<&AppContext>, selected: &BTreeMap<...>) -> Result<(), String>
```


## Architecture Overview

**Dash Evo Tool** is a cross-platform GUI application (Rust + egui) for interacting with Dash Evolution. It enables DPNS username registration, contest voting, state transition viewing, wallet management, and identity operations across Mainnet/Testnet/Devnet.

## Documentation

- **docs/ai-design** should contain architecture and technical design files, grouped in subdirectories prefixed with ISO-formatted date
- **docs/ai-design** should contain architecture, technical design and manual testing scenarios files, grouped in subdirectories prefixed with ISO-formatted date
- end-user documentation is in a separate repo: https://github.com/dashpay/docs/tree/HEAD/docs/user/network/dash-evo-tool , published at https://docs.dash.org/en/stable/docs/user/network/dash-evo-tool/

### Core Module Structure
Expand Down Expand Up @@ -129,7 +150,7 @@ Screens hold `Arc<AppContext>` and manage their own UI state.

## UI Component Pattern

Components follow a lazy initialization pattern (see `doc/COMPONENT_DESIGN_PATTERN.md`):
Components follow a lazy initialization pattern (see `docs/COMPONENT_DESIGN_PATTERN.md`):

```rust
struct MyScreen {
Expand Down
22 changes: 22 additions & 0 deletions Cargo.lock

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

28 changes: 4 additions & 24 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ zeromq = "0.4.1"
native-dialog = "0.9.0"
raw-cpuid = "11.5.0"

[features]
testing = []

[dev-dependencies]
egui_kittest = { version = "0.33.3", features = ["eframe"] }

Expand All @@ -95,31 +98,8 @@ winres = "0.1"

[lints.rust.unexpected_cfgs]
level = "warn"
check-cfg = ["cfg(tokio_unstable)"]
check-cfg = ["cfg(tokio_unstable)", "cfg(feature, values(\"testing\"))"]

[patch."https://github.com/dashpay/platform"]
dapi-grpc = { path = "../platform/packages/dapi-grpc" }
dash-context-provider = { path = "../platform/packages/rs-context-provider" }
dash-platform-macros = { path = "../platform/packages/rs-dash-platform-macros" }
dash-sdk = { path = "../platform/packages/rs-sdk" }
dashpay-contract = { path = "../platform/packages/dashpay-contract" }
data-contracts = { path = "../platform/packages/data-contracts" }
dpns-contract = { path = "../platform/packages/dpns-contract" }
dpp = { path = "../platform/packages/rs-dpp" }
drive = { path = "../platform/packages/rs-drive" }
drive-proof-verifier = { path = "../platform/packages/rs-drive-proof-verifier" }
feature-flags-contract = { path = "../platform/packages/feature-flags-contract" }
keyword-search-contract = { path = "../platform/packages/keyword-search-contract" }
masternode-reward-shares-contract = { path = "../platform/packages/masternode-reward-shares-contract" }
platform-serialization = { path = "../platform/packages/rs-platform-serialization" }
platform-serialization-derive = { path = "../platform/packages/rs-platform-serialization-derive" }
platform-value = { path = "../platform/packages/rs-platform-value" }
platform-version = { path = "../platform/packages/rs-platform-version" }
platform-versioning = { path = "../platform/packages/rs-platform-versioning" }
rs-dapi-client = { path = "../platform/packages/rs-dapi-client" }
token-history-contract = { path = "../platform/packages/token-history-contract" }
wallet-utils-contract = { path = "../platform/packages/wallet-utils-contract" }
withdrawals-contract = { path = "../platform/packages/withdrawals-contract" }

[lints.clippy]
uninlined_format_args = "allow"
File renamed without changes.
Loading
Loading