docs(research): explore VFS wallet views for issue 114 - #118
Draft
0xdewy wants to merge 7 commits into
Draft
Conversation
0xdewy
force-pushed
the
feature/issue-114-vfs-widgets
branch
from
August 3, 2026 14:08
351ce96 to
fb799e1
Compare
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.
Visual prototype
Start with the showcase index. It links six Bloom-branded, responsive HTML examples: Portfolio, Next Moves, Receive, Send, Activity, and Permissions & Security.
These are static, script-free fixture views for discussion; they do not add runtime VFS handlers. To see them rendered, check out the branch and open docs/research/vfs-view-mockups/index.html locally.
Research for #114.
What this PR proposes
Six concrete, Bloom-generated VFS views. Each view exposes one typed snapshot as JSON
for agents, Markdown for every chat client, and optional self-contained HTML for richer
clients. Agents read and explain these files; they do not populate them.
1. Portfolio — “What do I own and where?”
One snapshot combines:
It reports a conservative
priced_net_value_usd, unpriced items, freshness, andper-provider coverage. It never implies token discovery is complete or double-counts
position notional as wealth.
2. Next Moves — “What needs my attention?”
A small priority inbox with two lanes:
margin risk, stale monitoring, or failed cleanup.
position.
Every item includes evidence and a supported next path. This is not an airdrop finder,
trading recommender, generic gas nagger, or authorization mechanism.
3. Receive — “Where can someone safely send funds?”
Receive presents verified, chain-qualified destinations rather than one ambiguous
address:
fundable.
Each route shows network, purpose, full address, accepted-asset constraints,
provenance, and readiness. QR codes remain secondary to visible network and address
details. Hyperliquid Bridge2 is excluded as a generic Receive route in V0: direct credit follows the sending account, so it is a funding workflow, not Alice's receive address. A future permit-based on-behalf flow would need its own sender-bound review.
4. Send + AddressBook — “Who am I paying, and what will be signed?”
Send adds recipient context and exact transaction review without creating a second
execution path:
address;
transaction;
send—never automatic and never derived from incoming dust.
The review remains inside the existing outbox, policy, and Sealed Approval flow. The
passkey approval commits to both the exact EVM signing hash and the canonical
interpretation shown to the user. Bloom-verified effects may affect policy and contact
suggestions; Petal-provided labels remain claims. Petals can initially add declarative,
exact-context transaction descriptors, while executable decoders remain a later escape
hatch.
This work also identifies a current bug to fix first: AddressBook writes update a
separate in-memory copy from Send, simulation, and DeFi, so a newly saved contact may
not work until restart.
5. Activity — “What happened?”
Activity is an outcome-first wallet timeline, not a transaction explorer or raw audit
log:
asset effects, fees, venue or chain, status, and time.
labels, and conflicts.
One user action becomes one card. Exact action, workflow, transaction, order, and trade
IDs deduplicate local outbox state with EVM indexers, Hyperliquid fills, and Polymarket
settlement. Approval-plus-swap, partial fills, replacements, failures, and reorgs remain
one honest lifecycle rather than several misleading successes. Bloom never guesses
grouping from nearby timestamps.
Incoming history is treated as attacker-controlled: unsolicited assets can be
collapsed in the human view but remain in JSON evidence, and incoming senders never
become copy targets or contact suggestions.
6. Permissions & Security — “Who can act, and how is my key protected?”
Permissions is an authority and key-custody inventory, not a security score:
Polymarket deposit-wallet controller.
sessions, Hyperliquid API wallets, and builder fees.
encrypted portable backup, and guarded raw-key reveal.
Every permission has separate enforcing-system and Bloom-executor states. This makes
“Bloom stopped locally, but the venue still authorizes the agent” visible instead of
mislabeling it revoked. Findings are deterministic; the page never says “Secure” or
turns incomplete discovery into “no permissions.”
Recovery never places key material in VFS, IPC, logs, command output, or the static
HTML. The recommended export is a standard encrypted Ethereum keystore created through
a fresh trusted passkey/passphrase ceremony. Raw-key reveal is an advanced escape hatch
because that copy can bypass Bloom's passkey, policy, and Sealed Approval protections.
Rebind is correctly described as changing the authenticator around the same owner key,
not backup or key rotation.
This research identifies several current gaps: the capability rollup omits durable EVM
owner-signing sessions; Hyperliquid
stopis local-only; Bloom lacks a general approvalinventory; and the current one-time recovery display cannot safely become an on-demand
agent-triggered export without a new ceremony boundary.
Shared implementation pattern
timestamp.
ok,partial, orunavailableinstead of making the whole view fail.
network requests. Trusted signing/recovery ceremonies remain separate foreground
surfaces.
Sealed Approval, and terminal-state verification; views never create a parallel
execution path.
this PR.
Decisions requested
Portfolio.
and other hosts?
contact?
or immediately after native standard decoding?
paginated history following later?
backup while raw-key reveal moves behind an advanced warning?
Scope and validation
Documentation only: six research notes plus seven HTML mockups and one shared stylesheet, with no handlers or runtime contracts. The
recommendations were traced against the current VFS, transaction engine, Sealed
Approval, Petal ABI, local/central action lifecycles, passkey/key-custody implementation,
EVM history and authority standards, and Hyperliquid and Polymarket APIs.
Checklist
docs/architecture/) updated if contracts or behavior changed— N/A, no contracts or behavior changed
recommendations retain canonical staged bytes and trusted ceremony boundaries
crates/bloom-vfs/src/docs/agent-guidance.mdandaffected Petal READMEs) — N/A, no runtime surface changed