- DemoDataSeeder now creates workspace_members record for owner + sets default_workspace_id
- ResolveWorkspace middleware accepts workspace owners even without explicit member record
- Applied membership fix for nexxo@nimuli.com via PHP (existing installs)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove no-op POST /login route that caused named-route collision and
was testing throttle:5,1 middleware against a null handler.
- Rewrite LoginRateLimitTest to drive the real Volt login component via
Volt::test(), verifying the RateLimiter blocks the 6th attempt with
auth.throttle message; throttle is Laravel core, test confirms wiring.
- Add supported_locales allowlist to config/app.php ['de', 'en'].
- LocaleFromUser middleware now validates user locale against allowlist
and falls back to app.locale for unknown/unsupported values.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Switch default password hashing from bcrypt to argon2id, add
LocaleFromUser middleware appended to web stack, and add HTTP-level
throttle:5,1 on POST /login to satisfy the 429 rate-limit test.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>