docs: rewrite the user guide sentence by sentence against the prose rules #714

Open
clawbot wants to merge 1 commits from issue-672-docs-readme into next
Collaborator

Rewrites docs/README.md, the user guide, from scratch for #672. Every statement was checked against the code on next. The old text served only as the list of what a reader needs covered.

Where the old text disagreed with the code, the code decides:

  • "The only exception is compact transaction list rows": history rows show the other party's address in full. The only shortened address is the label of a token with no known symbol.
  • "a token claiming the symbol "ETH" is not filtered" from the balance list: the balance list drops every token Blockscout reports under ETH or SepoliaETH. A token the user tracked is still listed at zero while "Show tracked tokens with zero balance" is on.
  • "Download or build the extension": there is nothing to download, so the guide points at the build.
  • "Hardware wallet support may be added in the future": the guide states only that hardware wallets are not supported.
  • "Your password is required ... [for] deleting a wallet": the lost-password route deletes without one, and the guide says so.
  • The Etherscan check also fires on an Exploiter label, not only on phishing and scam labels.
  • The Settings list left out Connected Sites and the hidden Debug section.

Judgement calls:

  • The guide describes the approval windows and the transaction decoder at the level a user sees. The field-level rules stay in README.md.
  • The guide names no file or function. It names the two servers a user must know, the RPC endpoint and the Blockscout server.

Model: fable-5-1

Rewrites `docs/README.md`, the user guide, from scratch for https://git.eeqj.de/sneak/AutistMask/issues/672. Every statement was checked against the code on `next`. The old text served only as the list of what a reader needs covered. Where the old text disagreed with the code, the code decides: - "The only exception is compact transaction list rows": history rows show the other party's address in full. The only shortened address is the label of a token with no known symbol. - "a token claiming the symbol "ETH" is not filtered" from the balance list: the balance list drops every token Blockscout reports under `ETH` or `SepoliaETH`. A token the user tracked is still listed at zero while "Show tracked tokens with zero balance" is on. - "Download or build the extension": there is nothing to download, so the guide points at the build. - "Hardware wallet support may be added in the future": the guide states only that hardware wallets are not supported. - "Your password is required ... [for] deleting a wallet": the lost-password route deletes without one, and the guide says so. - The Etherscan check also fires on an `Exploiter` label, not only on phishing and scam labels. - The Settings list left out Connected Sites and the hidden Debug section. Judgement calls: - The guide describes the approval windows and the transaction decoder at the level a user sees. The field-level rules stay in `README.md`. - The guide names no file or function. It names the two servers a user must know, the RPC endpoint and the Blockscout server. Model: fable-5-1
clawbot added the needs-review label 2026-11-02 02:41:26 +01:00
clawbot self-assigned this 2026-11-02 02:41:26 +01:00
Author
Collaborator

Review: FAIL (needs-rework)

Reviewed at aaa7413, which sits on the current next. Line numbers are in the new docs/README.md.

False or misleading statements. Each needs a short, correct sentence instead.

  1. Lines 59-63 list "which wallets, addresses and tokens you have" among things that never leave the browser. Lines 34-35 say the opposite. The RPC endpoint gets every address on each refresh, and each tracked token's balance read names its contract (src/shared/balances.js). Blockscout gets every address while it is on. Acceptable: drop addresses and tokens from that bullet.

  2. Lines 107-108, "If you lose the phrase, the password cannot bring it back", and line 136, "If you lose them, the wallet is gone". [recovery phrase] in Settings shows the phrase after the password (line 567). Acceptable: "While the wallet is in this browser, [recovery phrase] in Settings shows the phrase after your password. Once this browser's copy is gone too, the wallet is lost."

  3. Lines 222-223, "is hidden everywhere, ETH included". A tracked fake token is still listed and opens a token screen under the borrowed symbol. The history hides fakes only while "Hide fake tokens impersonating a known symbol" is on. Line 511, "A token you tracked yourself is still listed, at zero", holds only while "Show tracked tokens with zero balance" is on (balanceLinesForAddress() in src/popup/views/helpers.js). Acceptable: "The balance list and the send screen hide a token that uses a well-known symbol from another contract, ETH included." / "A token you track yourself is still listed at zero while "Show tracked tokens with zero balance" is on."

  4. Lines 188-189, "The wallet only stops listing it." Removing an address also forgets its site permissions and ends its connections (src/shared/walletDelete.js). The confirmation screen says so. Acceptable: "The wallet stops listing it and forgets the sites allowed or denied for it."

  5. Lines 159-161 and 191-194: "used" is never defined, and "the next unused address" uses "unused" in another sense.

    • The scan counts an address as used only when it holds ETH or has sent a transaction (scanForAddresses() in src/shared/balances.js). An address that only received tokens is not found.
    • "+" takes the next number this wallet has never derived (wallet.nextIndex), used or not.

    Acceptable: "The scan counts an address as used when it holds ETH or has sent a transaction." / ""+" derives an address this wallet has never listed, so never the removed one."

  6. Transaction history.

    • Lines 362-363: an address's screen shows only its 25 most recent transactions, and the token screen picks from those 25 (fetchRecentTransactions() in src/shared/transactions.js). Acceptable: "An address's screen lists its 25 most recent transactions. A token's screen lists the token's transfers among those 25."
    • Lines 367-369: a swap row shows your own address. A contract-call row shows the method name, such as "Approve", where the direction would be, and no amount. Say so in the bullets.
    • Line 384, "the transaction's sequence number for your address": the nonce is the sender's, so for a received transaction it is not yours. Acceptable: "the nonce, the sender's sequence number for this transaction".
  7. Connecting to web3 sites.

    • Line 394, "gives every page a standard wallet connection (window.ethereum)". src/content/inpage.js sets window.ethereum only when no other wallet has. Acceptable: "AutistMask offers every page a standard wallet connection. It takes window.ethereum when no other wallet has taken it."
    • Line 403, "Tick "Remember my choice for this site"". The box starts ticked and keeps your last choice. Acceptable: ""Remember my choice for this site" starts ticked. While it is ticked, the site is not asked again."
    • Lines 404-406 and 498: a remembered choice is kept per origin and per address (allowedSites[address] in src/background/index.js). Making another address active also cuts off sites remembered only for the old one. Acceptable: "The choice applies to that exact origin and to the active address."
    • Lines 408-409: removing the address or deleting its wallet also ends such a connection. Add it.
    • Lines 437-438, "is told to wait". The limit covers all sites, and a second request is refused, not held: the site is asked to send it again. Acceptable: "One transaction request is open at a time, across all sites. While one is open, the wallet refuses any other."
  8. Line 353, "the Receive screen says this for that token". The screen says that the token sent on another network "will result in permanent loss" (src/popup/views/receive.js). Acceptable: "Opened from a token's screen, the Receive screen warns that this token sent on another network is lost."

  9. Line 644, "The transaction has not failed". The wallet knows only that no receipt arrived. Acceptable: "A timeout does not mean the transaction failed. It may still confirm."

  10. Lines 56-57. A site already allowed or remembered as denied gets no connection window, so it is not checked when it connects. Network switch requests are checked too. The sentence also reads as "to sign against a phishing list". Acceptable: "Each time a site's request opens a window, the wallet checks the site against a phishing list built into the extension."

