diff --git a/.changeset/beige-bobcats-eat.md b/.changeset/beige-bobcats-eat.md
deleted file mode 100644
index 95390c3c2e..0000000000
--- a/.changeset/beige-bobcats-eat.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: unlink errored and otherwise finished batch
diff --git a/.changeset/event-walk-composed-path.md b/.changeset/event-walk-composed-path.md
deleted file mode 100644
index 8b24573930..0000000000
--- a/.changeset/event-walk-composed-path.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-perf: walk composedPath() directly in delegated event propagation
diff --git a/.changeset/evil-stars-wave.md b/.changeset/evil-stars-wave.md
deleted file mode 100644
index b199afe1dd..0000000000
--- a/.changeset/evil-stars-wave.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: transfer effects when merging batches
diff --git a/.changeset/fine-corners-lay.md b/.changeset/fine-corners-lay.md
deleted file mode 100644
index badbc6f81f..0000000000
--- a/.changeset/fine-corners-lay.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: allow `$derived(await ...)` in disconnected effect roots
diff --git a/.changeset/gentle-styles-hydrate.md b/.changeset/gentle-styles-hydrate.md
deleted file mode 100644
index f63d4e274c..0000000000
--- a/.changeset/gentle-styles-hydrate.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: remove temporary raw-text hydration markers
diff --git a/.changeset/iife-await-const-blocker.md b/.changeset/iife-await-const-blocker.md
deleted file mode 100644
index 2b5c4f0323..0000000000
--- a/.changeset/iife-await-const-blocker.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: propagate async `@const` blockers through closure references so template expressions like `{(() => host)()}` correctly wait for the awaited value
diff --git a/.changeset/khaki-states-train.md b/.changeset/khaki-states-train.md
deleted file mode 100644
index 5d4054fb15..0000000000
--- a/.changeset/khaki-states-train.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: properly unlink batches
diff --git a/.changeset/neat-groups-grin.md b/.changeset/neat-groups-grin.md
deleted file mode 100644
index 1d615216f0..0000000000
--- a/.changeset/neat-groups-grin.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: settle discarded batch
diff --git a/.changeset/quiet-rivers-melt.md b/.changeset/quiet-rivers-melt.md
deleted file mode 100644
index 7ce1b9b2d3..0000000000
--- a/.changeset/quiet-rivers-melt.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: declare `let:` directives before `{@const}` declarations on slotted elements
diff --git a/.changeset/sad-shoes-help.md b/.changeset/sad-shoes-help.md
deleted file mode 100644
index 76db87ba95..0000000000
--- a/.changeset/sad-shoes-help.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: resume outro-ed branches if they were kept around
diff --git a/.changeset/swift-terms-exist.md b/.changeset/swift-terms-exist.md
deleted file mode 100644
index cc69f1b3b1..0000000000
--- a/.changeset/swift-terms-exist.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: avoid waterfall-warning when async resolves to same value
diff --git a/.changeset/tasty-tires-wait.md b/.changeset/tasty-tires-wait.md
deleted file mode 100644
index 0f3fd2d671..0000000000
--- a/.changeset/tasty-tires-wait.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: correctly coordinate component-level effects inside async blocks
diff --git a/.changeset/tired-socks-brake.md b/.changeset/tired-socks-brake.md
deleted file mode 100644
index 1d302ffa60..0000000000
--- a/.changeset/tired-socks-brake.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: make unnecessary commit work less likely
diff --git a/.changeset/true-dancers-tell.md b/.changeset/true-dancers-tell.md
deleted file mode 100644
index bd50b2ddc9..0000000000
--- a/.changeset/true-dancers-tell.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"svelte": patch
----
-
-chore: add tag name to `a11y_click_events_have_key_events` warning
diff --git a/.changeset/true-pigs-go.md b/.changeset/true-pigs-go.md
deleted file mode 100644
index b4900b38fa..0000000000
--- a/.changeset/true-pigs-go.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: catch rejected promises while merging/committing
diff --git a/documentation/docs/98-reference/.generated/client-errors.md b/documentation/docs/98-reference/.generated/client-errors.md
index 182d8659a9..ca536ec5c6 100644
--- a/documentation/docs/98-reference/.generated/client-errors.md
+++ b/documentation/docs/98-reference/.generated/client-errors.md
@@ -88,6 +88,10 @@ Effect cannot be created inside a `$derived` value that was not itself created i
`%rune%` can only be used inside an effect (e.g. during component initialisation)
```
+Effects can only be created while a parent effect is running. This means that they cannot, for example, be created inside an event handler or after an `await` expression (unless the `await` occurs directly inside a component's `
diff --git a/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/_config.js b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/_config.js
new file mode 100644
index 0000000000..b76ea85bfd
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/_config.js
@@ -0,0 +1,12 @@
+import { tick } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ async test({ assert, logs }) {
+ await tick();
+
+ assert.deepEqual(logs, [
+ `effect_orphan\n\`$effect\` can only be used inside an effect (e.g. during component initialisation)\nhttps://svelte.dev/e/effect_orphan`
+ ]);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/main.svelte
new file mode 100644
index 0000000000..086a048025
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/main.svelte
@@ -0,0 +1,14 @@
+
diff --git a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/_config.js b/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/_config.js
deleted file mode 100644
index ad543e91ae..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/_config.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { tick } from 'svelte';
-import { test } from '../../test';
-
-export default test({
- async test({ assert, logs }) {
- await new Promise((resolve) => setTimeout(resolve, 10));
- assert.deepEqual(logs, [1, 1]);
- const [button] = document.querySelectorAll('button');
-
- button.click();
- await tick();
- assert.deepEqual(logs, [1, 1, 2]);
- }
-});
diff --git a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/main.svelte
deleted file mode 100644
index a39c75fb94..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/main.svelte
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
diff --git a/playgrounds/sandbox/run.js b/playgrounds/sandbox/run.js
index f79243d4e7..3b0602f716 100644
--- a/playgrounds/sandbox/run.js
+++ b/playgrounds/sandbox/run.js
@@ -59,19 +59,21 @@ for (const generate of /** @type {const} */ (['client', 'server'])) {
mkdirp(path.dirname(output_js));
if (generate === 'client') {
- if (AST) {
+ if (AST || PRINT) {
const ast = parse(source, {
modern: true
});
- write(
- `${cwd}/output/ast/${file}.json`,
- JSON.stringify(
- ast,
- (key, value) => (typeof value === 'bigint' ? ['BigInt', value.toString()] : value),
- '\t'
- )
- );
+ if (AST) {
+ write(
+ `${cwd}/output/ast/${file}.json`,
+ JSON.stringify(
+ ast,
+ (key, value) => (typeof value === 'bigint' ? ['BigInt', value.toString()] : value),
+ '\t'
+ )
+ );
+ }
if (PRINT) {
const printed = print(ast);