{"record":{"id":"a51c6abf04137814","repo":"facebook/react","slug":"314","errorCode":"314","errorMessage":"Pinged unknown suspense boundary type. This is probably a bug in React.","messagePattern":"Pinged unknown suspense boundary type\\. This is probably a bug in React\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/react-reconciler/src/ReactFiberWorkLoop.js","lineNumber":5186,"sourceCode":"    case ActivityComponent:\n    case SuspenseComponent:\n      retryCache = boundaryFiber.stateNode;\n      const suspenseState: null | SuspenseState | ActivityState =\n        boundaryFiber.memoizedState;\n      if (suspenseState !== null) {\n        retryLane = suspenseState.retryLane;\n      }\n      break;\n    case SuspenseListComponent:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case OffscreenComponent: {\n      const instance: OffscreenInstance = boundaryFiber.stateNode;\n      retryCache = instance._retryCache;\n      break;\n    }\n    default:\n      throw new Error(\n        'Pinged unknown suspense boundary type. ' +\n          'This is probably a bug in React.',\n      );\n  }\n\n  if (retryCache !== null) {\n    // The wakeable resolved, so we no longer need to memoize, because it will\n    // never be thrown again.\n    retryCache.delete(wakeable);\n  }\n\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\n\nfunction throwForcedInfiniteRenderLoopError(\n  root: FiberRoot | null,\n  renderLanes: Lanes,\n): empty {","sourceCodeStart":5168,"sourceCodeEnd":5204,"githubUrl":"https://github.com/facebook/react/blob/eafeac097ba51e1eab809c07102126bd5f8e5425/packages/react-reconciler/src/ReactFiberWorkLoop.js#L5168-L5204","documentation":"When a suspended boundary is pinged (its wakeable resolved and a retry is scheduled), React looks up the retry bookkeeping by boundary fiber tag: SuspenseListComponent uses stateNode as retry cache, OffscreenComponent uses _retryCache, SuspenseComponent uses suspenseState.retryLane. Any other tag hits the default branch and throws (error code 314) — the boundary was pinged but is not a known suspense boundary type, an internal invariant.","triggerScenarios":"A wakeable retry (ping) reaching a boundary fiber whose tag is none of SuspenseComponent, SuspenseListComponent, or OffscreenComponent — e.g. a promise stored on a non-suspense fiber being resolved, or corrupted boundary bookkeeping.","commonSituations":"Edge cases mixing Suspense, Activity, and error boundaries in canary builds; third-party code resolving thenables that React tracked against an unexpected fiber; historical reconciler regressions in the retry path.","solutions":["Upgrade to the latest release and check the issue tracker — retry-path invariants have had fixed regressions","Simplify the Suspense/Activity nesting around the failing boundary to isolate the trigger","File a React issue with the boundary structure and a minimal repro"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep Suspense boundary structure simple while reproducing (avoid deep Activity/Suspense mixes in canary)","Resolve thenables through the paths that created them (use/Suspense) rather than externally","Report the boundary tag and tree shape when filing upstream"],"tags":["internal-invariant","suspense","retry","ping"],"backgroundTag":"react-internal-invariant","analyzedSha":"eafeac097ba51e1eab809c07102126bd5f8e5425","analyzedAt":"2026-08-21T22:01:08.818Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}