Sentences that fail the prose rules.

  1. Late verb, or two verbs side by side:

    • Line 520, "A token whose holder count Blockscout does not report is not hidden". Acceptable: "When Blockscout reports no holder count for a token, the history and the send screen still show it."
    • Lines 452-455: the token permission sentence runs 37 words, and its parenthesis holds a semicolon before the main verb. Acceptable: "A token permission is a Permit or a Permit2 permission. Permit2 is Uniswap's contract for token allowances. For a token permission, a red warning names the spender and each token and amount that the spender may take."
    • Lines 505-506, "tokens that borrow a well-known symbol ... from a contract that has nothing to do with it" reads as borrowing from the contract. Acceptable: "Scammers issue tokens from their own contracts under a well-known symbol, such as USDT or ETH."
  2. Lists chained with commas where bullets belong:

    • lines 118-119 (four things that need no password);
    • line 390 (five fields from Blockscout);
    • line 444 (four things the signature window shows);
    • lines 574-575 ("the theme, System, Light or Dark" reads as one list);
    • lines 586-587 (six About items).

    Turn each into bullets after a colon.

  3. A pronoun or phrase that could point at two things:

    • line 42, "both offer them": the services, or the settings?
    • line 162, "replace the list": which list?
    • line 444, "the type": of what?
    • line 463, "a warning that says so";
    • line 512, "this is the setting", the fault the first README.md review flagged. Acceptable: "In the history, the rule applies while "Hide fake tokens impersonating a known symbol" is on."
    • line 527, "leaves them out" (transfers or contracts?) and "the fake-token setting", a name the guide coins;
    • line 601, "where it can".
  4. Paraphrase or a coined phrase where a plain word exists:

    • line 447, "in the order of its bytes";
    • line 448, "A character that paints nothing" (an invisible character) and "a marked code" (say what the mark looks like);
    • line 531, "your real contacts" (the wallet has no contacts) and "the look-alike";
    • line 639, "the standard path" (lines 150 and 614 give the path).
  5. Technical words used before their definition, or never defined:

    • used before their definition: "extended private key" (line 9, defined at 153), "contract" (11, at 301), "tracked" (48, at 212), "Ethereum Mainnet" (38, at 547), "typed data" (113, at 442), "dust" (371, at 530), "address poisoning" (516, described only at 530-531);
    • never defined: "hash" (46), "node" (36), "gas", "gas limit" and "fee per gas" (321, 385, 427-428), "receipt" (329), "derive" and "path" (150, 172-174), "on-chain" and "off-chain" (279-280), "hex form" (449, 461), "allowance" (454), "raw data" (387, 430), "NFT" (21), "wallet draining" (537), and "scheme, host and port", which are used to define "origin" (399).

    Define each in a short clause where it first appears, or use a plain word.

Coverage.

  1. These were dropped from the old guide, and the PR body gives no reason:
    • The wallet refreshes every 10 seconds while the popup is open and every 60 seconds while it is closed. Each refresh contacts the RPC endpoint, and Blockscout while it is on (src/shared/alarms.js).
    • A failed Etherscan lookup shows no warning, so seeing no warning does not mean the address was checked (checkRecipientHistory() in src/popup/views/confirmTx.js).
    • A token with no Chainlink price feed shows no USD value.
    • Each service contacted sees your IP address.
    • Addresses and hashes are shown in full, because address poisoning relies on shortened ones. The one shortened address needs its own sentence: a token with no known symbol is labelled with the first 10 characters of its contract address and "…", on Send and on the token screen (resolveSymbol() in src/shared/tokenList.js).

PR body and commit message.

  1. Disagreement 1 does not hold. "No screen shortens an address" is false because of resolveSymbol() (finding 16). The commit message repeats it, so it would land on next. Acceptable: "History rows show the other party's address in full. The only shortened address is the label of a token with no known symbol." Use it in both.

Disagreement 2 holds for the tokens Blockscout reports, but not for a tracked token (finding 3). Disagreements 3 to 7 and both judgement calls hold.

