TanStack
OSS
router
Sign in / Sign up
Open main menu
router
Overview
Runs
Analytics
Loading workspace stats
Loading workspace insights...
Statistics interval
7 days
30 days
Latest CI Pipeline Executions
Status
Fix filter
Filter
Fuzzy
Filter range
Sort by
Sort by
Start time
Sort ascending
Sort descending
Failed
6222
5b17c132 fix: capture match reference before redirect navigation removes it Root cause: When loader throws redirect, the catch block calls inner.router.navigate() which removes the old match from the router. Then finally block tries getMatch(matchId) but returns undefined, so promises never resolve, blocking Promise.allSettled. Solution: Capture match reference BEFORE entering try block, so we have a stable reference even if redirect removes it from router. Flow with redirect: 1. Get matchForCleanup (captures reference) 2. runLoader throws redirect 3. Catch: navigate() removes match from router 4. Finally: Use matchForCleanup (still valid) to resolve promises This allows Promise.allSettled to complete and navigation to proceed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2 days ago
by yanghuidong
y
Failed
6222
2e8a34bd fix: revert unnecessary null check that broke TypeScript The null check at line 862 was incorrect. That code runs synchronously (doesn't wait for async loader), so match exists there. Only the async callback's finally block needs null check for race conditions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2 days ago
by yanghuidong
y
Failed
6222
90d4ba39 fix: add null checks in both async and sync loader paths This commit adds comprehensive null checks to prevent crashes when match is undefined due to navigation changes during async operations. Two critical fixes: 1. Finally block for async loaders (lines 846-855): - Ensures promises always settle (success, error, or redirect) - Required for Promise.allSettled() to complete properly - Enables correct store updates during navigation - Location check (line 969) prevents stale head() execution 2. Null check after async callback (lines 860-871): - Protects clearTimeout and other _nonReactive accesses - Hypothesis: The original 11 errors were from line 866, not the async callback - This line was using getMatch(matchId)! without protection Root cause: When navigation changes during async loader execution, getMatch(matchId) returns undefined, causing crashes when accessing _nonReactive properties. Fixes: - 11 unhandled rejection errors (TypeError accessing _nonReactive) - 2 test failures (link test + store updates with redirect) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2 days ago
by yanghuidong
y
Failed
6222
4b1a9dd5 revert: move promise resolution back to try block Moving the promise resolution from finally block back to try block. This ensures promises are only resolved on successful loader completion, not on errors or redirects. Resolving on redirect was incorrect because we're navigating away from the route, so head() re-execution for the old route doesn't make sense. The null check is kept as a safety measure since this code still runs in an async callback where navigation could theoretically change. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2 days ago
by yanghuidong
y
Failed
6222
2687842d fix: add null check for match in async loader finally block Fixes race condition where async loader's finally block executes after navigation has changed, causing match to be undefined when accessing _nonReactive properties. This resolves 11 unhandled rejection errors in unit tests: - TypeError: Cannot read properties of undefined (reading '_nonReactive') - All errors pointed to load-matches.ts:851 in async callback's finally block The fix adds a null check before accessing match._nonReactive to handle cases where the match has been removed from the router during async execution. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2 days ago
by yanghuidong
y
Failed
6222
5914d256 test(solid-query): add e2e tests for head() async loader fix Adds comprehensive playwright tests verifying the head() re-execution fix: - Verifies page title updates correctly on back navigation after login - Tests fallback title when loader returns null - Tests logout flow with correct title updates - Verifies race condition handling with rapid navigation Also fixes package.json start script to use 'pnpm dlx' instead of deprecated 'pnpx' command for compatibility with modern pnpm versions. All tests passing, confirming non-blocking head() re-execution works correctly after async loaders complete. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2 days ago
by yanghuidong
y
Failed
6222
1c656a58 fix: prevent race condition when navigation changes during head() re-execution Addresses two scenarios: 1. New navigation starts BEFORE scheduled head() executes 2. New navigation starts WHILE head() is executing Solution: - Capture this navigation's location (thisNavigationLocation) - Before executing head(), check if router's current location matches - If location changed (new navigation), skip stale head() execution - Location objects are always unique (parseLocation creates new objects) Both concerns are resolved: - Scenario 1: Location check prevents stale head() from executing - Scenario 2: Stale head() may complete but fresh navigation overwrites with correct data immediately after 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2 days ago
by yanghuidong
y
Failed
6222
343eae02 refactor: extract executeAllHeadFns to eliminate duplication Extracted head() execution loop into a reusable helper function to eliminate code duplication between initial execution and re-execution after async loaders complete. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2 days ago
by yanghuidong
y
Failed
6222
d71da538 fix: wait for async loaders before executing head functions The bug: When loaders run asynchronously (stale-while-revalidate), loadRouteMatch returns immediately while the loader runs in the background. Promise.allSettled(inner.matchPromises) waits for loadRouteMatch promises, not the actual loader completion, causing head() to execute with undefined loaderData. The fix: After loadRouteMatch promises settle, explicitly wait for all loaderPromises to complete before executing head functions. This ensures loaderData is available when head() executes. Reproduction scenario: 1. Navigate to authenticated route (e.g., /article/123) 2. Delete auth cookie, reload (shows 'not found') 3. Login, redirect to dashboard 4. Click back button to /article/123 - Before fix: Article loads but title shows fallback (loaderData undefined) - After fix: Article loads with correct title (loaderData available) Fixes the issue identified in PR #6093 follow-up investigation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2 days ago
by yanghuidong
y
Succeeded
main
a6ec3895 chore: move eslint-plugin-solid to devDependencies in solid-router-ssr-query (#6212) Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
3 days ago
by yanghuidong
y
Succeeded
6212
c2a0a88c chore: update lockfile after moving eslint-plugin-solid to devDependencies 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3 days ago
by yanghuidong
y
Succeeded
6212
b7b881f1 fix: move eslint-plugin-solid to devDependencies in solid-router-ssr-query Fixes #6209 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3 days ago
by yanghuidong
y
Previous page
Previous
Next
Next page