From d991ec192c5b6b00e1ce75aa5717fd85390aa39e Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 2 Sep 2026 09:19:43 -0700 Subject: The paying spinner narrates its retries: a Lightning pay that fails its route and re-attempts with a bumped fee budget now says so ('Route failed — retrying with a bigger fee budget (2/3)') instead of three-plus minutes of silent 'Paying invoice…' — a tester paying an unreachable node watched that spinner stonewall through every auto-retry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01MrkLsNScXe9b6BviUSdmMr --- src/features/ark.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/features') diff --git a/src/features/ark.js b/src/features/ark.js index 314f251..97f730a 100644 --- a/src/features/ark.js +++ b/src/features/ark.js @@ -833,6 +833,8 @@ export function arkFeature(ctx) { } else if (ui.arkLnPay) { if (tries < 2 && lnRetryable(a)) { tries += 1; + p.retrying = tries; // the spinner narrates instead of stonewalling + render(); attempt((a.routingFeeSat ?? 0) + 1).catch((e) => { ui.arkLnPay.status = 'ready'; ui.sendError = e.message; render(); }); @@ -925,7 +927,9 @@ export function arkFeature(ctx) { ui.sendError ? h('div', { class: 'notice err' }, ui.sendError) : null, p.status === 'paying' ? h('div', { class: 'card row gap6', style: 'align-items:center' }, - h('span', { class: 'spinner sm' }), h('span', { class: 'small muted' }, t('arkLnPaying'))) + h('span', { class: 'spinner sm' }), + h('span', { class: 'small muted' }, + p.retrying ? t('arkLnRetrying', { n: p.retrying + 1, of: 3 }) : t('arkLnPaying'))) : h('button', { class: 'btn-primary btn-block', disabled: !!ui.busy || p.status !== 'ready', onClick: doArkLnPay }, ui.busy ? h('span', { class: 'spinner' }) : t('lnPayConfirm')), p.status !== 'paying' -- cgit v1.2.3