docs: ADR 0038 — identity field ownership and the single edit surface #63
Inga granskare
Etiketter
Inga etiketter
area/backups
area/ci
area/control-panel
area/identity
area/infra
area/observability
area/payments
area/security
area/storage
area/web
blocked
needs-info
needs-triage
ready-for-implementation
type
bug
type
chore
type
docs
type
epic
type
feature
type
task
wontfix
Ingen milstolpe
Inget projekt
Inga tilldelade
1 deltagare
Notiser
Förfallodatum
Inget förfallodatum satt.
Beroenden
Inga beroenden satta
Referens
bitborg/bitborg-docs!63
Läser in…
Hänvisa till i nytt ärende
Ingen beskrivning angiven.
Ta bort grenen "docs/adr-0038-identity-ownership"
Borttagning av en gren är permanent. Även om den borttagna grenen kan fortsätta existera en kort tid innan den faktiskt tas bort, kan det INTE ångras i de flesta fall. Vill du fortsätta?
Records the decision behind the identity work: one place to edit each field, and
no field visible in two systems with different values.
Why
A user faces three account surfaces — Gitborg Auth, the portal, and the Git
application — and nothing tells them which is authoritative. That is an
integration gap rather than a presentation problem: Forgejo reads OIDC claims
once, when the account is created on first sign-in, and never again. Its copies
of the full name and email are therefore a local fork with no merge path back,
in either direction.
Today that means nobody has a meaningful display name anywhere, and the email
address is editable only in the one place where editing it has no effect.
What it decides
Gitborg Auth stays the owner of identity data. The portal becomes the single
place it is edited — because a verified email change needs to send mail, and
the identity provider cannot. Splitting it, with the name in one place and the
email in another, would reproduce the problem being solved.
The systems that do not own a field conceal it, using the styling hook each
already ships. Concealment and enforcement are deliberately separate mechanisms
and both are required: concealment alone leaves the API open, and enforcement
alone means users edit a field and watch it silently revert.
Username becomes fixed at sign-up. It is the owner segment of every repository
URL an account holds, so renaming is an operator action.
Worth reviewing closely
A partial read must not be able to blank every user's identity.
fact that concealment can break silently on an upstream upgrade.
reasonable thing to disagree with me about.
Merge order
This ADR describes work in three other repositories. The projection should land
and run before any field is concealed, so that values are already correct when
the UI stops offering them.