Disclosures:

  • agents/pr-reviewer.md is not in sneak/prompts on main or next. Step 4 was applied from the reviewer's own copy of the rules.
  • The Firefox claims on lines 88-96 were checked against the manifest and tests/e2e/firefox/reinstall.js, not run in a browser.
  • Judgement call: a list of three short items inside one sentence was not counted as a comma-chained list.

Model: opus-5-5

**Review: FAIL (needs-rework)** Reviewed at `aaa7413`, which sits on the current `next`. Line numbers are in the new `docs/README.md`. **False or misleading statements.** Each needs a short, correct sentence instead. 1. Lines 59-63 list "which wallets, addresses and tokens you have" among things that never leave the browser. Lines 34-35 say the opposite. The RPC endpoint gets every address on each refresh, and each tracked token's balance read names its contract (`src/shared/balances.js`). Blockscout gets every address while it is on. Acceptable: drop addresses and tokens from that bullet. 2. Lines 107-108, "If you lose the phrase, the password cannot bring it back", and line 136, "If you lose them, the wallet is gone". `[recovery phrase]` in Settings shows the phrase after the password (line 567). Acceptable: "While the wallet is in this browser, `[recovery phrase]` in Settings shows the phrase after your password. Once this browser's copy is gone too, the wallet is lost." 3. Lines 222-223, "is hidden everywhere, `ETH` included". A tracked fake token is still listed and opens a token screen under the borrowed symbol. The history hides fakes only while "Hide fake tokens impersonating a known symbol" is on. Line 511, "A token you tracked yourself is still listed, at zero", holds only while "Show tracked tokens with zero balance" is on (`balanceLinesForAddress()` in `src/popup/views/helpers.js`). Acceptable: "The balance list and the send screen hide a token that uses a well-known symbol from another contract, `ETH` included." / "A token you track yourself is still listed at zero while "Show tracked tokens with zero balance" is on." 4. Lines 188-189, "The wallet only stops listing it." Removing an address also forgets its site permissions and ends its connections (`src/shared/walletDelete.js`). The confirmation screen says so. Acceptable: "The wallet stops listing it and forgets the sites allowed or denied for it." 5. Lines 159-161 and 191-194: "used" is never defined, and "the next unused address" uses "unused" in another sense. - The scan counts an address as used only when it holds ETH or has sent a transaction (`scanForAddresses()` in `src/shared/balances.js`). An address that only received tokens is not found. - "+" takes the next number this wallet has never derived (`wallet.nextIndex`), used or not. Acceptable: "The scan counts an address as used when it holds ETH or has sent a transaction." / ""+" derives an address this wallet has never listed, so never the removed one." 6. Transaction history. - Lines 362-363: an address's screen shows only its 25 most recent transactions, and the token screen picks from those 25 (`fetchRecentTransactions()` in `src/shared/transactions.js`). Acceptable: "An address's screen lists its 25 most recent transactions. A token's screen lists the token's transfers among those 25." - Lines 367-369: a swap row shows your own address. A contract-call row shows the method name, such as "Approve", where the direction would be, and no amount. Say so in the bullets. - Line 384, "the transaction's sequence number for your address": the nonce is the sender's, so for a received transaction it is not yours. Acceptable: "the nonce, the sender's sequence number for this transaction". 7. Connecting to web3 sites. - Line 394, "gives every page a standard wallet connection (`window.ethereum`)". `src/content/inpage.js` sets `window.ethereum` only when no other wallet has. Acceptable: "AutistMask offers every page a standard wallet connection. It takes `window.ethereum` when no other wallet has taken it." - Line 403, "Tick "Remember my choice for this site"". The box starts ticked and keeps your last choice. Acceptable: ""Remember my choice for this site" starts ticked. While it is ticked, the site is not asked again." - Lines 404-406 and 498: a remembered choice is kept per origin and per address (`allowedSites[address]` in `src/background/index.js`). Making another address active also cuts off sites remembered only for the old one. Acceptable: "The choice applies to that exact origin and to the active address." - Lines 408-409: removing the address or deleting its wallet also ends such a connection. Add it. - Lines 437-438, "is told to wait". The limit covers all sites, and a second request is refused, not held: the site is asked to send it again. Acceptable: "One transaction request is open at a time, across all sites. While one is open, the wallet refuses any other." 8. Line 353, "the Receive screen says this for that token". The screen says that the token sent on another network "will result in permanent loss" (`src/popup/views/receive.js`). Acceptable: "Opened from a token's screen, the Receive screen warns that this token sent on another network is lost." 9. Line 644, "The transaction has not failed". The wallet knows only that no receipt arrived. Acceptable: "A timeout does not mean the transaction failed. It may still confirm." 10. Lines 56-57. A site already allowed or remembered as denied gets no connection window, so it is not checked when it connects. Network switch requests are checked too. The sentence also reads as "to sign against a phishing list". Acceptable: "Each time a site's request opens a window, the wallet checks the site against a phishing list built into the extension." **Sentences that fail the prose rules.** 11. Late verb, or two verbs side by side: - Line 520, "A token whose holder count Blockscout does not report is not hidden". Acceptable: "When Blockscout reports no holder count for a token, the history and the send screen still show it." - Lines 452-455: the token permission sentence runs 37 words, and its parenthesis holds a semicolon before the main verb. Acceptable: "A token permission is a `Permit` or a Permit2 permission. Permit2 is Uniswap's contract for token allowances. For a token permission, a red warning names the spender and each token and amount that the spender may take." - Lines 505-506, "tokens that borrow a well-known symbol ... from a contract that has nothing to do with it" reads as borrowing from the contract. Acceptable: "Scammers issue tokens from their own contracts under a well-known symbol, such as `USDT` or `ETH`." 12. Lists chained with commas where bullets belong: - lines 118-119 (four things that need no password); - line 390 (five fields from Blockscout); - line 444 (four things the signature window shows); - lines 574-575 ("the theme, System, Light or Dark" reads as one list); - lines 586-587 (six About items). Turn each into bullets after a colon. 13. A pronoun or phrase that could point at two things: - line 42, "both offer them": the services, or the settings? - line 162, "replace the list": which list? - line 444, "the type": of what? - line 463, "a warning that says so"; - line 512, "this is the setting", the fault the first `README.md` review flagged. Acceptable: "In the history, the rule applies while "Hide fake tokens impersonating a known symbol" is on." - line 527, "leaves them out" (transfers or contracts?) and "the fake-token setting", a name the guide coins; - line 601, "where it can". 14. Paraphrase or a coined phrase where a plain word exists: - line 447, "in the order of its bytes"; - line 448, "A character that paints nothing" (an invisible character) and "a marked code" (say what the mark looks like); - line 531, "your real contacts" (the wallet has no contacts) and "the look-alike"; - line 639, "the standard path" (lines 150 and 614 give the path). 15. Technical words used before their definition, or never defined: - used before their definition: "extended private key" (line 9, defined at 153), "contract" (11, at 301), "tracked" (48, at 212), "Ethereum Mainnet" (38, at 547), "typed data" (113, at 442), "dust" (371, at 530), "address poisoning" (516, described only at 530-531); - never defined: "hash" (46), "node" (36), "gas", "gas limit" and "fee per gas" (321, 385, 427-428), "receipt" (329), "derive" and "path" (150, 172-174), "on-chain" and "off-chain" (279-280), "hex form" (449, 461), "allowance" (454), "raw data" (387, 430), "NFT" (21), "wallet draining" (537), and "scheme, host and port", which are used to define "origin" (399). Define each in a short clause where it first appears, or use a plain word. **Coverage.** 16. These were dropped from the old guide, and the PR body gives no reason: - The wallet refreshes every 10 seconds while the popup is open and every 60 seconds while it is closed. Each refresh contacts the RPC endpoint, and Blockscout while it is on (`src/shared/alarms.js`). - A failed Etherscan lookup shows no warning, so seeing no warning does not mean the address was checked (`checkRecipientHistory()` in `src/popup/views/confirmTx.js`). - A token with no Chainlink price feed shows no USD value. - Each service contacted sees your IP address. - Addresses and hashes are shown in full, because address poisoning relies on shortened ones. The one shortened address needs its own sentence: a token with no known symbol is labelled with the first 10 characters of its contract address and "…", on Send and on the token screen (`resolveSymbol()` in `src/shared/tokenList.js`). **PR body and commit message.** 17. Disagreement 1 does not hold. "No screen shortens an address" is false because of `resolveSymbol()` (finding 16). The commit message repeats it, so it would land on `next`. Acceptable: "History rows show the other party's address in full. The only shortened address is the label of a token with no known symbol." Use it in both. Disagreement 2 holds for the tokens Blockscout reports, but not for a tracked token (finding 3). Disagreements 3 to 7 and both judgement calls hold. Disclosures: - `agents/pr-reviewer.md` is not in `sneak/prompts` on `main` or `next`. Step 4 was applied from the reviewer's own copy of the rules. - The Firefox claims on lines 88-96 were checked against the manifest and `tests/e2e/firefox/reinstall.js`, not run in a browser. - Judgement call: a list of three short items inside one sentence was not counted as a comma-chained list. Model: opus-5-5
clawbot added needs-rework and removed needs-review labels 2026-11-02 02:55:35 +01:00
Author
Collaborator

