2026-03-04 - 2026-09-04

Overview

84 Active Pull Requests
153 Active Issues
Excluding merges, 2 authors have pushed 4 commits to main and 91 commits to all branches. On main, 31 files have changed and there have been 1142 additions and 101 deletions.

84 Pull requests merged by 2 users

Merged #381 fix: give every address a row of its own, so none wraps or is shortened (closes #380) 2026-08-30 05:25:00 +02:00

Merged #190 milestone 1.0.0: approval-path security, build-integrity guard, e2e harness and filter coverage 2026-08-30 04:11:52 +02:00

Merged #366 fix: floor the persisted fields a restore dereferences, and make each field's floor an executable claim (closes #362) 2026-08-23 23:06:18 +02:00

Merged #376 fix: declare toolbar icons and ship real PNGs in both archives (closes #371) 2026-08-23 21:26:14 +02:00

Merged #367 fix: store an absent explorer decimals as unknown instead of fabricating 18 (closes #349) 2026-08-23 21:19:05 +02:00

Merged #368 harden: pair every swap amount with the token that supplied it 2026-08-23 20:45:58 +02:00

Merged #365 harden: say a swap's input token is unknown rather than calling it ETH (closes #357) 2026-08-23 20:23:05 +02:00

Merged #360 fix: version the stored profile, and give a record that cannot be read a way out (closes #311) 2026-08-23 20:04:01 +02:00

Merged #356 harden: say a swap's output token is unknown rather than calling it ETH (closes #353) 2026-08-23 18:13:20 +02:00

Merged #344 harden: make the background physically unable to read the shared state singleton 2026-08-23 17:57:31 +02:00

Merged #352 fix: always name a swap's output token, by address when no symbol is known (closes #346) 2026-08-23 16:31:03 +02:00

Merged #345 harden: resolve the swap approval screen's token scale, or refuse to format 2026-08-23 16:20:23 +02:00

Merged #347 release: package the extension, pin the Chrome extension id, and prove the wallet survives a reinstall (closes #310) 2026-08-23 16:13:23 +02:00

Merged #339 fix: never render a nonzero approval amount as zero (closes #322) 2026-08-23 15:43:04 +02:00

Merged #341 build: remove dist/ when a release build fails (closes #333) 2026-08-23 15:39:04 +02:00

Merged #338 docs: state verify-build's dist/ guarantee at the width it enforces (closes #331) 2026-08-23 15:33:58 +02:00

Merged #337 fix: make saveState() a read-modify-write merge instead of a full-blob overwrite (closes #304) 2026-08-20 16:41:20 +02:00

Merged #334 fix: let a user who lost the password delete the wallet, and warn before they can (closes #312) 2026-08-20 15:12:29 +02:00

Merged #330 fix: verify the build against its own receipt, with the expected mode as an argument (closes #309) 2026-08-20 14:24:56 +02:00

Merged #327 fix: render a hostile token symbol as text, and put a floor under the CSP (closes #307) 2026-08-20 13:47:29 +02:00

Merged #319 fix: answer eth_chainId and net_version from loaded state (closes #317) 2026-08-20 13:11:49 +02:00

Merged #321 fix: show the true token amount on the approval screen, or none at all (closes #306) 2026-08-20 12:57:39 +02:00

Merged #313 fix: gate the chain switch and remember endpoints per network (closes #308) 2026-08-20 12:42:02 +02:00

Merged #314 fix: sign the ERC-20 amount the send screen displayed (closes #305) 2026-08-20 12:31:28 +02:00

Merged #301 feat: vendor and censor the phishing blocklist at build time (closes #219) 2026-08-17 10:05:57 +02:00

Merged #289 fix: settle a site approval on the port that carries its teardown (closes #275) 2026-08-17 09:34:08 +02:00

Merged #282 fix: answer the page when a background handler throws (closes #280) 2026-08-17 09:16:21 +02:00

Merged #299 test: drive the Settings screen in a browser and guard every popup element id (closes #229) 2026-08-17 09:15:00 +02:00

Merged #286 build: add ESLint to script/lint and containerize linting (closes #152) 2026-08-17 09:10:04 +02:00

Merged #281 refactor: one shared extension-API module, and drive the dApp flows on Firefox (closes #153) 2026-08-17 09:06:14 +02:00

Merged #296 fix: one wording for an empty password field on every screen (closes #265) 2026-08-17 08:59:59 +02:00

Merged #291 build: run the browser e2e suites in CI (closes #259) 2026-08-17 08:52:27 +02:00

Merged #284 fix: one transaction approval at a time, and honest copy for a nonce collision (closes #271) 2026-08-17 08:38:26 +02:00

Merged #298 fix: an address holding only unpriced tokens is no longer totalled at $0.00 (closes #261) 2026-08-17 08:38:11 +02:00

Merged #288 test: assert the #150 and #151 items the harness did not cover (closes #188) 2026-08-17 08:10:38 +02:00

Merged #292 docs: drop the README limit the EIP-1193 code fix removed (closes #285) 2026-08-17 08:03:02 +02:00

Merged #272 fix: render the view "Back" lands on after the popup is reopened (closes #268) 2026-08-14 06:14:10 +02:00

Merged #278 fix: carry EIP-1193 error codes through to the page (closes #274) 2026-08-12 13:47:34 +02:00

Merged #277 fix: a shared ticker no longer hides one of its two real tokens (closes #276) 2026-08-12 13:31:55 +02:00

Merged #273 test: drive the EIP-1193 dApp approval round trips in the browser (closes #183) 2026-08-12 13:23:58 +02:00

Merged #270 fix: judge the symbol a user sees, not the bytes a contract returns (closes #260) 2026-08-12 13:06:55 +02:00

