diff --git a/lib/rules/template-require-media-caption.js b/lib/rules/template-require-media-caption.js
index 512b29324c..84d2e07bfd 100644
--- a/lib/rules/template-require-media-caption.js
+++ b/lib/rules/template-require-media-caption.js
@@ -53,6 +53,14 @@ module.exports = {
return;
}
}
+
+ // Any other dynamic value (e.g. muted="{{isMuted}}" → ConcatStatement,
+ // or muted={{#if ...}}...{{/if}} → BlockStatement) → treat as exempt.
+ // Matches upstream ember-template-lint behavior where MustacheStatement,
+ // BlockStatement, or any non-text/non-"false" value is considered muted.
+ if (value.type !== 'GlimmerTextNode' && value.type !== 'GlimmerMustacheStatement') {
+ return;
+ }
}
// Check if there's a track element with kind="captions" as a child
diff --git a/tests/lib/rules/template-require-media-caption.js b/tests/lib/rules/template-require-media-caption.js
index e943665965..c7d9f25b8e 100644
--- a/tests/lib/rules/template-require-media-caption.js
+++ b/tests/lib/rules/template-require-media-caption.js
@@ -34,6 +34,8 @@ ruleTester.run('template-require-media-caption', rule, {
'',
'',
'',
+ '',
+ '',
'',
],
@@ -148,6 +150,8 @@ hbsRuleTester.run('template-require-media-caption', rule, {
'',
'',
'',
+ '',
+ '',
'',
],
invalid: [