aboutsummaryrefslogtreecommitdiffstats
path: root/tools
Commit message (Collapse)AuthorAgeFilesLines
* Change username: a name this wallet's key claimed before a login identity ↵Adam Soltys2026-10-091-4/+21
| | | | | | was attached no longer reads as taken — the identity-signed claim is refused, so retry signed by the wallet key that owns the record Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Reuse feed overscan to reduce rendering during scroll coastsAdam Soltys2026-10-091-0/+63
|
* Feed scrolls faster on a desktop: a wheel notch pushes a quarter further, ↵Adam Soltys2026-10-091-1/+1
| | | | | | and a grab-and-flick throws twice as hard with a higher top speed Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Grab-and-flick no longer opens the post: a flick that starts a little ↵Adam Soltys2026-10-091-1/+16
| | | | | | sideways still scrolls (only a clearly sideways drag selects text), and any press that moved eats the click Chrome still fires. A wheel push at the very top of the page no longer dies on its first frame (a frame stamp older than the push read as a step up) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Desktop feed scrolls like a phone: a mouse-wheel notch coasts and slows ↵Adam Soltys2026-10-091-0/+97
| | | | | | (quick turns stack, a reverse turn brakes, trackpads left alone), and a mouse can grab the feed and flick it (a sideways drag still selects text, a drag doesn't click what it started on) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Footer: "Show your support" beside How it works opens the hat shop from any ↵Adam Soltys2026-10-091-0/+49
| | | | | | page (shown once a wallet is open, since the shop pays from it) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Keep carousel flick destination through stale scroll-end eventsAdam Soltys2026-10-091-0/+103
|
* Asset paths are site-absolute: relative ones resolved against a deep page ↵Adam Soltys2026-10-081-34/+0
| | | | | | (/feed/…, /nevent1…) and fetched the app's HTML, which broke the coinos community's logo (and would have broken the QR decoder, signer module and language packs there). Dev server serves the app icons. The live Concord delivery test is gone: it posted "delivery test" messages into the real coinos #general Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Amethyst's feed model: an Everything feed (your follows, everyone on your ↵Adam Soltys2026-10-081-7/+23
| | | | | | lists and packs, and posts from anyone on a hashtag you follow: your topic feeds' tags and your NIP-51 interests, kind 10015) and a Follows + lists feed beside Following, built from your feeds and offered once there's something to add. Long names in search results end in an ellipsis instead of running off the card Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Max in fiat sends every sat: the figure a Max fill wrote is remembered with ↵Adam Soltys2026-10-081-2/+3
| | | | | | its exact sats, so the cent-rounded amount no longer parses back a few sats short and strands them. Anything typed parses as typed Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Max fills the amount in the unit the field shows: in fiat that's money ↵Adam Soltys2026-10-081-0/+50
| | | | | | floored to the cent (so it never parses back above the maximum), not a BTC figure under a CAD label. One ctx.amountField helper for the ark send/LN Max, the gift Max and fixed-amount zap/BOLT 12 fills Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Prefetch visible post threads after a bounded reading dwellAdam Soltys2026-10-082-0/+49
|
* Coins in another device's renewal are busy here too: the renewal sliver ↵Adam Soltys2026-10-081-1/+20
| | | | | | names its inputs, and ArkManager._free / freeCoins exclude coins an in-flight remote renewal holds from balance (counted pending), send/LN/offboard/exit selection, auto-renew, the backstop and the coins page (greyed with the round). Freed the moment that renewal reads finished, failed or lapsed Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Renewals show on every device: the sync snapshot carries each device's own ↵Adam Soltys2026-10-081-0/+53
| | | | | | renewals as display-only slivers (step, amounts, fee, round txid; no signing material), merged into remoteRenewals furthest-step-wins, never as actions; the coins page lists another device's renewal in progress with its round transaction until it finishes there or a 'Renewed' row syncs (two-day cap) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A renewal refused for 'insufficient refresh fee' re-reads the server's fee ↵Adam Soltys2026-10-081-0/+58
| | | | | | schedule and re-prices instead of resubmitting the same underpaying set on every sync; if the new fee leaves under 330 sats (or the price didn't change) it fails and frees the coins. Backstop registration re-reads the schedule on the same refusal Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A finished renewal adopted twice no longer shows 'Renewal in progress' ↵Adam Soltys2026-10-081-0/+57
| | | | | | forever: once its done action is pruned, a re-read round breadcrumb adopted it again as a rescue at step 'issued', whose spent inputs had lost their bytes, so every sync threw. A round counts as claimed when its 'Renewed' movement or its fresh coins are already in the wallet; the breadcrumb and rescueParticipation skip it, and a stuck issued action retires without a row Co-Authored-By: Claude Opus 5.5 <[email protected]>
* No speaker pop on opening the app: the zap sound decodes in an ↵Adam Soltys2026-10-071-0/+7
| | | | | | | OfflineAudioContext and makes its real AudioContext on the first tap (one made at load ran at once in the installed app, re-opening the phone's audio output on every open/refocus), suspended again after the sound and when the app is hidden Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01PCGjEEMD23CweKrefbTDJp
* Feed videos before they play: the picture fills the box with only the play ↵Adam Soltys2026-10-074-5/+23
| | | | | | button and size (no seek bar or sound button until playing); hovering the cover no longer paints it over with the app's button grey; upright phone clips (stored sideways with a quarter-turn matrix) paint upright, v1 size caches dropped; a clip the probe found HEVC switches to the copy before fetching the original Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Videos: posters for clips that came without one, and an H.264 copy for a ↵Adam Soltys2026-10-072-0/+121
| | | | | | clip this browser can't picture (an iPhone's HEVC on Chrome for Linux played sound over black) — vmedia container on cs (bun + ffmpeg, /vmedia/), switch on zero-width metadata or an HEVC header from the probe, a line saying why if the copy fails too Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Desktop Send focus: a mouse click leaves the Send button focused, and that ↵Adam Soltys2026-10-071-1/+18
| | | | | | blocked the recipient field — only a field you're typing in is protected now (test opens Send with a real click) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Desktop: Send opens with the cursor in the recipient field (once per visit, ↵Adam Soltys2026-10-071-0/+3
| | | | | | never off another field, never on phones); the amount field still takes it once a recipient resolves Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Call the protocol by its name: 'Marmot (MLS)' in the group-type picker and ↵Adam Soltys2026-10-071-2/+2
| | | | | | the send-by menu (White Noise is one app that speaks it); a zap on something no relay has says it may be a private message instead of claiming the post vanished Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Setup wizard: a cover behind the avatar — twelve nature covers ↵Adam Soltys2026-10-071-0/+64
| | | | | | (self-hosted, Unsplash) cycled with arrows or a swipe, or upload your own; untouched, each pubkey gets its own default, published as the kind-0 banner beside the punk Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Profile links paint whole on the first frame: the server renders /npub1…, ↵Adam Soltys2026-10-071-0/+126
| | | | | | | | | | /nprofile1… and /<name> with the kind 0, latest posts, follow counts and mentioned faces inlined (stale-while-refresh cache, 2 s budget), the app seeds its caches from it, and the big avatar never flashes punk art while a lookup runs A cold visit to a profile link showed a punk, '–' counts and no posts for 9 s. Server-side relay answers settle once events stop arriving (idle 400 ms) instead of waiting out a relay that never sends EOSE: a cold build is ~1.9 s. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* History: a Lightning payment still settling (a zap, mostly) shows at once as ↵Adam Soltys2026-10-071-0/+54
| | | | | | | | a pending Sent row with the recipient's face, and gives way to its completed row One-tap zaps now record who they went to, so their rows carry a face too. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Send suggestions: a name lookup's avatar is a quiet circle until its profile ↵Adam Soltys2026-10-071-0/+87
| | | | | | arrives — the default punk flashed in front of a new account's chosen picture Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Browser tests: public relays answered in the page, never reachedAdam Soltys2026-10-0791-113/+241
| | | | | | | | | | | | | | A suite run let ~90 throwaway test wallets subscribe and publish on public relays from one home address, and nos.lol and relay.damus.io banned it. tools/puppeteer.js wraps puppeteer-core: every socket to a non-local host gets an in-page stand-in relay (EVENT -> OK, REQ -> EOSE). Tests that read real content launch with { relays: 'read' } (real reads, publishes answered in place); feed-live, chat-layout and cordn-ui launch with { relays: 'live' }. LIVE_RELAYS=read|1|host,... overrides per run. profile-key-qr: measure the QR again if a repaint swapped it out. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Desktop: the Send amount field takes the cursor as soon as it appears (once; ↵Adam Soltys2026-10-071-0/+9
| | | | | | never off another field, never on phones) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Swiping to Savings opens its Receive pane (the deposit address, no extra ↵Adam Soltys2026-10-071-0/+136
| | | | | | tap); Enter on Send picks the top suggestion, and Enter walks amount → review → confirm Co-Authored-By: Claude Opus 5.5 <[email protected]>
* ark ui-test and comments-test: no more timing racesAdam Soltys2026-10-072-10/+76
| | | | | | | | | | | | | ark ui-test: wait for the selected balance card to stick before opening Receive (the carousel lands on a card's history, and a glide could settle back on Savings), wait for the first mailbox read before paying, paste addresses whole (typed a key at a time, a re-render mid-typing broke the checksum), and poll for alice's balance and the history rows. 8/8 runs. comments-test: the article and comments it fetched are handed to the app on every relay socket that asks, so it no longer depends on the app reaching the same public relays. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Merge branch 'worktree-agent-a9ba2f8bea9a7dafc'Adam Soltys2026-10-0718-635/+262
|\
| * ln-e2e-test: wait for both CLN nodes to reach the chain tip before the hold ↵Adam Soltys2026-10-071-0/+5
| | | | | | | | | | | | | | | | | | receive Run right after tests that mine, cln-ark could trail by a block or two and the receive failed with final_incorrect_cltv_expiry. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * ark ui-test: port the browser e2e to the current appAdam Soltys2026-10-072-142/+127
| | | | | | | | | | | | | | | | | | | | | | | | The old test spawned ~/halwallet's dev server and drove its long-gone UI (receive-mode select, Settings 'Refresh / consolidate'). It now builds this repo's app bundle and drives it against the regtest stack: set up Spending, receive over Ark from alice, send back from the Send form, fund Savings on-chain and move it into Spending (board), reload. Only the page and the local backends are reachable. aliceReady uses 'bark maintain' so actions a killed run left half-done get resumed instead of holding coins locked. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * expired-dust-test: skip unless captaind runs a short vtxo lifetimeAdam Soltys2026-10-071-1/+10
| | | | | | | | | | | | | | | | It needs vtxo_lifetime <= 60 so it can mine past expiry; against the normal 4320-block server it would age the whole shared chain. Also import the manager relative to the repo instead of the main checkout's absolute path. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * ark tests: shared aliceReady() keeps the bark funding wallet usableAdam Soltys2026-10-076-22/+58
| | | | | | | | | | | | | | | | | | scheduled-refresh-test mines a whole vtxo lifetime, which expires alice's coins; every test run after it funded nothing (spendableSat 0) or was handed an expired coin (receive-test). The helper refreshes expired coins and boards more when alice runs low, and the funding tests call it before paying. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * ark board/refresh tests: current regtest chain and server rulesAdam Soltys2026-10-074-7/+15
| | | | | | | | | | | | | | | | | | | | | | - mine/fund through the bc container (the standalone :18543 node was retired in the July consolidation) - board-test hands the server the funding tx (require_board_funding_tx) and waits for esplora to see the board confirmed: bark silently drops a received vtxo whose board tx it can't find yet - refresh-test rounds the ppm fee up like the server (and the manager) do Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * Drop the third-party HTLC swap bridge tests: the policy they exercise is goneAdam Soltys2026-10-072-391/+0
| | | | | | | | | | | | | | | | | | | | 68fd614 removed the VtxoPolicy::Htlc encoding from send.js/proto.js (upstream took type 0x08) and the bridge was retired from the app on 2026-08-02, so htlcLock can no longer build its output (policyTaproot throws on the missing userPubkey). bridge-e2e-test also drove bridge/server.js, which sits on the same dead primitives. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * electrum-ws.test: a real bun test that skips when no bridge listens on :50003Adam Soltys2026-10-071-27/+39
| | | | | | | | Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * bolt12-test: committed regtest offer/invoice fixtures instead of a vanished ↵Adam Soltys2026-10-073-4/+9
| | | | | | | | | | | | | | | | | | | | | | scratchpad The default fixture paths pointed into an old session's scratchpad, so the test died reading them (exit 1, no output). Fresh pair from the regtest stack: offer from clc, invoice fetched by cln-ark. Network and expiry checks no longer assume mainnet or a recent wall clock. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * Drop swap-vectors.test: src/swap.js (Boltz swaps) was removed in 348a570Adam Soltys2026-10-071-42/+0
| | | | | | | | Co-Authored-By: Claude Opus 5.5 <[email protected]>
* | Merge branch 'worktree-agent-ad1d843e9e394974e'Adam Soltys2026-10-0715-100/+153
|\ \
| * | Feed tests (port 5298 group): bottom-nav Feed, Following seeded, today's ↵Adam Soltys2026-10-074-29/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | prepend and editor - feed-list, markdown-note: open the Feed tab, on Following; feed-list opens the editor from the feed's ⋯ menu - feed-stability: the warm-up query asks kinds 1+1068 (polls); a live post with the header on screen goes in above the first post, held still (it no longer waits); the per-frame drift check uses a second post once the header is away - relays-settings: a new identity puts out its DM inbox list at boot, and the page has other Save buttons; the no-change save clears the log and clicks the card's own Save Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | Feed tests: open the Feed from the bottom nav, on FollowingAdam Soltys2026-10-076-56/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The feed left the chat home for a bottom-nav tab, and a wallet with no feed remembered opens on Popular, so these tests click the Feed tab and seed Following as the wallet's last feed. Also brought up to date: - feed-live: the pill lands on the oldest new post; arrivals at the top go in above the first post (held still), not behind the pill; scroll up a screen at a time (one jump lands before the windowed rows are back) - feed-custom: only the feeds' chips are counted (not All/Images/…); the follows box is not the first checkbox any more; the last feed is remembered across a reload; the pack shows in the feed's editor (the chat home no longer lists the feed) - feed-follow: Feed tab + Following chip instead of the messages-home row; the feed opens at ten posts (tall ones, so a page doesn't fill the screen) - moderation: nos.lol is a local stand-in (a relay that won't connect held the mute list back past the checks) Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | Feed tests: catch up with Articles, Popular as the default feed, timed feed ↵Adam Soltys2026-10-075-15/+36
| |/ | | | | | | | | | | | | | | | | | | | | | | | | defs and the tint that fades on sight - feed-media-views: the mode switch has an Articles button now - feed-media-cache: the live watch's since-only subscription isn't part of the crawl - feed-switch-seed: seeded feeds carry their edit time (the feeds sync merge drops one without) - feed-editor-relays: nos.lol is a local stand-in relay, so the test doesn't depend on reaching it - feed-streaming: the stub wallet opens on Following (no remembered feed = Popular); the held picture answers repeat fetches once released; the new-post tint is recorded as it paints (it fades on sight) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* | Merge branch 'worktree-agent-ab051145d709af327'Adam Soltys2026-10-0711-57/+100
|\ \
| * | profile-feed-test: the ⚡ lives in each note's action bar; holding it sets ↵Adam Soltys2026-10-071-4/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | the amount A tap pays the default amount at once (21 sats unless set), so the test holds the button to open the amount screen instead of tapping an empty wallet into a failed payment. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | unread-dot, sw-reload tests follow the bottom nav and the split buildAdam Soltys2026-10-072-8/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | - unread-dot: the front door's way to import is Create a new wallet → Have an existing seed; the dot is the Messages bottom-nav button's - sw-reload: the split build loads app-<token>.js, so a restamped build asks for app-deadbeef….js; serve the real entry for it Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | Communities: a room rebuilt with fresher keys folds its channels againAdam Soltys2026-10-071-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When our own community list came back with a channel key the local copy lacked (every community we create: its list entry carries the keys), the room was torn down to be rebuilt with them, but the wraps it had already opened stayed in seenWraps. The rebuilt room's subscription then skipped the relay replay, so its Control fold held only editions newer than the rebuild: a second channel showed up as the only one (no picker; general gone from the fold), and the guestbook lost its joins. Each room now remembers the wrap ids it opened and hands them back when it is rebuilt. chat-layout-test reaches Messages through the bottom nav. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | padlock-flow, onboard-backup, amber-login tests follow today's UIAdam Soltys2026-10-073-33/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - padlock-flow: the padlock lives behind the balance card's gear (wallet settings), declining lands back there; another wallet is added from the profile's 'Sign into another account' (import tab) and counted in the identity switcher, since the Accounts list is no longer reached from the wallet - onboard-backup: the welcome card lost its blurb (42c8d4e); the way in now says what the wallet is by putting the twelve words on screen at once - amber-login: the starter follows wait on the deep contact-list lookup (follows-overwrite fix), so their signature can come after the wallet opens; keep answering sign requests until things go quiet Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | Profile tests: reach the feed and chats through the bottom nav, start on ↵Adam Soltys2026-10-075-9/+12
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | Following, follow today's onboarding - avatar-profile, profile-open: a new wallet opens the feed on Popular, so seed this wallet's last feed as Following; profile-open opens Feed from the nav - profile-feed: a mainnet import offers a username first (Not now), Messages is a bottom-nav button - profile-draft, profile-recovery: the import button reads 'Have an existing seed or entropy to import?'; profile batches stream through queryStreamOn, so the recovery test answers that too Co-Authored-By: Claude Opus 5.5 <[email protected]>