Merged #256 test: containerized Firefox end-to-end harness (closes #184) 2026-08-12 12:20:15 +02:00

Merged #269 harden: verify the signed transaction against what the popup displayed (closes #216) 2026-08-12 12:15:26 +02:00

Merged #266 fix: filter the restored view stack against RESTORABLE_VIEWS (closes #224) 2026-08-12 12:07:49 +02:00

Merged #264 fix: one wording for a rejected password on every screen (closes #172) 2026-08-12 12:03:41 +02:00

Merged #267 test: close the empty-array hole in the e2e unstubbed-request guard (closes #187) 2026-08-12 11:50:39 +02:00

Merged #258 test: drive ConfirmTx in the e2e suite, gate assertion included (closes #238) 2026-08-12 11:35:21 +02:00

Merged #243 fix: explain a rejected dust threshold instead of snapping back silently (closes #233) 2026-08-12 11:29:10 +02:00

Merged #205 harden: verify all approval fields and make failed signing retryable (closes #174) 2026-08-12 11:21:03 +02:00

Merged #240 feat: remove an address from an HD wallet, behind a confirmation (closes #162) 2026-08-12 11:16:30 +02:00

Merged #257 fix: filter a fake ETH token from the balance list too (closes #235) 2026-08-12 11:10:39 +02:00

Merged #249 test: cover every verify-build failure mode from make check (closes #227) 2026-08-12 11:05:09 +02:00

Merged #201 fix: WaitTx timeout no longer overwrites a rendered success screen (closes #155) 2026-08-12 10:58:36 +02:00

Merged #248 fix: wipe the exported private key from the DOM on leaving the screen (closes #221) 2026-08-12 10:54:37 +02:00

Merged #247 fix: explain a stored non-master xprv wallet instead of throwing at signing time (closes #234) 2026-08-12 10:41:49 +02:00

Merged #244 fix: treat an unreported holders_count as unknown, not as zero holders (closes #230) 2026-08-12 10:34:46 +02:00

Merged #206 fix: run libsodium on WebAssembly under the extension CSP (closes #182) 2026-08-12 10:30:16 +02:00

Merged #241 docs: describe the bundled token list by selection criterion, not count (closes #239) 2026-08-12 10:20:41 +02:00

Merged #197 fix: count the network fee in the confirm-screen balance check (closes #154) 2026-08-11 15:41:38 +02:00

Merged #208 fix: drive background refresh and phishing update from alarms (closes #158) 2026-08-11 15:38:29 +02:00

Merged #226 fix: add a Settings toggle for known-symbol spoof verification (closes #176) 2026-08-11 15:38:06 +02:00

Merged #214 fix: move the UTC Timestamps checkbox into the Display well (closes #212) 2026-08-11 15:34:17 +02:00

Merged #232 fix: enforce the base58 checksum and reject non-master extended keys (closes #210) 2026-08-11 15:31:51 +02:00

Merged #225 fix: NUL-delimit verify-build's dist walk so no path escapes the check (closes #223) 2026-08-11 15:26:45 +02:00

Merged #215 feat: password-gated recovery phrase display for HD wallets (closes #161) 2026-08-11 15:25:18 +02:00

Merged #228 fix: honour a dust threshold of 0 and compare addresses case-insensitively (closes #179) 2026-08-11 15:16:49 +02:00

Merged #209 test: known-answer coverage for HD derivation and the vault (closes #159) 2026-08-11 15:06:36 +02:00

Merged #204 chore: repo policy compliance sweep — test rerun, npx, frozen lockfile, docs (closes #166) 2026-08-11 14:57:52 +02:00

Merged #196 fix: one transaction history row per value movement (closes #177) 2026-08-11 14:56:31 +02:00

Merged #203 fix: correct verify-build diagnostics and close its vacuous passes (closes #180) 2026-08-11 14:55:07 +02:00

Merged #200 fix: derive hasWallet from the wallet list on load (closes #195) 2026-08-11 14:51:23 +02:00

Merged #217 docs: correct three README claims contradicted by the code (closes #213) 2026-08-11 14:41:16 +02:00

Merged #202 docs: rebuild the README Screen Map from the code (closes #164) 2026-08-11 14:31:46 +02:00

Merged #199 docs: correct docs/README.md external services and remove competitor names (closes #163) 2026-08-11 14:25:58 +02:00

Merged #194 fix: repair wallet state on delete (closes #156) 2026-08-11 14:23:07 +02:00

Merged #192 docs: rewrite TODO.md workflow for the branch-per-issue model on next 2026-08-11 14:15:06 +02:00

Merged #178 build: assert DEBUG is off in every emitted bundle as a post-build check (closes #170) 2026-08-10 16:15:23 +02:00

Merged #171 security: decrypt and sign dApp approvals in the popup (closes #157) 2026-08-10 15:59:30 +02:00

Merged #175 test: cover the address-poisoning filters in transactions.js (closes #160) 2026-08-10 15:53:16 +02:00

Merged #185 test: containerized Chrome end-to-end harness that drives the real popup (closes #181) 2026-08-10 15:49:33 +02:00

Merged #169 security: make DEBUG a build-time flag defaulting to off (closes #149) 2026-08-09 16:19:09 +02:00

Merged #145 feat: add About well to settings with build info and debug easter egg 2026-07-26 18:39:09 +02:00

Merged #148 scripts-to-rule-them-all 2026-07-07 02:14:26 +02:00

Merged #147 TODO 2026-07-06 21:36:13 +02:00

92 Issues closed from 2 users

Closed #380 wallet view: addresses wrap and break the layout when a wallet has multiple addresses 2026-08-30 05:25:00 +02:00

Closed #191 docs: TODO.md describes the old branch-from-main workflow and its Status/Next Step are stale 2026-08-30 04:11:52 +02:00

