{"record":{"id":"21238211dfb02dda","repo":"facebook/react","slug":"overridesuspensemilestone-not-supported-by-this-re","errorCode":null,"errorMessage":"overrideSuspenseMilestone not supported by this renderer","messagePattern":"overrideSuspenseMilestone not supported by this renderer","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/react-devtools-shared/src/backend/legacy/renderer.js","lineNumber":1207,"sourceCode":"    throw new Error('getProfilingData not supported by this renderer');\n  };\n  const handleCommitFiberRoot = () => {\n    throw new Error('handleCommitFiberRoot not supported by this renderer');\n  };\n  const handleCommitFiberUnmount = () => {\n    throw new Error('handleCommitFiberUnmount not supported by this renderer');\n  };\n  const handlePostCommitFiberRoot = () => {\n    throw new Error('handlePostCommitFiberRoot not supported by this renderer');\n  };\n  const overrideError = () => {\n    throw new Error('overrideError not supported by this renderer');\n  };\n  const overrideSuspense = () => {\n    throw new Error('overrideSuspense not supported by this renderer');\n  };\n  const overrideSuspenseMilestone = () => {\n    throw new Error('overrideSuspenseMilestone not supported by this renderer');\n  };\n  const startProfiling = () => {\n    // Do not throw, since this would break a multi-root scenario where v15 and v16 were both present.\n  };\n  const stopProfiling = () => {\n    // Do not throw, since this would break a multi-root scenario where v15 and v16 were both present.\n  };\n\n  function getBestMatchForTrackedPath(): PathMatch | null {\n    // Not implemented.\n    return null;\n  }\n\n  function getPathForElement(id: number): Array<PathFrame> | null {\n    // Not implemented.\n    return null;\n  }\n","sourceCodeStart":1189,"sourceCodeEnd":1225,"githubUrl":"https://github.com/facebook/react/blob/eafeac097ba51e1eab809c07102126bd5f8e5425/packages/react-devtools-shared/src/backend/legacy/renderer.js#L1189-L1225","documentation":"The legacy renderer adapter stubs overrideSuspenseMilestone as a throwing no-op. Suspense milestone tracking is an experimental/canary fiber-reconciler debugging feature; the stack reconciler (React <= 15) has neither Suspense nor milestone bookkeeping, so the backend throws rather than silently ignoring the command.","triggerScenarios":"The DevTools frontend sends the 'overrideSuspenseMilestone' message (canary debug action for suspending-at-milestone behavior) while the target renderer is the legacy (v15) adapter.","commonSituations":"Canary/experimental DevTools used against a production React 15 app; mixed-version multi-root pages; milestone-debug commands broadcast to all attached renderers including a legacy one.","solutions":["Run milestone debugging only on renderers that support it (canary fiber builds).","Upgrade the legacy app off React 15.","Update DevTools so milestone toggles are gated on renderer capabilities.","For embedders: verify the renderer is fiber-based before forwarding 'overrideSuspenseMilestone'."],"exampleFix":"// before\nbridge.send('overrideSuspenseMilestone', {id, rendererID, value});\n\n// after\nif (typeof renderer.findFiberByHostInstance === 'function') {\n  bridge.send('overrideSuspenseMilestone', {id, rendererID, value});\n}","handlingStrategy":"validation","validationCode":"const isFiberRenderer = renderer =>\n  typeof renderer.findFiberByHostInstance === 'function';\nif (isFiberRenderer(renderer)) {\n  bridge.send('overrideSuspenseMilestone', {id, rendererID, value});\n}","typeGuard":"function isFiberRenderer(renderer) {\n  return typeof renderer.findFiberByHostInstance === 'function';\n}","tryCatchPattern":"try {\n  bridge.send('overrideSuspenseMilestone', {id, rendererID, value});\n} catch (error) {\n  if (/not supported by this renderer/.test(error.message)) return;\n  throw error;\n}","preventionTips":["Treat milestone debug commands as canary-fiber-only and gate them explicitly.","Do not broadcast debug toggles to every attached renderer.","Feature-detect before sending canary-only commands."],"tags":["devtools","suspense","milestone","debug-toggle","legacy-renderer"],"backgroundTag":"unsupported-renderer-feature","analyzedSha":"eafeac097ba51e1eab809c07102126bd5f8e5425","analyzedAt":"2026-08-21T22:01:08.818Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}