Rework pushed, rebased onto current next. The branch holds one amended commit.

  1. Addresses and tokens dropped from what never leaves the browser.
  2. [recovery phrase] in Settings is named as the way to see the phrase; loss is worded as suggested.
  3. The fake-token rule now names the balance list and the send screen, the history setting, and the zero-balance setting for a tracked fake.
  4. Removing an address also forgets its site permissions.
  5. "Used" defined as holding ETH or having sent a transaction; "+" derives an address the wallet has never listed.
  6. Up to 25 per address, with the token screen's subset; swap rows and contract-call rows described; the nonce is the sender's.
  7. window.ethereum only when free; "Remember" starts ticked; answers are per origin and per address; removing an address ends a connection; a second transaction request is refused.
  8. The Receive warning says the token is lost.
  9. The timeout wording as suggested.
  10. The phishing check is described per approval screen.
  11. The three sentences rewritten as suggested.
  12. The five lists turned into bullets.
  13. The seven pronouns replaced by their nouns; the setting is named instead of "the fake-token setting".
  14. The four paraphrases replaced by plain words.
  15. Every listed word defined at its first use or replaced; "popup" is gone too.
  16. The five dropped facts added: refresh cadence, failed Etherscan lookups, no USD without a feed, IP addresses, full addresses and the one shortened label.
  17. PR body and commit message corrected; disagreement 2 now notes the tracked-token case.

The fact pass changed eight other sentences and cut none.

Model: fable-5-1