Closed #362 fix: malformed allowedSites and fraudContracts entries are dereferenced without a floor 2026-08-23 23:06:18 +02:00

Closed #371 fix: neither manifest declares icons, so both browsers show a generic puzzle piece 2026-08-23 21:26:14 +02:00

Closed #349 fix: balances.js fabricates decimals 18 before storage, laundering a guess into both approval paths 2026-08-23 21:19:05 +02:00

Closed #364 harden: a zero input amount lets a later hop's figure be displayed against an earlier hop's Token In 2026-08-23 20:45:58 +02:00

Closed #359 harden: a V4 step with a zero amountOutMin leaves an earlier hop's Min. received on screen 2026-08-23 20:45:58 +02:00

Closed #357 harden: the input side has the same null-means-ETH collapse — an undetermined inputToken is asserted as "ETH (native)" 2026-08-23 20:23:05 +02:00

Closed #311 fix: stored state has no version and no migration, and a corrupt blob bricks the popup and every dApp call 2026-08-23 20:04:01 +02:00

Closed #353 harden: a V4 swap with an undetermined output token is asserted to the user as ETH at 18 decimals 2026-08-23 18:13:21 +02:00

Closed #340 harden: the swap approval screen guesses 18 decimals for any token not in the bundled list 2026-08-23 17:58:13 +02:00

Closed #320 fix: a cold worker prepares a dApp transaction for the wrong chain, so every non-mainnet dApp send is refused 2026-08-23 17:57:31 +02:00

Closed #324 harden: the background must stop reading the shared state singleton — one root cause, five sites, and the fixes keep adding new ones 2026-08-23 17:57:31 +02:00

Closed #346 fix: a swap to a token absent from the bundled list shows no Token Out line at all 2026-08-23 16:31:03 +02:00

Closed #310 release: there is no packaging, no artifact and no signing — the extension cannot be installed durably on either browser 2026-08-23 16:13:23 +02:00

Closed #322 fix: a nonzero approval amount still renders as 0.0000 when it is smaller than the 4-decimal display floor 2026-08-23 15:43:04 +02:00

Closed #333 build: a failed release build leaves the complete INSECURE debug bundle loadable in dist/ 2026-08-23 15:39:04 +02:00

Closed #331 docs: README claims verify-build covers "nothing the build did not write", which is broader than what is enforced 2026-08-23 15:33:59 +02:00

Closed #304 fix: a second extension page silently deletes a wallet — saveState() is a last-writer-wins full-blob overwrite 2026-08-20 16:41:20 +02:00

Closed #312 fix: a forgotten password permanently wedges the wallet — cannot delete it, cannot re-import the phrase 2026-08-20 15:12:29 +02:00

Closed #303 pre-1.0 security review: key handling, DEBUG-mode policy, RPC input validation 2026-08-20 14:26:22 +02:00

Closed #309 build: make build can produce an INSECURE debug bundle and verify-build certifies it green 2026-08-20 14:24:56 +02:00

Closed #307 harden: a hostile ERC-20 symbol renders as live HTML in the popup — cross-origin iframe over the wallet UI 2026-08-20 13:47:29 +02:00

Closed #317 fix: a cold worker answers eth_chainId and net_version from never-loaded state, reporting mainnet to a page whose user is on Sepolia 2026-08-20 13:11:49 +02:00

Closed #306 fix: the dApp approval screen renders a 5,000-token transfer as "Amount 0.0000" 2026-08-20 12:57:39 +02:00

Closed #316 fix: the background worker saves state it never loaded, so a chain switch wipes every wallet in storage 2026-08-20 12:42:14 +02:00

Closed #308 fix: any web page can switch the network and destroy the user's custom RPC endpoint, unprompted and unconnected 2026-08-20 12:42:02 +02:00

Closed #305 fix: the popup's own ERC-20 send signs an amount it never displayed (indexer decimals vs contract decimals) 2026-08-20 12:31:28 +02:00

Closed #219 decision: the phishing blocklist URL embeds a competitor's org name, and its documented upstream no longer exists 2026-08-17 10:05:57 +02:00

Closed #300 every unit conflicts with every other unit in TODO.md, costing a rebase cycle per merge 2026-08-17 09:35:09 +02:00

Closed #302 DEP0205 module.register() deprecation warning during make build 2026-08-17 09:35:09 +02:00

Closed #275 fix: approving a site connection races the popup teardown and can be recorded as a rejection 2026-08-17 09:34:08 +02:00

Closed #280 fix: a throw inside handleRpc hangs the dApp's promise forever with no error 2026-08-17 09:16:21 +02:00

Closed #229 test: the Settings view has no browser coverage, so a wrong element id takes the whole screen down undetected 2026-08-17 09:15:00 +02:00

Closed #152 build: add ESLint to script/lint — make check cannot currently catch undefined identifiers 2026-08-17 09:10:04 +02:00

Closed #153 fix: Firefox target is non-functional — Chrome callback APIs used against the promise-only browser namespace 2026-08-17 09:06:14 +02:00

Closed #265 fix: the empty-password message diverges on the private key export screen 2026-08-17 09:00:00 +02:00

Closed #259 build: nothing automatic ever runs the e2e suites, so every browser-level guarantee is manual-only 2026-08-17 08:52:27 +02:00

Closed #271 fix: two concurrent dApp transactions are populated with the same nonce, and the second fails terminally 2026-08-17 08:38:26 +02:00

Closed #261 fix: an address holding only unpriced tokens reports its total as $0.00 2026-08-17 08:38:11 +02:00

Closed #186 decision: agent commits are landing under three different author identities, including yours 2026-08-17 08:37:32 +02:00

Closed #188 test: assert the DoD items from #150 and #151 that the harness does not yet cover 2026-08-17 08:10:38 +02:00

