feat(app): adding SimpleLogin to an account (ADR 0020, D21, D23)
All checks were successful
CI / check (push) Successful in 32m34s
CI / deploy (push) Has been skipped

halkyon_app reads where the device's person stands with SimpleLogin
(nothing to show, linked, or missing) and shows it in SimpleLoginSection,
which each app places above the password part: Add SimpleLogin, once
added one more way in. GitHub is added to nobody where SimpleLogin is
offered, and Learn's Profile offers an anonymous person SimpleLogin
alone there (D23).

No cut-off day, reminder or banner (D24): with the developer the only
person on learn.halkyon.eu, the cut-off is the operator taking GitHub's
OAuth app out of the deploy's settings once that account has SimpleLogin.
ADR 0020 records it and drops step 5.

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-24 11:56:26 +02:00
commit fad12b4411
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -1,7 +1,8 @@
# ADR 0020: Signing in with SimpleLogin only
- **Status:** decided 23 Oct 2026, by the developer (D1–D20 below), the *Proposal*
with it (D15), as D18 to D20 change it.
- **Status:** decided 23 Oct 2026, by the developer (D1–D20 below; D21–D24 on 24
Oct), the *Proposal* with it (D15), as D18 to D20 change it and D24 drops the
cut-off's machinery (D8's code, D10, D22, 10's `ANONYMOUS_SESSIONS_END`, 11, step 5).
- **Built (23 Oct 2026), step 1:** the forwarding page (3),
`/simplelogin-callback` on the register's web server (halkyon_base's
`addSimpleLoginCallbackRoute`, Caddy forwarding the path), ahead of the sign-in, so
@ -63,6 +64,14 @@
handle aren't counted. The handle suggested at sign-up is not counted: it tells at
most that the name SimpleLogin shared is someone's handle already, once a sign-in.
Step 3's deviations accepted by the developer (23 Oct, night).
- **Built (24 Oct 2026), step 4 so far:** halkyon_app's sign-in with SimpleLogin (the
start screen's Continue with SimpleLogin and its sheet), then adding it to an account
(D21, D23): the apps read where their person stands (`SimpleLoginStandingCubit`:
nothing to show, linked, or missing) and show it in halkyon_app's
`SimpleLoginSection`, which reads it once where a `SimpleLoginStandingScope` is above
it, as Learn's Profile has it for its first line and GitHub's button too. A cut-off
day in the basics (`SIMPLELOGIN_REQUIRED_FROM`) with D22's banner was built and taken
out again before any release (D24).
- **Builds on:** ADR 0010 (email sign-in), ADR 0011 (profile pages), ADR 0016 (the
register), ADR 0017 (a password, TOTP and the keys).
- **Changes:** ADR 0017's way in on an instance that offers SimpleLogin (its keys, their
@ -192,6 +201,39 @@ against app.simplelogin.io on 23 Oct:
password) and a SimpleLogin sign-in of the last ten minutes, the two factors of ADR
0017's third reading with SimpleLogin's and Proton's own second factor in TOTP's
place.
- **D21 Adding SimpleLogin is a shared part of the account section** (24 Oct,
recommended, over a sheet of its own or each app's own screen): halkyon_app's
SimpleLogin part, which each app places above "Password and authenticator" (Learn in
its Profile tab's account card, below "Ways to sign in"; Todo in its account sheet):
a heading and Add SimpleLogin ("Sign in with SimpleLogin, or with your Proton
account."), which opens the sign-in sheet to add it; once added, one more way in, a
row without heading lined up with the others, and "SimpleLogin added." Learn's ways
in (GitHub, the address) stay listed. (Its reminder in red went with D24.)
- **D22 The reminder is a banner at the top of each app's home** (24 Oct, recommended,
over the section's red line alone or a notice once a week), in the place and colours
of the banner saying the app is too old for the instance, from the release on, not
dismissible, until SimpleLogin is added: both days and Add SimpleLogin. Dropped by
D24 the same day.
- **D23 Anonymous people keep their account with SimpleLogin alone** (24 Oct,
recommended, over offering GitHub beside it until the cut-off): where the instance
offers SimpleLogin, Learn's Profile offers an anonymous person Add SimpleLogin ("Add
SimpleLogin to keep it") and no longer "Sign in with GitHub", and GitHub is added to
nobody there (`GitHubOffer.linking`); the start screen still signs in a GitHub
account someone has, until GitHub ends.
- **D24 No cut-off machinery while the developer is learn.halkyon.eu's only person**
(24 Oct, the developer: "There is no other user than me, currently. So, is that really
necessary?", then "Please continue" to dropping it): the cut-off (D8) becomes
configuration. The developer adds SimpleLogin to their account (D21), then the
operator takes GitHub's OAuth app out of `deploy/.env` (`GITHUB_CLIENT_ID`,
`GITHUB_CLIENT_SECRET`), `SIGN_IN_WAYS=simplelogin` keeping passwords and codes off.
So no cut-off day, no reminder (11, D22, the section's red line), no ending of
sessions and no deletion 30 days later (D10), no step 5, and no
`ANONYMOUS_SESSIONS_END` (10), as no other instance has anonymous people to move.
Built and unreleased, the day and the banner went again at once (over keeping them
idle): nothing has read the basics' fields, and an instance with people to move can
take them back from git (`f60d52e7` on `feat/simplelogin-sign-in` before it was
amended). Anonymous accounts still go (D4) and handles are still required (D5): that
is where the design ends, not a migration.
- **Also (23 Oct):** the developer's own account moves by adding SimpleLogin to it while
signed in with GitHub; the instance's SimpleLogin app goes up for approval once
halkyon.app/learn exists, before learn.halkyon.eu switches.