Merge stable into master — resolved file by file
master had been dead since 2026-01-29 with "adding in broken
implementation" as its tip, while stable carried seven further months of
work (pear-runtime OTA, WDK beta upgrades, the hyper-wallet-lib submodule
conversion). They forked on 01-28 and became two parallel attempts at the
same bugs. master stays the main branch; this brings stable's work into it.
13 of 15 files merged clean. Six conflicts, resolved individually:
wallet-server.cjs
1. /api/transactions/sync — took master's network + explicit accountIndex
handling, because the merged frontend SENDS both (desktop/wallet.js
posts {chain, network, accountIndex}) and stable's server ignored them.
But swapped in stable's require path: the submodule conversion moved
the lib, 12 other requires in this file already use
./lib/hyper-wallet-lib/, and master's ./lib/wdk-integration.cjs no
longer resolves.
2. token transfer — stable. master's side never defines tokenBalance,
which the next line compares against, and stable's getCurrentAddress
takes baseChain, correct since tokens share the ETH address (b342b44).
Also brings the testnet balance-check fallback.
desktop/wallet.js
3. send-balance display — COMBINED. Prefer the chain's own formatBalance
(SUPPORTED_CHAINS carries per-token ones for USDT/USDC at 6 decimals),
then fall back to stable's decimals-aware formatting rather than
master's raw wei.
4. insufficient-balance check — stable. master's side reads Number(amount)
inside confirmSend(), where no `amount` exists: Number(undefined) is
NaN, NaN > balance is false, and the guard never fires. stable uses
amountInSmallestUnits, computed by toSmallestUnits() above it.
5. confirm dialog — stable, same undefined `amount` on master's side (four
uses). stable also carries the deliberate Gwei→ETH fee fix (53ac831)
and uses BigInt for wei totals instead of Number.
6. post-send notification — stable. Both branches hit the libnotify UI
hang; master commented out the call sites, stable fixed it inside
showNotification (7e39ed6, the later commit), which now logs and shows
an in-app toast with the native API disabled. Fixing the function beats
commenting out its callers.
Verified: no conflict markers, all three entry files pass node --check, no
old-path requires remain, every remaining Number(amount) is in a scope that
declares it, master's six unique files (USDT_CONTRACTS.md, deploy.sh, the
debug scripts, the dated bug write-ups) are preserved, and stable's
.pear-git/ci.yaml, .gitmodules and docs/ came across.
NOT verified: the app has not been run. This is an Electron app and I
cannot exercise it headlessly — the send path in particular should be
tested on testnet before mainnet use.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
8ccb2c00e10e035f6eb011d1276272765b4b0d8d
by plankatron <fleeky@gmail.com> · 2026-09-10T16:39:57.000Z