Closed #285 docs: README still documents the EIP-1193 code loss that #274 fixed 2026-08-17 08:03:03 +02:00

Closed #268 fix: Back after reopening the popup lands on a blank screen, because goBack() never re-renders 2026-08-14 06:14:10 +02:00

Closed #274 fix: EIP-1193 error codes never reach the page — a dApp cannot detect a user rejection 2026-08-12 13:47:34 +02:00

Closed #276 fix: seven bundled tokens are filtered as spoofs of their own duplicate symbol 2026-08-12 13:31:56 +02:00

Closed #220 blocked: no Actions runner is picking up jobs — every CI run sits queued forever 2026-08-12 13:28:47 +02:00

Closed #183 test: drive the EIP-1193 dApp approval round trips in the browser harness 2026-08-12 13:23:58 +02:00

Closed #260 fix: a whitespace-padded symbol bypasses the spoof filter but still displays as the real one 2026-08-12 13:06:55 +02:00

Closed #184 test: containerized Firefox end-to-end harness (geckodriver, MV2 temporary add-on) 2026-08-12 12:20:15 +02:00

Closed #216 harden: approval verification compares against the dApp's request, not against what the popup displayed 2026-08-12 12:15:26 +02:00

Closed #224 fix: the restored viewStack can contain views the popup may not reopen onto, giving a dead-end screen 2026-08-12 12:07:49 +02:00

Closed #172 fix: "Wrong password." is a sentence fragment and diverges from the other password prompts 2026-08-12 12:03:41 +02:00

Closed #187 test: an empty-array POST body escapes the e2e unstubbed-request guard 2026-08-12 11:50:39 +02:00

Closed #238 test: ConfirmTx has no automated coverage at all — the screen that decides what gets signed 2026-08-12 11:35:21 +02:00

Closed #233 fix: the dust threshold field rejects input silently, snapping back with no explanation 2026-08-12 11:29:10 +02:00

Closed #174 harden: approvalVerify does not compare chainId, nonce or fee fields; failed signing leaves an unretryable button 2026-08-12 11:21:03 +02:00

Closed #162 feat: delete an address from an HD wallet (with confirmation) 2026-08-12 11:16:30 +02:00

Closed #235 fix: a fake token impersonating ETH is filtered from history and send, but still shows in the balance list 2026-08-12 11:10:39 +02:00

Closed #227 test: verify-build's failure modes are only ever proven by hand — make the battery a committed target 2026-08-12 11:05:09 +02:00

Closed #155 fix: WaitTx 60s timeout overwrites an already-rendered success screen 2026-08-12 10:58:36 +02:00

Closed #221 fix: leaving the private-key export screen leaves the private key in the DOM for the life of the popup 2026-08-12 10:54:37 +02:00

Closed #234 fix: an already-imported non-master xprv wallet will throw at signing time with no explanation 2026-08-12 10:41:50 +02:00

Closed #230 fix: an omitted holders_count is coerced to 0, so a legitimate token gets filtered as spam 2026-08-12 10:34:46 +02:00

Closed #182 fix: libsodium WASM is refused by the extension CSP on every popup load, silently falling back to asm.js 2026-08-12 10:30:17 +02:00

Closed #239 docs: the bundled token list is described as "top 250" in four places and "roughly 500" in another; it is 512 2026-08-12 10:20:41 +02:00

Closed #154 fix: gas fee is excluded from the insufficient-balance check, so max-value ETH sends fail at broadcast 2026-08-11 15:41:38 +02:00

Closed #158 fix: MV3 service worker termination kills the background refresh and the 24h phishing list update 2026-08-11 15:38:29 +02:00

Closed #176 fix: known-symbol spoof verification has no off switch, contradicting the README's user-configurable promise 2026-08-11 15:38:06 +02:00

Closed #212 fix: the UTC Timestamps checkbox sits inside the Token Spam Protection well 2026-08-11 15:34:17 +02:00

Closed #210 fix: isValidXprv accepts a mistyped extended key and silently imports a different wallet 2026-08-11 15:31:51 +02:00

Closed #223 fix: verify-build's dist walk is line-delimited, so a path with trailing whitespace escapes the unlisted-bundle check 2026-08-11 15:26:45 +02:00

Closed #161 feat: show wallet's recovery phrase (requires password) 2026-08-11 15:25:18 +02:00

Closed #179 fix: a dust threshold of 0 silently becomes 100,000 gwei, and isSpoofedSymbol is case-sensitive on the contract address 2026-08-11 15:16:49 +02:00

Closed #159 test: cover wallet.js key derivation and vault.js encryption — currently zero tests on the crypto core 2026-08-11 15:06:36 +02:00

Closed #166 chore: repo policy compliance sweep — test rerun pattern, yarn/npx, frozen lockfile, undocumented targets 2026-08-11 14:57:52 +02:00

Closed #177 fix: every plain ERC-20 transfer produces two rows in transaction history 2026-08-11 14:56:31 +02:00

Closed #180 fix: verify-build diagnostic overstates the failure, and two robustness gaps in the same script 2026-08-11 14:55:07 +02:00

Closed #195 fix: loadState reads hasWallet from storage without reconciling it against wallets.length 2026-08-11 14:51:24 +02:00

Closed #213 docs: three README.md claims are contradicted by the shipped code 2026-08-11 14:41:16 +02:00

Closed #164 docs: README Screen Map omits three shipped screens and misdescribes four flows 2026-08-11 14:31:46 +02:00

Closed #163 docs: docs/README.md names competitors and contradicts the code on external services 2026-08-11 14:25:58 +02:00

Closed #156 fix: deleting the last wallet leaves hasWallet true, resets selection unconditionally, and skips the active-address broadcast 2026-08-11 14:23:07 +02:00

