diff --git a/.changeset/modern-ducks-reflect.md b/.changeset/modern-ducks-reflect.md
new file mode 100644
index 000000000000..dfbb9a18cc04
--- /dev/null
+++ b/.changeset/modern-ducks-reflect.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: ignore mutation validation for props that are not proxies in more cases
diff --git a/packages/svelte/src/internal/client/dev/ownership.js b/packages/svelte/src/internal/client/dev/ownership.js
index 108c7adf9282..5a8af6d52299 100644
--- a/packages/svelte/src/internal/client/dev/ownership.js
+++ b/packages/svelte/src/internal/client/dev/ownership.js
@@ -31,13 +31,14 @@ export function create_ownership_validator(props) {
return result;
}
- let value = props[name];
+ /** @type {any} */
+ let value = props;
- for (let i = 1; i < path.length - 1; i++) {
+ for (let i = 0; i < path.length - 1; i++) {
+ value = value[path[i]];
if (!value?.[STATE_SYMBOL]) {
return result;
}
- value = value[path[i]];
}
const location = sanitize_location(`${component[FILENAME]}:${line}:${column}`);
diff --git a/packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/_config.js b/packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/_config.js
new file mode 100644
index 000000000000..437385e185c8
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/_config.js
@@ -0,0 +1,18 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ compileOptions: {
+ dev: true
+ },
+
+ test({ assert, target, warnings }) {
+ const btn = target.querySelector('button');
+ btn?.click();
+ flushSync();
+
+ assert.deepEqual(warnings, []);
+ },
+
+ warnings: []
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/child.svelte b/packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/child.svelte
new file mode 100644
index 000000000000..0243a6c7d1fa
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/child.svelte
@@ -0,0 +1,8 @@
+
+
+
diff --git a/packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/main.svelte b/packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/main.svelte
new file mode 100644
index 000000000000..8685664ab164
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/main.svelte
@@ -0,0 +1,21 @@
+
+
+