feat(app): the recovery phrase's words typed back are suggested from BIP-39's list (ADR 0017)

Each of the three fields suggests the words of BIP-39's whole English
list beginning with what is typed, never the phrase's own, and refuses a
word not on it as its field is left, so that a typo is caught before the
words are compared.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-29 22:34:02 +01:00
commit acb291afcb
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -712,6 +712,21 @@ screenshots, but not out of ScreenCaptureKit's captures on macOS 15 and later; o
covered in the app switcher's picture, screenshots and recordings not held back; on
Linux not at all.
## The words typed back, suggested from the list (29 Oct 2026, the developer's)
Each of the three fields the recovery phrase's words are typed back into suggests the
words of BIP-39's English list that begin with what is typed (at most five, from the
first letter; none once a whole word is typed that no longer one begins with), and
takes no word that isn't on the list: as its field is left, it says so and keeps the
focus there, and the words aren't handed on until every field holds one of the list's.
A typo is so caught before the words are compared, and told apart from a wrong word.
The suggestions come from the whole list of 2,048, never the phrase's 24, which would
tell which words it holds; the keyboard still learns and suggests nothing.
`isPhraseWord` and `phraseWordsBeginning` (halkyon_app's `phrase_check.dart`) decide,
`PhraseCheckFields` shows them, on sign-up, on a new phrase and on SimpleLogin's
sign-up alike.
## Consequences
- People keep a password, an authenticator app and a recovery phrase: more to keep than a