fix(access): instrument Complete, and say when a card can't sell #100

Merged
padreug merged 1 commit from fix/card-complete-blocked-feedback into dev 2026-09-22 16:30:58 +00:00
Owner

Pressing Complete on a session that fails leaves nothing in the journal: the decline path has no logging, so a failed sell is indistinguishable from a button that never fired. That gap is what made the 2026-09-22 settlement race take an afternoon to pin down instead of a minute. completeWithCard now logs outcome, duration and reason, and the entry line says whether selling is available at all.

Two real defects alongside it. A session whose withdraw step the card server withheld (daily limit spent, card disabled) still rendered a Complete Sale button that could only ever fail; it now shows the server's reason instead. And the decline path advised "tap your card to try again" even for refusals a re-tap cannot lift, so "blocked" is now its own outcome: nothing was consumed, the session stays loaded, and no re-tap is suggested.

Rebased onto the #99 merge. Typecheck clean; 116 tests; full Electron build green.

Pressing Complete on a session that fails leaves nothing in the journal: the decline path has no logging, so a failed sell is indistinguishable from a button that never fired. That gap is what made the 2026-09-22 settlement race take an afternoon to pin down instead of a minute. completeWithCard now logs outcome, duration and reason, and the entry line says whether selling is available at all. Two real defects alongside it. A session whose withdraw step the card server withheld (daily limit spent, card disabled) still rendered a Complete Sale button that could only ever fail; it now shows the server's reason instead. And the decline path advised "tap your card to try again" even for refusals a re-tap cannot lift, so "blocked" is now its own outcome: nothing was consumed, the session stays loaded, and no re-tap is suggested. Rebased onto the #99 merge. Typecheck clean; 116 tests; full Electron build green.
Pressing Complete on a session that fails leaves nothing in the journal:
the decline path has no logging, so a failed sell is indistinguishable
from a button that never fired. Add the telemetry that was missing —
completeWithCard logs outcome, duration and reason, and the entry line
now says whether selling is available at all.

Two real defects alongside it. A session whose withdraw step the card
server withheld (daily limit spent, card disabled) still rendered a
Complete Sale button that could only ever fail; it now shows the
server's reason instead. And the decline path advised 'tap your card to
try again' even for refusals a re-tap cannot lift, so 'blocked' is now
its own outcome: nothing was consumed, the session stays loaded, and no
re-tap is suggested.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
padreug deleted branch fix/card-complete-blocked-feedback 2026-09-22 16:30:58 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
aiolabs/bitspire!100
No description provided.