feat(identity): name the entity — kill the "Wallet" label (E2 · #182) - #191
Merged
Conversation
Identity is named (DESIGN §"Identity is named"; golden ref data-s="home"):
wallets and the agent carry a real name/handle, and the literal word Wallet
never appears as an entity or view label.
- names.rs (new): deterministic default wallet name from the account address
(dependency-free FNV-1a; a curated codename list led by "Meridian") and
auto-assigned agent handles from a rotating city list (index 0 = "Kyoto",
retiring the fixed "Atlas" placeholder). A reflective source-scan test asserts
the retired entity labels ("Wallet"/"Atlas") are rendered nowhere.
- Rename mechanism: two persisted Settings fields (wallet_name / agent_handle)
edited via Settings inputs (replacing the dead "Display name" setting;
wallet_name carries a serde alias so an upgrade migrates the old value instead
of dropping it), with Shell::wallet_name / Shell::agent_handle as the single
source of truth and new ⌘K commands "Rename wallet" / "Rename agent" that open
and focus the field.
- Breadcrumb names the focused entity (Meridian / Kyoto / Personal), dropping the
`Personal ›` prefix; an action surface appends `› <view>` (e.g. Meridian › Send).
- Wallet-home identity masthead via the shared page_header primitive (mark + name
+ mono address subtitle above the hero); page_header gains an optional mono
subtitle for addresses.
- Migrate the sidebar / breadcrumb / wallet-home presence / agent surface /
activity feed off the fixed-`A` shell_chrome::agent_squircle onto the
handle-aware widgets::agent_mark, then retire agent_squircle. Sidebar wallet
row now shows the name; all identity marks use the tokens ladder (MARK_SM/MD/LG
+ RADIUS_ROW).
- tokens: add MARK_SM (16, the inline row/chip mark). Wire the first call sites of
agent_mark + page_header (dropping their dead_code allows).
Reviewed with a cross-model adversarial pass (Codex GPT-5 xhigh): no P0/P1; the
P2 (settings migration data-loss) and two P3s (token drift, scan-precision doc)
are folded in.
Do-not-touch honored: clear-signing / cap / STOP / no-blind-approve semantics
unchanged; the sidebar Projects layer + right rail (E3) and holdings $/hero meta
(E4) are out of scope. DoD: fmt clean; `just check` green (both feature configs +
signerd); `cargo test --workspace` green (406 passed).
Part of #179. Closes #182.
Owner
Author
GUI verification (driven live via
|
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.
E2 · Identity & naming (#182, part of the v4 epic #179)
Kills the literal word Wallet as a UI entity/view label. Wallets and the agent now carry a real, renamable name/handle, and the breadcrumb names the focused entity.
Golden ref:
designs/deckard-v4.htmldata-s="home". Contract + fidelity checklist:docs/research/13-v4-build-plan.md(Wallet home).What changed
names.rs(new) — deterministic default wallet name from the account address (dependency-free FNV-1a over a curated codename list led byMeridian) + auto-assigned agent handles from a rotating city list (index 0 =Kyoto, retiring theAtlasplaceholder). A reflective source-scan test asserts the retired entity labels ("Wallet"/"Atlas") render nowhere.Meridian/Kyoto/Personal), dropping thePersonal ›prefix; an action surface appends› <view>(e.g.Meridian › Send).view_labelno longer returns"Wallet".page_headerprimitive (mark + name + mono address subtitle, above the hero);page_headergains an optional mono subtitle so addresses stay mono per DESIGN.Ashell_chrome::agent_squircleonto the handle-awarewidgets::agent_mark;agent_squircleretired. Sidebar wallet row now shows the name.Settings.wallet_name/agent_handlefields edited via Settings inputs (replacing the deaddisplay_namesetting; a serde alias migrates the old value on upgrade), withShell::wallet_name/Shell::agent_handleas the single source of truth. New ⌘K commandsRename wallet/Rename agentopen + focus the field (palette_commands.rs+run_palette_command).MARK_SM(16); all identity marks now use theMARK_SM/MD/LG+RADIUS_ROWladder (no magic px). Dropped thedead_codeallows onagent_mark+page_headeras their first call sites were wired.Wallet-home fidelity checklist — E2-owned items
Personal ›, no literal "Wallet".identity_markabove the mono hero.WALLETS(dropPROJECTS) — E3 (E3 · Three-pane shell + always-on right rail #183), structural.$column / hero USD·synced·verified meta line — E4 (E4 · Money keeps its context #184).Definition of Done
cargo fmt --all --check— cleanjust check— green (workspace clippy-D warnings,deckard-app --features tray,deckard-signerd --features dev-signerd-bin)cargo test --workspace— 406 passed, 2 ignored (adds the reflective label scan, the naming determinism/rotation tests, and a settings-migration test)Cargo.toml/Cargo.lockchangesAdversarial review
Cross-model pass with Codex GPT-5 (xhigh) on the diff vs the golden ref + DESIGN: no P0/P1. The P2 (settings migration data-loss) and two P3s (token drift on the project/feed marks, scan-precision) are folded in. The scan is intentionally an exact-token match — DESIGN + the golden ref use the word descriptively (
Walletsgroup,This walletrail,Wallet namefield), so a substring match would false-positive; only the standalone"Wallet"entity label is banned.Do not touch (honored)
Clear-signing / cap / STOP / no-blind-approve semantics unchanged; the sidebar Projects layer + right rail (E3) and holdings/hero meta (E4) are out of scope.
GUI dev + tests were done headless. Per the E0 recipe (
docs/dev/driving-the-app.md), ajust demoapp launched under an agent shell can't be made OS-active, so before/after wallet-home screenshots need a foreground drive:just demo→ unlock (passphrasedeckard-demo) → capture home (masthead + breadcrumb) and⌘K → Rename wallet. To be attached.Closes #182. Part of #179.