Skip to content

Add an admin screen for identity check limits - #1951

Open
efstajas wants to merge 3 commits into
mainfrom
feat/admin-reset-liveness-checkpoint
Open

Add an admin screen for identity check limits#1951
efstajas wants to merge 3 commits into
mainfrom
feat/admin-reset-liveness-checkpoint

Conversation

@efstajas

@efstajas efstajas commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Users who can't complete the identity check are told to contact support. This adds the screen support uses to act on that.

Look a user up by GitHub username, review what the API reports about their checks, and reset the limit with a required reason. The confirmation step spells out that the reset is recorded against the admin's account.

The API owns all of the rules and the numbers — this screen renders what it returns and doesn't reimplement or hardcode any of it. The client parses only the fields the screen actually displays.

Requires drips-network/wave#762. Until that ships and the permission is granted, the screen is not reachable.

Users who can't complete the identity check are told to contact support.
This adds the screen support uses to act on that: look a user up by GitHub
username, review what the API reports about their checks, and reset the
limit with a required reason.

The API owns all of the rules and the numbers — this screen renders what it
returns and doesn't reimplement any of it. The client parses only the
fields the screen actually displays.

Gated on the manageLivenessCheckpoints permission, like the other admin
tools.
A pass is bound to the device that earned it, so "Currently passed: Yes"
was misleading in exactly the case the screen exists for: a user who
passed on a phone they no longer have is still blocked, and support would
read that row as proof they aren't.

Renames the field to match the API (`hasApprovalOnSomeDevice`), labels it
"Passed on a device", and shows the device the pass is bound to next to
it. Recent attempts now carry their device too, so a support agent can
see at a glance that the recent failures came from a different device
than the pass.
The badge was derived from the failed-attempt allowance alone, so a user who
had hit the separate ceiling on how many checks can be started in a short
window read as "Not locked" — on the one screen whose job is to say why they
are stuck. The API had been reporting it as `starts.exhausted` all along and
nothing rendered it.

It gets its own badge rather than folding into "Locked out" because it lifts by
itself in hours, and a note says so, so support can tell the user to wait
instead of spending a reset. A reset does clear it too, for when they can't.
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.

1 participant