Skip to content

Contacts module gated on Ledger pairing — blocks first-run UX #428

Description

@szhygulin

Summary

add_contact returns CONTACTS_LEDGER_NOT_PAIRED whenever no Ledger has been paired. This blocks the natural first-run / demo-mode flow where a user wants to label addresses before setting up signing — especially for read-only / accountant-share use cases. Reverse-decoration (preflight Invariant #7) consequently degrades to literal-address-only on every demo flow.

Repro

Smoke-test scripts 001/002/003/004/011 (and many others). Every add_contact({chain: "evm" | "btc", label, address}) call in default demo mode rejects with CONTACTS_LEDGER_NOT_PAIRED, even though the user only wants to label an address read-only.

Suggested fix

Allow a local/unsigned contacts store that:

  1. accepts add_contact calls without a paired Ledger (returns a contact tagged unsigned: true),
  2. verifies cryptographically and upgrades to verified: true once a Ledger is paired,
  3. surfaces both states clearly ((contact: <label> — unsigned) vs (contact: <label> — verified) in the verification block), so the agent's Invariant Fix Compound dust rendering and add tx simulation #7 surfacing keeps working in degraded form.

Optional: extend EVM-only contacts to Solana/TRON/BTC (currently CONTACTS_CHAIN_NOT_YET_SUPPORTED for non-EVM in v1.0).

Source

120-script Claude Code smoke-test. Smoke-test reference: 001, 002, 003, 004, 011.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-requestFiled by an AI agent via the request_capability toolenhancementNew feature or requesttool_gapCategory: an existing tool is missing a parameter or flow

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions