Scanner UX States

Date: 2026-04-12

Purpose: - define what a scanner should tell the user - avoid overloading all non-green outcomes into one generic warning

Design Goal

Users need to distinguish between: - no trust signal - trusted issuer but current problem - actively blocked destination

State 1: Unverified

Meaning: - no trusted issuer enrollment - no recognized trust signal

Suggested UX: - neutral or caution state - show normalized destination - do not imply malware unless there is evidence

State 2: Signed, Unaccepted Issuer

Meaning: - signature present and valid - issuer not accepted by the active trust policy

Note: - this state was previously named signed, unknown issuer; the wire label signed_unknown_issuer is retained for compatibility

Suggested UX: - caution state - explain that the QR was signed but not by a recognized issuer

State 3: Verified Issuer

Meaning: - issuer enrolled - signature valid - destination bound correctly - no current runtime safety issue

Suggested UX: - positive trust badge - issuer tier label - destination summary

State 4: Verified Issuer, Destination Changed

Meaning: - issuer is trusted - current destination does not match issuer-approved state

Suggested UX: - strong warning - explain that this QR no longer points where the issuer approved

State 5: Verified Issuer, Destination Risky

Meaning: - issuer and destination binding are valid - runtime safety engine has current risk concerns

Suggested UX: - caution or block depending on severity - explain that the issuer is known, but the site appears risky now

State 6: Blocked

Meaning: - revoked issuer - malformed signed state - replay/policy failure in a controlled environment - known malicious destination

Suggested UX: - red block state - strong instruction not to proceed

UX Principle

Do not tell users that all unsigned QR codes are malicious.

Tell them: - whether trust is present - whether trust is absent - whether an active failure was detected

That is much more usable.