0.5.6 (2026-05-25)¶
Security hardening: new Alpine base image, critical password-change fix, and test suite cleanup.
🐛 Fixes¶
- Critical:
change_passwordandconfirm_password_resetwere reverting the new password hash. The flow loaded the user, calledrepository.update_password(which persisted the new hash), and then ranuser.save()on a stale in-memory copy that restored the old hash. In practice, passwords were not actually changing. Fix:update_passwordnow updates the hash andpassword_changed_atatomically in a singlesave(). streaming_integrationtests updated: assertions expected403butHTTPBearernow returns401by default since FastAPI 0.128+.tests/conftest.pyregisters the 11 missing Beanie document models (PlanInDB,SubscriptionInDB,DiagramInDB,FolderInDB, etc.), removing intermittent errors in tests that depend on those documents.- Autouse reset of the in-memory
login_rate_limiterandaccount_lockoutstate between tests, preventing accumulated logins from earlier tests from blocking later fixtures. tests/test_openai_models.py: functiontest_model(an executable script, not a test) renamed torun_model_checksopytestno longer collects it and fails for missing fixtures.
⬆️ Upgrades¶
- Backend Docker base image:
python:3.13-slim-trixie→python:3.13-alpine3.22. Reduces CVE surface by removing Debian packages (util-linux,systemd,perl,shadow,tar, etc.) that don't exist on Alpine. - Alpine build adds
gcc,musl-dev,libffi-dev,openssl-dev,cargoas virtual.build-deps(purged at the end) to compile native wheels (cryptography,bcrypt,pillow,uvloop,pydantic-core).
🔧 Internal¶
- Full test suite green after the fixes: 210 passed, 0 failed, 0 errors.
- Verified compatibility of all Python dependencies with
musl libc(cp313/musllinux wheels).