Index: test/gated-settings.test.js
===================================================================
--- test/gated-settings.test.js	(revision c8e03c6553401711c2e513b26dd53e24cc5a9486)
+++ test/gated-settings.test.js	(revision 6100ce970f3f5922cd8b14cc66c96c878e803218)
@@ -162,4 +162,8 @@
   assert.ok(shut && shut.url, 'the card itself still travels');
   assert.equal(shut['shaer:playerUrl'], undefined, 'no player without the gate');
+  // But the card says there IS something behind the gate, so the app can
+  // explain the silence instead of ignoring a tap. Robin tapped a video that
+  // could not answer and nothing happened, which reads as broken, not as shut.
+  assert.equal(shut['shaer:playable'], true, 'a shut gate still admits that a player exists');
 
   const open = AP2.timelineEmbed(yt, { playback: true });
@@ -173,4 +177,7 @@
   const page = JSON.stringify({ url: 'https://yougubrands.com/about', title: 'About', media: [] });
   assert.equal(AP2.timelineEmbed(page, { playback: true })['shaer:playerUrl'], undefined);
+  // And no promise of one either: a news article is not a shut gate, it is
+  // simply not a video, and the app must not offer to ask for it.
+  assert.equal(AP2.timelineEmbed(page)['shaer:playable'], undefined);
   assert.equal(AP2.playerUrlFor('https://nos.nl/artikel/1'), null);
   // PeerTube is decentralised, so it is matched by shape, not by a host list.