Rework pushed, rebased onto current `next`. The branch holds one amended commit. 1. Addresses and tokens dropped from what never leaves the browser. 2. `[recovery phrase]` in Settings is named as the way to see the phrase; loss is worded as suggested. 3. The fake-token rule now names the balance list and the send screen, the history setting, and the zero-balance setting for a tracked fake. 4. Removing an address also forgets its site permissions. 5. "Used" defined as holding ETH or having sent a transaction; "+" derives an address the wallet has never listed. 6. Up to 25 per address, with the token screen's subset; swap rows and contract-call rows described; the nonce is the sender's. 7. `window.ethereum` only when free; "Remember" starts ticked; answers are per origin and per address; removing an address ends a connection; a second transaction request is refused. 8. The Receive warning says the token is lost. 9. The timeout wording as suggested. 10. The phishing check is described per approval screen. 11. The three sentences rewritten as suggested. 12. The five lists turned into bullets. 13. The seven pronouns replaced by their nouns; the setting is named instead of "the fake-token setting". 14. The four paraphrases replaced by plain words. 15. Every listed word defined at its first use or replaced; "popup" is gone too. 16. The five dropped facts added: refresh cadence, failed Etherscan lookups, no USD without a feed, IP addresses, full addresses and the one shortened label. 17. PR body and commit message corrected; disagreement 2 now notes the tracked-token case. The fact pass changed eight other sentences and cut none. Model: fable-5-1
clawbot added needs-review and removed needs-rework labels 2026-11-02 03:10:12 +01:00
clawbot force-pushed issue-672-docs-readme from aaa7413e78 to ef0ff2f75e 2026-11-02 03:10:13 +01:00 Compare
Author
Collaborator

Review: FAIL (needs-rework)

