aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* ark ui-test and comments-test: no more timing racesAdam Soltys8 days2-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 Soltys8 days18-635/+262
|\
| * ln-e2e-test: wait for both CLN nodes to reach the chain tip before the hold ↵Adam Soltys8 days1-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 Soltys8 days2-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 Soltys8 days1-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 Soltys8 days6-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 Soltys8 days4-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 Soltys8 days2-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 Soltys8 days1-27/+39
| | | | | | | | Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * bolt12-test: committed regtest offer/invoice fixtures instead of a vanished ↵Adam Soltys8 days3-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 Soltys8 days1-42/+0
| | | | | | | | Co-Authored-By: Claude Opus 5.5 <[email protected]>
* | Merge branch 'worktree-agent-ad1d843e9e394974e'Adam Soltys8 days16-101/+156
|\ \
| * | Feed tests (port 5298 group): bottom-nav Feed, Following seeded, today's ↵Adam Soltys8 days4-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 Soltys8 days6-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: a picture with no column-sized copy is decoded ahead too, so its row ↵Adam Soltys8 days1-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | paints it on the first frame Since column-sized copies (8249fbe), a picture small enough to keep (or a GIF) was fetched for its size but never decoded ahead: the row's <img> decoded it on sight, from the network again when the host says no-store. Decode the original ahead when there is no copy. (feed-live-test caught it.) Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | Feed tests: catch up with Articles, Popular as the default feed, timed feed ↵Adam Soltys8 days5-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 Soltys8 days12-61/+127
|\ \
| * | profile-feed-test: the ⚡ lives in each note's action bar; holding it sets ↵Adam Soltys8 days1-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]>
| * | Popular: the single file opened from a disk does not ask file:///api/feedAdam Soltys8 days1-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The shared Popular snapshot is fetched from a relative /api/feed. Opened from disk (dist/standalone.html) that is file:///api/feed, a request for a file beside it that never exists (standalone-file-test: 'nothing looked for beside the file'). Only ask when served over http(s); the relay path covers the rest, as it already did for a failed fetch. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | unread-dot, sw-reload tests follow the bottom nav and the split buildAdam Soltys8 days2-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]>
| * | Feed URLs: the default feed is not opened (and fetched) a tick before the URL'sAdam Soltys8 days1-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A /feed?r=… (or any /feed/… link) set the feed view up synchronously but chose its feed in a setTimeout, so the first paint opened the remembered/ default feed — Popular since c89050e — and fetched the shared snapshot for it before switching. The frame now holds (header only) for that tick, the way a note link's pending frame does. public-feed-browser-test: custom relays bypass the snapshot again. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | Communities: a room rebuilt with fresher keys folds its channels againAdam Soltys8 days2-4/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 Soltys8 days3-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]>
| * | Profiles: a remembered face beats a row asked for before the cache openedAdam Soltys8 days1-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since the profile cache moved to IndexedDB, a profile asked for during boot (a restored profile page, offline or with relays failing) left a loading or miss row in memory, and the re-warm after the cache opened skipped any pk already present, so the cached name never showed (profile-draft-test: the editor reopened with an empty Display name). Placeholder rows without a name/picture (and without a real kind 0 behind them) now give way to the cached one. Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | Profile tests: reach the feed and chats through the bottom nav, start on ↵Adam Soltys8 days5-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]>
* | Merge branch 'worktree-agent-a4c5f0908bc7757bf'Adam Soltys8 days13-38/+65
|\ \
| * | Feed, composer and zap tests follow today's appAdam Soltys8 days12-33/+60
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - feed tests reach the Feed from the bottom nav (the chat-home row is gone) and seed this wallet's last feed as Following (new wallets open on Popular, c89050e) plus the author's profile (readiness gate) - post-actions: its picture is made locally (it read another session's scratchpad), the post's own ⋯ (not the feed header's), a real tap on the DM picture (a tap beside a fitted picture is a tap on the post) - composer-media / video-compress: intercept every public media host (ditto is first now; the tests were uploading for real) - compose-preview: Preview is one toggle button (aria-pressed) - thread-reply: harness has a wallet (else visitor: Reply asks to sign in), registers <coinos-text>, holds the root's id-only query; atomic send tap - video-unmute: stubs what videoNode reaches outside its slice; preload none means the in-view clip is told to load - zap-deep-profile: zap button scrolled to mid-screen (the bottom nav covered it) Co-Authored-By: Claude Opus 5.5 <[email protected]>
| * | Emoji packs fetch again; a like paints before the author's relays are foundAdam Soltys8 days1-5/+5
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | Two fetchPack declarations shared messagesFeature's scope since the follow packs arrived (19ac1c4): the later one won, so adding an emoji pack from its chat link (and pulling the packs on a synced kind 10030) asked for a follow pack with undefined fields and always came back "bad pack". The emoji one is fetchEmojiPack now. reactTo awaited the author's relay list (up to 3.5 s for an author with none cached) before painting the reaction it promises "on screen before the relays answer"; the lookup now only gates the publish. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* / Profile cache: room for ~350 face thumbnails and 1500 rows now that it lives ↵Adam Soltys8 days1-2/+6
|/ | | | | | | | | | in IndexedDB The 320K thumbnail budget was sized for localStorage; on a phone that follows hundreds it kept ~34 faces and the rest churned (thumbnail made, evicted, original downloaded again). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Rebuildable caches move from localStorage to IndexedDB (cache-store.js)Adam Soltys8 days12-40/+467
| | | | | | | | | | | | | | | | | | | | localStorage is ~5M characters per site whatever the device, and a phone had filled it. Profiles, faceless list, reports, follow packs, profile pages, relay lists, the moderation baseline, community directory, link previews, video sizes/probes and search profiles (~3M on that phone) now live in IndexedDB, which shares the site's disk allowance (GBs). cacheStorage keeps localStorage's string API: reads from memory, coalesced write-behind, flushed on hide. Copies migrate on open and are removed once written. Boot waits for it (max 3s) beside the Ark store; caches read at construction re-merge on ready; an early write can't replace the stored copy. A copy an older build writes to localStorage later moves in on first ask. Wallet wipes reach it; private mode stays on localStorage. Read markers, drafts, follows, note threads and sync outboxes stay in localStorage on purpose (cross-tab consistency, early server-rendered seeding). Also asks navigator.storage.persist(). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* notif-faces-test: open Notifications from the bottom nav (it's no longer a ↵Adam Soltys8 days1-2/+8
| | | | | | row on the chat home) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Notifications: the face opens the sender's profile; faces of people you know ↵Adam Soltys8 days1-18/+28
| | | | | | | | | | | | | | | | | | stay cached; primal-hosted faces get thumbnails again - A notification's avatar now opens the actor's profile (the name and the rest of the row still open the note). - The profile cache held 150 rows evicted by fetch time, and a phone's feed churned all of them within twenty minutes, so a reload painted a punk and an npub for people you hear from daily. 300 rows now, and follows, DM peers and notification actors are evicted last (their thumbnails too). - corsFetch's "is the host reachable?" probe was answered from the HTTP cache, so any network blip blamed the host: a phone had ~100 hosts written off as no-CORS, primal, nostr.build and coinos.io among them, and those faces painted from multi-MB originals on every repaint. The probe now goes past the cache and the polluted list is reset (v5). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* DMs: file messages keep their key across reloads, tabs no longer erase each ↵Adam Soltys8 days1-24/+80
| | | | | | | | | | | | | | | other's cached messages, one-time re-open of the last two weeks of wraps The DM cache kept only text, so a kind-15 picture (an encrypted Blossom blob) came back after a reload as a bare link with no key. Every tab also rewrote the whole cache from its own memory, so a tab asleep since yesterday erased messages another tab had received, while the wrap log still marked them opened: those messages were never fetched again (a phone showed 2 of 4). Rows now carry kind 15's tags and merge by id with what's stored; the wrap log merges too. A one-time pass re-opens wraps from the last 14 days so damaged caches heal. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* White Noise groups reach every device of an accountAdam Soltys8 days3-17/+184
| | | | | | | | | | | | | | | An invitation adds all of a person's fresh KeyPackages (one per slot, at most ten) instead of one, and where our account is an admin a device that finds a sibling's KeyPackage not yet in a group adds it, so the Welcome reaches the other device through our own inbox. These are the same-account rules Marmot's multi-device direction marks as valid today; the device group and pairing it plans are not here. Verified against MDK (wn): a group with two coinos leaves of one npub plus a wn member, all three reading and writing (tools/marmot-multidevice-test.js). marmotClient takes an injectable store for tests. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Cordn group chats: MLS groups delivered through a coordinator (Amethyst 1.17 ↵Adam Soltys9 days9-27/+1139
| | | | | | | | | | | | | | | | | | | | interop) src/contextvm.js speaks ContextVM (kind 25910 inside ephemeral gift wraps) to a coordinator; src/cordn.js is the protocol (KeyPackages with hex-text identities, the 0xC04D metadata extension, exporter-keyed ChaCha20 sealing, unsigned nostr-shaped envelopes with the sender as MLS AAD, cordn1 group refs, a record engine like marmot.js); src/cordn-client.js mirrors marmot-client.js with the same interface, so the Messages group screens drive both — New group gains a White Noise / Cordn toggle. Verified against @cordn/cli (ts-mls) on the public coordinator both ways, from the engine (tools/cordn-interop-test.js) and from the real app (tools/cordn-ui-test.js). mls.js: the OpenMLS required_capabilities rule for GroupContextExtensions now applies only to groups that carry one. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* README rewritten for today's coinos v3; build switches are COINOS_* (HAL_* ↵Adam Soltys9 days25-501/+254
| | | | | | | still accepted); silent-payment leftovers removed Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* A quote inside a quote shows as a one-line preview (author + start of the ↵Adam Soltys9 days2-1/+24
| | | | | | | text) instead of a bare 'view note' link Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Feed: leaving via the bottom nav closes the composer (its words stay the ↵Adam Soltys9 days1-1/+8
| | | | | | | draft), so the Post button is back when you return Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Chat: a long attachment name truncates instead of scrolling the log sidewaysAdam Soltys9 days1-1/+1
| | | | | Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Images grid tiles are cut from the feed's own decode: scrolling All fills ↵Adam Soltys10 days1-16/+22
| | | | | | | the tile cache (3/30 → 22/30 tiles instant on #art) Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Article cards: a dead cover falls back to the body's first picture, else no ↵Adam Soltys10 days1-2/+14
| | | | | | | cover (no grey box) Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Profiles show their articles among the notes as cards (newest copy per ↵Adam Soltys10 days1-7/+26
| | | | | | | address), opened in full; the page cache keeps them as articles Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Audio links (mp3/m4a/ogg/opus/wav/flac/aac) render as a player, like AmethystAdam Soltys10 days2-0/+31
| | | | | Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Ark: say boarding is paused when the ASP asks an unmeetable minimum ↵Adam Soltys10 days2-0/+6
| | | | | | | (ark.coinos.io pauses boards pending an upstream captaind double-spend fix) Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Feed Articles view: long-form posts (NIP-23) from the feed's ↵Adam Soltys10 days4-22/+133
| | | | | | | people/topics/relays as cards, own cursor + index; Popular keeps articles two others engaged with Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* nostr:naddr renders: article cards (cover, title, summary) that open to read ↵Adam Soltys10 days3-2/+115
| | | | | | | with headings, list/pack cards that open as feeds Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Custom feeds sync across devices: their own sync slot, newest edit wins, ↵Adam Soltys10 days2-5/+68
| | | | | | | deletions remembered Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Communities wear their icons: Vector's encrypted logo from the metadata, the ↵Adam Soltys10 days1-1/+39
| | | | | | | coinos logo for coinos Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01YRC6aKhwAud231ot9FPmhi
* Show cached communities immediately and simplify discoveryAdam Soltys10 days3-28/+323
|
* Show popular Concord communities on the Messages screenAdam Soltys10 days2-15/+33
|