docs(identity): gate 6f on evidence instead of a week of silence - #407
Merged
Conversation
6f said "not before one full week of 6e with nothing in the alert channel". Replaced, because that is a weaker gate than it reads as. A week crosses no boundary that matters. The proxy provider's access token is hours=1 and its refresh token is days=30; Authelia's session is one week idle, one month absolute. So a soak exercises the one-hour renewal and nothing else, and the next boundary is thirty days, which a week misses anyway. Seven days was a feeling, not a threshold. Worse, the second half of the criterion measured nothing at all. lldap-sync-members.py raised every alert through urllib, Cloudflare answers that user agent with a 403, and the run carried on: every alert went nowhere for a month, the Authelia-fallback alert included. That is the exact alert this gate was built on, so its silence was evidence the alerting was broken, not that the migration was healthy (found in #401). The general rule is now written down next to it: never gate a destructive step on the absence of a signal without first proving the signal can arrive. What the week stood in for is coverage of the paths a curl does not reach, so the replacement names those directly: a test account through onboarding end to end, the negative cases that fail open and quietly (non-member refused, member 403 on /beheer, operator 200), Subsonic and the web UI separately because they take different routes, one session held past the hour, the fallback alert fired ON PURPOSE so the channel is tested rather than assumed, /dev/shm growth measured rather than waited for, and real member traffic observed in Loki. The operator has an admin account and reusable test accounts to generate all but the last. The last one is the honest exception and is marked as such: members use devices nobody can simulate here, so that item needs some calendar time. The check is still "real clients have been served", not "a week passed". Also records that none of this is a reason to hurry: 6f frees one container, one SMTP token and some tidiness, unblocks nothing scheduled, and its rollback costs an hour with members locked out. Compress the criterion, not the evidence.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Documentation only. 6f said "not before one full week of 6e with nothing in the alert channel". That is a weaker gate than it reads as, and it is replaced with a list of things to actually observe.
Why the week was weak
It crosses no boundary that matters. The numbers, read off the code rather than assumed:
hours=1days=30So a soak exercises the one-hour renewal and nothing else. The next boundary is thirty days, which a week would miss anyway. Seven days was a feeling, not a threshold.
The second half measured nothing at all.
lldap-sync-members.pyraised every alert through urllib, Cloudflare answers that user agent with a403, and the run carried on. Every alert went nowhere for a month, including the Authelia-fallback alert this gate was built on (found and fixed in #401). Its silence was evidence that the alerting was broken, not that the migration was healthy.The general rule now sits next to it: never gate a destructive step on the absence of a signal without first proving the signal can arrive.
What replaces it
What the week really stood in for is coverage of the paths a
curldoes not reach, so the doc names those directly:welcome_sent_via authentik, no fallback).media-usersaccount refused on apex and music; a member 403 on/beheer/; the operator 200 there./restskips the portal entirely and one proves nothing about the other.df /dev/shminauthentik-servertwice, a day apart: the outpost stores sessions there and a full one produces HTTP 400s (upstream #25248). Measure the growth, do not wait for the symptom.The operator has an admin account and reusable test accounts, which is what makes 1 to 6 generatable on demand instead of waited for.
Item 7 is the honest exception and is marked as such: members use devices nobody can simulate here (Symfonium, Feishin, TV apps, iOS), so it needs some calendar time. The check is still "real clients have been served", not "a week has passed".
Not a licence to hurry
Also recorded: retiring Authelia frees one container, one SMTP token and some tidiness, and unblocks nothing that is scheduled, while its rollback costs an hour with members locked out of everything. Compress the criterion, not the evidence.
6f-pre remains a hard prerequisite regardless, and no amount of soak time addresses it.
Gates
tests/run.sh39 suites / 0 failures;check-doc-links.shall links resolve; pre-commit incl.ansible-lintand gitleaks green.