Commit c80045d
fix(plugin-auth): name a remedy that works in the no-sign-in boot report
The `no_sign_in_account_at_boot` report fires on the deployment nobody can
sign in to: human `sys_user` rows, zero `sys_account` rows. It ended with two
remedies, and measured on the exact population it fires on, neither did what
its sentence said.
"Open the audience posture so an existing person can register their own login"
produced no login: every posture other than `invite_only` forces
`requireEmailVerification` on, so a login registered that way is refused
`EMAIL_NOT_VERIFIED` at first sign-in, and a locked-out self-hosted install is
usually the shape with no mail transport wired.
"Write a `sys_account` credential row directly against the store" was worse
than useless. The `password` column carries a secret in the platform's own
hash format, so a plaintext one authenticates nothing — and
`probeSignInAccountsPresence` asks only whether ANY `sys_account` row exists,
so writing one turns this very report off. The operator's first attempt at the
named remedy turned the loud dead end back into the silent one the report was
written to end.
The line now names the path measured to work: one pending `sys_invitation` row
written directly against the store, then an ordinary sign-up. The invitation
carve-out admits that one creation under every posture, so no door is widened
and no mail transport is needed. The other two are still named, as the two
things that look like remedies and are not.
Message text only — no admission semantics move, exactly as the diagnostic's
own card scoped itself. The probe is untouched; tightening it would move that
card's diagnostic semantics and is deliberately not done here.
Each clause is pinned against the behaviour it describes rather than string-
matched: the invitation carve-out is driven across the whole `AUDIENCE_POSTURES`
vocabulary with an un-invited control, the self-silencing claim is driven
through the real probe with a hand-written plaintext credential row, and the
forced-verification claim is read off `getPublicConfig()`'s wiring mirror with
an `invite_only` control. Every new pin was mutation-checked.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XpTx2tbq3pZRYAdoGt6E6Y1 parent e2b0038 commit c80045d
1 file changed
Lines changed: 14 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
0 commit comments