Residents of Finetime, allow me to put a spin on some Kim Kardashian advice: Get your ass up and walk. It seems like nobody wants to walk these days! Look, the Doctor and Ruby haven’t had the best track record with watching their step this season. Ruby temporarily changed species when she stepped on a butterfly; the Doctor was seconds away from blowing up a planet when he stepped on a land mine and pretty much completely disappeared from an episode when he stepped into a fairy circle. Still, they’re both doing a lot better than this week’s main character, Lindy Pepper-Bean, who struggles to even move in a straight line without instructions from her Dot, a floating device that projects video feeds of friends in a Bubble around her head. But when we meet Lindy, people are increasingly going offline and not coming back … ah, so this must be the Black Mirror–esque adventure that we’ve been hearing about.
When we’re first introduced to Lindy, she seems harmless enough. Mostly, she’s a big fan of Ricky September, whose profile reads: “Subscribers: Everyone, Hobbies: You.” He dances, lip syncs, and just generally seems like someone the internet would declare its white boy of the month. Lindy’s enjoying Ricky’s latest video when the Doctor hacks into the system to try to tell her that monsters are coming for her. She simply blocks him and moves on with her day. Thanks to the Bubble, she’s also oblivious when a body is dragged away just inches from her feet.
Since the TARDIS apparently can’t get through Finetime’s force fields, Ruby calls in while Lindy’s at work (a two-hour data processing shift). With some coaxing, Lindy looks out and is horrified to realize that none of her coworkers are in the office — except Bertie Lester, who is being eaten by some sort of giant slobbering bug. “I’d like to get back to work now,” Lindy says. But the Doctor and Ruby convince her to leave the building. She can’t do it without her Bubble, but she eventually makes it outside and is dismayed to realize the creatures are everywhere. Luckily, they’re only eating some people, and for now, she doesn’t seem to be on their list.
Time for our regularly scheduled (Susan) Twist! This week, Susan appears in a recording of Lindy’s “Mummy” back on Homeworld, which is apparently where all the “stinky old folk” and poor people are. Ruby and the Doctor both recognize her, which makes Lindy realize they’re in the same room. She begins to question their motives, apparently only just now clocking that the Doctor is the same person she blocked in the morning. “I thought that you just looked the same,” she says, which feels a little racially coded. Maybe she’s just bad with faces?
After Lindy watches one of her friends being eaten on camera during a group chat, she’s a little more open to following the Doctor’s instructions. There’s an underground river beneath the town, and the Doctor can send the codes to the closest access point. Lindy’s Dot battery is running low, and it dies right after she hears the location of the building. Naturally, without assistance, she walks directly into a pole. She probably would’ve died in an alley of bugs if Ricky September didn’t show up to give her instructions.
It’s immediately clear that we, as viewers, are supposed to like him. He’s not just a pretty face. He’s smart and empathetic. He’s been trying to warn people about the bugs and reassures her multiple times that he’ll get her out. When he discovers that the bugs have taken over the Homeworld, he spares Lindy’s feelings. And even as they’re running underground, he takes the time to tell her to watch her head.
Once at the door, the Doctor sends the codes, which Ricky begins entering. Meanwhile, the Doctor has realized that the bugs are eating people in alphabetical order, and that they were created by a sentient Dot to punish them for the crime of … yapping too much, I guess. Lindy is next on the roster, and she can’t turn her Dot off when it begins trying to attack her.
Ricky tells her to handle the codes while he begins to fight it off, blowing his hair out of his face. He tells her to go on without him when she enters the last code. I’m honestly starting to feel suspicious. Like, this guy is just not real. Are we headed toward a Hans-from-Frozen moment, where he’ll suddenly drop the façade?
As it turns out, no. His apparent perfection is just meant to make his death more tragic. When the Dot manages to escape Ricky and heads toward Lindy, she blurts out that his real last name is Coombes, which she knows because she’s such a stan that she has researched his life pre-fame. “C comes before P!” she says and slips through the door just after the Dot appears to fatally strike Ricky’s head.
This is an effective twist because we’ve been led to believe that Lindy is the type of person who dies first in a horror movie. Clueless, a bit immature, and ultimately harmless. There’s a reason that, much to Lindy’s displeasure, the Doctor and Ruby kept accidentally speaking to her like she was a toddler. She can’t walk or pee without help, one of her go-to insults is “stupid,” and her automatic reaction is to swipe away anything she doesn’t like — if she didn’t have the Dot, she’d probably plug her ears and go la, la, la, la, I can’t hear you. I mean, the Doctor and Ruby literally had to shout at her not to walk into a monster’s mouth. But here she is, ready and willing to sacrifice her favorite influencer without showing a trace of remorse afterward. The technology may have made her look helpless, but she’s definitely not.
Only one of Lindy’s friends, Hoochy Pie, has also made it to the river. Lindy hugs her and has the gall to refer to Ricky as a “very wonderful man.” Meanwhile, Ruby and the Doctor are also waiting in person. Lindy lies and tells them that Ricky bravely went back to save more people. She learns that Home World is empty and says it’s “lucky” that Mummy has gone to the sky. The plan is for the Finetime survivors to try their luck as pioneers in the woods they’ve been told are dangerous. The Doctor instead offers to take them to guaranteed safety on his TARDIS.
Now, there’s been some plausible doubt so far as to why Lindy has been more receptive to Ruby than the Doctor thus far. Perhaps it’s because Ruby Sunday is a little more in line with the storybook names of Finetime. Or maybe since she already has Dr. Pee, she doesn’t feel the need to get to know a new Doctor. Unfortunately, the real reason for the difference in treatment ends up being racism. Lindy doesn’t say this directly, but she doesn’t need to. She and her friends spew nonsense about him not being “one of us,” pointedly say they need to “maintain the standards of Finetime,” bring up voodoo, and suggest he can physically contaminate them.
Yet the Doctor still begs them to let him save their lives. He knows they’ll die if they don’t go with him, so he doesn’t care what they think or say about him. They don’t have to be good people. Still, no dice. As the Finetime racists set sail, the Doctor laughs and shouts in pained disbelief. Ruby cries. These two might have been working remotely for most of this episode, but they were definitely determined to earn their checks once it was time to act in person again. Lindy looks back as the boat leaves, and tears are still running down the Doctor’s face when he finally returns to the TARDIS.
You can’t save someone who doesn’t want to be saved. And even when you do save someone, that doesn’t mean they’ll be grateful or learn anything from it. Lindy accepted Ricky’s help but still chose to sacrifice him. She also accepted the Doctor and Ruby’s help, but chose to ditch them once she had other options. I’d say that she took one step forward and two steps back, but that’s probably too much walking for her.
Cut for Time (Lord)
• At one point, the Doctor and Ruby say that Lindy’s the only one who can tell them what it’s like in Finetime. I wonder why! Imagine how much easier it would’ve been if they had managed to reach Ricky during one of the mornings he was on his Dot.
• Penny Pepper-Bean, a.k.a. Mummy, a.k.a. Susan Twist, says she’d pay for the whole moon to make her daughter happy. Another moon reference after “Boom”! Which could mean nothing, but who knows.
• Both Ruby and the Doctor are clearly attracted to Ricky September. According to the captions, Ruby says “Okay, heart-stopper” when the Doctor starts cheesing at Ricky a little too hard, but I am choosing to believe that she was making a Heartstopper reference.
• Finetime did give us lots of great exclamations. Oh my gasp, oh my hopscotch, oh my hazy days … just a shame about the racism and classism, though.
• We’ve now had an episode where the Doctor couldn’t move and Ruby was unconscious, one where the Doctor disappeared completely, and one where both of them only stepped in at the end. I’ve enjoyed these adventures, but am itching to see them both side-by-side in some action, especially since there are now only three (!!!) episodes left in the season.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"3":3,"6":6,"17":17,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(17),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(3),appendLandingPageParams=require(135),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let i=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||i.classList.remove("open")})}function gtmSendReport(e,n,t){let i={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(i.eventLabel=n.href),gtm.reportNow(i)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const i=t.split("?"),o=new URLSearchParams(i[1]);for(let e of n.entries())o.set(e[0],e[1]);t=`${i[0]}?${o.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),(auth.isSubscriber()||auth.isMobileAppRequest())&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"3":3,"4":4,"17":17,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(406),Fingerprint2=require(408),DS=require(407),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(406),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"406":406,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]