chore(stack-laravel): apply review fixes + scaffolding cleanup
- fix: PersistOAuthSession used Builder::update, bypassing the
'refresh_token' encrypted cast — every refresh wrote plaintext over
the encrypted column. Route through the model so the cast applies.
- delete ClearRefreshTokenOnRotate listener: blanking refresh_token on
OAuthSessionRefreshing (before the rotation HTTP call) bricked the
row on any rotation failure. PersistOAuthSession writes the new
token on success — durable clear is unnecessary.
- lock config/bluesky.php scope default to 'atproto'; missing env now
fails closed instead of silently shipping transition:generic.
- consolidate use-mobile: delete .ts (useState), keep .tsx
(useSyncExternalStore — tear-free, matches use-appearance).
- tests: new OAuthCallbackTest (green / re-auth / Socialite-throws
via Exceptions::fake), PersistOAuthSessionTest, InertiaSharedDataTest,
deepened logout assertions; FakesBlueskyOAuth trait replaces four
copies of Mockery setup. Pest binding switched to
LazilyRefreshDatabase, applied globally so feature files stop
repeating uses(RefreshDatabase::class).
- scaffolding: trim placeholder docblocks in HandleInertiaRequests +
AppServiceProvider, drop dead Inertia version() override, drop two
JSX comment labels from app-header, delete the two ExampleTest
files, trim tests/Pest.php to the minimal binding.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>