release v0.9.0#17
Conversation
Bumps version in pyproject.toml and __init__.py, finalizes the CHANGELOG with an explicit breaking-changes callout for the 423->401 lockout response and email-case normalization. Updates the skill adapters reference to match the new normalization behavior and adds a 0.8.0 -> 0.9.0 section to the migrations reference.
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 20 minutes and 40 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (5)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
Cuts v0.9.0 — security hardening and polish since v0.8.0.
Breaking changes
401instead of423 Locked. Clients branching on423to render a "locked" UI fall into the generic credentials path.UPDATE fullauth_users SET email = LOWER(TRIM(email))before upgrade.Security
Alice@X.comandalice@X.comcan no longer register as separate accounts on case-sensitive collations.401to remove the status-code enumeration signal.PREVENT_REGISTRATION_ENUMERATION—/registerreturns a generic202regardless of whether the email was taken.Fixed
BearerBackendaccepts any case of theBearerscheme per RFC 7235.require_roletolerates aUserSchemawith norolesfield — clean403instead of500.hash_password(..., algorithm="bcrypt")rejects > 72 UTF-8 bytes instead of silently truncating.UserBase.hashed_passwordcolumn is nowText, matching the SQLAlchemy adapter.FullAuthConfigvalidates passkey settings at construction time.Docs / skill
0.8.0 → 0.9.0migrations section (email lowercase migration + SQLModel column type change).Test plan
uv run ruff format --check .— cleanuv run ruff check .— cleanuv run pytest tests/— 188 passed, 1 skippedgh release create v0.9.0 --target maintriggerspublish.yml→ PyPI publish via OIDCuv pip install fastapi-fullauth==0.9.0in a scratch venv imports cleanly