Repository navigation
docs: correct the security posture and document per-instance limits - #458
Merged
Merged
Conversation
Closes #434. Session lifetime, lockout, the owner grant, key retirement and the roles route now match the code, and production-operations lists what is held per process when more than one instance runs.
This was referenced Oct 20, 2026
Merged
…ion wording Fourteen endpoints accept an ephemeral token, register/start has needed an access session since 0.11.0, the login floor covers the 200 pre-auth answer, refresh_token_ttl has no server default, only a refresh extends the idle limit, and the lockout duration is measured as the code measures it.
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.
Closes #434. Each claim below was checked against the code on
main(0.19.1).Security posture (
docs/security-posture.md)expiresAtischainStartedAtplusrefresh_token_ttl, and rotation does not extend it. It also coverssession_idle_ttland theabsolute_lifetime_reachedandidle_timeoutrefusals.lockoutPolicyService.tsandauthFailureCounter.tsas of fix(lockout): keep passkey sign-in out of lockout and enforce lockoutSeconds #448:maxFailuresland inside onewindowSecondswindow, and lastslockoutSecondsfrom there. It is not a rolling count.LOCKOUT_FAILURE_TYPES), and that passkey assertions do not.loginMethods: ["passkey"].sessionService.ts(issuer, audience,typ).Refresh tokens described as signed (
docs/production-operations.md)Key rotation step 3 said to wait
refresh_token_ttlso that "no token signed by the outgoing key" is still live. Refresh tokens are opaque and not signed. The wait isaccess_token_ttl, since access tokens are the longest-lived signed tokens.Per-instance limits (
docs/production-operations.md)A new section, "Running More Than One Instance". It lists what is shared through Postgres, and what is held per process along with its effect with N instances:
system_configcache (a write clears only the instance that served it)statereplay cacheOwner admin grant, made to match
src/lib/ownerAdmin.tsThe code grants one role:
admin:writeif available, elseadmin. The CLI smoke runs confirm it; the owner's roles wereuser,betaUser,admin:write.configuration.mdsaidadmin./registration/registercreates the account with the role first, and an unverified account cannot sign in. All three now say that.Smaller fixes
docs/admin-operations.md:GET /rolesisGET /system-config/roles.src/controllers/systemConfig.ts: the public config comment claimed it survives a tainted config.getSystemConfigthrows on a config that fails schema validation, so it does not. Comment only, no behaviour change.docs/fido-conformance.md:/conformance/*is deliberately absent from the committedopenapi.jsonandadapter-manifest.json, which are built with the flag unset.CLAUDE.md: the coverage thresholds now read 98/98/95/98, matchingvitest.config.ci.yml: dropped the stale sequelize audit comment.npm audit --omit=devshows no sequelize advisories any more.Checks
npm run typecheck,npm run lintandnpm run format:checkpass, andnpm run test:runpasses 1876 tests (1 todo). CI's audit step will fail until #456 (follow-redirects) merges. That failure is not caused by this PR.