feat(money): E4 · money keeps its context — holdings $/24h columns + honest hero meta (#184)#197
Merged
Merged
Conversation
…honest hero meta (#184) The wallet-home money surface (E4, epic #179). Honesty is the point of the ticket (DESIGN §Trust rule 9) — the engine has NO price feed, so every fiat/ history slot renders an explicit "—", never a fabricated number. - Holdings ledger gains 24h + $ Value columns, decimal-point aligned across rows via a new `money::money_cell` (integer right-aligned to a fixed seam, `.decimals` left-aligned after it). 24h and $ Value show an honest "—" with a footnote until a price feed is wired. - Hero meta line under the balance: `$… · synced … · verified on mainnet`. A pure, unit-tested `VerifiedClaim::from_read` claims "verified on mainnet" (success/green) ONLY for a real Helios-verified read on chain 1; a fork/ testnet or unsynced read reads the loud "unverified" (amber). USD slot is an honest "—". - Action row left-anchored (justify_start), not centered. - Right rail "This wallet": honest "Value —" row + an always-on summary metasec with "Connections: none" (reserved/empty per ADR-0001/#44, never a fabricated count) and explicit "Agents" rows. - Header row carries the golden-ref hairline; numeric columns widened so no realistic balance overflows the decimal seam (we never clip money digits). Reuses widgets.rs/money.rs primitives (no hand-rolled copies); no new deps. cargo fmt + `just check` (clippy -D warnings, both feature configs) + `cargo test --workspace` (421 passed, incl. 4 new VerifiedClaim tests) green.
Lockfile-only patch bump to clear the freshly-published advisory RUSTSEC-2026-0204 (invalid pointer dereference in crossbeam-epoch's `fmt::Pointer` impl for `Atomic`/`Shared`). crossbeam-epoch is a transitive dependency of the GPUI stack (gpui-component→rust-i18n and gpui→image→exr→ rayon→crossbeam-deque), unrelated to the E4 change — it also fails `cargo-deny check advisories` on main. 0.9.20 is the advisory's stated fix (>=0.9.20). `cargo deny check advisories` → ok; `cargo check -p deckard-app` green.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements E4 · Money keeps its context (#184), part of the v4 request-origin epic #179.
The wallet-home money surface. Honesty is the point of the ticket (DESIGN §Trust rule 9): the engine has no price feed and no 24h history, so every fiat/history slot renders an explicit
—, never a fabricated number. The trust-criticalverified on mainnetclaim is pinned to a real verified read on chain 1.What changed
money.rs— newmoney_cell: a decimal-point-aligned ledger cell. The integer is right-aligned up to a fixed 52px seam and.decimalsare left-aligned after it, so points line up down a column regardless of fractional width. Mask-safe (rendersMASK_BULLETS, no value/digit-count leak).welcome.rsmoney_cell; 24h and $ Value render an honest—(no price feed) with a footnote.$… · synced … · verified on mainnet. New pure, unit-testedVerifiedClaim::from_read— claimsverified on mainnet(success/green) only for a real Helios-verified read on chain 1; a fork/testnet or unsynced read reads the loudunverified(amber). USD slot is an honest—.justify_start).shell_rail.rs— "This wallet" rail: honestValue —row + an always-on summary metasec withConnections: none(reserved/empty per ADR-0001/#44 — never a fabricated count) and explicitAgentsrow.Trust invariants
—. Never a computed/faked value.verified on mainnetis honest. 4 unit tests pinVerifiedClaim::from_read: mainnet+Verified→success; degraded→loud; unsynced/none→unverified; off-mainnet-even-if-spuriously-Verified→unverified (defence in depth over the registry).money_cellhonorsmasked.Definition of Done
cargo fmt --all --check— clean.just check(clippy-D warnings, default +--features tray+ signerddev-signerd-bin) — green (exit 0).cargo test --workspace— 421 passed, 2 ignored (incl. 4 newVerifiedClaimtests).Wallet-home fidelity checklist (#184)
WALLETS; Agents show handle + status; Connections group present.Meridian).identity_markabove the mono hero.$… · synced … · verified on mainnetwith honest fallback off mainnet / no price.Screenshots (before/after)
Captured live off the running app on both chains (local
.context/shots/):Fork / testnet (chain 31337 — off-mainnet honesty path) —
home_fork_final.pngHero meta reads
— · synced block 0 · unverified(unverified in amber); rail StatusNot verified(amber), NetworkAnvil (local),Value —,Connections none,Agents 1 active; holdings ETH row10,000 · — · —; actions left-anchored.Mainnet (chain 1 — verified path) —
home_mainnet.pngHelios synced (block 25474971); hero meta reads
— · synced block 25474971 · verified on mainnet(verified on mainnet in green); rail StatusVerified(green), NetworkEthereum; holdings ETH row0 · — · —; USD slot—; actions left-anchored (Swap enabled on mainnet).Closes #184.