Standard 06 · User-safe language

UI Copy

Plain language for users. No raw backend enums. No technical leakage. Errors land safely; system internals stay internal.

Authority

Binding markdown

Binding source: 01-STANDARDS/UI-Copy-Standard.md.

The four rules

How user-facing copy is written

01

Plain language only

  • No "extrinsic", "GraphQL", "OCW", "indexer"
  • No "worker queue", "vault storage" in user UI
  • Words a non-engineer can act on
02

userFacingReason only

  • Failed terminals show only the safe string
  • Raw rejectionReason is admin / ops only
  • Closed allowed-strings table
  • Fallback when missing: "This deposit could not be verified."
03

No raw enums

  • DepositNotPending, TX_REUSED never reach the user
  • Mapper at the wrapper boundary
  • Tests assert raw enum names absent from user copy
04

Action-oriented

  • Tell the user what to do next
  • Avoid passive "an error occurred"
  • Recoverable errors get a clear next step
Allowed strings

Closed user-facing reason set

The Failed terminal and mismatch surfaces draw from a closed list. New strings require a spec amendment + tests.

Internal reason User-facing string Surface
TX_NOT_FOUNDTransaction not found on chainDeposit failed
AMOUNT_MISMATCHTransaction did not match your depositDeposit failed
TX_REUSEDThis transaction has already been usedDeposit failed
(any, fallback)This deposit could not be verified.Deposit failed
DepositNotFoundDeposit not found. Please refresh and try again.Tx-hash submit error
NoPermissionYou do not have permission to submit a hash for this deposit.Tx-hash submit error
DepositNotPendingThis deposit is already confirmed.Tx-hash submit success
TxHashAlreadySubmittedA transaction hash has already been submitted for this deposit.Tx-hash submit error
Verification

How we keep it safe