From cbc3a5907c55c20c248fa80fa14528cb483688ad Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sat, 1 Aug 2026 18:08:58 -0700 Subject: Split device sync into per-domain slots with bounded, dirty-only publishes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One monolithic snapshot per device outgrew a vanilla relay's 64KB event cap the moment real payment traffic arrived, and sync silently died. Snapshots now fragment into per-domain replaceable events (core wallet, ark, nwc — an extension claims a domain by naming it), published under a new ':x:' d-tag marker that pre-split clients don't match, so they can never mistake a fragment for a full snapshot. Only domains whose content changed republish, a refused publish retries on the next save instead of being marked done, and readers apply full-snapshot semantics only to core-carrying events. The ark projection also caps its history: spent stubs at 200, done actions at 50 — the event size is bounded for life, no special relay rules required. Co-Authored-By: Claude Fable 5 --- src/features/nwc.js | 1 + 1 file changed, 1 insertion(+) (limited to 'src/features/nwc.js') diff --git a/src/features/nwc.js b/src/features/nwc.js index c2407ee..adafb06 100644 --- a/src/features/nwc.js +++ b/src/features/nwc.js @@ -155,6 +155,7 @@ export function nwcFeature(ctx) { // sync is an optional feature: a minimal build has no cache extensions if (wallet.registerCacheExtension) wallet.registerCacheExtension({ + domain: 'nwc', // published as its own sync slot — see splitSnapshotDomains mergeAlways: true, // the merge is commutative, so older snapshots are fine save: () => { const list = (load().conns || []); -- cgit v1.2.3