diff --git a/compiler/apps/playground/.vscode/extensions.json b/compiler/apps/playground/.vscode/extensions.json
deleted file mode 100644
index 7223b9d9125..00000000000
--- a/compiler/apps/playground/.vscode/extensions.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "recommendations": ["bradlc.vscode-tailwindcss", "heybourn.headwind"]
-}
diff --git a/compiler/apps/playground/scripts/link-compiler.sh b/compiler/apps/playground/scripts/link-compiler.sh
old mode 100755
new mode 100644
diff --git a/compiler/packages/babel-plugin-react-compiler/scripts/link-react-compiler-runtime.sh b/compiler/packages/babel-plugin-react-compiler/scripts/link-react-compiler-runtime.sh
old mode 100755
new mode 100644
diff --git a/compiler/packages/babel-plugin-react-compiler/scripts/ts-analyze-trace.sh b/compiler/packages/babel-plugin-react-compiler/scripts/ts-analyze-trace.sh
old mode 100755
new mode 100644
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-later-mutation.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-later-mutation.expect.md
deleted file mode 100644
index d8223e29498..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-later-mutation.expect.md
+++ /dev/null
@@ -1,59 +0,0 @@
-
-## Input
-
-```javascript
-// @validatePreserveExistingMemoizationGuarantees
-
-/**
- * Repro from https://github.com/facebook/react/issues/34262
- *
- * The compiler memoizes more precisely than the original code, with two reactive scopes:
- * - One for `transform(input)` with `input` as dep
- * - One for `{value}` with `value` as dep
- *
- * When we validate preserving manual memoization we incorrectly reject this, because
- * the original memoization had `object` depending on `input` but our scope depends on
- * `value`.
- *
- * This fixture adds a later potential mutation, which extends the scope and should
- * fail validation. This confirms that even though we allow the dependency to diverge,
- * we still check that the output value is memoized.
- */
-function useInputValue(input) {
- const object = React.useMemo(() => {
- const {value} = transform(input);
- return {value};
- }, [input]);
- mutate(object);
- return object;
-}
-
-```
-
-
-## Error
-
-```
-Found 1 error:
-
-Compilation Skipped: Existing memoization could not be preserved
-
-React Compiler has skipped optimizing this component because the existing manual memoization could not be preserved. This value was memoized in source but not in compilation output.
-
-error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-later-mutation.ts:19:17
- 17 | */
- 18 | function useInputValue(input) {
-> 19 | const object = React.useMemo(() => {
- | ^^^^^^^^^^^^^^^^^^^^^
-> 20 | const {value} = transform(input);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-> 21 | return {value};
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-> 22 | }, [input]);
- | ^^^^^^^^^^^^^^ Could not preserve existing memoization
- 23 | mutate(object);
- 24 | return object;
- 25 | }
-```
-
-
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inner-function/nullable-objects/assume-invoked/function-with-conditional-callsite-in-another-function.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inner-function/nullable-objects/assume-invoked/function-with-conditional-callsite-in-another-function.expect.md
deleted file mode 100644
index 8301912b024..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inner-function/nullable-objects/assume-invoked/function-with-conditional-callsite-in-another-function.expect.md
+++ /dev/null
@@ -1,130 +0,0 @@
-
-## Input
-
-```javascript
-import {createHookWrapper} from 'shared-runtime';
-
-/**
- * (Given that the returned lambda is assumed to be invoked, see
- * return-function)
- *
- * If lambda A conditionally calls lambda B, optimistically assume that property
- * loads from lambda B has the same hoistability of ones from lambda A. This
- * helps optimize components / hooks that create and chain many helper
- * functions.
- *
- * Type systems and code readability encourage developers to colocate length and
- * null checks values in the same function as where values are used. i.e.
- * developers are unlikely to write the following code.
- * ```js
- * function useFoo(obj, objNotNullAndHasElements) {
- * // ...
- * const get0th = () => obj.arr[0].value;
- * return () => objNotNullAndHasElements ? get0th : undefined;
- * }
- * ```
- *
- * In Meta code, this assumption helps reduce the number of memo dependency
- * deopts.
- */
-function useMakeCallback({
- obj,
- cond,
- setState,
-}: {
- obj: {value: number};
- cond: boolean;
- setState: (newState: number) => void;
-}) {
- const cb = () => setState(obj.value);
- // cb's property loads are assumed to be hoistable to the start of this lambda
- return () => (cond ? cb() : undefined);
-}
-
-const setState = (arg: number) => {
- 'use no memo';
- return arg;
-};
-export const FIXTURE_ENTRYPOINT = {
- fn: createHookWrapper(useMakeCallback),
- params: [{obj: {value: 1}, cond: true, setState}],
- sequentialRenders: [
- {obj: {value: 1}, cond: true, setState},
- {obj: {value: 2}, cond: true, setState},
- ],
-};
-
-```
-
-## Code
-
-```javascript
-import { c as _c } from "react/compiler-runtime";
-import { createHookWrapper } from "shared-runtime";
-
-/**
- * (Given that the returned lambda is assumed to be invoked, see
- * return-function)
- *
- * If lambda A conditionally calls lambda B, optimistically assume that property
- * loads from lambda B has the same hoistability of ones from lambda A. This
- * helps optimize components / hooks that create and chain many helper
- * functions.
- *
- * Type systems and code readability encourage developers to colocate length and
- * null checks values in the same function as where values are used. i.e.
- * developers are unlikely to write the following code.
- * ```js
- * function useFoo(obj, objNotNullAndHasElements) {
- * // ...
- * const get0th = () => obj.arr[0].value;
- * return () => objNotNullAndHasElements ? get0th : undefined;
- * }
- * ```
- *
- * In Meta code, this assumption helps reduce the number of memo dependency
- * deopts.
- */
-function useMakeCallback(t0) {
- const $ = _c(6);
- const { obj, cond, setState } = t0;
- let t1;
- if ($[0] !== obj.value || $[1] !== setState) {
- t1 = () => setState(obj.value);
- $[0] = obj.value;
- $[1] = setState;
- $[2] = t1;
- } else {
- t1 = $[2];
- }
- const cb = t1;
- let t2;
- if ($[3] !== cb || $[4] !== cond) {
- t2 = () => (cond ? cb() : undefined);
- $[3] = cb;
- $[4] = cond;
- $[5] = t2;
- } else {
- t2 = $[5];
- }
- return t2;
-}
-
-const setState = (arg: number) => {
- "use no memo";
- return arg;
-};
-export const FIXTURE_ENTRYPOINT = {
- fn: createHookWrapper(useMakeCallback),
- params: [{ obj: { value: 1 }, cond: true, setState }],
- sequentialRenders: [
- { obj: { value: 1 }, cond: true, setState },
- { obj: { value: 2 }, cond: true, setState },
- ],
-};
-
-```
-
-### Eval output
-(kind: ok)
{"result":{"kind":"Function","result":1},"shouldInvokeFns":true}
-{"result":{"kind":"Function","result":2},"shouldInvokeFns":true}
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inner-function/nullable-objects/assume-invoked/function-with-conditional-callsite-in-another-function.ts b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inner-function/nullable-objects/assume-invoked/function-with-conditional-callsite-in-another-function.ts
deleted file mode 100644
index b6283aa6a6b..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inner-function/nullable-objects/assume-invoked/function-with-conditional-callsite-in-another-function.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import {createHookWrapper} from 'shared-runtime';
-
-/**
- * (Given that the returned lambda is assumed to be invoked, see
- * return-function)
- *
- * If lambda A conditionally calls lambda B, optimistically assume that property
- * loads from lambda B has the same hoistability of ones from lambda A. This
- * helps optimize components / hooks that create and chain many helper
- * functions.
- *
- * Type systems and code readability encourage developers to colocate length and
- * null checks values in the same function as where values are used. i.e.
- * developers are unlikely to write the following code.
- * ```js
- * function useFoo(obj, objNotNullAndHasElements) {
- * // ...
- * const get0th = () => obj.arr[0].value;
- * return () => objNotNullAndHasElements ? get0th : undefined;
- * }
- * ```
- *
- * In Meta code, this assumption helps reduce the number of memo dependency
- * deopts.
- */
-function useMakeCallback({
- obj,
- cond,
- setState,
-}: {
- obj: {value: number};
- cond: boolean;
- setState: (newState: number) => void;
-}) {
- const cb = () => setState(obj.value);
- // cb's property loads are assumed to be hoistable to the start of this lambda
- return () => (cond ? cb() : undefined);
-}
-
-const setState = (arg: number) => {
- 'use no memo';
- return arg;
-};
-export const FIXTURE_ENTRYPOINT = {
- fn: createHookWrapper(useMakeCallback),
- params: [{obj: {value: 1}, cond: true, setState}],
- sequentialRenders: [
- {obj: {value: 1}, cond: true, setState},
- {obj: {value: 2}, cond: true, setState},
- ],
-};
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/error.todo-optional-member-expression-with-conditional-optional.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/error.todo-optional-member-expression-with-conditional-optional.expect.md
deleted file mode 100644
index 14ea4e75938..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/error.todo-optional-member-expression-with-conditional-optional.expect.md
+++ /dev/null
@@ -1,57 +0,0 @@
-
-## Input
-
-```javascript
-// @validatePreserveExistingMemoizationGuarantees @enableOptionalDependencies @enablePropagateDepsInHIR
-import {ValidateMemoization} from 'shared-runtime';
-function Component(props) {
- const data = useMemo(() => {
- const x = [];
- x.push(props?.items);
- if (props.cond) {
- x.push(props?.items);
- }
- return x;
- }, [props?.items, props.cond]);
- return (
-
- );
-}
-
-```
-
-
-## Error
-
-```
-Found 1 error:
-
-Compilation Skipped: Existing memoization could not be preserved
-
-React Compiler has skipped optimizing this component because the existing manual memoization could not be preserved. The inferred dependencies did not match the manually specified dependencies, which could cause the value to change more or less frequently than expected. The inferred dependency was `props.items`, but the source dependencies were [props?.items, props.cond]. Inferred different dependency than source.
-
-error.todo-optional-member-expression-with-conditional-optional.ts:4:23
- 2 | import {ValidateMemoization} from 'shared-runtime';
- 3 | function Component(props) {
-> 4 | const data = useMemo(() => {
- | ^^^^^^^
-> 5 | const x = [];
- | ^^^^^^^^^^^^^^^^^
-> 6 | x.push(props?.items);
- | ^^^^^^^^^^^^^^^^^
-> 7 | if (props.cond) {
- | ^^^^^^^^^^^^^^^^^
-> 8 | x.push(props?.items);
- | ^^^^^^^^^^^^^^^^^
-> 9 | }
- | ^^^^^^^^^^^^^^^^^
-> 10 | return x;
- | ^^^^^^^^^^^^^^^^^
-> 11 | }, [props?.items, props.cond]);
- | ^^^^ Could not preserve existing manual memoization
- 12 | return (
- 13 |
- 14 | );
-```
-
-
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reactive-dependencies-non-optional-properties-inside-optional-chain.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reactive-dependencies-non-optional-properties-inside-optional-chain.expect.md
deleted file mode 100644
index 9a524e6357a..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reactive-dependencies-non-optional-properties-inside-optional-chain.expect.md
+++ /dev/null
@@ -1,32 +0,0 @@
-
-## Input
-
-```javascript
-// @enablePropagateDepsInHIR
-function Component(props) {
- return props.post.feedback.comments?.edges?.map(render);
-}
-
-```
-
-## Code
-
-```javascript
-import { c as _c } from "react/compiler-runtime"; // @enablePropagateDepsInHIR
-function Component(props) {
- const $ = _c(2);
- let t0;
- if ($[0] !== props.post.feedback.comments?.edges) {
- t0 = props.post.feedback.comments?.edges?.map(render);
- $[0] = props.post.feedback.comments?.edges;
- $[1] = t0;
- } else {
- t0 = $[1];
- }
- return t0;
-}
-
-```
-
-### Eval output
-(kind: exception) Fixture not implemented
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/infer-function-uncond-access-hoists-other-dep.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/infer-function-uncond-access-hoists-other-dep.expect.md
deleted file mode 100644
index d82956e4a0d..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/infer-function-uncond-access-hoists-other-dep.expect.md
+++ /dev/null
@@ -1,92 +0,0 @@
-
-## Input
-
-```javascript
-// @enablePropagateDepsInHIR
-
-import {identity, makeArray, Stringify, useIdentity} from 'shared-runtime';
-
-function Foo({a, cond}) {
- // Assume fn will be uncond evaluated, so we can safely evaluate {a.,
- // a.b. [a, a.b.c];
- useIdentity(null);
- const x = makeArray();
- if (cond) {
- x.push(identity(a.b.c));
- }
- return ;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: Foo,
- params: [{a: null, cond: true}],
- sequentialRenders: [
- {a: null, cond: true},
- {a: {b: {c: 4}}, cond: true},
- {a: {b: {c: 4}}, cond: true},
- ],
-};
-
-```
-
-## Code
-
-```javascript
-import { c as _c } from "react/compiler-runtime"; // @enablePropagateDepsInHIR
-
-import { identity, makeArray, Stringify, useIdentity } from "shared-runtime";
-
-function Foo(t0) {
- const $ = _c(8);
- const { a, cond } = t0;
- let t1;
- if ($[0] !== a) {
- t1 = () => [a, a.b.c];
- $[0] = a;
- $[1] = t1;
- } else {
- t1 = $[1];
- }
- const fn = t1;
- useIdentity(null);
- let x;
- if ($[2] !== a.b.c || $[3] !== cond) {
- x = makeArray();
- if (cond) {
- x.push(identity(a.b.c));
- }
- $[2] = a.b.c;
- $[3] = cond;
- $[4] = x;
- } else {
- x = $[4];
- }
- let t2;
- if ($[5] !== fn || $[6] !== x) {
- t2 = ;
- $[5] = fn;
- $[6] = x;
- $[7] = t2;
- } else {
- t2 = $[7];
- }
- return t2;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: Foo,
- params: [{ a: null, cond: true }],
- sequentialRenders: [
- { a: null, cond: true },
- { a: { b: { c: 4 } }, cond: true },
- { a: { b: { c: 4 } }, cond: true },
- ],
-};
-
-```
-
-### Eval output
-(kind: ok) [[ (exception in render) TypeError: Cannot read properties of null (reading 'b') ]]
-{"fn":{"kind":"Function","result":[{"b":{"c":4}},4]},"x":[4],"shouldInvokeFns":true}
-{"fn":{"kind":"Function","result":[{"b":{"c":4}},4]},"x":[4],"shouldInvokeFns":true}
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/infer-function-uncond-optional-hoists-other-dep.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/infer-function-uncond-optional-hoists-other-dep.expect.md
deleted file mode 100644
index c81e59eceaf..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/infer-function-uncond-optional-hoists-other-dep.expect.md
+++ /dev/null
@@ -1,91 +0,0 @@
-
-## Input
-
-```javascript
-// @enablePropagateDepsInHIR
-
-import {identity, makeArray, Stringify, useIdentity} from 'shared-runtime';
-
-function Foo({a, cond}) {
- // Assume fn can be uncond evaluated, so we can safely evaluate a.b?.c.
- const fn = () => [a, a.b?.c.d];
- useIdentity(null);
- const arr = makeArray();
- if (cond) {
- arr.push(identity(a.b?.c.e));
- }
- return ;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: Foo,
- params: [{a: null, cond: true}],
- sequentialRenders: [
- {a: null, cond: true},
- {a: {b: {c: {d: 5}}}, cond: true},
- {a: {b: null}, cond: false},
- ],
-};
-
-```
-
-## Code
-
-```javascript
-import { c as _c } from "react/compiler-runtime"; // @enablePropagateDepsInHIR
-
-import { identity, makeArray, Stringify, useIdentity } from "shared-runtime";
-
-function Foo(t0) {
- const $ = _c(8);
- const { a, cond } = t0;
- let t1;
- if ($[0] !== a) {
- t1 = () => [a, a.b?.c.d];
- $[0] = a;
- $[1] = t1;
- } else {
- t1 = $[1];
- }
- const fn = t1;
- useIdentity(null);
- let arr;
- if ($[2] !== a.b?.c.e || $[3] !== cond) {
- arr = makeArray();
- if (cond) {
- arr.push(identity(a.b?.c.e));
- }
- $[2] = a.b?.c.e;
- $[3] = cond;
- $[4] = arr;
- } else {
- arr = $[4];
- }
- let t2;
- if ($[5] !== arr || $[6] !== fn) {
- t2 = ;
- $[5] = arr;
- $[6] = fn;
- $[7] = t2;
- } else {
- t2 = $[7];
- }
- return t2;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: Foo,
- params: [{ a: null, cond: true }],
- sequentialRenders: [
- { a: null, cond: true },
- { a: { b: { c: { d: 5 } } }, cond: true },
- { a: { b: null }, cond: false },
- ],
-};
-
-```
-
-### Eval output
-(kind: ok) [[ (exception in render) TypeError: Cannot read properties of null (reading 'b') ]]
-{"fn":{"kind":"Function","result":[{"b":{"c":{"d":5}}},5]},"arr":[null],"shouldInvokeFns":true}
-{"fn":{"kind":"Function","result":[{"b":null},null]},"arr":[],"shouldInvokeFns":true}
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/infer-nested-function-uncond-access-local-var.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/infer-nested-function-uncond-access-local-var.expect.md
deleted file mode 100644
index 8a090ef8966..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/infer-nested-function-uncond-access-local-var.expect.md
+++ /dev/null
@@ -1,65 +0,0 @@
-
-## Input
-
-```javascript
-// @enablePropagateDepsInHIR
-
-import {shallowCopy, Stringify, mutate} from 'shared-runtime';
-
-function useFoo({a}: {a: {b: {c: number}}}) {
- const local = shallowCopy(a);
- mutate(local);
- const fn = () => [() => local.b.c];
- return ;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: useFoo,
- params: [{a: null}],
- sequentialRenders: [{a: null}, {a: {b: {c: 4}}}],
-};
-
-```
-
-## Code
-
-```javascript
-import { c as _c } from "react/compiler-runtime"; // @enablePropagateDepsInHIR
-
-import { shallowCopy, Stringify, mutate } from "shared-runtime";
-
-function useFoo(t0) {
- const $ = _c(4);
- const { a } = t0;
- let local;
- if ($[0] !== a) {
- local = shallowCopy(a);
- mutate(local);
- $[0] = a;
- $[1] = local;
- } else {
- local = $[1];
- }
- let t1;
- if ($[2] !== local) {
- const fn = () => [() => local.b.c];
- t1 = ;
- $[2] = local;
- $[3] = t1;
- } else {
- t1 = $[3];
- }
- return t1;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: useFoo,
- params: [{ a: null }],
- sequentialRenders: [{ a: null }, { a: { b: { c: 4 } } }],
-};
-
-```
-
-### Eval output
-(kind: ok) [[ (exception in render) TypeError: Cannot read properties of undefined (reading 'c') ]]
-{"fn":{"kind":"Function","result":[{"kind":"Function","result":4}]},"shouldInvokeFns":true}
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/todo-infer-function-uncond-optionals-hoisted.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/todo-infer-function-uncond-optionals-hoisted.expect.md
deleted file mode 100644
index ed56ff06811..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/propagate-scope-deps-hir-fork/reduce-reactive-deps/todo-infer-function-uncond-optionals-hoisted.expect.md
+++ /dev/null
@@ -1,64 +0,0 @@
-
-## Input
-
-```javascript
-// @enablePropagateDepsInHIR
-
-import {Stringify} from 'shared-runtime';
-
-function useFoo({a}) {
- return a.b?.c.d?.e} shouldInvokeFns={true} />;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: useFoo,
- params: [{a: null}],
- sequentialRenders: [
- {a: null},
- {a: {b: null}},
- {a: {b: {c: {d: null}}}},
- {a: {b: {c: {d: {e: 4}}}}},
- ],
-};
-
-```
-
-## Code
-
-```javascript
-import { c as _c } from "react/compiler-runtime"; // @enablePropagateDepsInHIR
-
-import { Stringify } from "shared-runtime";
-
-function useFoo(t0) {
- const $ = _c(2);
- const { a } = t0;
- let t1;
- if ($[0] !== a.b?.c.d?.e) {
- t1 = a.b?.c.d?.e} shouldInvokeFns={true} />;
- $[0] = a.b?.c.d?.e;
- $[1] = t1;
- } else {
- t1 = $[1];
- }
- return t1;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: useFoo,
- params: [{ a: null }],
- sequentialRenders: [
- { a: null },
- { a: { b: null } },
- { a: { b: { c: { d: null } } } },
- { a: { b: { c: { d: { e: 4 } } } } },
- ],
-};
-
-```
-
-### Eval output
-(kind: ok) [[ (exception in render) TypeError: Cannot read properties of null (reading 'b') ]]
-{"fn":{"kind":"Function"},"shouldInvokeFns":true}
-{"fn":{"kind":"Function"},"shouldInvokeFns":true}
-{"fn":{"kind":"Function","result":4},"shouldInvokeFns":true}
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/repro-object-expression-computed-key-modified-during-after-construction-hoisted-sequence-expr.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/repro-object-expression-computed-key-modified-during-after-construction-hoisted-sequence-expr.expect.md
deleted file mode 100644
index 407a9744250..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/repro-object-expression-computed-key-modified-during-after-construction-hoisted-sequence-expr.expect.md
+++ /dev/null
@@ -1,90 +0,0 @@
-
-## Input
-
-```javascript
-// @enableNewMutationAliasingModel
-import {identity, mutate} from 'shared-runtime';
-
-/**
- * Fixed in the new inference model.
- *
- * Bug: copy of error.todo-object-expression-computed-key-modified-during-after-construction-sequence-expr
- * with the mutation hoisted to a named variable instead of being directly
- * inlined into the Object key.
- *
- * Found differences in evaluator results
- * Non-forget (expected):
- * (kind: ok) [{"[object Object]":[42]},{"wat0":"joe","wat1":"joe"}]
- * [{"[object Object]":[42]},{"wat0":"joe","wat1":"joe"}]
- * Forget:
- * (kind: ok) [{"[object Object]":[42]},{"wat0":"joe","wat1":"joe"}]
- * [{"[object Object]":[42]},{"wat0":"joe","wat1":"joe","wat2":"joe"}]
- */
-function Component(props) {
- const key = {};
- const tmp = (mutate(key), key);
- const context = {
- // Here, `tmp` is frozen (as it's inferred to be a primitive/string)
- [tmp]: identity([props.value]),
- };
- mutate(key);
- return [context, key];
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: Component,
- params: [{value: 42}],
- sequentialRenders: [{value: 42}, {value: 42}],
-};
-
-```
-
-## Code
-
-```javascript
-import { c as _c } from "react/compiler-runtime"; // @enableNewMutationAliasingModel
-import { identity, mutate } from "shared-runtime";
-
-/**
- * Fixed in the new inference model.
- *
- * Bug: copy of error.todo-object-expression-computed-key-modified-during-after-construction-sequence-expr
- * with the mutation hoisted to a named variable instead of being directly
- * inlined into the Object key.
- *
- * Found differences in evaluator results
- * Non-forget (expected):
- * (kind: ok) [{"[object Object]":[42]},{"wat0":"joe","wat1":"joe"}]
- * [{"[object Object]":[42]},{"wat0":"joe","wat1":"joe"}]
- * Forget:
- * (kind: ok) [{"[object Object]":[42]},{"wat0":"joe","wat1":"joe"}]
- * [{"[object Object]":[42]},{"wat0":"joe","wat1":"joe","wat2":"joe"}]
- */
-function Component(props) {
- const $ = _c(2);
- let t0;
- if ($[0] !== props.value) {
- const key = {};
- const tmp = (mutate(key), key);
- const context = { [tmp]: identity([props.value]) };
- mutate(key);
- t0 = [context, key];
- $[0] = props.value;
- $[1] = t0;
- } else {
- t0 = $[1];
- }
- return t0;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: Component,
- params: [{ value: 42 }],
- sequentialRenders: [{ value: 42 }, { value: 42 }],
-};
-
-```
-
-### Eval output
-(kind: ok) [{"[object Object]":[42]},{"wat0":"joe","wat1":"joe"}]
-[{"[object Object]":[42]},{"wat0":"joe","wat1":"joe"}]
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useCallback-call-second-function-which-captures-maybe-mutable-value-dont-preserve-memoization.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useCallback-call-second-function-which-captures-maybe-mutable-value-dont-preserve-memoization.expect.md
deleted file mode 100644
index b943c7dacbd..00000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/useCallback-call-second-function-which-captures-maybe-mutable-value-dont-preserve-memoization.expect.md
+++ /dev/null
@@ -1,85 +0,0 @@
-
-## Input
-
-```javascript
-// @enablePreserveExistingMemoizationGuarantees:false @enableTransitivelyFreezeFunctionExpressions:false
-import {useCallback} from 'react';
-import {
- identity,
- logValue,
- makeObject_Primitives,
- useHook,
-} from 'shared-runtime';
-
-function Component(props) {
- const object = makeObject_Primitives();
-
- useHook();
-
- const log = () => {
- logValue(object);
- };
-
- const onClick = useCallback(() => {
- log();
- }, [log]);
-
- identity(object);
-
- return ;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: Component,
- params: [{}],
-};
-
-```
-
-## Code
-
-```javascript
-import { c as _c } from "react/compiler-runtime"; // @enablePreserveExistingMemoizationGuarantees:false @enableTransitivelyFreezeFunctionExpressions:false
-import { useCallback } from "react";
-import {
- identity,
- logValue,
- makeObject_Primitives,
- useHook,
-} from "shared-runtime";
-
-function Component(props) {
- const $ = _c(2);
- const object = makeObject_Primitives();
-
- useHook();
-
- const log = () => {
- logValue(object);
- };
-
- const onClick = () => {
- log();
- };
-
- identity(object);
- let t0;
- if ($[0] !== onClick) {
- t0 = ;
- $[0] = onClick;
- $[1] = t0;
- } else {
- t0 = $[1];
- }
- return t0;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: Component,
- params: [{}],
-};
-
-```
-
-### Eval output
-(kind: ok)
\ No newline at end of file
diff --git a/compiler/packages/react-forgive/scripts/build.mjs b/compiler/packages/react-forgive/scripts/build.mjs
old mode 100755
new mode 100644
diff --git a/compiler/packages/snap/scripts/link-react-compiler-runtime.sh b/compiler/packages/snap/scripts/link-react-compiler-runtime.sh
old mode 100755
new mode 100644
diff --git a/compiler/scripts/hash.sh b/compiler/scripts/hash.sh
old mode 100755
new mode 100644
diff --git a/compiler/scripts/release/publish.js b/compiler/scripts/release/publish.js
old mode 100755
new mode 100644
diff --git a/fixtures/devtools/regression/server.js b/fixtures/devtools/regression/server.js
old mode 100755
new mode 100644
diff --git a/fixtures/devtools/scheduling-profiler/run.js b/fixtures/devtools/scheduling-profiler/run.js
old mode 100755
new mode 100644
diff --git a/packages/react-devtools/bin.js b/packages/react-devtools/bin.js
old mode 100755
new mode 100644
diff --git a/packages/react-dom/src/__tests__/ReactActQueueMemoryLeak-test.js b/packages/react-dom/src/__tests__/ReactActQueueMemoryLeak-test.js
new file mode 100644
index 00000000000..8d8a2b00017
--- /dev/null
+++ b/packages/react-dom/src/__tests__/ReactActQueueMemoryLeak-test.js
@@ -0,0 +1,159 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @emails react-core
+ */
+
+let React;
+let ReactDOMClient;
+let Scheduler;
+let act;
+let container;
+let assertLog;
+
+jest.useRealTimers();
+
+global.IS_REACT_ACT_ENVIRONMENT = true;
+
+describe('React.act() actQueue memory leak', () => {
+ beforeEach(() => {
+ jest.resetModules();
+ React = require('react');
+ ReactDOMClient = require('react-dom/client');
+ Scheduler = require('scheduler');
+ act = React.act;
+ container = document.createElement('div');
+ document.body.appendChild(container);
+ assertLog = require('internal-test-utils/assertLog');
+ });
+
+ afterEach(() => {
+ document.body.removeChild(container);
+ jest.restoreAllMocks();
+ });
+
+ it('should clear actQueue after multiple act() calls to prevent memory leaks', async () => {
+ // This test reproduces the bug where actQueue grows forever
+ // when calling act() multiple times with suspended components
+
+ let resolvePromise;
+ const promise = new Promise(resolve => {
+ resolvePromise = resolve;
+ });
+
+ function SuspendingComponent() {
+ const [data, setData] = React.useState(null);
+
+ React.useEffect(() => {
+ // This will suspend the component
+ React.use(promise);
+ setData('resolved');
+ }, []);
+
+ return {data || 'loading...'}
;
+ }
+
+ function App() {
+ return (
+ fallback}>
+
+
+ );
+ }
+
+ const root = ReactDOMClient.createRoot(container);
+
+ // First act() call - this should suspend
+ await act(async () => {
+ root.render();
+ });
+
+ // Check that actQueue is not null (suspended tasks remain)
+ expect(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.actQueue).not.toBeNull();
+
+ // Second act() call - this should also suspend
+ await act(async () => {
+ root.render();
+ });
+
+ // The actQueue should still contain suspended tasks
+ expect(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.actQueue).not.toBeNull();
+
+ // Third act() call - this should also suspend
+ await act(async () => {
+ root.render();
+ });
+
+ // The actQueue should still contain suspended tasks
+ expect(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.actQueue).not.toBeNull();
+
+ // Now resolve the promise to clear the suspension
+ resolvePromise();
+
+ // Wait for the suspension to resolve
+ await act(async () => {
+ // This should flush the queue and clear it
+ });
+
+ // After resolution, actQueue should be null
+ expect(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.actQueue).toBeNull();
+ });
+
+ it('should clear actQueue even when tasks remain suspended indefinitely', async () => {
+ // This test ensures that actQueue is cleared even when
+ // suspended tasks cannot be resolved
+
+ let resolvePromise;
+ const promise = new Promise(resolve => {
+ resolvePromise = resolve;
+ });
+
+ function SuspendingComponent() {
+ const [data, setData] = React.useState(null);
+
+ React.useEffect(() => {
+ // This will suspend the component indefinitely
+ React.use(promise);
+ setData('resolved');
+ }, []);
+
+ return {data || 'loading...'}
;
+ }
+
+ function App() {
+ return (
+ fallback}>
+
+
+ );
+ }
+
+ const root = ReactDOMClient.createRoot(container);
+
+ // First act() call - this should suspend
+ await act(async () => {
+ root.render();
+ });
+
+ // Check that actQueue is not null (suspended tasks remain)
+ expect(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.actQueue).not.toBeNull();
+
+ // Second act() call - this should also suspend
+ await act(async () => {
+ root.render();
+ });
+
+ // The actQueue should still contain suspended tasks
+ expect(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.actQueue).not.toBeNull();
+
+ // Even with suspended tasks, the actQueue should eventually be cleared
+ // when the act() call completes, to prevent memory leaks
+ expect(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.actQueue).not.toBeNull();
+
+ // This test will fail with the current implementation because
+ // actQueue is never cleared when tasks remain suspended
+ });
+});
diff --git a/packages/shared/ReactVersion.js b/packages/shared/ReactVersion.js
index bd5fa23ca26..ecacdb232a5 100644
--- a/packages/shared/ReactVersion.js
+++ b/packages/shared/ReactVersion.js
@@ -1,15 +1 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-// TODO: this is special because it gets imported during build.
-//
-// It exists as a placeholder so that DevTools can support work tag changes between releases.
-// When we next publish a release, update the matching TODO in backend/renderer.js
-// TODO: This module is used both by the release scripts and to expose a version
-// at runtime. We should instead inject the version number as part of the build
-// process, and use the ReactVersions.js module as the single source of truth.
-export default '19.3.0';
+export default '19.3.0-canary-d74f061b-20251001';
diff --git a/scripts/ci/check_license.sh b/scripts/ci/check_license.sh
old mode 100755
new mode 100644
diff --git a/scripts/ci/download_devtools_regression_build.js b/scripts/ci/download_devtools_regression_build.js
old mode 100755
new mode 100644
diff --git a/scripts/ci/pack_and_store_devtools_artifacts.sh b/scripts/ci/pack_and_store_devtools_artifacts.sh
old mode 100755
new mode 100644
diff --git a/scripts/ci/run_devtools_e2e_tests.js b/scripts/ci/run_devtools_e2e_tests.js
old mode 100755
new mode 100644
diff --git a/scripts/ci/test_print_warnings.sh b/scripts/ci/test_print_warnings.sh
old mode 100755
new mode 100644
diff --git a/scripts/devtools/build-and-test.js b/scripts/devtools/build-and-test.js
old mode 100755
new mode 100644
diff --git a/scripts/devtools/prepare-release.js b/scripts/devtools/prepare-release.js
old mode 100755
new mode 100644
diff --git a/scripts/devtools/publish-release.js b/scripts/devtools/publish-release.js
old mode 100755
new mode 100644
diff --git a/scripts/git/pre-commit b/scripts/git/pre-commit
old mode 100755
new mode 100644
diff --git a/scripts/react-compiler/build-compiler.sh b/scripts/react-compiler/build-compiler.sh
old mode 100755
new mode 100644
diff --git a/scripts/react-compiler/link-compiler.sh b/scripts/react-compiler/link-compiler.sh
old mode 100755
new mode 100644
diff --git a/scripts/release/build-release-locally.js b/scripts/release/build-release-locally.js
old mode 100755
new mode 100644
diff --git a/scripts/release/download-experimental-build.js b/scripts/release/download-experimental-build.js
old mode 100755
new mode 100644
diff --git a/scripts/release/prepare-release-from-ci.js b/scripts/release/prepare-release-from-ci.js
old mode 100755
new mode 100644
diff --git a/scripts/release/prepare-release-from-npm.js b/scripts/release/prepare-release-from-npm.js
old mode 100755
new mode 100644
diff --git a/scripts/release/publish.js b/scripts/release/publish.js
old mode 100755
new mode 100644
diff --git a/scripts/release/snapshot-test.js b/scripts/release/snapshot-test.js
old mode 100755
new mode 100644