Skip to content

A deployment with human rows and zero sys_account rows boots silently into an unrecoverable state — say so loudly at kernel:ready #14353

Description

@huangyiirene

Filed by the triage seat (session session_019kDRpB7D2XzVzkaLp57T5D, R+90) as the half of #14349 that needs no ruling. #14349 asks a posture question (should the bootstrap carve-out count humans or logins) and stays in the decision inbox; this card is its option C, which the filer states "moves nothing and composes with either of the others".

The measured state (from #14349, on a real ObjectQL over better-sqlite3)

13 seeded sys_user rows, zero sys_account rows, default audience posture:

  • api.signUpEmail(...)SELF_REGISTRATION_CLOSED (isBootstrapCreation() counts 13 humans, so the carve-out does not fire);
  • nobody can sign in — there is no sys_account row at all;
  • self-registration is refused by the default invite_only posture;
  • no administrator exists to issue an invitation.

⇒ Outside development (where the dev-admin seed is hard-gated off by NODE_ENV) the deployment cannot be recovered from inside, and its only symptom is a 401 on credentials nobody has.

What this card asks for, and what it does not

Asks: at kernel:ready, when human sys_user rows exist and no sys_account row does, report it at error level, naming the consequence ("no one can sign in and self-registration is closed — this deployment cannot be recovered from inside") and the remedy (provision an account out of band, or open the audience posture). Route & surface ownership §3: absence must be loud.

Does not ask for any change to admission semantics, to isBootstrapCreation's population, or to bootstrap-status — those are #14349's question and are ruled by the maintainer, not here. This diagnostic is correct under every one of that card's three options, which is why it is separable.

Grade

pm:queue · priority:p2 · domain:services (packages/plugins/plugin-auth) · type Bug. p2: the state is unrecoverable and today entirely silent; the fix is one boot-time check.

Size/model suggestion: S, opus; the pin is a boot fixture with human rows and no accounts asserting the error line, plus the negative control (an account exists ⇒ silent).

Refs: #14349 (the posture question) · #14157 (the development-lane half, which fixes this for objectstack dev) · #14348 (the promotion-target half).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions