diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures.spec.ts b/packages/@lwc/engine-server/src/__tests__/fixtures.spec.ts
index a2e8e53ecb..482cd44a0e 100755
--- a/packages/@lwc/engine-server/src/__tests__/fixtures.spec.ts
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures.spec.ts
@@ -53,6 +53,8 @@ async function compileFixture({ input, dirname }: { input: string; dirname: stri
// TODO [#3331]: The existing lwc:dynamic fixture test will generate warnings that can be safely suppressed.
const shouldIgnoreWarning =
message.includes('LWC1187') ||
+ // TODO [#4497]: stop warning on duplicate slots or disallow them entirely (LWC1137 is duplicate slots)
+ message.includes('LWC1137') ||
message.includes('-h-t-m-l') ||
code === 'CIRCULAR_DEPENDENCY';
if (!shouldIgnoreWarning) {
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/error.txt b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/error.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/expected.html
new file mode 100644
index 0000000000..120c3cbe3c
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/expected.html
@@ -0,0 +1,23 @@
+
+
+ a
+
+
+ yolo
+
+
+ b
+
+
+ yolo
+
+
+ c
+
+
+ yolo
+
+
+ d
+
+
\ No newline at end of file
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/index.js b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/index.js
new file mode 100644
index 0000000000..17a015b5ea
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/index.js
@@ -0,0 +1,3 @@
+export const tagName = 'x-outer';
+export { default } from 'x/outer';
+export * from 'x/outer';
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/inner/inner.html b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/inner/inner.html
new file mode 100644
index 0000000000..f1edc5794c
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/inner/inner.html
@@ -0,0 +1,9 @@
+
+ a
+
+ b
+
+ c
+
+ d
+
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/inner/inner.js b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/inner/inner.js
new file mode 100644
index 0000000000..2104845f74
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/inner/inner.js
@@ -0,0 +1,5 @@
+import { LightningElement} from 'lwc';
+
+export default class extends LightningElement {
+ static renderMode = 'light'
+}
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/outer/outer.html b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/outer/outer.html
new file mode 100644
index 0000000000..1ae6aeda57
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/outer/outer.html
@@ -0,0 +1,5 @@
+
+
+ yolo
+
+
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/outer/outer.js b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/outer/outer.js
new file mode 100644
index 0000000000..2104845f74
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/light/modules/x/outer/outer.js
@@ -0,0 +1,5 @@
+import { LightningElement} from 'lwc';
+
+export default class extends LightningElement {
+ static renderMode = 'light'
+}
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/error.txt b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/error.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/expected.html
new file mode 100644
index 0000000000..7296bb8ba4
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/expected.html
@@ -0,0 +1,21 @@
+
+
+
+
+ a
+
+
+ b
+
+
+ c
+
+
+ d
+
+
+ yolo
+
+
+
+
\ No newline at end of file
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/index.js b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/index.js
new file mode 100644
index 0000000000..17a015b5ea
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/index.js
@@ -0,0 +1,3 @@
+export const tagName = 'x-outer';
+export { default } from 'x/outer';
+export * from 'x/outer';
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/inner/inner.html b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/inner/inner.html
new file mode 100644
index 0000000000..81aec27aa4
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/inner/inner.html
@@ -0,0 +1,9 @@
+
+ a
+
+ b
+
+ c
+
+ d
+
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/inner/inner.js b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/inner/inner.js
new file mode 100644
index 0000000000..a12e9aa6b0
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/inner/inner.js
@@ -0,0 +1,4 @@
+import { LightningElement} from 'lwc';
+
+export default class extends LightningElement {
+}
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/outer/outer.html b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/outer/outer.html
new file mode 100644
index 0000000000..87ba71234a
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/outer/outer.html
@@ -0,0 +1,5 @@
+
+
+ yolo
+
+
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/outer/outer.js b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/outer/outer.js
new file mode 100644
index 0000000000..0ac1a1ba09
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/duplicate-slots-in-template/shadow/modules/x/outer/outer.js
@@ -0,0 +1,3 @@
+import { LightningElement} from 'lwc';
+
+export default class extends LightningElement {}
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/error.txt b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/error.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/expected.html
new file mode 100644
index 0000000000..1130c9b17d
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/expected.html
@@ -0,0 +1,27 @@
+
+
+ a
+
+
+ x
+
+
+ b
+
+
+ y
+
+
+ y2
+
+
+ y3
+
+
+ c
+
+ default1default2default3default4default5default6
+
+ d
+
+
\ No newline at end of file
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/index.js b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/index.js
new file mode 100644
index 0000000000..17a015b5ea
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/index.js
@@ -0,0 +1,3 @@
+export const tagName = 'x-outer';
+export { default } from 'x/outer';
+export * from 'x/outer';
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/inner/inner.html b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/inner/inner.html
new file mode 100644
index 0000000000..cb2a076ac1
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/inner/inner.html
@@ -0,0 +1,9 @@
+
+ a
+
+ b
+
+ c
+
+ d
+
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/inner/inner.js b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/inner/inner.js
new file mode 100644
index 0000000000..2104845f74
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/inner/inner.js
@@ -0,0 +1,5 @@
+import { LightningElement} from 'lwc';
+
+export default class extends LightningElement {
+ static renderMode = 'light'
+}
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/outer/outer.html b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/outer/outer.html
new file mode 100644
index 0000000000..1736ecae2f
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/outer/outer.html
@@ -0,0 +1,15 @@
+
+
+ default1
+ y
+ default2
+ x
+ default3
+ y2
+ default4
+ y3
+ default5
+ does-not-exist
+ default6
+
+
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/outer/outer.js b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/outer/outer.js
new file mode 100644
index 0000000000..2104845f74
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/light/modules/x/outer/outer.js
@@ -0,0 +1,5 @@
+import { LightningElement} from 'lwc';
+
+export default class extends LightningElement {
+ static renderMode = 'light'
+}
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/error.txt b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/error.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/expected.html
new file mode 100644
index 0000000000..9b3f40fb6d
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/expected.html
@@ -0,0 +1,39 @@
+
+
+
+
+ a
+
+
+ b
+
+
+ c
+
+
+ d
+
+ default1
+
+ y
+
+ default2
+
+ x
+
+ default3
+
+ y2
+
+ default4
+
+ y3
+
+ default5
+
+ does-not-exist
+
+ default6
+
+
+
\ No newline at end of file
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/index.js b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/index.js
new file mode 100644
index 0000000000..17a015b5ea
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/index.js
@@ -0,0 +1,3 @@
+export const tagName = 'x-outer';
+export { default } from 'x/outer';
+export * from 'x/outer';
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/inner/inner.html b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/inner/inner.html
new file mode 100644
index 0000000000..fe27ea87d8
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/inner/inner.html
@@ -0,0 +1,9 @@
+
+ a
+
+ b
+
+ c
+
+ d
+
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/inner/inner.js b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/inner/inner.js
new file mode 100644
index 0000000000..0ac1a1ba09
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/inner/inner.js
@@ -0,0 +1,3 @@
+import { LightningElement} from 'lwc';
+
+export default class extends LightningElement {}
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/outer/outer.html b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/outer/outer.html
new file mode 100644
index 0000000000..0c2e25c0e9
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/outer/outer.html
@@ -0,0 +1,15 @@
+
+
+ default1
+ y
+ default2
+ x
+ default3
+ y2
+ default4
+ y3
+ default5
+ does-not-exist
+ default6
+
+
diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/outer/outer.js b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/outer/outer.js
new file mode 100644
index 0000000000..0ac1a1ba09
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/reordered-duplicate-nonexistent-slots/shadow/modules/x/outer/outer.js
@@ -0,0 +1,3 @@
+import { LightningElement} from 'lwc';
+
+export default class extends LightningElement {}