Closed #189 TOP PRIORITY: consolidate all open PRs onto one next branch, one PR 2026-08-10 16:16:18 +02:00

Closed #170 build: assert DEBUG is off in every emitted bundle as a post-build check 2026-08-10 16:15:23 +02:00

Closed #157 security: the user's plaintext password crosses the extension messaging boundary during dApp approvals 2026-08-10 15:59:31 +02:00

Closed #160 test: the entire address-poisoning defense in transactions.js is untested 2026-08-10 15:53:16 +02:00

Closed #181 test: containerized Chrome end-to-end harness that drives the real popup 2026-08-10 15:49:33 +02:00

Closed #151 fix: TransactionDetail crashes for every ERC-20 transfer — ReferenceError: addressDotHtml is not defined 2026-08-10 15:49:33 +02:00

Closed #150 fix: AddToken screen is unreachable — ReferenceError: showView is not defined 2026-08-10 15:49:33 +02:00

Closed #149 security: DEBUG hardcoded on — every generated recovery phrase is the public test phrase 2026-08-09 16:19:09 +02:00

Closed #144 add a new well to the bottom of settings that includes application information 2026-07-26 18:39:09 +02:00

152 Issues created by 1 user

Opened #149 security: DEBUG hardcoded on — every generated recovery phrase is the public test phrase 2026-08-09 03:41:35 +02:00

Opened #150 fix: AddToken screen is unreachable — ReferenceError: showView is not defined 2026-08-09 03:41:48 +02:00

Opened #151 fix: TransactionDetail crashes for every ERC-20 transfer — ReferenceError: addressDotHtml is not defined 2026-08-09 03:42:04 +02:00

Opened #152 build: add ESLint to script/lint — make check cannot currently catch undefined identifiers 2026-08-09 03:42:24 +02:00

Opened #153 fix: Firefox target is non-functional — Chrome callback APIs used against the promise-only browser namespace 2026-08-09 03:42:55 +02:00

Opened #154 fix: gas fee is excluded from the insufficient-balance check, so max-value ETH sends fail at broadcast 2026-08-09 03:43:09 +02:00

Opened #155 fix: WaitTx 60s timeout overwrites an already-rendered success screen 2026-08-09 03:43:32 +02:00

Opened #156 fix: deleting the last wallet leaves hasWallet true, resets selection unconditionally, and skips the active-address broadcast 2026-08-09 03:43:48 +02:00

Opened #157 security: the user's plaintext password crosses the extension messaging boundary during dApp approvals 2026-08-09 03:44:09 +02:00

Opened #158 fix: MV3 service worker termination kills the background refresh and the 24h phishing list update 2026-08-09 03:44:26 +02:00

Opened #159 test: cover wallet.js key derivation and vault.js encryption — currently zero tests on the crypto core 2026-08-09 03:44:54 +02:00

Opened #160 test: the entire address-poisoning defense in transactions.js is untested 2026-08-09 03:45:13 +02:00

Opened #161 feat: show wallet's recovery phrase (requires password) 2026-08-09 03:45:38 +02:00

Opened #162 feat: delete an address from an HD wallet (with confirmation) 2026-08-09 03:45:57 +02:00

Opened #163 docs: docs/README.md names competitors and contradicts the code on external services 2026-08-09 03:46:30 +02:00

Opened #164 docs: README Screen Map omits three shipped screens and misdescribes four flows 2026-08-09 03:46:51 +02:00

Opened #165 decision: Sepolia support contradicts "Non-Goals for 1.0", and isMetaMask names a competitor in shipped code 2026-08-09 03:47:31 +02:00

Opened #166 chore: repo policy compliance sweep — test rerun pattern, yarn/npx, frozen lockfile, undocumented targets 2026-08-09 03:47:55 +02:00

Opened #167 chore: prune 24 stale remote feature branches 2026-08-09 03:48:20 +02:00

Opened #168 chore: remove dead exports and de-duplicate copy-pasted view helpers 2026-08-09 03:48:42 +02:00

Opened #170 build: assert DEBUG is off in every emitted bundle as a post-build check 2026-08-09 04:08:04 +02:00

Opened #172 fix: "Wrong password." is a sentence fragment and diverges from the other password prompts 2026-08-09 04:53:47 +02:00

Opened #173 decision: no browser in the agent environment, so several 1.0.0 items cannot have their DoD verified 2026-08-09 04:54:11 +02:00

Opened #174 harden: approvalVerify does not compare chainId, nonce or fee fields; failed signing leaves an unretryable button 2026-08-09 05:02:55 +02:00

Opened #176 fix: known-symbol spoof verification has no off switch, contradicting the README's user-configurable promise 2026-08-09 07:07:55 +02:00

Opened #177 fix: every plain ERC-20 transfer produces two rows in transaction history 2026-08-09 07:08:12 +02:00

Opened #179 fix: a dust threshold of 0 silently becomes 100,000 gwei, and isSpoofedSymbol is case-sensitive on the contract address 2026-08-09 07:08:34 +02:00

Opened #180 fix: verify-build diagnostic overstates the failure, and two robustness gaps in the same script 2026-08-09 07:21:04 +02:00

Opened #181 test: containerized Chrome end-to-end harness that drives the real popup 2026-08-09 16:10:05 +02:00

Opened #182 fix: libsodium WASM is refused by the extension CSP on every popup load, silently falling back to asm.js 2026-08-09 16:10:35 +02:00

Opened #183 test: drive the EIP-1193 dApp approval round trips in the browser harness 2026-08-09 16:15:49 +02:00

Opened #184 test: containerized Firefox end-to-end harness (geckodriver, MV2 temporary add-on) 2026-08-09 16:27:58 +02:00

