Skip to content

fix(ark): warn that a Bark address is not a passive receive method - #205

Merged
Bamskki merged 5 commits into
mainfrom
fix/ark-address-not-passive
Aug 23, 2026
Merged

fix(ark): warn that a Bark address is not a passive receive method#205
Bamskki merged 5 commits into
mainfrom
fix/ark-address-not-passive

Conversation

@CypherBoxLLC

Copy link
Copy Markdown
Owner

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:

useArkSync.ts:985                     (sync loop)
useArkoorReceivePrompt.ts:183/416/443 (arkoor receive hook)

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:

  • Lightning: the invoice is generated in-app and paid seconds later, so the user is almost always foregrounded and the receive hook catches it.
  • On-chain: board outputs carry roughly 28 days, so there is ample runway to open the app for unrelated reasons, and users are already advised not to leave the app unopened for long.

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 minBoardSats there 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 tree
  • npx jest -b -i tests/unit --rootDir .: 36 suites, 251 passed, 1 skipped

Copy-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.

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.
@CypherBoxLLC

Copy link
Copy Markdown
Owner Author

Correction: this was shipping to a screen nobody can reach

The caveat was originally added to ArkReceiveScreen. That screen is registered in no navigator and is unreachable. Its own comments record why: Ark receive moved inline into the receive bottom sheet, because the three options it exposed map onto a tabbed sub-menu so the user never leaves the sheet.

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 ReceivedListNew, under the address and QR, using the same amber treatment as the dust tip already at the top of that sheet. ArkReceiveScreen is restored to its state on main rather than left carrying dead copy that implies otherwise.

Branch also merged up to current main. Verification re-run: 52 suites, 546 passed, tsc 400.

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.
@Bamskki
Bamskki merged commit 6fd7c7a into main Aug 23, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants