docs(kanidm): record that provision scope maps are additive, not authoritative #279
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-infra!279
Läser in…
Hänvisa till i nytt ärende
Ingen beskrivning angiven.
Ta bort grenen "docs/275-scope-maps-additive"
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?
Follow-up to #278, which shipped half-fixed.
What happened
The #278 apply removed the localhost origin from the production
bitborg-webclient (verified live — that half worked), but did not fix the dev client's visibility. Live state after the apply:The declared
forgejo_adminsmapping was added;forgejo_userswas left in place. So "bitborg portal (dev)" is still listed for every user — the exact symptom the change set out to fix.Why
kanidm-provision applies each declared scope map but has no removal logic for undeclared ones. There is no scope-map equivalent of
removeOrphanedClaimMaps.The trap is the asymmetry with origins:
originUrlscopeMapsI read this in upstream when writing #278 — the note said "no explicit removal logic visible" — and treated it as an unimportant gap rather than a blocker, then assumed symmetry with origins. That assumption is what shipped a half-fix with a PR body claiming a full one.
Consequence worth internalising
The failure mode is silent: the converge reports success, declared and live state disagree, and nothing surfaces the difference. Anyone editing
kanidm_oauth2_clientsshould know that removing a group fromscope_mapsdoes nothing to the server.Removal is manual until a carried patch adds it (the
entryManagedByprecedent):Follow-up options for #275
Option 2 is cheaper and composes with the gate already merged in #277.
0b991e66d3328901e55f