Opened #186 decision: agent commits are landing under three different author identities, including yours 2026-08-09 18:31:19 +02:00

Opened #187 test: an empty-array POST body escapes the e2e unstubbed-request guard 2026-08-09 18:45:47 +02:00

Opened #188 test: assert the DoD items from #150 and #151 that the harness does not yet cover 2026-08-09 18:46:04 +02:00

Opened #189 TOP PRIORITY: consolidate all open PRs onto one next branch, one PR 2026-08-10 14:30:42 +02:00

Opened #191 docs: TODO.md describes the old branch-from-main workflow and its Status/Next Step are stale 2026-08-10 16:16:38 +02:00

Opened #193 decision: RULES.md "Build & Workflow" still says merge to main, contradicting the branch-per-issue-onto-next model 2026-08-11 14:15:31 +02:00

Opened #195 fix: loadState reads hasWallet from storage without reconciling it against wallets.length 2026-08-11 14:19:15 +02:00

Opened #198 feat: "send max" affordance — emptying an ETH account now requires manual arithmetic 2026-08-11 14:22:57 +02:00

Opened #207 decision: a dApp-supplied gas limit is silently dropped, so the popup always re-estimates 2026-08-11 14:28:48 +02:00

Opened #210 fix: isValidXprv accepts a mistyped extended key and silently imports a different wallet 2026-08-11 14:32:45 +02:00

Opened #211 decision: RULES.md states three things the code contradicts 2026-08-11 14:33:49 +02:00

Opened #212 fix: the UTC Timestamps checkbox sits inside the Token Spam Protection well 2026-08-11 14:33:54 +02:00

Opened #213 docs: three README.md claims are contradicted by the shipped code 2026-08-11 14:34:06 +02:00

Opened #216 harden: approval verification compares against the dApp's request, not against what the popup displayed 2026-08-11 14:40:20 +02:00

Opened #218 test: popup reload mid-refresh can fail the e2e run with "loadHomeTxs failed: Failed to fetch" 2026-08-11 14:40:59 +02:00

Opened #219 decision: the phishing blocklist URL embeds a competitor's org name, and its documented upstream no longer exists 2026-08-11 14:41:30 +02:00

Opened #220 blocked: no Actions runner is picking up jobs — every CI run sits queued forever 2026-08-11 14:45:42 +02:00

Opened #221 fix: leaving the private-key export screen leaves the private key in the DOM for the life of the popup 2026-08-11 14:49:25 +02:00

Opened #222 decision: the per-unit TODO.md entry makes every merge invalidate every open PR 2026-08-11 14:54:59 +02:00

Opened #223 fix: verify-build's dist walk is line-delimited, so a path with trailing whitespace escapes the unlisted-bundle check 2026-08-11 14:55:25 +02:00

Opened #224 fix: the restored viewStack can contain views the popup may not reopen onto, giving a dead-end screen 2026-08-11 15:06:25 +02:00

Opened #227 test: verify-build's failure modes are only ever proven by hand — make the battery a committed target 2026-08-11 15:08:53 +02:00

Opened #229 test: the Settings view has no browser coverage, so a wrong element id takes the whole screen down undetected 2026-08-11 15:09:37 +02:00

Opened #230 fix: an omitted holders_count is coerced to 0, so a legitimate token gets filtered as spam 2026-08-11 15:10:47 +02:00

Opened #231 decision: what should the confirm screen quote as the network fee — estimate, reserve, or both? 2026-08-11 15:11:40 +02:00

Opened #233 fix: the dust threshold field rejects input silently, snapping back with no explanation 2026-08-11 15:16:57 +02:00

Opened #234 fix: an already-imported non-master xprv wallet will throw at signing time with no explanation 2026-08-11 15:18:05 +02:00

Opened #235 fix: a fake token impersonating ETH is filtered from history and send, but still shows in the balance list 2026-08-11 15:20:53 +02:00

Opened #236 harden: an oversized phishing delta erases the previously stored one, dropping to vendored-only coverage for up to 24h 2026-08-11 15:23:32 +02:00

Opened #237 chore: script/test-e2e emits DEP0205 module.register() deprecation warning 2026-08-11 15:24:16 +02:00

Opened #238 test: ConfirmTx has no automated coverage at all — the screen that decides what gets signed 2026-08-11 15:36:18 +02:00

Opened #239 docs: the bundled token list is described as "top 250" in four places and "roughly 500" in another; it is 512 2026-08-11 15:38:18 +02:00

Opened #242 tokenList.js header comment says "511 tokens"; the array has 512 2026-08-12 10:19:51 +02:00

Opened #245 harden: connectedSites is never cleared for a removed address or wallet 2026-08-12 10:25:15 +02:00

Opened #246 harden: decimals || "18" collapses absent and zero if a backend ever sends numeric 0 2026-08-12 10:26:40 +02:00

Opened #250 fix: a contract deployment shows a blank recipient on the wait and approval screens 2026-08-12 10:32:37 +02:00

Opened #251 harden: parseHoldersCount partial-parses a malformed count into a reported low count, hiding the token 2026-08-12 10:35:02 +02:00

Opened #252 fix: flash messages longer than one line wrap and shift the layout, defeating the reserved-space policy 2026-08-12 10:36:17 +02:00

Opened #253 test: the private-key export screen has no e2e coverage, unlike the recovery-phrase screen 2026-08-12 10:39:41 +02:00

Opened #254 test: the defective-wallet UI gates have no coverage — all six can be deleted with the suite still green 2026-08-12 10:42:40 +02:00

Opened #255 decision: a defective xprv wallet is told to use other software, but we hold the only key and will not export it 2026-08-12 10:42:54 +02:00

