[{"author":{"id":"MDQ6VXNlcjI0NDAwODk=","is_bot":false,"login":"rickhanlonii","name":"Ricky"},"body":"Noticed this while writing docs:\n\n```js\n<ViewTransition\n onEnter={(instance) => {\n const anim = instance.new.animate(/* ... */);\n return () => {\n anim.cancel();\n };\n }}\n onExit={(instance) => {\n const anim = instance.new.animate(/* ... */);\n return () => {\n anim.cancel();\n };\n }}\n>\n {/* ... */} \n</ViewTransition>\n```\n\nIf you have a pending`onEnter` animation and the tree is unmounted, the `onEnter` cleanup is called immediately.\n\nBut if you have a pending `onExit` and the tree is unmounted, the `onExit` cleanup isn't called until the animation completes.\n\nThis means you can't cancel the animation:\n\nhttps://github.com/user-attachments/assets/f522f746-5ed3-432f-acbf-d610ab4260d2\n\nSandbox: https://codesandbox.io/p/sandbox/naughty-wu-pfkh2m\n\n\n","createdAt":"2026-02-21T16:18:35Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35855,"title":"Bug: ViewTransition onExit cleanup not called on unmount"},{"author":{"id":"MDQ6VXNlcjUyNjM0OQ==","is_bot":false,"login":"jugglingcats","name":""},"body":"### What kind of issue is this?\n\n- [x] React Compiler core (the JS output is incorrect, or your app works incorrectly after optimization)\n- [ ] babel-plugin-react-compiler (build issue installing or using the Babel plugin)\n- [ ] eslint-plugin-react-hooks (build issue installing or using the eslint plugin)\n- [ ] react-compiler-healthcheck (build issue installing or using the healthcheck script)\n\n### Link to repro\n\nhttps://playground.react.dev/#N4Igzg9grgTgxgUxALhASwLYAcIwC4AEASggIZx4A0BwBUYCJAZtfQgMp6l4IEC+BJjAgYCAchhkKYgDoA7eUyhyKaCHIIZSAawQB9GKTkATEQAoAlDXkFbBSXlgaAstwAWAOkMnzF+X3l5BAAPHHwCYwQmUigAG0IlFTw1FwBPAEEsLEtrDTsAenyCMEwsWN4wLh4CPAgCOBiGewQAWkkTBBgbOzh1SoIAbUruBGoGPE4RgF0CAF5iKTwPNkmeMwAGPwU820KagjQwAlJYgHdSVKOAOVIr4rQVCqreE-PLggA+efXu2165fqEebDapfAjrAgAfgINzuyHBgR2BD26liqUEaEkR3UiAIpzQeDc0EIvWwaHKXSR-36ADc5gtyEs2M4EBgIGYcrMPrk7LzkUVXhcjgBzBByTojI7i072IymURyKAYABGnQIvz5DicBzAsLMeCs0K0ugMct8BHhPyRfGoAzwUy2iN5e3xhPqIiw5LVYtIyvKxmodMOdCwxhGxgI6gIUjc9ViaDg2g1WpgGgAPMY0HT1ABheOJ2bATnc8arBBmOBzblwADUAEYLHwPgAJBCxWJ1ADquFixnhwBpAiKwBBCD4afymZpHwA3P55CBKCB-kw0MKUOhsLhCHhUlheLQAAqxKDCh4AeSwyT6-EEwlEYmVvrbLTKp4ebUWLVJnopk8OeBiHO2xmMA3SFD+5LcCkzgQJE8IyCAJyxIh-jFNBYCrggRzHu+ciXteAIWDOi7gESpwAJJyDwqYnGAKDRLEDB8EAA\n\n### Repro steps\n\nSee playground link. Click on the div to increment the counter and see that the memoised value changes even though the single dependency is always `NaN`.\n\nThe example is obviously contrived and perhaps you consider having NaN in a dependency list not valid/supported. However useMemo without the compiler handles this case and does not re-evaluate. This caused a subtle bug in my app when enabling the compiler.\n\nApologies if this is a duplicate, I looked but could not find similar.\n\n### How often does this bug happen?\n\nEvery time\n\n### What version of React are you using?\n\n19.2.4\n\n### What version of React Compiler are you using?\n\n1.0.0","createdAt":"2026-02-21T12:59:05Z","labels":[{"id":"MDU6TGFiZWw0MDkyOTE1MQ==","name":"Type: Bug","description":"","color":"b60205"},{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35854,"title":"[Compiler Bug]: NaN in dependency list of useMemo always causes re-evaluation"},{"author":{"id":"MDQ6VXNlcjgxMDQzOA==","is_bot":false,"login":"gaearon","name":"dan"},"body":"Essentially, I see `useDeferredValue` being stuck and never catching up.\n\nNot sure if it's possible to extract it out of a Next.js app. I think it's probably a React bug because it seems related to core APIs, but I couldn't simplify it past the \"render some JSX from server action\" repro case.\n\n## Demo\n\nType \"hello world\".\n\nIn dev (`npm run dev`), the second text area catches up.\n\nIn prod (`npm run build + npm start`), the second text area often gets stuck and never catches up.\n\nhttps://github.com/user-attachments/assets/a44f01ad-1a7d-4420-a6da-cadb277ded72\n\n## Code\n\nHere is a repro case: https://github.com/gaearon/react-udv-bug/\n\nThis is the main harness:\n\n```js\nexport function TestPreviewClient() {\n const [promise, setPromise] = useState<Promise<ReactNode>>(initialPromise);\n const deferred = useDeferredValue(promise);\n\n function handleChange(value: string) {\n setPromise(renderAction(value));\n }\n\n return (\n <div style={{ padding: 16, fontFamily: \"monospace\" }}>\n <textarea\n placeholder=\"type here\"\n onChange={(e) => handleChange(e.target.value)}\n rows={3}\n style={{ width: \"100%\", fontFamily: \"monospace\" }}\n />\n <div\n data-testid=\"deferred\"\n style={{ border: \"1px solid #ccc\", padding: 8, minHeight: 40 }}\n >\n <Suspense fallback={<div>loading...</div>}>\n <Resolved promise={deferred} />\n </Suspense>\n </div>\n </div>\n );\n}\n```\n\nNote these helpers:\n\n```js\nexport function ClientWrapper({ children }: { children: ReactNode }) {\n const t = performance.now();\n while (performance.now() - t < 2) {\n // do nothing\n }\n return <>{children}</>;\n}\n\nfunction Resolved({ promise }: { promise: Promise<ReactNode> }) {\n return <>{use(promise)}</>;\n}\n```\n\nAnd this is the server part:\n\n```js\nasync function AsyncChild({\n children,\n}: {\n children: ReactNode;\n}): Promise<ReactNode> {\n await new Promise((r) => setTimeout(r, 1));\n return children;\n}\n\nasync function Item({ children }: { children: ReactNode }): Promise<ReactNode> {\n return (\n <ClientWrapper>\n <AsyncChild>{children}</AsyncChild>\n </ClientWrapper>\n );\n}\n\nexport async function renderAction(input: string): Promise<ReactNode> {\n return (\n <Item>\n <div>\n <Item>\n <div>{input}</div>\n </Item>\n </div>\n </Item>\n );\n}\n```\n\nYou can generally simplify this structure but then it will be harder to reproduce.","createdAt":"2026-02-18T21:15:25Z","labels":[{"id":"MDU6TGFiZWw0MDkyOTE1MQ==","name":"Type: Bug","description":"","color":"b60205"},{"id":"MDU6TGFiZWwxMTA5NDA3NjQ1","name":"Component: Suspense","description":"","color":"8ffcd6"}],"number":35821,"title":"Bug: useDeferredValue gets stuck with a stale value"},{"author":{"id":"U_kgDODIawBA","is_bot":false,"login":"stella-yessensei","name":""},"body":"### Website or app\n\nLocal debugging\n\n### Repro steps\n\nRecord / stop and the issue appears\n\n### How often does this bug happen?\n\nEvery time\n\n### DevTools package (automated)\n\nreact-devtools-extensions\n\n### DevTools version (automated)\n\n7.0.1-3cde211b0c\n\n### Error message (automated)\n\nCould not find node with id \"3119\" in commit tree\n\n### Error call stack (automated)\n\n```text\nat chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:705820\n at Map.forEach (<anonymous>)\n at ProfilingCache_defineProperty.commitIndex (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:705769)\n at $e.getRankedChartData (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:706282)\n at CommitRankedAutoSizer (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1008687)\n at renderWithHooks (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:66940)\n at updateFunctionComponent (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:97513)\n at beginWork (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:111594)\n at performUnitOfWork (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:184246)\n at workLoopSync (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:184102)\n```\n\n### Error component stack (automated)\n\n```text\nat CommitRankedAutoSizer (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1008444)\n at div (<anonymous>)\n at div (<anonymous>)\n at div (<anonymous>)\n at SettingsModalContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:879909)\n at chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1144384\n at ao (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:898411)\n at div (<anonymous>)\n at div (<anonymous>)\n at ThemeProvider (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:901116)\n at chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:901313\n at div (<anonymous>)\n at div (<anonymous>)\n at div (<anonymous>)\n at ThemeProvider (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:901116)\n at SuspenseTreeContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1147064)\n at InspectedElementContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:915935)\n at TimelineContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:994422)\n at ProfilerContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:986233)\n at TreeContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:786019)\n at SettingsContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:815755)\n at ModalDialogContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:972480)\n at DevTools_DevTools (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1175879)\n```\n\n### GitHub query string (automated)\n\n```text\nhttps://api.github.com/search/issues?q=Could not find node with id in commit tree in:title is:issue is:open is:public label:\"Component: Developer Tools\" repo:facebook/react\n```","createdAt":"2026-02-18T18:36:06Z","labels":[{"id":"MDU6TGFiZWw0MDkyOTE1MQ==","name":"Type: Bug","description":"","color":"b60205"},{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"},{"id":"MDU6TGFiZWw3MTA1NzM1OTU=","name":"Component: Developer Tools","description":"","color":"fbca04"}],"number":35818,"title":"[DevTools Bug] Could not find node with id \"3119\" in commit tree"},{"author":{"id":"U_kgDOCChxTg","is_bot":false,"login":"AmitSingh-5600","name":"Amit Singh Kushwaha"},"body":"### Bug Description\nIn fixtures/attribute-behavior/src/App.js, the componentWillUnmount method has a bug where it checks for this.timeout but clears this.interval (which doesn't exist). This causes a memory leak where timeouts are never properly cleaned up on component unmount.\n\n**Location:** fixtures/attribute-behavior/src/App.js:605\n\n---\n\n### Code Analysis\n\n**Current (Buggy) Code:**\ncomponentWillUnmount() {\n if (this.timeout) {\n clearTimeout(this.interval); // ❌ Error: this.interval is undefined\n }\n}\n\n**Proposed Fix:**\ncomponentWillUnmount() {\n if (this.timeout) {\n clearTimeout(this.timeout); // ✅ Correct: matches the variable being tracked\n }\n}\n\n---\n\n### Steps To Reproduce\n1. Navigate to the fixtures/attribute-behavior directory.\n2. Run the build and dev server:\n yarn build --type=UMD_DEV react/index,react-dom && cd fixtures/attribute-behavior && yarn install && yarn dev\n3. Open the fixture in a browser.\n4. Hover over a result cell to trigger onMouseEnter (which sets this.timeout).\n5. Unmount the component before the timeout fires (e.g., navigate away or close the tab).\n6. Observe: The timeout is never cleared, which can lead to memory leaks or setState warnings on unmounted components.\n\n---\n\n### Current Behavior\nWhen the component unmounts, the code checks for this.timeout but calls clearTimeout(this.interval). Since this.interval is undefined, the actual timer remains active, potentially causing \"cannot update state on an unmounted component\" warnings.\n\n### Expected Behavior\nThe componentWillUnmount lifecycle should correctly call clearTimeout(this.timeout) to ensure the specific timer initiated by the component is destroyed immediately upon unmounting.\n\n---\n\n### Suggested Fix (Diff)\n--- fixtures/attribute-behavior/src/App.js\n+++ fixtures/attribute-behavior/src/App.js\n@@ -603,5 +603,5 @@\n componentWillUnmount() {\n if (this.timeout) {\n- clearTimeout(this.interval);\n+ clearTimeout(this.timeout);\n }\n }","createdAt":"2026-02-18T16:25:06Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35814,"title":"Bug: Memory leak in attribute-behavior fixture - wrong variable cleared in componentWillUnmount"},{"author":{"id":"U_kgDOBpS0Pw","is_bot":false,"login":"ej612","name":""},"body":"Hi there!\n\nWhen updating to v7 of `eslint-plugin-react-hooks`, I'm getting an error that I haven't been getting on v5, and I believe it's a false positive.\n\nThis is my functional component:\n\n```ts\nfunction App() {\n const groupRefs = {\n group1: React.useRef<ComboBoxItemGroupDomRef>(null),\n group2: React.useRef<ComboBoxItemGroupDomRef>(null),\n };\n\n // const group1Ref = React.useRef<ComboBoxItemGroupDomRef>(null);\n // const group2Ref = React.useRef<ComboBoxItemGroupDomRef>(null);\n \n return (\n <ComboBox>\n <ComboBoxItemGroup\n ref={groupRefs.group1}\n // ref={group1Ref}\n headerText=\"Group 1\"\n >\n <ComboBoxItem text=\"Item 1\" />\n </ComboBoxItemGroup>\n <ComboBoxItemGroup\n ref={groupRefs.group2}\n // ref={group2Ref}\n headerText=\"Group 2\"\n >\n <ComboBoxItem text=\"Item 2\" />\n </ComboBoxItemGroup>\n </ComboBox>\n );\n}\n```\n\nI'm keeping a list of refs for each group, and I'm passing each one into the group element.\nThis gives me the following error:\n\n<img width=\"2734\" height=\"1024\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/e4b5708c-a93a-459f-bbcf-5a4e48afd973\" />\n\nI think the rule mistakenly interprets `groupRefs.group2` as referencing `ref.current`, which is not the case. If I don't collect all refs in an object but create an individual variable for each, I don't get an error.\n\nSteps to reproduce:\n+ Open [this sandbox](https://stackblitz.com/edit/github-gjhxk4ip?file=src%2FApp.tsx).\n+ Download it:\n\n<img width=\"1610\" height=\"1395\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/1b142665-1df4-4dea-aa79-3ea37ab7d752\" />\n\n+ Run `npm install`, open in vscode.\n+ You should get the error I screenshotted above.\n\nThanks!","createdAt":"2026-02-18T12:57:25Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35813,"title":"[eslint-plugin-react-hooks] Bug: `react-hooks/refs` rule reporting false positive"},{"author":{"id":"MDQ6VXNlcjQ4MDEwNzU4","is_bot":false,"login":"MohammadBinAftab","name":""},"body":"**Bug: Malformed `private` field in react-devtools-fusebox package.json**\n\nCurrent Behavior\n\nThe `package.json` file for `react-devtools-fusebox` uses a **string** for the `private` field instead of a **boolean**:\n\n**Location** [`[packages/react-devtools-fusebox/package.json](https://github.com/facebook/react/blob/main/packages/react-devtools-fusebox/package.json)`](https://github.com/facebook/react/blob/main/packages/react-devtools-fusebox/package.json)\n\n```json\n{\n \"private\": \"true\", // Should be: \"private\": true\n}\n```\n\n### Expected Behavior\n\nAccording to the [[npm package.json specification](https://docs.npmjs.com/cli/v11/configuring-npm/package.json#private)](https://docs.npmjs.com/cli/v11/configuring-npm/package.json#private), the `private` field must be a **boolean**, not a string:\n\n```json\n{\n \"private\": true, // Correct\n}\n```\n\n### Impact\n\nThis causes failures in package scanning tools that validate package metadata:\n\n- **ScanCode.io** pipeline fails when scanning `pkg:github/facebook/react@v19.2.1`\n- Type validation error: `'\"true\" value must be either True or False.'`\n- Non-compliant with npm specification\n\n**Related upstream issues:**\n- [[aboutcode-org/scancode.io#1986](https://github.com/aboutcode-org/scancode.io/issues/1986)](https://github.com/aboutcode-org/scancode.io/issues/1986) - Pipeline failure report\n- [[aboutcode-org/scancode-toolkit#4631](https://github.com/aboutcode-org/scancode-toolkit/issues/4631)](https://github.com/aboutcode-org/scancode-toolkit/issues/4631) - Root cause analysis\n- [[aboutcode-org/scancode-toolkit#4635](https://github.com/aboutcode-org/scancode-toolkit/pull/4635)](https://github.com/aboutcode-org/scancode-toolkit/pull/4635) - Defensive fix to handle malformed data\n\nWhile downstream tools are adding workarounds, the source data should comply with the npm specification.\n\n### Reproduction\n\n```bash\n# Scan the package with ScanCode\nscancode --package packages/react-devtools-fusebox/package.json --json-pp -\n\n# Output shows:\n# \"is_private\": \"true\", <-- String instead of boolean\n```\n\n### Proposed Fix\n\n```diff\n{\n \"name\": \"react-devtools-fusebox\",\n \"version\": \"0.0.0\",\n- \"private\": \"true\",\n+ \"private\": true,\n \"license\": \"MIT\",\n}\n```\n\n### Questions\n\n1. Are there other `package.json` files in the React monorepo with similar issues?\n2. Was the string value intentional for any specific reason?\n\n---\n\nI'm happy to submit a PR to fix this if helpful. \n","createdAt":"2026-02-15T20:26:07Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35793,"title":"Bug: Malformed `private` field in react-devtools-fusebox package.json"},{"author":{"id":"MDQ6VXNlcjMyNjAyNzk1","is_bot":false,"login":"MatiasCiccone","name":"Matias Ciccone"},"body":"### What kind of issue is this?\n\n- [x] React Compiler core (the JS output is incorrect, or your app works incorrectly after optimization)\n- [ ] babel-plugin-react-compiler (build issue installing or using the Babel plugin)\n- [ ] eslint-plugin-react-hooks (build issue installing or using the eslint plugin)\n- [ ] react-compiler-healthcheck (build issue installing or using the healthcheck script)\n\n### Link to repro\n\nhttps://playground.react.dev/#N4Igzg9grgTgxgUxALhHCA7MAXABAWQE8BhCAWwAdMEM8BeXACmFyjARlwF8BKXOgHy5gAHQy5c6LHgAWAQwwATADYJiygJZwA1vyZ9BwsRIlTIqgHTKIAc0ZsOFjHLIIeAbmPdPGLxoBmTACEDjB8MAjYsOIYUMrKPl4RUTDiADwARlDY2Ji4mOpa2nTA8kqqhTpcApXaaQD0WTmYAj5c7iAANGiY-ho2KCAalBAweNiEFAjCuAAKylA2GhgA8hTYGphg3Lj+MOS4AOQZchkIygC0FAtLGBcRcnDYF+iUGqow9YoaOIeJGMwvPV6q8KO85BtMPgIIoEMhcCIQHJ4oixFxcGAIT8+ghtvNFss1pCsB4uuAZBAAO4ASVoHGcyjAKH8yPYXCAA\n\n### Repro steps\n\n1. Create a component that receives a nullable prop\n2. Access that prop's properties inside a closure (event handler)\n3. Add an early return guard: if (!prop) return null\n4. Pass null/undefined as the prop\n5. Component throws TypeError during render\n\n------------------------\n\n# React Compiler hoists closure property accesses into cache keys, causing TypeError\n\n## Summary\n\nThe React Compiler generates memoization cache keys by eagerly evaluating property accesses that were originally deferred inside closures (event handlers). This causes `TypeError` at render time when the object is `null`/`undefined`, even though the original code would never access the property during render.\n\nEarly returns (`if (!x) return null`) do not help — the compiler hoists the cache key check above the guard.\n\nJSX expressions are not affected — the compiler correctly extracts them to intermediate variables.\n\n## Reproduction\n\n[React Compiler Playground](https://playground.react.dev/)\n\n### Minimal case\n\n```jsx\nconst MyComponent = ({ user }) => {\n const handleClick = () => {\n console.log(user.name);\n };\n\n if (!user) return null;\n\n return <button onClick={handleClick}>Click</button>;\n};\n```\n\nCompiled output:\n\n```js\nconst MyComponent = (t0) => {\n const $ = _c(4);\n const { user } = t0;\n\n // Cache key runs BEFORE the null guard — throws when user is null\n if ($[0] !== user.name) {\n t1 = () => {\n console.log(user.name);\n };\n $[0] = user.name;\n $[1] = t1;\n }\n\n // The null guard comes AFTER — too late\n if (!user) {\n return null;\n }\n\n // ...\n};\n```\n\nThe source code is safe: `user.name` is only inside a click handler, and the early return prevents the button from rendering when `user` is null. But the compiler hoists `user.name` into a cache key that runs on **every render**, before the guard.\n\n### With nested access and JSX\n\n```jsx\nconst MyComponent = ({ user }) => {\n const [visible, setVisible] = useState(false);\n const [link, setLink] = useState(null);\n\n const handleClick = async () => {\n console.log(user.company.id);\n console.log(user.email);\n };\n\n return (\n <div onClick={() => setVisible(false)}>\n <span>{user?.email}</span>\n <button onClick={handleClick}>Click</button>\n </div>\n );\n};\n```\n\nCompiled output (simplified):\n\n```js\n// The compiler hoists user.company.id and user.email from the closure\n// into cache key checks that run on EVERY render:\nif ($[0] !== user.company.id || $[1] !== user.email) {\n t1 = async () => {\n console.log(user.company.id);\n console.log(user.email);\n };\n $[0] = user.company.id;\n $[1] = user.email;\n $[2] = t1;\n}\n\n// JSX — correctly extracted to variable (safe)\nconst t4 = user?.email;\nif ($[7] !== t4) {\n t5 = <span>{t4}</span>;\n}\n```\n\n## Expected behavior\n\nThe compiler should not introduce runtime errors that the source code would not produce. Property accesses hoisted from closures into cache keys should be guarded, e.g. by extracting to intermediate variables:\n\n```js\nconst t0 = user?.name;\nif ($[0] !== t0) {\n t1 = () => {\n console.log(user.name);\n };\n $[0] = t0;\n $[1] = t1;\n}\n```\n\n## Workarounds\n\n### 1. Extract to variables\n\nExtract property accesses into variables before using them in closures. The compiler then caches on the primitive values:\n\n```jsx\nconst companyId = user?.company?.id;\nconst email = user?.email;\n\nconst handleClick = async () => {\n console.log(companyId);\n console.log(email);\n};\n```\n\n### 2. Add optional chaining to every closure access\n\nAdding `?.` to every property access inside closures makes the compiler preserve it in cache keys. Note that **every** access must have `?.` — missing it on even one will produce an unsafe cache key for that property path:\n\n```jsx\nconst handleClick = async () => {\n console.log(user?.company.id);\n console.log(user?.email);\n};\n```\n\n### 3. Use nullish coalescing on destructuring\n\nUsing `?? {}` when destructuring the nullable object anywhere in the component signals to the compiler that the value can be nullish. This makes the compiler generate `?.` in **all** cache keys for that object:\n\n```jsx\nconst handleClick = () => {\n const { name, email } = user ?? {};\n console.log(name, email);\n};\n```\n\nThis produces `$[x] !== user?.name` instead of `$[x] !== user.name` in cache keys across the component.\n\n### 4. Add a null guard inside the closure\n\nAdding a null check before the property access inside the closure makes the compiler use the **object reference** as the cache key instead of the property path:\n\n```jsx\nconst handleClick = () => {\n if (!user) return;\n console.log(user.company.id);\n console.log(user.email);\n};\n```\n\nThis produces `$[x] !== user` (the reference) instead of `$[x] !== user.company.id` (the property access) in the cache key. Comparing a reference to `null`/`undefined` never throws.\n\n## Environment\n\n- React Compiler (babel plugin via `react-compiler-runtime`)\n- Webpack 5 with HMR\n- Observed in both HMR hot-update bundles and regular builds\n\n\n### How often does this bug happen?\n\nEvery time\n\n### What version of React are you using?\n\n18.3.1\n\n### What version of React Compiler are you using?\n\n1.0.0","createdAt":"2026-02-11T13:34:24Z","labels":[{"id":"MDU6TGFiZWw0MDkyOTE1MQ==","name":"Type: Bug","description":"","color":"b60205"},{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35762,"title":"[Compiler Bug]: Closure dependency cache keys eagerly evaluate property accesses, causing TypeError on nullable objects"},{"author":{"id":"U_kgDOBtEQIA","is_bot":false,"login":"rstar327","name":""},"body":"<!--\n Please provide a clear and concise description of what the bug is. Include\n screenshots if needed. Please test using the latest version of the relevant\n React packages to make sure your issue has not already been fixed.\n-->\n\nReact version: 19.x\n\n## Steps To Reproduce\n\n1. Create a React project with `eslint-plugin-react-hooks@7.0.1`\n2. Upgrade ESLint to version 10.0.0\n3. Run `npm install`\n\n<!--\n Your bug will get fixed much faster if we can run your code and it doesn't\n have dependencies other than React. Issues without reproduction steps or\n code examples may be immediately closed as not actionable.\n-->\n\nLink to code example:\n\n```json\n{\n \"devDependencies\": {\n \"eslint\": \"^10.0.0\",\n \"eslint-plugin-react-hooks\": \"^7.0.1\"\n }\n}\n```\n<!--\n Please provide a CodeSandbox (https://codesandbox.io/s/new), a link to a\n repository on GitHub, or provide a minimal code example that reproduces the\n problem. You may provide a screenshot of the application if you think it is\n relevant to your bug report. Here are some tips for providing a minimal\n example: https://stackoverflow.com/help/mcve.\n-->\n\n## The current behavior\nnpm error ERESOLVE could not resolve\nnpm error Could not resolve dependency:\nnpm error peer eslint@\"^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0\" from eslint-plugin-react-hooks@7.0.1\n\n## The expected behavior\n\"eslint\": \"^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0\"","createdAt":"2026-02-10T15:59:56Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35758,"title":"Bug: eslint-plugin-react-hooks does not support ESLint 10 in peerDependencies"},{"author":{"id":"U_kgDOBfWIGA","is_bot":false,"login":"subhamkumarr","name":"subham kumar"},"body":"## Description\nThe `ReactProfilerTimer.js` module currently uses a set of global variables (`transitionStartTime`, `transitionUpdateTime`, `transitionUpdateType`, etc.) to track performance metrics for transitions.\n\nThis implementation assumes only one transition is being tracked at a time. However, with concurrent rendering, multiple transitions can be in progress simultaneously in different lanes.\n\nThere is an explicit TODO in the code acknowledging this issue:\n\n```javascript\n// packages/react-reconciler/src/ReactProfilerTimer.js\n\n// TODO: This should really be one per Transition lane.\nexport let transitionClampTime: number = -0;\nexport let transitionStartTime: number = -1.1; // First startTransition call before setState.\nexport let transitionUpdateTime: number = -1.1; // First transition setState scheduled.\n```\n## Impact\nWhen multiple concurrent transitions occur, the following issues arise:\n\n1. **Data Overwrites:** Concurrent transitions will overwrite each other's timing data in these global variables.\n2. **Inaccurate Profiling:** `ReactFiberWorkLoop` will read incorrect start/update times, leading to inaccurate performance profiling data.\n3. **Race Conditions:** It may cause race conditions where the wrong transition's data is logged or used for heuristics.\n\n## Proposed Solution\nRefactor `ReactProfilerTimer.js` to avoid global state for transition timings.\n\n* **Structure:** Store transition timing data in a structure keyed by the transition lane, such as `Map<Lane, TransitionTimers>`.\n* **Implementation:** The `ReactFiberWorkLoop` and other consumers should be updated to pass the relevant `Lane` when recording or reading transition timings, ensuring that data is isolated per transition.\n\n## Affected Files\n* `packages/react-reconciler/src/ReactProfilerTimer.js`\n* `packages/react-reconciler/src/ReactFiberWorkLoop.js`","createdAt":"2026-02-10T15:58:05Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35757,"title":"Bug: ReactProfilerTimer transition timers are global, causing conflicts with concurrent transitions"},{"author":{"id":"U_kgDOByIDJA","is_bot":false,"login":"lumirlumir","name":"루밀LuMir"},"body":"This issue was escalated from the react.dev repository because there was no reply for over a week.\n\nhttps://github.com/reactjs/react.dev/issues/8281\n\n> ### Summary\n> Hi team,\n> \n> Currently, the \"View Deployment\" for change previews isn't working, causing contributors to be directed to incorrect Vercel links.\n> \n> * \"View Deployment\" Button:\n> \n> <img alt=\"image\" width=\"860\" height=\"64\" src=\"https://private-user-images.githubusercontent.com/119669540/542204231-e527c3e6-dbbc-445f-8e20-76209e33f2bc.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzA2MTg3MzQsIm5iZiI6MTc3MDYxODQzNCwicGF0aCI6Ii8xMTk2Njk1NDAvNTQyMjA0MjMxLWU1MjdjM2U2LWRiYmMtNDQ1Zi04ZTIwLTc2MjA5ZTMzZjJiYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMjA5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDIwOVQwNjI3MTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03MDdiYjVhZTdkZmNiMWMwM2EwNTc2MjkzYzVhNTZmYjZkYTY5MDdkMGM5MTc3NzQxMGQ4OTczMjQzNGYzNGRjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.kdIW6LZkKOhNGsaaFLEjWpHqJJl5pAY3x3X1vOKrzPk\">\n> * When I click the button:\n> \n> <img alt=\"image\" width=\"1880\" height=\"450\" src=\"https://private-user-images.githubusercontent.com/119669540/542187154-da6acf1f-71b7-4243-9a2a-73583e510beb.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzA2MTg3MzQsIm5iZiI6MTc3MDYxODQzNCwicGF0aCI6Ii8xMTk2Njk1NDAvNTQyMTg3MTU0LWRhNmFjZjFmLTcxYjctNDI0My05YTJhLTczNTgzZTUxMGJlYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMjA5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDIwOVQwNjI3MTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zY2JkYjY1MjRmNTUxYzZhM2FjZmE3Yjk0ZTdhMTdjM2EyYjkzNTViZmYxYzVjNjY0OGUyZmJhNmZjYzkwYzIxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.qJt8nV73pAanV6qN7S1I_y2eIWldB6b73tf0J6W-ozQ\">\n> It stopped working at some point, and from my investigation, this problem affects the entire React documentation site, including react.dev and other i18n documentation.\n> \n> cc. [@rickhanlonii](https://github.com/rickhanlonii)\n> \n> ### Page\n> [#8277](https://github.com/reactjs/react.dev/pull/8277)\n> \n> ### Details\n> [#8277](https://github.com/reactjs/react.dev/pull/8277)\n> \n> Clicking the 'View Deployment' button in the link above doesn't work for external contributors.\n\n","createdAt":"2026-02-09T06:29:14Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35728,"title":"Bug: View Deployment is not working across react.dev and i18n documentation"},{"author":{"id":"U_kgDOBfWIGA","is_bot":false,"login":"subhamkumarr","name":"subham kumar"},"body":"## Description\nCurrently, calls to `startTransition` and `startGestureTransition` in `packages/react/src/ReactStartTransition.js` initialize `currentTransition.startTime` to `-1`. There is a TODO comment indicating that this should read the timestamp.\n\nThe timestamp is currently lazily set in `ReactFiberWorkLoop.js` when an update is scheduled. This behavior differs from `useTransition`, which correctly sets the start time immediately.\n\nThis issue proposes to:\n\n1. Initialize `startTime` using `performance.now()` (falling back to `Date.now()`) directly in `startTransition` and `startGestureTransition`.\n2. Remove the lazy initialization logic in `ReactFiberWorkLoop.js`.\n\nThis ensures the timestamp accurately reflects when the transition was started, even if updates are processed later.\n\n## Relevant Files\n* `packages/react/src/ReactStartTransition.js`\n* `packages/react-reconciler/src/ReactFiberWorkLoop.js`\n\n## Steps to Reproduce (or verify)\n1. Enable `enableTransitionTracing`.\n2. Inspect `currentTransition.startTime` immediately after creating a transition via `startTransition`. Ideally, it should hold a valid timestamp instead of `-1`.","createdAt":"2026-02-08T21:46:53Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35725,"title":"Bug: Initialize transition start time in startTransition and startGestureTransition"},{"author":{"id":"U_kgDOCTWKKw","is_bot":false,"login":"rhehfl","name":"GuDoYoon(구도윤)"},"body":"The version in `packages/eslint-plugin-react-hooks/src/index.ts` is currently hardcoded as a string (e.g., `'7.0.0'`). This violates the Single Source of Truth (SSOT) principle for version management.\n\nWhile `scripts/shared/ReactVersions.js` manages package versions during the release process and updates `package.json`, it does not update this hardcoded string in the source file. Since this package is published without a bundling step that injects the version (based on the `files` field in `package.json`), it relies on manual updates, which are prone to human error and version mismatches.\n\n**React version:** `main` branch\n\n## Steps To Reproduce\n\n1. Go to `packages/eslint-plugin-react-hooks/src/index.ts` in the main branch.\n2. Check the `meta.version` property in the exported plugin object.\n3. Observe that it is a hardcoded string rather than a dynamic reference to `package.json`.\n\n**Link to code example:**\nhttps://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/src/index.ts\n\n## The current behavior\n\nThe version is explicitly hardcoded in the source file, which creates a risk of metadata inconsistency if the release script updates `package.json` but misses this file.\n```typescript\n// Current implementation\nconst plugin = {\n meta: {\n name: 'eslint-plugin-react-hooks',\n version: '7.0.0', // Hardcoded string\n },\n rules,\n configs,\n};\n```\n\n## The expected behavior\n\nSince ESLint plugins run in a Node.js environment, the version should be dynamically retrieved from `package.json`. This ensures that the runtime version always matches the published package metadata without requiring manual synchronization or complex build injections.\n\nSince the codebase uses TypeScript with ES modules, we should use `import` to dynamically load the version, which is the idiomatic approach in TypeScript/ESM for ensuring SSOT.\n```typescript\n// Proposed change\nimport pkg from '../package.json';\n\nconst plugin = {\n meta: {\n name: 'eslint-plugin-react-hooks',\n version: pkg.version, // Dynamic reference from package.json\n },\n rules,\n configs,\n};\n\nexport default plugin;\n```\n**References:** \n[ESLint official documentation on Plugin Metadata](https://eslint.org/docs/latest/extend/plugins#meta-data-in-plugins). While the documentation shows various examples, the principle of dynamically sourcing metadata from `package.json` is a recommended best practice for maintaining version consistency.","createdAt":"2026-02-08T12:13:39Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35722,"title":"[eslint-plugin-react-hooks] sync plugin version with package.json"},{"author":{"id":"MDQ6VXNlcjQ0ODkwOA==","is_bot":false,"login":"machineghost","name":"Jeremy Walker"},"body":"### Website or app\n\nPrivate App\n\n### Repro steps\n\nTry to profile, get the error\n\n### How often does this bug happen?\n\nEvery time\n\n### DevTools package (automated)\n\nreact-devtools-extensions\n\n### DevTools version (automated)\n\n7.0.1-3cde211b0c\n\n### Error message (automated)\n\nCannot remove node \"1052\" because no matching node was found in the Store.\n\n### Error call stack (automated)\n\n```text\nat chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:726672\n at p.emit (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:680330)\n at chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:682241\n at bridgeListener (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1189368)\n```\n\n### Error component stack (automated)\n\n```text\n\n```\n\n### GitHub query string (automated)\n\n```text\nhttps://api.github.com/search/issues?q=Cannot remove node because no matching node was found in the Store. in:title is:issue is:open is:public label:\"Component: Developer Tools\" repo:facebook/react\n```","createdAt":"2026-02-06T18:57:59Z","labels":[{"id":"MDU6TGFiZWw0MDkyOTE1MQ==","name":"Type: Bug","description":"","color":"b60205"},{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"},{"id":"MDU6TGFiZWw3MTA1NzM1OTU=","name":"Component: Developer Tools","description":"","color":"fbca04"}],"number":35713,"title":"[DevTools Bug] Cannot remove node \"1052\" because no matching node was found in the Store."},{"author":{"id":"U_kgDODH_Fow","is_bot":false,"login":"powercerebro","name":""},"body":"já desinstalei e instalei o chrome e toda hora da esse erro. não tem nenhuma extensão instalada, o tradutor esta desabilitado. tentei no firefox, edge e toda hora da o mesmo erro. não consigo fazer nada no meu produto. \nPode me ajudar?\n\nDesculpe! Uma extensão do navegador pode ter causado um erro.\n\nSabe-se que ferramentas de tradução do navegador (como o Tradutor integrado do Chrome) ou algumas extensões de navegador de terceiros causam erros ao usar o Painel de Controle do Supabase.\n\nRecomendamos fortemente desativar o Chrome Translate ou certas extensões do navegador ao usar o Painel de Controle da Supabase para evitar esse erro. Tente atualizar a página para ver se o problema persiste.\n\nErro: Falha ao executar 'insertBefore' em 'Node': O nó antes do qual o novo nó deve ser inserido não é filho deste nó.","createdAt":"2026-02-05T11:44:41Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35698,"title":"Bug: Erro: Falha ao executar 'insertBefore' em 'Node': O nó antes do qual o novo nó deve ser inserido não é filho deste nó."},{"author":{"id":"MDQ6VXNlcjEwMjU1ODg=","is_bot":false,"login":"bimusiek","name":"Michal Hernas"},"body":"```\nclient[procedureType] is not a function\n```\n<img width=\"1037\" height=\"469\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/28d92c84-2873-46c8-a3b7-c397455fe9f4\" />\n\nReact version:\n19.2.3\n\n## The current behavior\nWhen trying to read properties of the object to show the diff in log, it breaks it.\n\n## The expected behavior\nShould work.\n\nI am not sure if this is to be fixed on React side or TRPC, but it worked in previous versions of React.","createdAt":"2026-01-29T12:23:54Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35657,"title":"Bug: React logComponentRender breaks existing functionalities that utilise proxy (trpc client)"},{"author":{"id":"MDQ6VXNlcjIwNzM2MDk1","is_bot":false,"login":"0099FF","name":"Jarrod W"},"body":"Hi team!\n\nReact currently doesn't support the `autoFocus` prop for anchor tags. This issue has been raised before, however it was automatically marked as `Stale` and closed: https://github.com/facebook/react/issues/26603\n\nMy opinion matches that of the above ticket author: `autofocus` is a [global attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus) and should work for anchor tags just like it does for buttons, text inputs, etc. It sounds like this was discussed several years ago (https://github.com/facebook/react/issues/11851#issuecomment-351672131), however browser support for the `autoFocus` attribute has greatly matured since 2017. I'm not sure modern browsers even need the current polyfill behaviour?\n\nReact version: 18.2.0 (Same behaviour in `main`)\n\n## Steps To Reproduce\n\n1. Add an `a` tag with a `href` value and `autoFocus`.\n2. Observe as the anchor tag is not autofocused on page load.\n\nLink to code example: https://codesandbox.io/p/sandbox/strange-ritchie-wc94dy\n\n<!--\n Please provide a `[Sandbox](https://codesandbox.io/p/sandbox/strange-ritchie-wc94dy)[Sandbox],` a link to a\n repository on GitHub, or provide a minimal code example that reproduces the\n problem. You may provide a screenshot of the application if you think it is\n relevant to your bug report. Here are some tips for providing a minimal\n example: https://stackoverflow.com/help/mcve.\n-->\n\n## The current behavior\n\nAnchor tags do not receive focus on page load if the `autoFocus` prop/attribute is used.\n\n## The expected behavior\n\nAnchor tags do receive focus on page load if the `autoFocus` prop/attribute is used.\n\n\n## Dev Notes\n\nThe problem stems from the following switch cases where only the `button`, `input`, `select` and `textarea` inputs are supported:\n\n- https://github.com/facebook/react/blob/main/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js#L660\n- https://github.com/facebook/react/blob/main/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js#L858\n\nWe are currently using a patch to bring this functionality to our codebase:\n```diff\ndiff --git a/node_modules/react-dom/cjs/react-dom.development.js b/node_modules/react-dom/cjs/react-dom.development.js\nindex e4ed5ae..530c59f 100644\n--- a/node_modules/react-dom/cjs/react-dom.development.js\n+++ b/node_modules/react-dom/cjs/react-dom.development.js\n@@ -10954,6 +10954,7 @@ function finalizeInitialChildren(domElement, type, props, rootContainerInstance,\n case 'input':\n case 'select':\n case 'textarea':\n+ case 'a':\n return !!props.autoFocus;\n \n case 'img':\n@@ -11026,6 +11027,7 @@ function commitMount(domElement, type, newProps, internalInstanceHandle) {\n case 'input':\n case 'select':\n case 'textarea':\n+ case 'a':\n if (newProps.autoFocus) {\n domElement.focus();\n }\ndiff --git a/node_modules/react-dom/cjs/react-dom.production.min.js b/node_modules/react-dom/cjs/react-dom.production.min.js\nindex 7bbc786..a929cd3 100644\n--- a/node_modules/react-dom/cjs/react-dom.production.min.js\n+++ b/node_modules/react-dom/cjs/react-dom.production.min.js\n@@ -229,7 +229,7 @@ h,a),e=[\"children\",\"\"+h]):ea.hasOwnProperty(g)&&null!=h&&\"onScroll\"===g&&D(\"scro\n \"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],a);e=d;break;case \"source\":D(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":D(\"error\",\n a);D(\"load\",a);e=d;break;case \"details\":D(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);D(\"invalid\",a);break;case \"option\":e=d;break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=A({},d,{value:void 0});D(\"invalid\",a);break;case \"textarea\":hb(a,d);e=gb(a,d);D(\"invalid\",a);break;default:e=d}ub(c,e);h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?sb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&nb(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==\n c||\"\"!==k)&&ob(a,k):\"number\"===typeof k&&ob(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ea.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&D(\"scroll\",a):null!=k&&ta(a,f,k,g))}switch(c){case \"input\":Va(a);db(a,d,!1);break;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,\n-!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=Bf)}switch(c){case \"button\":case \"input\":case \"select\":case \"textarea\":d=!!d.autoFocus;break a;case \"img\":d=!0;break a;default:d=!1}}d&&(b.flags|=4)}null!==b.ref&&(b.flags|=512,b.flags|=2097152)}S(b);return null;case 6:if(a&&null!=b.stateNode)Dj(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(p(166));c=Hh(Gh.current);Hh(Eh.current);if(Gg(b)){d=b.stateNode;c=b.memoizedProps;d[Of]=b;if(f=d.nodeValue!==c)if(a=\n+!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=Bf)}switch(c){case \"button\":case \"input\":case \"select\":case \"textarea\":case \"a\":d=!!d.autoFocus;break a;case \"img\":d=!0;break a;default:d=!1}}d&&(b.flags|=4)}null!==b.ref&&(b.flags|=512,b.flags|=2097152)}S(b);return null;case 6:if(a&&null!=b.stateNode)Dj(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(p(166));c=Hh(Gh.current);Hh(Eh.current);if(Gg(b)){d=b.stateNode;c=b.memoizedProps;d[Of]=b;if(f=d.nodeValue!==c)if(a=\n xg,null!==a)switch(a.tag){case 3:Af(d.nodeValue,c,0!==(a.mode&1));break;case 5:!0!==a.memoizedProps.suppressHydrationWarning&&Af(d.nodeValue,c,0!==(a.mode&1))}f&&(b.flags|=4)}else d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[Of]=b,b.stateNode=d}S(b);return null;case 13:E(M);d=b.memoizedState;if(null===a||null!==a.memoizedState&&null!==a.memoizedState.dehydrated){if(I&&null!==yg&&0!==(b.mode&1)&&0===(b.flags&128))Hg(),Ig(),b.flags|=98560,f=!1;else if(f=Gg(b),null!==d&&null!==d.dehydrated){if(null===\n a){if(!f)throw Error(p(318));f=b.memoizedState;f=null!==f?f.dehydrated:null;if(!f)throw Error(p(317));f[Of]=b}else Ig(),0===(b.flags&128)&&(b.memoizedState=null),b.flags|=4;S(b);f=!1}else null!==zg&&(Gj(zg),zg=null),f=!0;if(!f)return b.flags&65536?b:null}if(0!==(b.flags&128))return b.lanes=c,b;d=null!==d;d!==(null!==a&&null!==a.memoizedState)&&d&&(b.child.flags|=8192,0!==(b.mode&1)&&(null===a||0!==(M.current&1)?0===T&&(T=3):uj()));null!==b.updateQueue&&(b.flags|=4);S(b);return null;case 4:return Jh(),\n Bj(a,b),null===a&&sf(b.stateNode.containerInfo),S(b),null;case 10:return Rg(b.type._context),S(b),null;case 17:return Zf(b.type)&&$f(),S(b),null;case 19:E(M);f=b.memoizedState;if(null===f)return S(b),null;d=0!==(b.flags&128);g=f.rendering;if(null===g)if(d)Ej(f,!1);else{if(0!==T||null!==a&&0!==(a.flags&128))for(a=b.child;null!==a;){g=Mh(a);if(null!==g){b.flags|=128;Ej(f,!1);d=g.updateQueue;null!==d&&(b.updateQueue=d,b.flags|=4);b.subtreeFlags=0;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=14680066,\n@@ -259,7 +259,7 @@ rb(\"display\",g))}catch(t){W(a,a.return,t)}}}else if(6===q.tag){if(null===m)try{q\n a),fk(a)}}function fk(a){var b=a.flags;if(b&2){try{a:{for(var c=a.return;null!==c;){if(Uj(c)){var d=c;break a}c=c.return}throw Error(p(160));}switch(d.tag){case 5:var e=d.stateNode;d.flags&32&&(ob(e,\"\"),d.flags&=-33);var f=Vj(a);Xj(a,f,e);break;case 3:case 4:var g=d.stateNode.containerInfo,h=Vj(a);Wj(a,h,g);break;default:throw Error(p(161));}}catch(k){W(a,a.return,k)}a.flags&=-3}b&4096&&(a.flags&=-4097)}function ik(a,b,c){V=a;jk(a,b,c)}\n function jk(a,b,c){for(var d=0!==(a.mode&1);null!==V;){var e=V,f=e.child;if(22===e.tag&&d){var g=null!==e.memoizedState||Kj;if(!g){var h=e.alternate,k=null!==h&&null!==h.memoizedState||U;h=Kj;var l=U;Kj=g;if((U=k)&&!l)for(V=e;null!==V;)g=V,k=g.child,22===g.tag&&null!==g.memoizedState?kk(e):null!==k?(k.return=g,V=k):kk(e);for(;null!==f;)V=f,jk(f,b,c),f=f.sibling;V=e;Kj=h;U=l}lk(a,b,c)}else 0!==(e.subtreeFlags&8772)&&null!==f?(f.return=e,V=f):lk(a,b,c)}}\n function lk(a){for(;null!==V;){var b=V;if(0!==(b.flags&8772)){var c=b.alternate;try{if(0!==(b.flags&8772))switch(b.tag){case 0:case 11:case 15:U||Rj(5,b);break;case 1:var d=b.stateNode;if(b.flags&4&&!U)if(null===c)d.componentDidMount();else{var e=b.elementType===b.type?c.memoizedProps:Lg(b.type,c.memoizedProps);d.componentDidUpdate(e,c.memoizedState,d.__reactInternalSnapshotBeforeUpdate)}var f=b.updateQueue;null!==f&&ih(b,f,d);break;case 3:var g=b.updateQueue;if(null!==g){c=null;if(null!==b.child)switch(b.child.tag){case 5:c=\n-b.child.stateNode;break;case 1:c=b.child.stateNode}ih(b,g,c)}break;case 5:var h=b.stateNode;if(null===c&&b.flags&4){c=h;var k=b.memoizedProps;switch(b.type){case \"button\":case \"input\":case \"select\":case \"textarea\":k.autoFocus&&c.focus();break;case \"img\":k.src&&(c.src=k.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(null===b.memoizedState){var l=b.alternate;if(null!==l){var m=l.memoizedState;if(null!==m){var q=m.dehydrated;null!==q&&bd(q)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;\n+b.child.stateNode;break;case 1:c=b.child.stateNode}ih(b,g,c)}break;case 5:var h=b.stateNode;if(null===c&&b.flags&4){c=h;var k=b.memoizedProps;switch(b.type){case \"button\":case \"input\":case \"select\":case \"textarea\":case \"a\":k.autoFocus&&c.focus();break;case \"img\":k.src&&(c.src=k.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(null===b.memoizedState){var l=b.alternate;if(null!==l){var m=l.memoizedState;if(null!==m){var q=m.dehydrated;null!==q&&bd(q)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;\n default:throw Error(p(163));}U||b.flags&512&&Sj(b)}catch(r){W(b,b.return,r)}}if(b===a){V=null;break}c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}function hk(a){for(;null!==V;){var b=V;if(b===a){V=null;break}var c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}\n function kk(a){for(;null!==V;){var b=V;try{switch(b.tag){case 0:case 11:case 15:var c=b.return;try{Rj(4,b)}catch(k){W(b,c,k)}break;case 1:var d=b.stateNode;if(\"function\"===typeof d.componentDidMount){var e=b.return;try{d.componentDidMount()}catch(k){W(b,e,k)}}var f=b.return;try{Sj(b)}catch(k){W(b,f,k)}break;case 5:var g=b.return;try{Sj(b)}catch(k){W(b,g,k)}}}catch(k){W(b,b.return,k)}if(b===a){V=null;break}var h=b.sibling;if(null!==h){h.return=b.return;V=h;break}V=b.return}}\n var mk=Math.ceil,nk=ua.ReactCurrentDispatcher,ok=ua.ReactCurrentOwner,pk=ua.ReactCurrentBatchConfig,K=0,R=null,Y=null,Z=0,gj=0,fj=Uf(0),T=0,qk=null,hh=0,rk=0,sk=0,tk=null,uk=null,gk=0,Hj=Infinity,vk=null,Pi=!1,Qi=null,Si=null,wk=!1,xk=null,yk=0,zk=0,Ak=null,Bk=-1,Ck=0;function L(){return 0!==(K&6)?B():-1!==Bk?Bk:Bk=B()}\n```\n","createdAt":"2026-01-29T03:29:03Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35656,"title":"Bug: Anchor tags do not support autoFocus"},{"author":{"id":"U_kgDOBgPVuw","is_bot":false,"login":"shubhamtak007","name":"Shubham Tak"},"body":"⨯ Error: Expected a suspended thenable. This is a bug in React. Please file an issue.\n at ignore-listed frames {\n digest: '2559929398'\n}\n\n\n\"react\": \"19.2.1\",\n\"next version\": \"16.1.6\",\n\nrepo:https://github.com/shubhamtak007/coinova\n\nWhen routes changes above error came and whole page stop working.Basically when going to particular coin page from server side list.","createdAt":"2026-01-28T14:58:58Z","labels":[{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35651,"title":"Bug: Expected a suspended thenable"},{"author":{"id":"U_kgDODlKqFg","is_bot":false,"login":"TudorGiuroiu","name":""},"body":"### What kind of issue is this?\n\n- [ ] React Compiler core (the JS output is incorrect, or your app works incorrectly after optimization)\n- [ ] babel-plugin-react-compiler (build issue installing or using the Babel plugin)\n- [x] eslint-plugin-react-hooks (build issue installing or using the eslint plugin)\n- [ ] react-compiler-healthcheck (build issue installing or using the healthcheck script)\n\n### Link to repro\n\nhttps://playground.react.dev/#N4Igzg9grgTgxgUxALhAHRFMCAEcA2AlggHYAuGaJVhAtgA4Qxk7A5YIAKAhjN7WBwBfHADMYEWjgwkEADzIB6EtwBuhAObcyhCNXQk6jZq3bYAsgloRhYiVIwwE3OBQNV5xlgBMEo7lD4LKJQJK66JDgAQlAaAEoI9BLeUOF6ABQAlKxUOHl4emAsTuoIAO4Akt44ALw4AHJQtABGCDDpHDx8AlkA2o4IpWUAtITeGAC6mVQzkflwhSyCdRyW1ulZtQB8OXP584UQ+AgAdPgQGuklxJXe03v7OIqKOOaEYGCEJBo4TmSwJAAhLl8kIADQ4XrXcpVKYghYkSDHM4XdJge77EF5MgwACeu0eB0RR1O50uGAAynRAtovj8FgxjnICuQJPgxOcyhgMaC8No4AALHDpNoSGDIdgkADWJAgZRI2WAWMeCKRp1FTBFMDFPLyIlEX24+Hw+KVD32qpJKPJIAAwsduCQoPRucqhLN9n8ATgADzeQiqLa2gUIOBSnBEchtHDQMj0KAsdIUgXQfDVVo4ACMOA1MAh7xwAAZMj7FP7A1QhCAwSAEQaNCgQEYmCwyLj6Lg2Jx8LEvgB5eg6Qq2cSSHAAcma3Fa+GG9B7Gi+wycLjIwwZ9EIxxgZfeZHHAG5ZukzXlnhut7S9OYIL4JRgjfhKCQRGBaWADQhBN3eyQB0PEUyA9q3AFNKijGAVHwMAUH8aCECEIA\n\n### Repro steps\n\n1. Install eslint-plugin-react-hooks@7.0.1 (or latest).\n2. Create a React component with a clear rule violation (e.g., useMemo with no return value).\n3. Observe that the linter correctly reports the error.\n4. Add a try/catch or try/catch/finally block anywhere inside the component body.\n5. Bug: The linter stops reporting the useMemo error (and all other compiler errors) for that component.\n**Note**: In the React Playground, when recreating the example, I see that the the try/catch/finally block actually throws an error, but the useMemo one is still ignored\n\n### Expected Behavior\nThe linter should flag the useMemo error regardless of the try/catch block present in the component.\n\n### Actual Behavior\nThe linter reports 0 errors. Removing the try/catch block immediately causes the useMemo error to reappear.\n\n### How often does this bug happen?\n\nEvery time\n\n### What version of React are you using?\n\n19.1.1\n\n### What version of React Compiler are you using?\n\nI don't use React compiler, but I use eslint-plugin-react-hooks version 7.0.1","createdAt":"2026-01-27T16:52:55Z","labels":[{"id":"MDU6TGFiZWw0MDkyOTE1MQ==","name":"Type: Bug","description":"","color":"b60205"},{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"}],"number":35644,"title":"[Compiler Bug]: eslint-plugin-react-hooks silent bailout when try/catch/finally block in the same component body"},{"author":{"id":"MDQ6VXNlcjQxMjY1NDEz","is_bot":false,"login":"Innei","name":"Innei"},"body":"<!--\n Please provide a clear and concise description of what the bug is. Include\n screenshots if needed. Please test using the latest version of the relevant\n React packages to make sure your issue has not already been fixed.\n-->\n\n\n\nReact version:\n\nreact: 19.2.3\nreact devtools 7.0.1\n\n## Steps To Reproduce\n\n1. Load this data [profiling-data.27-01-2026.22-07-13.json](https://github.com/user-attachments/files/24885856/profiling-data.27-01-2026.22-07-13.json)\n2. press 100 in nav\n\n<!--\n Your bug will get fixed much faster if we can run your code and it doesn't\n have dependencies other than React. Issues without reproduction steps or\n code examples may be immediately closed as not actionable.\n-->\n\nLink to code example:\n\n<!--\n Please provide a CodeSandbox (https://codesandbox.io/s/new), a link to a\n repository on GitHub, or provide a minimal code example that reproduces the\n problem. You may provide a screenshot of the application if you think it is\n relevant to your bug report. Here are some tips for providing a minimal\n example: https://stackoverflow.com/help/mcve.\n-->\n\n## The current behavior\n```\nThe error was thrown at updateTree (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:699600)\n at getCommitTree (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:698832)\n at $e.getCommitTree (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:703384)\n at CommitFlamegraphAutoSizer (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1005870)\n at renderWithHooks (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:66940)\n at updateFunctionComponent (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:97513)\n at beginWork (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:111594)\n at performUnitOfWork (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:184246)\n at workLoopSync (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:184102)\n at renderRootSync (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:183886)\n\nThe error occurred at CommitFlamegraphAutoSizer (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1005671)\n at div (<anonymous>)\n at div (<anonymous>)\n at div (<anonymous>)\n at SettingsModalContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:879909)\n at chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1144384\n at ao (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:898411)\n at div (<anonymous>)\n at div (<anonymous>)\n at ThemeProvider (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:901116)\n at chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:901313\n at div (<anonymous>)\n at div (<anonymous>)\n at div (<anonymous>)\n at ThemeProvider (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:901116)\n at SuspenseTreeContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1147064)\n at InspectedElementContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:915935)\n at TimelineContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:994422)\n at ProfilerContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:986233)\n at TreeContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:786019)\n at SettingsContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:815755)\n at ModalDialogContextController (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:972480)\n at DevTools_DevTools (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1175879)\n```\n## The expected behavior\n\nNo throw","createdAt":"2026-01-27T14:17:31Z","labels":[{"id":"MDU6TGFiZWw0MDkyOTE1MQ==","name":"Type: Bug","description":"","color":"b60205"},{"id":"MDU6TGFiZWwxNTU5ODQxNjA=","name":"Status: Unconfirmed","description":"A potential issue that we haven't yet confirmed as a bug","color":"d4c5f9"},{"id":"MDU6TGFiZWw3MTA1NzM1OTU=","name":"Component: Developer Tools","description":"","color":"fbca04"}],"number":35640,"title":"Bug: Uncaught Error: Commit tree already contains fiber \"725\". This is a bug in React DevTools."}]