ByJen Chaney,
a TV critic for Vulture and New York
The writers confirm they know exactly what’s going on with Taissa Turner’s alter ego, even if the two actresses who play her do not.
Photo-Illustration: Vulture; Photos: Showtime
The character: Taissa Turner, a high-school-soccer player in Yellowjackets’s 1996 timeline and a New Jersey state senator in the present day. As a teen, Taissa spends 18 months in the Canadian wilderness with her teammates, including girlfriend Van, following a plane crash. As an adult, she struggles to balance her roles as wife and parent with her career, particularly when she starts to dissociate the same way she did during her wilderness days.
The actors: Jasmin Savoy Brown, known for her work on The Leftovers and as the most pop-culturally astute character in the rebooted Scream franchise, plays Taissa in the 1990s. Tawny Cypress, who has appeared in numerous films and TV shows over the past two decades, including Heroes and House of Cards, is adult Taissa.
Essential traits: Supremely ambitious. Feels a strong need to be in control of situations. If you’re dealing with an unexpected pregnancy, she’s your doula. She also may be possessed by an evil twin or something.
I. Not One, Not Two, But Three Taissas
Photo: Kailey Schwerman/Showtime
In an earlier version of the Yellowjackets pilot, the grown-up Taissa Turner’s life looked different. As envisioned by series creators Ashley Lyle and Bart Nickerson, the character was similarly seeking political office and determined to put the past — specifically what happened to her and her teammates when they were forced to fend for themselves (and feed on one another) in the wake of that 1996 plane crash — behind her. But initially, she had neither a wife nor a child whose realities could be upended when Taissa’s relationship with a shadow self — an entity referred to alternately by the writers and actors as the Bad One or the Other Taissa — reemerges. In “Pilot” 1.0, shot in 2019 and then reworked and reshot in 2021 after Showtime picked up the full series, Tai was single and having an affair with her campaign manager.
“We didn’t want her to one-dimensionally be focused purely on ambition,” says Lyle, explaining why they made the switch. “We wanted to have a way that we could root for her but also have something where the stakes, when her secrets start coming out, would be really high.” Hence the introduction of her wife, Simone (Rukiya Bernard), and son, Sammy (Aiden Stoxx), whose well-being becomes increasingly threatened by whatever takes over Taissa’s body and turns her into someone more primal and scary.
By season two, viewers are no closer to understanding exactly why 1996 Tai takes unconscious strolls through the snow in the middle of the night or why current-day Tai sacrifices the head of the dead family dog on an altar to some deity of the wilderness. It’s a secret the show is taking its time to explain, though the writers claim to know what’s going on with Tai’s alter ego. Ameni Rozsa, who scripted this season’s penultimate episode, confirmed that there is a cause of Taissa’s behavior and that Other Taissa has a goal, but “I won’t name it.”
The actresses, however, are in the dark. “At the beginning of the show, the showrunners asked me how much I wanted to know, and I said I only wanted to know what’s relevant to my character at the time,” says Cypress. Brown agrees; she says she is “fine to work with no information,” a mind-set that allows her to tap more readily into a sense of unease and fear.
“Because Taissa herself doesn’t understand what’s happening to her, it felt as though that would be useful for both actresses,” Lyle adds. “That sort of bewilderment and that feeling of helplessness for a character who very rarely feels helpless was an important part of how they react to what’s going on with them.”
“The show in general is about how you have an idea of your life and it gets interrupted by life itself,” says Rozsa. “And can you ever get over your fury over that happening?”
II. A Lesson in Eating Dirt the Same Way
Photo: Kailey Schwerman/SHOWTIME
Yellowjackets has successfully found actors who can convincingly portray the same characters because of a simple principle: Lyle and Nickerson told casting directors Junie Lowry-Johnson and Libby Goldstein that it was more important for the two halves of principal parts to share an essence than for them to look alike. For Taissa, that essence was “an immense gravitas” that Lowry-Johnson and Goldstein first found in Brown, whom they plucked from a narrowed-down pool of 15 potential young Taissas and selected for her “determined energy.”
They then found a steeliness in Cypress that functioned like a mirror image of Brown’s energy. The actresses happened to carry themselves in a similar manner, lending the two Taissas a certain physical resemblance while in motion. “Jasmin and I, we both naturally hold ourselves very tall, straight, very square shoulders,” says Cypress, who wears brown contact lenses to match the color of Brown’s eyes, forcing her to see the world in sepia tones when she’s in character.
“We have a similar dry sense of humor,” adds Brown, who first met Cypress on location in Vancouver during season one. “We also had very odd, specific things in common while shooting season one. We happened to live in the same building right next door. We had the same Airbnb hosts even though we were in different units. We were the only people that brought cats.”
“I was a lot like Jasmin when I was younger,” Cypress says. “She is so confident in who she is as a person, and I was always very confident in who I was as a person. I never let anybody put me in a box or define me in a particular way. She’s just like that.”
Because season-one production took place under pandemic protocols, the actresses were unable to leave Vancouver, forcing them to spend a lot of time comparing performance notes. Brown recalls venturing to a park with Cypress and practicing the feral physicality of Taissa — specifically how she would eat dirt, something she does in both timelines. “I’m sure we got some weird looks,” Brown says, laughing. On set, they were never shooting at the same time, so when Brown needed to know how Taissa pronounces the word either (“Ee-ther or eye-ther?”),she had to call Cypress. “In 25 years, the way you walk might change or the way you talk might change a bit,” Brown says. “But I don’t think how you say very specific words really changes.”
“Sharing a character is so fun,” says Cypress. “I recommend every actor do it at some point in their life. Acting is a team sport, and this is above and beyond.”
III. The Two Scenes That Explain Everything
Photo: Showtime
If you want to understand Taissa, consider two scenes. The first happens early in the pilot when the Wiskayok High School Yellowjackets are playing a practice scrimmage and Taissa, convinced that a freshman named Allie will be a liability at nationals, makes an aggressive defensive play that breaks Allie’s leg. It’s an important moment because it affirms that, even before the plane crash, Taissa could be ruthless. As Rozsa puts it, the scene establishes that her original sin is “her desire to control outcomes.”
Brown doesn’t think her character intended to injure Allie so severely but adds, “Whether it was or wasn’t an accident, she meant to hurt her in some way.” Taissa feels guilty and conflicted about what she did, but she remains comfortable with her more aggressive instincts. “In a weird, low-key way,” says Rozsa, “she’s grappling with this aspect of herself for the whole series.”
“I approach Tai as a narcissist, so everything she does comes from a place of me,” Cypress explains while acknowledging that younger Taissa is capable of looking out for others, particularly as teenage Shauna’s pregnancy progresses. Even so, Cypress says she bases her performance, first and foremost, on how self-involved Taissa is: “As long as everything looks perfect, that’s all she cares about.”
That’s the attitude Cypress brought to a scene in season one’s fifth episode, “Blood Hive,” when Taissa holds a press conference to announce she’s dropping out of the state-senate race, largely because of the harassment that she and her family have been experiencing. (Her opponent has been implying that Taissa engaged in cannibalism during her stint in the wilderness, which, for the record, she totally did.) But just before she starts speaking, she changes her mind and forcefully doubles down on continuing to campaign despite having told her wife she was going to quit.
“That is fucking Tai in a nutshell,” says Cypress. “She has the best intentions. She’s going to do this thing for her wife. But she can’t. She simply cannot let herself fail.”
Notably, an image of a man with no eyes — first seen in a flashback by a very young Taissa when her grandmother is dying and later appearing in her visions postcrash — pops up during the press conference. Rozsa, who wrote that episode, believes this vision suggests that Other Taissa is bubbling up in actual Taissa: “Whether you want to call it the wilderness or whether you want to call it her existing ambition that the showrunners have recast as this external force, it’s basically asserting itself inside her.”
Cypress, however, is not sure. “That’s interpretive,” she says. “I would say that moment was not the Other Tai. She sees the man with no eyes. Something clicks in her mind, and she just turns on a dime.”
IV. The Backstory That’s Coming
Photo: Showtime
This kind of subtle disagreement between the writers and actors speaks to the ambiguity that hangs over the making of Yellowjackets. To use another example related to Taissa’s campaign: In the season-one finale, just after Simone discovers the aforementioned altar Tai built in their basement during one of her sleepwalking jags, the show cuts to Tai finding out she has won the election, a sinister smile flashing across her face. Cypress had some issues figuring out exactly how to play that grin.
“Four takes in, Ashley comes out from behind video village and I’m like, Fuck. What did I do wrong?” Cypress recalls about shooting that sequence. “She’s like, ‘No, it’s great. But we need to see the evil.’ In that moment is when I realize this is the Other Tai. I did not know that. That moment was basically told to me.”
“I said, ‘I want to see the Bad One,’” Lyle says. “That got her there, and we got that amazing smile from her. I remember she came up after — she was like, ‘Was that it? Was that it?’ And I was like, ‘That was it, Tawny. That was exactly it.’”
Although the creators use the Bad One terminology internally to refer to the Other Taissa, they maintain that Tai’s dissociative episodes are not compelling the character in one moral direction or the other. “This is a bifurcated-consciousness phenomenon,” says Nickerson. For her part, Brown says she sometimes approaches her trancelike moments as if she is following, deliberately or blindly, the man with no eyes “like I had a mission and a focus” and other times as though “something was pulling me that I didn’t have control over.”
In the season-two premiere, when adult Taissa discovers the basement altar and realizes she created it, Cypress was confused by the direction in the script, which called for Tai to look like she was about to pray, then to emotionally break down. After getting guidance from Lyle and Nickerson, who wrote that episode, she played the moment exactly the way it was written but still couldn’t grasp how it would be received until she saw how well it played onscreen.
“I still feel like we don’t know the backstory,” Brown explains of the mystery that hangs over the character she shares with Cypress. “I don’t know if that’s going to come for another season or two.”
Will we have to wait that long? “I think viewers will have a general handle on it by the end of season two,” Rozsa teases.
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()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(12),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(1),appendLandingPageParams=require(136),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 o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.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()&&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;
}, {"1":1,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),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(408),_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,"408":408,"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","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.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();
// ]]