Opened #259 build: nothing automatic ever runs the e2e suites, so every browser-level guarantee is manual-only 2026-08-12 10:56:28 +02:00

Opened #260 fix: a whitespace-padded symbol bypasses the spoof filter but still displays as the real one 2026-08-12 10:56:51 +02:00

Opened #261 fix: an address holding only unpriced tokens reports its total as $0.00 2026-08-12 10:57:29 +02:00

Opened #262 fix: an approval claimed when its window closes is orphaned, leaving the dApp promise unsettled forever 2026-08-12 11:00:04 +02:00

Opened #263 chore: script/bootstrap can report success while leaving playwright-core unlinked 2026-08-12 11:29:42 +02:00

Opened #265 fix: the empty-password message diverges on the private key export screen 2026-08-12 11:32:31 +02:00

Opened #268 fix: Back after reopening the popup lands on a blank screen, because goBack() never re-renders 2026-08-12 11:43:39 +02:00

Opened #271 fix: two concurrent dApp transactions are populated with the same nonce, and the second fails terminally 2026-08-12 12:04:57 +02:00

Opened #274 fix: EIP-1193 error codes never reach the page — a dApp cannot detect a user rejection 2026-08-12 13:05:38 +02:00

Opened #275 fix: approving a site connection races the popup teardown and can be recorded as a rejection 2026-08-12 13:05:50 +02:00

Opened #276 fix: seven bundled tokens are filtered as spoofs of their own duplicate symbol 2026-08-12 13:07:15 +02:00

Opened #279 fix: an unsupported method is reported to the page with no EIP-1193 code (4200) 2026-08-12 13:37:15 +02:00

Opened #280 fix: a throw inside handleRpc hangs the dApp's promise forever with no error 2026-08-12 13:47:51 +02:00

Opened #283 Uniswap V2_SWAP_EXACT_OUT (command 0x09) is decoded by a function nothing calls 2026-08-14 06:08:15 +02:00

Opened #285 docs: README still documents the EIP-1193 code loss that #274 fixed 2026-08-14 06:15:48 +02:00

Opened #287 flake: the Chrome e2e dApp signing prompt loses its page about one run in three under load 2026-08-14 06:23:01 +02:00

Opened #290 test: make test-e2e is flaky under host load — "the extension opened no approval window within 30000ms" 2026-08-14 06:26:15 +02:00

Opened #293 docs: the README e2e limits list omits the harness accommodation that neutralizes window.close 2026-08-17 08:03:32 +02:00

Opened #294 chore: no workflow sets timeout-minutes, so a hung browser can hold the shared runner for the 6h default 2026-08-17 08:06:22 +02:00

Opened #295 test: four DoD items from #150 and #151 remain uncovered after #188 2026-08-17 08:08:57 +02:00

Opened #297 fix: the two dApp approval error containers shift 6px when an error appears 2026-08-17 08:09:51 +02:00

Opened #300 every unit conflicts with every other unit in TODO.md, costing a rebase cycle per merge 2026-08-17 08:53:48 +02:00

Opened #302 DEP0205 module.register() deprecation warning during make build 2026-08-17 09:22:26 +02:00

Opened #303 pre-1.0 security review: key handling, DEBUG-mode policy, RPC input validation 2026-08-17 10:11:24 +02:00

Opened #304 fix: a second extension page silently deletes a wallet — saveState() is a last-writer-wins full-blob overwrite 2026-08-20 11:58:28 +02:00

Opened #305 fix: the popup's own ERC-20 send signs an amount it never displayed (indexer decimals vs contract decimals) 2026-08-20 11:58:39 +02:00

Opened #306 fix: the dApp approval screen renders a 5,000-token transfer as "Amount 0.0000" 2026-08-20 11:58:48 +02:00

Opened #307 harden: a hostile ERC-20 symbol renders as live HTML in the popup — cross-origin iframe over the wallet UI 2026-08-20 11:59:05 +02:00

Opened #308 fix: any web page can switch the network and destroy the user's custom RPC endpoint, unprompted and unconnected 2026-08-20 11:59:14 +02:00

Opened #309 build: make build can produce an INSECURE debug bundle and verify-build certifies it green 2026-08-20 11:59:27 +02:00

Opened #310 release: there is no packaging, no artifact and no signing — the extension cannot be installed durably on either browser 2026-08-20 11:59:45 +02:00

Opened #311 fix: stored state has no version and no migration, and a corrupt blob bricks the popup and every dApp call 2026-08-20 12:00:00 +02:00

Opened #312 fix: a forgotten password permanently wedges the wallet — cannot delete it, cannot re-import the phrase 2026-08-20 12:00:07 +02:00

Opened #315 test: WaitTx's timeout and consecutive-failed-lookup exit branches have no e2e coverage 2026-08-20 12:17:13 +02:00

Opened #316 fix: the background worker saves state it never loaded, so a chain switch wipes every wallet in storage 2026-08-20 12:20:19 +02:00

Opened #317 fix: a cold worker answers eth_chainId and net_version from never-loaded state, reporting mainnet to a page whose user is on Sepolia 2026-08-20 12:26:57 +02:00

Opened #318 test: e2e hygiene — a failing case leaves routeOpts and the popup screen dirty, cascading into unrelated failures 2026-08-20 12:31:41 +02:00

Opened #320 fix: a cold worker prepares a dApp transaction for the wrong chain, so every non-mainnet dApp send is refused 2026-08-20 12:49:01 +02:00

Opened #322 fix: a nonzero approval amount still renders as 0.0000 when it is smaller than the 4-decimal display floor 2026-08-20 12:50:50 +02:00

Opened #323 fix: the approval screen says "Unknown token" for tokens whose symbol is already known 2026-08-20 12:50:58 +02:00

