{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":45281256,"defaultBranch":"master","name":"react","ownerLogin":"acdlite","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2015-10-30T23:18:48.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/3624098?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1716483294.0","currentOid":""},"activityList":{"items":[{"before":"8ad45be66f92ff53b67a5dc55a228ec99472de4e","after":"e8b016ccc6da25787f3821c463644301412d0f97","ref":"refs/heads/throw-if-react-version-mismatch","pushedAt":"2024-05-24T16:08:45.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"acdlite","name":"Andrew Clark","path":"/acdlite","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3624098?s=80&v=4"},"commit":{"message":"Detect react-native-renderer mismatch, too","shortMessageHtmlLink":"Detect react-native-renderer mismatch, too"}},{"before":"d7c40cac5427c66d72635763b65f205333350d78","after":"8ad45be66f92ff53b67a5dc55a228ec99472de4e","ref":"refs/heads/throw-if-react-version-mismatch","pushedAt":"2024-05-23T23:48:46.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"acdlite","name":"Andrew Clark","path":"/acdlite","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3624098?s=80&v=4"},"commit":{"message":"Throw if React and React DOM versions don't match\n\nThrow an error during module initialization if the version of the\n\"react-dom\" package does not match the version of \"react\".\n\nWe used to be more relaxed about this, because the \"react\" package\nchanged so infrequently. However, we now have many more features that\nrely on an internal protocol between the two packages, including Hooks,\nFloat, and the compiler runtime. So it's important that both packages\nare versioned in lockstep.\n\nBefore this change, a version mismatch would often result in a cryptic\ninternal error with no indication of the root cause.\n\nInstead, we will now compare the versions during module initialization\nand immediately throw an error to catch mistakes as early as possible\nand provide a clear error message.","shortMessageHtmlLink":"Throw if React and React DOM versions don't match"}},{"before":"afb7de33119276cf2c2877375d1d7df44d319f41","after":"d7c40cac5427c66d72635763b65f205333350d78","ref":"refs/heads/throw-if-react-version-mismatch","pushedAt":"2024-05-23T21:25:20.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"acdlite","name":"Andrew Clark","path":"/acdlite","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3624098?s=80&v=4"},"commit":{"message":"Throw if React and React DOM versions don't match\n\nThrow an error during module initialization if the version of the\n\"react-dom\" package does not match the version of \"react\".\n\nWe used to be more relaxed about this, because the \"react\" package\nchanged so infrequently. However, we now have many more features that\nrely on an internal protocol between the two packages, including Hooks,\nFloat, and the compiler runtime. So it's important that both packages\nare versioned in lockstep.\n\nBefore this change, a version mismatch would often result in a cryptic\ninternal error with no indication of the root cause.\n\nInstead, we will now compare the versions during module initialization\nand immediately throw an error to catch mistakes as early as possible\nand provide a clear error message.","shortMessageHtmlLink":"Throw if React and React DOM versions don't match"}},{"before":null,"after":"afb7de33119276cf2c2877375d1d7df44d319f41","ref":"refs/heads/throw-if-react-version-mismatch","pushedAt":"2024-05-23T16:54:54.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"acdlite","name":"Andrew Clark","path":"/acdlite","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3624098?s=80&v=4"},"commit":{"message":"Throw if React and React DOM versions don't match\n\nThrow an error during module initialization if the version of the\n\"react-dom\" package does not match the version of \"react\".\n\nWe used to be more relaxed about this, because the \"react\" package\nchanged so infrequently. However, we now have many more features that\nrely on an internal protocol between the two packages, including Hooks,\nFloat, and the compiler runtime. So it's important that both packages\nare versioned in lockstep.\n\nBefore this change, a version mismatch would often result in a cryptic\ninternal error with no indication of the root cause.\n\nInstead, we will now compare the versions during module initialization\nand immediately throw an error to catch mistakes as early as possible\nand provide a clear error message.","shortMessageHtmlLink":"Throw if React and React DOM versions don't match"}},{"before":"56f70178910cc9bfc03dd82b3ae19771789a1cc7","after":"12a387d95e81a9507ade8fb796ded27615188c2f","ref":"refs/heads/fix-async-batching-starttransition","pushedAt":"2024-05-23T03:36:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"acdlite","name":"Andrew Clark","path":"/acdlite","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3624098?s=80&v=4"},"commit":{"message":"Fix async batching in React.startTransition\n\nDiscovered a flaw in the current implementation of the isomorphic\nstartTransition implementation (React.startTransition), related to async\nactions. It only creates an async scope if something calls setState\nwithin the synchronous part of the action (i.e. before the first\n`await`). I had thought this was fine because if there's no update\nduring this part, then there's nothing that needs to be entangled. I\ndidn't think this through, though — if there are multiple async updates\ninterleaved throughout the rest of the action, we need the async scope\nto have already been created so that _those_ are batched together.\n\nAn even easier way to observe this is to schedule an optimistic update\nafter an `await` — the optimistic update should not be reverted until\nthe async action is complete.\n\nTo implement, during the reconciler's module initialization, we compose\nits startTransition implementation with any previous reconciler's\nstartTransition that was already initialized. Then, the isomorphic\nstartTransition is the composition of every\nreconciler's startTransition.\n\nfunction startTransition() {\n startTransitionDOM(() => {\n startTransitionART(() => {\n startTransitionThreeFiber(() => {\n // and so on...\n });\n });\n });\n});\n\nThis is basically how flushSync is implemented, too.","shortMessageHtmlLink":"Fix async batching in React.startTransition"}},{"before":"69d94fcb37dd5eba70235d24da6d2af2176aff3f","after":"56f70178910cc9bfc03dd82b3ae19771789a1cc7","ref":"refs/heads/fix-async-batching-starttransition","pushedAt":"2024-05-23T03:04:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"acdlite","name":"Andrew Clark","path":"/acdlite","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3624098?s=80&v=4"},"commit":{"message":"Fix async batching in React.startTransition\n\nDiscovered a flaw in the current implementation of the isomorphic\nstartTransition implementation (React.startTransition), related to async\nactions. It only creates an async scope if something calls setState\nwithin the synchronous part of the action (i.e. before the first\n`await`). I had thought this was fine because if there's no update\nduring this part, then there's nothing that needs to be entangled. I\ndidn't think this through, though — if there are multiple async updates\ninterleaved throughout the rest of the action, we need the async scope\nto have already been created so that _those_ are batched together.\n\nAn even more easier way to observe this is to schedule an optimistic\nupdate after an `await` — the optimistic update should not be reverted\nuntil the async action is complete.\n\nTo implement, during the reconciler's module initialization, we compose\nits startTransition implementation with any previous reconciler's\nstartTransition that was already initialized. Then, the isomorphic\nstartTransition is the composition of every\nreconciler's startTransition.\n\nfunction startTransition() {\n startTransitionDOM(() => {\n startTransitionART(() => {\n startTransitionThreeFiber(() => {\n // and so on...\n });\n });\n });\n});\n\nThis is basically how flushSync is implemented, too.","shortMessageHtmlLink":"Fix async batching in React.startTransition"}},{"before":null,"after":"69d94fcb37dd5eba70235d24da6d2af2176aff3f","ref":"refs/heads/fix-async-batching-starttransition","pushedAt":"2024-05-23T02:37:42.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"acdlite","name":"Andrew Clark","path":"/acdlite","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3624098?s=80&v=4"},"commit":{"message":"Fix async batching in React.startTransition\n\nDiscovered a flaw in the current implementation of the isomorphic\nstartTransition implementation (React.startTransition), related to async\nactions. It only creates an async scope if something calls setState\nwithin the synchronous part of the action (i.e. before the first\n`await`). I had thought this was fine because if there's no update\nduring this part, then there's nothing that needs to be entangled. I\ndidn't think this through, though — if there are multiple async updates\ninterleaved throughout the rest of the action, we need the async scope\nto have already been created so that _those_ are batched together.\n\nAn even more easier way to observe this is to schedule an optimistic\nupdate after an `await` — the optimistic update should not be reverted\nuntil the async action is complete.\n\nTo implement, during the reconciler's module initialization, we compose\nits startTransition implementation with any previous reconciler's\nstartTransition that was already initialized. Then, the isomorphic\nstartTransition is the composition of every\nreconciler's startTransition.\n\nfunction startTransition() {\n startTransitionDOM(() => {\n startTransitionART(() => {\n startTransitionThreeFiber(() => {\n // and so on...\n });\n });\n });\n});\n\nThis is basically how flushSync is implemented, too.","shortMessageHtmlLink":"Fix async batching in React.startTransition"}},{"before":null,"after":"6a4ea52ddaac555b9439868d7eb7801bb6baba2d","ref":"refs/heads/19-bump-beta-to-rc","pushedAt":"2024-05-15T14:51:14.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"acdlite","name":"Andrew Clark","path":"/acdlite","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3624098?s=80&v=4"},"commit":{"message":"Bump 19 beta to rc\n\nThis updates the Canary label from \"beta\" to \"rc\".\n\nWe will publish an actual RC (e.g. 19.0.0-rc.0)\ntoo; this only changes the label in the\ncanary releases.","shortMessageHtmlLink":"Bump 19 beta to rc"}},{"before":"68ddf36d58abea5b04152694f195f56a15e52810","after":"a23e517ffc4cae96d54cdfaf17ecad8cb2e056d9","ref":"refs/heads/useformstatus-pe","pushedAt":"2024-05-09T17:15:28.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"acdlite","name":"Andrew Clark","path":"/acdlite","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3624098?s=80&v=4"},"commit":{"message":"useFormStatus in progressively-enhanced forms\n\nBefore this change, `useFormStatus` is only activated if a form is\nsubmitted by an action function (either
or\n