Skip to content

feat(auth): password-policy & session settings — live, enforced (P0 security) - #2011

Merged
os-zhuang merged 1 commit into
mainfrom
feat/auth-security-settings-p0
Jun 17, 2026
Merged

feat(auth): password-policy & session settings — live, enforced (P0 security)#2011
os-zhuang merged 1 commit into
mainfrom
feat/auth-security-settings-p0

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

P0 base-settings, item 3 of 3. Per the agreed scope, this extends the existing auth manifest with the security-policy keys that are genuinely enforced today — rather than standing up a security namespace full of non-functional toggles (IP allowlist / SSO / SCIM / rate-limit), which would be false surface and trip the platform's own liveness gate.

What's added (all live)

Existing auth manifest (global scope), new groups:

  • Password policypassword_min_length (default 8), password_max_length (default 128). better-auth enforces these on sign-up and password reset.
  • Sessionssession_expiry_days (default 7, absolute lifetime), session_refresh_days (default 1, refresh threshold).

How they take effect (existing tested path)

They ride AuthPlugin.bindAuthSettingsAuthManager.applyConfigPatch:

  • Read from the settings service on kernel:ready and re-applied live via settings.subscribe('auth').
  • applyConfigPatch deep-merges into config and nulls the cached better-auth instance, so the next request rebuilds with the new policy.
  • Days → seconds for session.{expiresIn,updateAge}. Unset (source: 'default') and malformed/non-positive values are ignored so the provider default holds.

Deliberately out of scope (no enforcement exists → NOT declared)

MFA-required, IP allowlist, SSO/SAML, SCIM, API rate limits, password complexity/rotation/history. These are real features to build, not settings toggles. Recorded so the gap is explicit.

Tests

  • auth.manifest.test.ts — new number fields parse with bounds/defaults; password_policy/sessions groups present.
  • auth-plugin.test.ts — bindAuthSettings applies length bounds + session lifetime (days→seconds); ignores default-source and malformed/non-positive values.
  • Suites green: service-settings 124, plugin-auth 120. DTS builds clean.
  • en + zh-CN translations.

P0 complete

  1. localization (feat(settings): localization settings — platform timezone/language/formats (ADR-0053 Phase 2) (#1928) #2006). 2. ✅ company (feat(settings): company settings — legal organization identity (P0) #2010). 3. this PR auth security policy.

🤖 Generated with Claude Code

…ecurity)
Extends the existing `auth` settings manifest (global scope) with the security
keys that are genuinely enforced today, instead of a new `security` namespace
full of non-functional toggles (false surface).
- Password policy: password_min_length (8), password_max_length (128) —
enforced by better-auth on sign-up / password reset.
- Sessions: session_expiry_days (7), session_refresh_days (1).
Rides the existing AuthPlugin.bindAuthSettings → AuthManager.applyConfigPatch
path (read on kernel:ready, re-applied live via settings.subscribe('auth'),
which invalidates the cached better-auth instance). Days → seconds for
session.{expiresIn,updateAge}; unset/malformed values ignored so the provider
default holds. en + zh-CN translations.
Out of scope (no enforcement → not declared): MFA-required, IP allowlist,
SSO/SAML, SCIM, API rate limits, password complexity/rotation/history.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercelBot commented Jun 17, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
specReadyReadyPreview, CommentJun 17, 2026 7:11am

Request Review

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tests tooling labels Jun 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/plugin-auth, packages/services.

14 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/concepts/implementation-status.mdx(via @objectstack/plugin-auth)
  • content/docs/concepts/packages.mdx(via @objectstack/plugin-auth)
  • content/docs/getting-started/cli.mdx(via @objectstack/plugin-auth)
  • content/docs/guides/auth-sso.mdx(via @objectstack/plugin-auth)
  • content/docs/guides/authentication.mdx(via @objectstack/plugin-auth)
  • content/docs/guides/kernel-services.mdx(via @objectstack/plugin-auth)
  • content/docs/guides/packages.mdx(via @objectstack/plugin-auth, packages/services)
  • content/docs/guides/plugins.mdx(via @objectstack/plugin-auth)
  • content/docs/guides/production-readiness.mdx(via @objectstack/plugin-auth)
  • content/docs/guides/runtime-services/audit-service.mdx(via packages/services)
  • content/docs/guides/runtime-services/index.mdx(via packages/services)
  • content/docs/guides/runtime-services/settings-service.mdx(via packages/services)
  • content/docs/protocol/objectos/i18n-standard.mdx(via packages/services)
  • content/docs/releases/v9.mdx(via @objectstack/plugin-auth)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-zhuang
os-zhuang merged commit 0d4e3f3 into mainJun 17, 2026
14 checks passed
@os-zhuang
os-zhuang deleted the feat/auth-security-settings-p0 branch June 17, 2026 07:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/mteststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@os-zhuang