fix(ark): warn that a Bark address is not a passive receive method - #205
Conversation
A capsule arriving at a Bark address is short-lived, and the expiry reminders are local OS alarms scheduled only by the foreground sync loop and the arkoor receive hook. Nothing schedules them while the app is closed, so a payment made to a shared address while the app is shut has no reminder attached to it at all. Adds the caveat to the Bark address option, using the same amber treatment already carried by the on-chain minimum note on this screen. No number is stated. The received-capsule TTL is set by the server and there is no live value to read at address-display time, unlike the on-chain minimum, so a specific figure would be guesswork.
… see The caveat was added to ArkReceiveScreen, which is registered in no navigator and unreachable. That screen was superseded when Ark receive moved inline into the receive bottom sheet, as its own comments record: the three options it exposed map onto a tabbed sub-menu so the user never leaves the sheet. So the warning shipped to nobody. Moves it to the Bark tab in ReceivedListNew, under the address and QR, and restores ArkReceiveScreen to its state on main rather than leaving dead copy implying otherwise. Uses the same amber treatment as the dust tip already at the top of that sheet.
Correction: this was shipping to a screen nobody can reachThe caveat was originally added to So the warning shipped to nobody, and the reporter could not verify it because it was not on screen. Now added to the Bark tab in Branch also merged up to current |
It sat under the QR as a separate block. It now takes its own line in the same amber block as the dust tip above the tabs, so the receive advice reads as one thing rather than two warnings in different places. Gated to the Bark tab, because "this address" only means anything while the Bark address is the one on screen. The dust tip above stays across all three tabs, since it applies to Lightning receives too. Wording supplied by the product owner.
The Bark-address caveat and the generic dust tip ended up stacked on the Bark tab, both amber, both mentioning 700 sats. Drops the generic tip and keeps the Bark-specific line, which covers the same threshold plus the part that was missing: the app has to be open when the payment arrives. Wording supplied by the product owner. Note: the generic tip previously showed on the Lightning and Bitcoin tabs too, and its replacement is gated to the Bark tab, so those two tabs now carry no receive advice.
What
Adds a caveat to the Bark address option on the receive screen: it is not a passive, leave-it-and-forget-it way to be paid.
Uses the same amber treatment already on this screen for the on-chain minimum, so no new pattern.
Why
A capsule arriving at a Bark address is short-lived, and the expiry reminders are local OS alarms. Every call site that schedules them is in the foreground:
So the notification that would tell the user to open the app can only be created by opening the app. If someone is paid at a shared Bark address while the app is closed, no alarm was ever scheduled and nothing in the system can reach them.
Nothing external can cover it either: the push server watches on-chain addresses and Lightning, while an arkoor VTXO is off-chain and known only to the ASP.
The other two receive methods are materially safer and are left alone:
On the wording
Draft, expected to be rewritten.
Deliberately no number. The received-capsule TTL is set by the server, the spec only has it as "roughly 3 days" from a single measurement, and unlike
minBoardSatsthere is no live value to read at address-display time because the VTXO does not exist yet. A wrong-but-specific figure would be worse than a vague-but-true one. If a number is wanted, the received-capsule TTL should be measured properly first.Verification
tsc: 405 errors, zero differing lines against a baseline regenerated from the unmodified treenpx jest -b -i tests/unit --rootDir .: 36 suites, 251 passed, 1 skippedCopy-only, no logic touched. Not yet verified on device: a mainnet unilateral-exit test is running and the device build serves JS from a tree holding uncommitted endpoint overrides for it.