v0.9.4: env-tunable DB pool + real back-nav spinner fix#5
Merged
Conversation
Data gathered 2026-05-28 (Neon max_connections=112, ~1 live app connection; Vercel 0% error rate; Sentry clean) shows no pool-exhaustion symptom, so the slice ships tunability rather than a blind 10/20 bump.
Root cause: Cache Components (cacheComponents: true) keeps the landing page mounted in a hidden React <Activity> on navigation instead of unmounting it, so the manual isLoading useState was preserved and reappeared as a stuck spinner + disabled input on browser-back. The v0.9.3 pageshow fix was inert (same-document soft-nav never fires pageshow). Switch to useTransition so the pending state is derived from the live navigation and is idle on return by construction. Replace the false-positive bfcache test with normalize/ validation/navigation coverage.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two changes shipped under v0.9.4:
DB_POOL_SIZE/DB_MAX_OVERFLOW), defaults unchanged at 5/5 so the deploy is byte-identical at runtime. The originally-planned 10/20 bump was dropped after direct telemetry (Neonmax_connections=112→ ~105 usable, ~1 live app connection; Vercel 0% error rate; Sentry clean) showed no pool-exhaustion symptom — and a blind bump to 30 conns/instance would risk the ceiling under multi-instance Fluid Compute. Engine reads the values via a module reference for test monkeypatch propagation.cacheComponents: true, v0.8.6) keeps the landing page in a hidden React<Activity>on navigation instead of unmounting it, so the manualisLoadinguseStatewas preserved and reappeared as a stuck spinner on Back. The v0.9.3pageshowfix was inert (same-document soft-nav never fires it) and its test was a false positive. Now usesuseTransition— pending state is derived from the live navigation, idle on return by construction.Test plan
ruffclean,pytest283 passed / 69 skipped (+2 new pool tests)lint+tscclean, vitest 54 passed (search-bar 1→4: normalize/validation/nav coverage),next buildclean (PPR routes intact)