docs: name the smart wallet as a tenant, not a protocol citizen - #41
Conversation
`protocol-family.md` opens with "Nothing else lives at the protocol layer" while `contracts/v3/wallet/` sits in the contracts tree, and the only explanation — that the wallet is a Coinbase fork parked here for v1 and scheduled to split out to `base-passkey-wallet` at mainnet — was buried in a source-file header comment. A reader who found the directory before the comment had every reason to assume the wallet was protocol and build on it as such. That ambiguity is what produced the SDK-vs-app-layer question in #39. Adds §6.1 stating the wallet is neither citizen nor substrate, why it is here anyway, and that the separation is structural in both directions — verified: zero references from `core/` to the wallet, and zero references from the wallet to any Maktub contract. Its whole external surface is generic ERC-4337/1271. Also records why its addresses ship in the deployment carrier (clients derive counterfactual accounts from them) without that implying protocol status, and draws the consequence for contributors: client-side derivation against these contracts is app-layer and does not belong in the protocol SDK. `contracts/CLAUDE.md` gets the same note at the directory table, since that is what gets read when working in `contracts/`, and it listed `wallet/` with no explanation directly above "No other citizens at the protocol layer." No contract, test, or behavior change. Refs #39 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🛡️ wrokin security hunterNo vulnerabilities were proven in this pull request — the hunter found nothing it could exploit and prove by execution. Advisory only — this check never blocks your PR. |
🤖 wrokin code reviewDocumentation clarifies wallet contracts as non-protocol tenants, consistent with existing repo conventions and issue #39. No bugs, security, or correctness issues identified in this documentation-only diff. 🌾 wrokin contribution signal
Advisory — signals worth a closer look, not a verdict or a score. Model: deepseek/deepseek-v4-pro · your key, your model (BYOK) · Context: #39 |
🤖 wrokin security auditNo security-relevant findings in this diff. The changes are documentation-only clarifications that reinforce existing security boundaries (wallet contracts are not part of the protocol, no protocol dependency, and immutability expectations). There is no injection, authz, secrets exposure, unsafe deserialization, or similar vulnerability introduced or exacerbated by these textual edits. Model: deepseek/deepseek-v4-pro · your key, your model (BYOK) · Context: #39 |
Closes the documentation gap that produced the SDK-vs-app-layer confusion in #39.
The problem
protocol-family.mdopens with "Nothing else lives at the protocol layer." Meanwhilecontracts/v3/wallet/sits in the contracts tree holding a smart wallet and its factory.Both statements are true — the wallet genuinely isn't protocol — but nothing said so. The only explanation lived in a source-file header comment: it's a minimal fork of Coinbase's
CoinbaseSmartWallet.sol, kept in the monorepo for v1 development, scheduled to split out to a publicbase-passkey-walletrepo at mainnet.A reader who finds the directory before finding that comment has every reason to assume the wallet is protocol and to build on it accordingly. That is what happened in #39, where the request was to put client-side wallet derivation into
@bytesbrains/maktub-sdk.What this adds
protocol-family.md§6.1 — "The smart wallet is not a citizen", placed in the existing What is NOT in the protocol section and written in the same disclosure-blockquote style §3 already uses for theExecutorRewardsadmin-roles caveat. It covers:A pointer in §3 noting the substrate table is exhaustive and the wallet is not on it.
contracts/CLAUDE.mdgets the same note at the directory table. That file listedwallet/with no explanation directly above "No other citizens at the protocol layer," and it is what gets read when working incontracts/.Verified, not asserted
The doc claims the separation is structural in both directions. Both were checked against the tree:
core/references the walletaddOwner/ recovery in v1The wallet's external surface is entirely generic:
initialize,execute,executeBatch,entryPoint,owner,isValidSignature. The only Maktub-specific thing about it is its name.Scope
Documentation only — no contract, test, or behavior change. Nothing here weakens or restates an invariant; §6.1 explains why an existing claim is true rather than qualifying it.
Refs #39
🤖 Generated with Claude Code