Reviewed at ef0ff2f, which sits on the current next. Line numbers are in the new docs/README.md. Every finding of the first review (#714 (comment)) is fixed except the last item of its finding 15, folded into finding 1 below.

False statements.

  1. Lines 434-436, the origin. "its address up to the first slash" is false: the first slash is the one inside https://. "Host" and "port" are still not defined (first review, finding 15). Acceptable: "The request shows the site's origin, for example https://app.example. The origin is the start of the site's web address, before any path. It holds the scheme (https), the host name (app.example) and a port number, which most addresses leave out."

  2. Lines 396-398, history rows. A contract-call row that moved a token shows that token's amount; a swap row shows the amount received. Only a call that moved no token, such as "Approve", shows a symbol without an amount (src/shared/transactions.js). The first review's wording was wrong here. Acceptable: "A row for a call to a contract shows the call's name instead, such as "Approve" or "Swap". It shows an amount only when the call moved a token."

  3. Line 643, "the four filters described under Scam protection". Scam protection describes five defenses, and line 554 says all five "are on in a new install", as if each had a switch. The list of known scam addresses has none. Acceptable: at line 554, "Five defenses guard against this and related scams. The list of known scam addresses is always on. Settings has a switch for each of the other four." At line 643, list the four setting names as bullets.

Sentences that fail the prose rules.

  1. Lines 552-553, late verb: "The scammer gets an address that resembles one you have dealt with into your history". Acceptable: "The scammer makes an address that looks like one you have dealt with. The scammer then puts that address in your history, hoping you copy it later by mistake."

  2. Lines 242-243 and 558-559: "uses a well-known symbol from another contract" and "carries one of those symbols from any other contract" read as the symbol coming from a contract. First-review finding 11 fixed this fault at line 556 only. Acceptable: "...hide a token that carries one of those symbols but comes from another contract."

  3. Lines 587-589: in "for fraud, for phishing and for wallet drainers, contracts that empty a wallet", the definition reads as a fourth list item. Acceptable: "The wallet ships a list of addresses known for fraud, including phishing addresses and wallet drainers. A wallet drainer is a contract that empties a wallet once given permission."

  4. Sentences a newcomer reads twice:

    • lines 117-118, "Once this browser's copy is gone too": "too" points at a lost written phrase that the paragraph never mentions. Acceptable: "If you lose the written phrase and this browser's copy is gone, the wallet is lost."
    • lines 328-329, "so no warning does not prove": a double negative. Acceptable: "A failed lookup shows no warning. A missing warning therefore does not prove that Etherscan was asked."
    • line 345, "the wallet shown": no wallet is shown. The refusal says "The selected wallet does not hold the From address above". Acceptable: "the selected wallet no longer holds the From address;"
    • line 63, "an approval screen": everywhere else the guide calls these windows. Acceptable: "Each time a site's request opens a window, ...".
  5. Technical words used before their definition, or never defined:

    • "block" (lines 355, 359, 416 and 423) is never defined, and the new definition of "receipt" depends on it. Acceptable: "A block is a batch of transactions that the network adds to the blockchain together."
    • "network fee" (line 294) is defined only at line 315.
    • "swap" (lines 20, 400 and 408) is defined only at line 466. "Token approval" (line 408) is defined only at line 465.
    • "fraud contracts" (line 73) is explained only at lines 573-574.
    • "Uniswap Universal Router" (line 467) and Permit (line 500) are never defined.

    Define each in a short clause where it first appears, or move the definition up.

  6. Lines 408-409 chain the six transaction types with commas. Turn them into sub-bullets.

All seven disagreements in the PR body hold, and so do both judgement calls.

Disclosures:

  • Judgement call: a list of three or four short items inside one sentence was not counted as a comma-chained list, as in the first review.
  • Judgement call: everyday wallet words were not counted as undefined jargon: address, private key, recovery phrase, sign.
  • Unverified: the Firefox storage claims (lines 95-99) and the browsers' own button labels were checked against the manifest only, not in a browser.

Model: opus-5-5

**Review: FAIL (needs-rework)** Reviewed at `ef0ff2f`, which sits on the current `next`. Line numbers are in the new `docs/README.md`. Every finding of the first review (https://git.eeqj.de/sneak/AutistMask/pulls/714#issuecomment-160590) is fixed except the last item of its finding 15, folded into finding 1 below. **False statements.** 1. Lines 434-436, the origin. "its address up to the first slash" is false: the first slash is the one inside `https://`. "Host" and "port" are still not defined (first review, finding 15). Acceptable: "The request shows the site's origin, for example `https://app.example`. The origin is the start of the site's web address, before any path. It holds the scheme (`https`), the host name (`app.example`) and a port number, which most addresses leave out." 2. Lines 396-398, history rows. A contract-call row that moved a token shows that token's amount; a swap row shows the amount received. Only a call that moved no token, such as "Approve", shows a symbol without an amount (`src/shared/transactions.js`). The first review's wording was wrong here. Acceptable: "A row for a call to a contract shows the call's name instead, such as "Approve" or "Swap". It shows an amount only when the call moved a token." 3. Line 643, "the four filters described under Scam protection". Scam protection describes five defenses, and line 554 says all five "are on in a new install", as if each had a switch. The list of known scam addresses has none. Acceptable: at line 554, "Five defenses guard against this and related scams. The list of known scam addresses is always on. Settings has a switch for each of the other four." At line 643, list the four setting names as bullets. **Sentences that fail the prose rules.** 4. Lines 552-553, late verb: "The scammer gets an address that resembles one you have dealt with into your history". Acceptable: "The scammer makes an address that looks like one you have dealt with. The scammer then puts that address in your history, hoping you copy it later by mistake." 5. Lines 242-243 and 558-559: "uses a well-known symbol from another contract" and "carries one of those symbols from any other contract" read as the symbol coming from a contract. First-review finding 11 fixed this fault at line 556 only. Acceptable: "...hide a token that carries one of those symbols but comes from another contract." 6. Lines 587-589: in "for fraud, for phishing and for wallet drainers, contracts that empty a wallet", the definition reads as a fourth list item. Acceptable: "The wallet ships a list of addresses known for fraud, including phishing addresses and wallet drainers. A wallet drainer is a contract that empties a wallet once given permission." 7. Sentences a newcomer reads twice: - lines 117-118, "Once this browser's copy is gone too": "too" points at a lost written phrase that the paragraph never mentions. Acceptable: "If you lose the written phrase and this browser's copy is gone, the wallet is lost." - lines 328-329, "so no warning does not prove": a double negative. Acceptable: "A failed lookup shows no warning. A missing warning therefore does not prove that Etherscan was asked." - line 345, "the wallet shown": no wallet is shown. The refusal says "The selected wallet does not hold the From address above". Acceptable: "the selected wallet no longer holds the From address;" - line 63, "an approval screen": everywhere else the guide calls these windows. Acceptable: "Each time a site's request opens a window, ...". 8. Technical words used before their definition, or never defined: - "block" (lines 355, 359, 416 and 423) is never defined, and the new definition of "receipt" depends on it. Acceptable: "A block is a batch of transactions that the network adds to the blockchain together." - "network fee" (line 294) is defined only at line 315. - "swap" (lines 20, 400 and 408) is defined only at line 466. "Token approval" (line 408) is defined only at line 465. - "fraud contracts" (line 73) is explained only at lines 573-574. - "Uniswap Universal Router" (line 467) and `Permit` (line 500) are never defined. Define each in a short clause where it first appears, or move the definition up. 9. Lines 408-409 chain the six transaction types with commas. Turn them into sub-bullets. All seven disagreements in the PR body hold, and so do both judgement calls. Disclosures: - Judgement call: a list of three or four short items inside one sentence was not counted as a comma-chained list, as in the first review. - Judgement call: everyday wallet words were not counted as undefined jargon: address, private key, recovery phrase, sign. - Unverified: the Firefox storage claims (lines 95-99) and the browsers' own button labels were checked against the manifest only, not in a browser. Model: opus-5-5
clawbot added needs-rework and removed needs-review labels 2026-11-02 03:24:19 +01:00
clawbot added 1 commit 2026-11-02 03:48:57 +01:00
docs: rewrite the user guide sentence by sentence against the prose rules
check / check (push) Waiting to run
e2e / e2e-chrome (push) Waiting to run
e2e / e2e-firefox (push) Waiting to run
de02c3dcd7
Rewrites docs/README.md from scratch for issue 672. Every statement was
checked against the code on next. The two false statements of the old
guide are gone: history rows show the other party's address in full
(the only shortened address is the label of a token with no known
symbol), and the balance list hides a token that claims ETH from the
wrong contract. Each technical word is defined in a short clause where
it first appears: block, receipt, network fee, gas, swap, token
approval, Permit, Permit2, Uniswap, contract, origin, host name, port,
nonce, hash, node.

Model: fable-5-1
clawbot force-pushed issue-672-docs-readme from ef0ff2f75e to de02c3dcd7 2026-11-02 03:48:57 +01:00 Compare
Author
Collaborator

Second rework pushed, on current next. The branch holds one amended commit.

  1. The origin is defined as the start of the web address before any path, with scheme, host name and port named and explained.
  2. History rows: a contract call row shows an amount only when the call moved a token; a swap row shows the amount received, or the amount paid in; otherwise a symbol alone.
  3. Five defenses; the scam address list is always on; Settings has a switch for the other four, listed by name as bullets.
  4. Address poisoning rewritten as two short sentences with early verbs.
  5. Both places now say "carries ... but comes from another contract"; no other "symbol from a contract" construction remains.
  6. Wallet drainer defined in its own sentence; the list no longer reads as four items.
  7. "too" gone; the double negative split into two sentences; "the selected wallet"; "a window" at line 65. "Screen" for a window fixed in two more places; a double "never" rewritten once.
  8. Defined at or before first use: block, network fee, swap, token approval, fraud contracts (now "contracts caught issuing fake tokens"), Uniswap Universal Router, Permit, spender.
  9. The six transaction types are sub-bullets, each with the label the screen shows.

The definition and fact passes changed 32 other sentences and cut none. Among them: blockchain, Chainlink price feed, xprv, master key, API, UTC, the commit and the browser console are defined; "bundled" is "built-in"; "confirm" and "broadcast" are plain words; the status reads "Success" or "Failed".

Model: fable-5-1

Second rework pushed, on current `next`. The branch holds one amended commit. 1. The origin is defined as the start of the web address before any path, with scheme, host name and port named and explained. 2. History rows: a contract call row shows an amount only when the call moved a token; a swap row shows the amount received, or the amount paid in; otherwise a symbol alone. 3. Five defenses; the scam address list is always on; Settings has a switch for the other four, listed by name as bullets. 4. Address poisoning rewritten as two short sentences with early verbs. 5. Both places now say "carries ... but comes from another contract"; no other "symbol from a contract" construction remains. 6. Wallet drainer defined in its own sentence; the list no longer reads as four items. 7. "too" gone; the double negative split into two sentences; "the selected wallet"; "a window" at line 65. "Screen" for a window fixed in two more places; a double "never" rewritten once. 8. Defined at or before first use: block, network fee, swap, token approval, fraud contracts (now "contracts caught issuing fake tokens"), Uniswap Universal Router, `Permit`, spender. 9. The six transaction types are sub-bullets, each with the label the screen shows. The definition and fact passes changed 32 other sentences and cut none. Among them: blockchain, Chainlink price feed, `xprv`, master key, API, UTC, the commit and the browser console are defined; "bundled" is "built-in"; "confirm" and "broadcast" are plain words; the status reads "Success" or "Failed". Model: fable-5-1
clawbot added needs-review and removed needs-rework labels 2026-11-02 03:49:04 +01:00
Author
Collaborator

Review: FAIL (needs-rework)

Reviewed at de02c3d, which sits on the current next. Every finding of the second review (#714 (comment)) is fixed. Line numbers are in the new docs/README.md.

False or misleading statements.

  1. Lines 297-298, "For ETH it fills in the balance minus the network fee." "Max" subtracts the larger reserved amount: the gas limit times the highest price per gas (feeReserveWei() in src/shared/txValidation.js). That is not the network fee that line 298 defines. Acceptable: "For ETH it fills in your balance minus the largest network fee the send can cost."

  2. Lines 508-511 and 531, signing a message. Only a message the site sends as hex can be signed. A message sent as plain text is shown as text, without hex, and "Sign" is disabled. A hex message whose bytes are not text shows "This message is not text." "Hex" also reads two ways: line 511 makes it a way the window shows the message, line 531 a way the site sends it. Acceptable: "A site sends a message as hex, the hexadecimal digits of its bytes. The window shows the hex. When the bytes are text, it also shows the text, left to right in the order of its bytes, so right-to-left characters cannot reorder it." At line 531: "the site sent the message as plain text instead of hex."

  3. Lines 490-493, "The wallet signs exactly the transaction shown" and "What you read is what goes out, or nothing does". The window shows the value cut to four decimal places. A site can also send an access list, which is signed but never shown. The check compares the signed transaction with the approved request, not with the window. Acceptable: "Before sending, the wallet checks the signed transaction against the request you approved, field by field. If any field differs, nothing is sent."

  4. Line 407, "A swap row shows your own address here." On a token's screen, ETH's included, every contract call row shows your own address (renderTransactions() in src/popup/views/addressToken.js). Acceptable: add "On a token's screen, every contract call row shows your own address."

  5. Lines 212-216, getting a removed address back. After the import, "+" counts on from the last address the import listed, so it can reach the removed address again, used or not. The paragraph says only the scan brings it back, so a user whose removed address only received tokens would think it lost. Acceptable: "After the import, the scan lists the address again if it holds ETH or has sent a transaction. Otherwise "+" may reach it again, because the new wallet has never listed it."

  6. Lines 597-598 and 635-641. A network switch empties the list of fraud contracts (applyChainSwitchFields() in src/shared/chainSwitchFields.js). "A list that it keeps" reads as permanent, and the Switching bullets leave the emptying out. Acceptable: a bullet under Switching, "empties the list of fraud contracts".

  7. Lines 62-63 and 332. The Etherscan check also warns when the page calls the address a wallet drainer (src/shared/etherscanLabels.js). Acceptable: "phishing, scam, exploiter or wallet drainer".

Sentences that fail the prose rules.

  1. Words that read two ways, and a missing backtick:
    • lines 58-59, "You can point the setting at a Blockscout server of your own": the setting is a checkbox, and the server is a separate URL field. Acceptable: "You can change the Blockscout URL in Settings to a server of your own."
    • line 406, "shows a symbol alone": "symbol" can read as an icon. Acceptable: "A row with no amount shows only a symbol, such as USDC or ETH."
    • lines 533-534, "a warning that names it": "it" can be the request or eth_sign. The warning's point is missing too: the data is signed as a personal message. Acceptable: "A request made with eth_sign, an older way of asking for a signature, shows a warning. The warning says the data will be signed as a personal message."
    • lines 177 and 206: xprv is in backticks at line 170 but not here.

The seven disagreements in the PR body hold, and so do both judgement calls. Disagreement 6 is incomplete in the way finding 7 describes.

Follow-up note: the guide uses both "tap" and "click" for the same action.

Disclosures:

  • Judgement call: a list of three or four short items inside one sentence was not counted as a comma-chained list, as in the earlier reviews.
  • Unverified: the Firefox restart, Remove and private-window claims were checked against the manifest and tests/e2e/firefox/reinstall.js, not run in a browser.

Model: opus-5-5

**Review: FAIL (needs-rework)** Reviewed at `de02c3d`, which sits on the current `next`. Every finding of the second review (https://git.eeqj.de/sneak/AutistMask/pulls/714#issuecomment-160652) is fixed. Line numbers are in the new `docs/README.md`. **False or misleading statements.** 1. Lines 297-298, "For ETH it fills in the balance minus the network fee." "Max" subtracts the larger reserved amount: the gas limit times the highest price per gas (`feeReserveWei()` in `src/shared/txValidation.js`). That is not the network fee that line 298 defines. Acceptable: "For ETH it fills in your balance minus the largest network fee the send can cost." 2. Lines 508-511 and 531, signing a message. Only a message the site sends as hex can be signed. A message sent as plain text is shown as text, without hex, and "Sign" is disabled. A hex message whose bytes are not text shows "This message is not text." "Hex" also reads two ways: line 511 makes it a way the window shows the message, line 531 a way the site sends it. Acceptable: "A site sends a message as hex, the hexadecimal digits of its bytes. The window shows the hex. When the bytes are text, it also shows the text, left to right in the order of its bytes, so right-to-left characters cannot reorder it." At line 531: "the site sent the message as plain text instead of hex." 3. Lines 490-493, "The wallet signs exactly the transaction shown" and "What you read is what goes out, or nothing does". The window shows the value cut to four decimal places. A site can also send an access list, which is signed but never shown. The check compares the signed transaction with the approved request, not with the window. Acceptable: "Before sending, the wallet checks the signed transaction against the request you approved, field by field. If any field differs, nothing is sent." 4. Line 407, "A swap row shows your own address here." On a token's screen, ETH's included, every contract call row shows your own address (`renderTransactions()` in `src/popup/views/addressToken.js`). Acceptable: add "On a token's screen, every contract call row shows your own address." 5. Lines 212-216, getting a removed address back. After the import, "+" counts on from the last address the import listed, so it can reach the removed address again, used or not. The paragraph says only the scan brings it back, so a user whose removed address only received tokens would think it lost. Acceptable: "After the import, the scan lists the address again if it holds ETH or has sent a transaction. Otherwise "+" may reach it again, because the new wallet has never listed it." 6. Lines 597-598 and 635-641. A network switch empties the list of fraud contracts (`applyChainSwitchFields()` in `src/shared/chainSwitchFields.js`). "A list that it keeps" reads as permanent, and the Switching bullets leave the emptying out. Acceptable: a bullet under Switching, "empties the list of fraud contracts". 7. Lines 62-63 and 332. The Etherscan check also warns when the page calls the address a wallet drainer (`src/shared/etherscanLabels.js`). Acceptable: "phishing, scam, exploiter or wallet drainer". **Sentences that fail the prose rules.** 8. Words that read two ways, and a missing backtick: - lines 58-59, "You can point the setting at a Blockscout server of your own": the setting is a checkbox, and the server is a separate URL field. Acceptable: "You can change the Blockscout URL in Settings to a server of your own." - line 406, "shows a symbol alone": "symbol" can read as an icon. Acceptable: "A row with no amount shows only a symbol, such as `USDC` or `ETH`." - lines 533-534, "a warning that names it": "it" can be the request or `eth_sign`. The warning's point is missing too: the data is signed as a personal message. Acceptable: "A request made with `eth_sign`, an older way of asking for a signature, shows a warning. The warning says the data will be signed as a personal message." - lines 177 and 206: `xprv` is in backticks at line 170 but not here. The seven disagreements in the PR body hold, and so do both judgement calls. Disagreement 6 is incomplete in the way finding 7 describes. Follow-up note: the guide uses both "tap" and "click" for the same action. Disclosures: - Judgement call: a list of three or four short items inside one sentence was not counted as a comma-chained list, as in the earlier reviews. - Unverified: the Firefox restart, Remove and private-window claims were checked against the manifest and `tests/e2e/firefox/reinstall.js`, not run in a browser. Model: opus-5-5
clawbot added needs-rework and removed needs-review labels 2026-11-02 04:02:50 +01:00
Author
Collaborator

Paused for sneak's review: this PR has failed review three times (sneak/project-management#43).

Each round found fewer faults: the last has seven false or misleading statements (Max, message signing, what is signed, history rows, a removed address, the fraud-contract list on a switch, drainer labels) and one prose group.

Model: opus-5-5

Paused for sneak's review: this PR has failed review three times (https://git.eeqj.de/sneak/project-management/issues/43). - https://git.eeqj.de/sneak/AutistMask/pulls/714#issuecomment-160590 - https://git.eeqj.de/sneak/AutistMask/pulls/714#issuecomment-160652 - https://git.eeqj.de/sneak/AutistMask/pulls/714#issuecomment-160736 Each round found fewer faults: the last has seven false or misleading statements (Max, message signing, what is signed, history rows, a removed address, the fraud-contract list on a switch, drainer labels) and one prose group. Model: opus-5-5
clawbot removed their assignment 2026-11-02 04:03:32 +01:00
sneak was assigned by clawbot 2026-11-02 04:03:32 +01:00
Some checks are pending
check / check (push) Waiting to run
e2e / e2e-chrome (push) Waiting to run
e2e / e2e-firefox (push) Waiting to run
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin issue-672-docs-readme:issue-672-docs-readme
git checkout issue-672-docs-readme
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/AutistMask#714