aboutsummaryrefslogtreecommitdiffstats
path: root/src/features
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-08-18 11:49:56 -0700
committerAdam Soltys <[email protected]>2026-08-18 11:49:56 -0700
commitc553ea40de4aecd9453272599d450310d6e306b0 (patch)
tree5c1b4f3c919826333c4f836b632fa47dc48b650d /src/features
parente1d4f0e0dcf8e13a79ed94b6c696805e8568318d (diff)
downloadcoinosv3-c553ea40de4aecd9453272599d450310d6e306b0.tar.gz
coinosv3-c553ea40de4aecd9453272599d450310d6e306b0.zip
Money stops arriving without a story: the mailbox checkpoint stays local reading progress (a merged one skipped every unprocessed message), vtxos that beat their message here get a backfilled receive, and the commit stamp takes its own footer line
Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
Diffstat (limited to 'src/features')
-rw-r--r--src/features/ark.js6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/features/ark.js b/src/features/ark.js
index bff84a9..66e4e44 100644
--- a/src/features/ark.js
+++ b/src/features/ark.js
@@ -183,7 +183,11 @@ export function mergeArkStates(a, b) {
else { lg.claimed = lg.claimed || rg.claimed; lg.revoked = lg.revoked || rg.revoked; }
}
out.gifts = [...gifts.values()];
- out.mailboxCheckpoint = Math.max(a.mailboxCheckpoint || 0, b.mailboxCheckpoint || 0);
+ // The checkpoint is READING PROGRESS, not state: adopting a remote one
+ // skips every message this device never processed — balance appears (the
+ // vtxo unions in) but its receive movement and celebration never happen.
+ // Keep the local checkpoint; re-read messages dedupe harmlessly.
+ out.mailboxCheckpoint = a.mailboxCheckpoint || 0;
out.nextKeyIndex = Math.max(a.nextKeyIndex || 1, b.nextKeyIndex || 1);
out.nextLnRecvIndex = Math.max(a.nextLnRecvIndex || 0, b.nextLnRecvIndex || 0);
out.receiveAckTs = Math.max(a.receiveAckTs || 0, b.receiveAckTs || 0);