Opened #324 harden: the background must stop reading the shared state singleton — one root cause, five sites, and the fixes keep adding new ones 2026-08-20 12:57:27 +02:00

Opened #325 test: guard decimals:0 against the falsy trap, and de-duplicate toDecimals 2026-08-20 12:57:50 +02:00

Opened #326 chore: eth_chainId and net_version are listed in PROXY_METHODS but intercepted earlier, so both entries are dead 2026-08-20 13:12:04 +02:00

Opened #328 harden: move the 39 static style attributes onto classes and drop 'unsafe-inline' from style-src 2026-08-20 13:47:43 +02:00

Opened #329 chore: escaping hygiene left after #307 — a dead un-encoded explorer helper, two inconsistent bare interpolations, a UTF-16 slice 2026-08-20 13:47:53 +02:00

Opened #331 docs: README claims verify-build covers "nothing the build did not write", which is broader than what is enforced 2026-08-20 14:25:07 +02:00

Opened #332 fix: make dev is documented as watch mode but has never watched anything 2026-08-20 14:25:15 +02:00

Opened #333 build: a failed release build leaves the complete INSECURE debug bundle loadable in dist/ 2026-08-20 14:25:23 +02:00

Opened #335 fix: Confirm Delete stays disabled after a successful wallet delete, so a second delete needs a popup reopen 2026-08-20 14:42:14 +02:00

Opened #336 harden: two latent gaps in the lost-password confirmation — whitespace-only name, and U+200B still untypable 2026-08-20 15:12:42 +02:00

Opened #340 harden: the swap approval screen guesses 18 decimals for any token not in the bundled list 2026-08-23 15:25:19 +02:00

Opened #342 chore: rough edges in script/discard-dist-on-failure — status swallowed when stderr is closed, silent SIGINT, and a censored-word failure wipes a good release build 2026-08-23 15:35:59 +02:00

Opened #343 fix: the send and send-confirm screens render a sub-1e-6 balance and fee as 0.0 2026-08-23 15:38:21 +02:00

Opened #346 fix: a swap to a token absent from the bundled list shows no Token Out line at all 2026-08-23 15:51:05 +02:00

Opened #348 decision: who owns the Chrome CRX signing key, and does 1.0 require AMO signing for Firefox 2026-08-23 16:03:44 +02:00

Opened #349 fix: balances.js fabricates decimals 18 before storage, laundering a guess into both approval paths 2026-08-23 16:04:25 +02:00

Opened #350 harden: a token scale above ~87 makes the whole swap silently undecodable 2026-08-23 16:04:49 +02:00

Opened #351 harden: the test recovery phrase ships inside the release artifacts, and the committed-key guard matches only by filename 2026-08-23 16:13:43 +02:00

Opened #353 harden: a V4 swap with an undetermined output token is asserted to the user as ETH at 18 decimals 2026-08-23 16:31:15 +02:00

Opened #354 chore: a tracked token's symbol is ignored, so the approval screen says "Unknown token" for a token the user added by hand 2026-08-23 16:31:22 +02:00

Opened #355 chore: the Tailwind CLI emits a module.register() deprecation warning on every build 2026-08-23 16:41:01 +02:00

Opened #357 harden: the input side has the same null-means-ETH collapse — an undetermined inputToken is asserted as "ETH (native)" 2026-08-23 18:07:35 +02:00

Opened #358 chore: V4 struct decodes target the deployed shape, and silently stop describing swaps if periphery adds a field 2026-08-23 18:07:48 +02:00

Opened #359 harden: a V4 step with a zero amountOutMin leaves an earlier hop's Min. received on screen 2026-08-23 18:13:38 +02:00

Opened #361 test: the state-recovery screen has no e2e coverage, so its behaviour under the real manifest CSP is unverified 2026-08-23 18:41:59 +02:00

Opened #362 fix: malformed allowedSites and fraudContracts entries are dereferenced without a floor 2026-08-23 19:02:23 +02:00

Opened #363 chore: .prettierignore names an AI vendor tool directory 2026-08-23 20:04:22 +02:00

Opened #364 harden: a zero input amount lets a later hop's figure be displayed against an earlier hop's Token In 2026-08-23 20:15:05 +02:00

Opened #369 docs: README still says a genuine zero renders 0.0000, and the approval screen's refusal vocabulary is undocumented 2026-08-23 20:46:17 +02:00

Opened #370 decision: a trailing PERMIT2_PERMIT replaces the swap's input side on the approval screen 2026-08-23 20:46:27 +02:00

Opened #371 fix: neither manifest declares icons, so both browsers show a generic puzzle piece 2026-08-23 21:06:07 +02:00

Opened #372 chore: networks.js defines nativeCurrency and nothing reads it, so Sepolia balances and fees all read "ETH" 2026-08-23 21:06:18 +02:00

Opened #373 fix: a popup already open when storage becomes unreadable keeps rendering the stale profile 2026-08-23 21:06:25 +02:00

Opened #374 fix: adding a second wallet silently accepts a different password, with nothing saying it is a separate one 2026-08-23 21:06:38 +02:00

Opened #375 chore: the testnet and debug banners leak the internal view id, e.g. "[TESTNET] (approve-tx)" 2026-08-23 21:06:42 +02:00

Opened #377 fix: an unknown-scale token reads differently on Send than on the confirmation screen, and the fee error promises a retry that cannot help 2026-08-23 21:19:20 +02:00

Opened #378 chore: the toolbar icons ship as opaque binaries with no in-tree way to regenerate them 2026-08-23 21:26:29 +02:00

Opened #379 test: classes of undriven path in the persisted-field contract harness 2026-08-23 22:45:08 +02:00

Opened #380 wallet view: addresses wrap and break the layout when a wallet has multiple addresses 2026-08-30 04:20:09 +02:00