December 5, 2023


Learn new things

Trump’s strategy for outpacing the law finally fell apart.

Trump frowning
Donald Trump at Andrews Air Force Base in Maryland on Oct. 27.
Brendan Smialowski/Getty Images

Donald Trump has been in a footrace with the law for most of his adult life. And for the bulk of that time, he’s been able to outrun it. As James Zirin put it in Plaintiff in Chief, his book about Trump’s business dealings, one of many Trumpian legal tactics dating back to the Roy Cohn era was simply to wait out his legal troubles, either by heaving more money at lawyers, appeals, and more process, or by simply bankrupting or terrorizing his legal opponents. More often than not, time buffed the sharp edges off the legal system, and cushioned its consequences. Trump benefited from the same turtle pace of our legal system throughout his presidency. Whether it was slow-moving litigation over the fact that his close associates—like Don McGahn and, relatedly, John Bolton—ignored valid congressional subpoenas and requests, or the endless lawsuits over Trump’s financial documents that are still bogged down in the chutes and ladders of the federal court system, it’s been occasionally maddening to witness the contrast between the glacial pace of a justice system that demands slow and deliberative consideration of facts and the high-speed mayhem one person can wreak if he is inclined to ignore facts, invent new facts, and thus persistently remain 10 steps ahead of any accountability.

Donald Trump, who has devoted his public career to laying down new legal train tracks one beat faster than the justice system could operate, has well and truly run out of rails.

And so the watered-down Muslim ban eventually went into effect, in spite of the law, and parts of the wall eventually got built, in spite of the law, and hundreds of children may be forever separated from loving parents, in spite of the law, and we may not see the redacted portions of the Mueller report, in spite of the law. We may never learn of all the malfeasance of Trump’s most vile enablers, and there may not be real accountability for some of the worst of them—and still, there is something to be said for the slow pace of the legal system. Because this week, despite all the money and all the awful so-called lawyers and all the bluster and denial and out-and-out insanity of his “elite strike force,” Trump’s ability to beat the legal system purely by overwhelming or outlasting or outpacing it finally ended. The Supreme Court is still sitting on the same Pennsylvania challenge it’s been nursing for weeks, a federal appeals court in Pennsylvania is sitting on another, suits around the country continue to fare spectacularly poorly—and it doesn’t matter. Michigan has certified the election for Biden, as have Nevada and Pennsylvania. The screaming and the threats and the bad lawyering will continue apace for a while still, but time itself seems to have solved the greatest threat to an orderly transition of power.

Donald Trump, who has devoted his public career to laying down new legal train tracks one beat faster than the justice system could operate, has well and truly run out of rails. And though the system didn’t always manage to catch all of the worst of his abuses, Donald Trump didn’t quite manage to so irretrievably corrode the system that in the end it couldn’t catch him. Considering that he has retrofitted the federal judiciary and the Supreme Court itself in efforts to do just that, the fact that in the end he just ran out of law is at least poetic, if not epic.

There is immense work to be done to ensure that everything this administration has damaged will be subject to evaluation and repair. And simmering beneath that work is the reality that facts themselves seem to be made of buttercream and wishes, which means that even a judicial win-loss record like the campaign’s current one (1–35!) will not serve to persuade millions of voters who don’t believe in voting or democracy or law that Biden’s win was decisive. But just for today, it’s enough that the president lost a ton of lawsuits and is losing a ton of lawsuits and will lose future lawsuits, in ways that mean that he is not too big to be held to account, and that law isn’t reserved just for the suckers and the naïve.

I’ve been a pretty maniacal critic of the slow-law movement, frustrated that legal resolutions often come too late, if at all, when humanitarian and constitutional crises would unspool at the speed of light. But if we’ve learned anything at all from the haste with which the Supreme Court has been deciding life-and-death questions, as well as voting rights issues on its shadow docket, today we must pause and acknowledge that slow law gets it right more often than not, and that dull workaday evaluation of the difference between facts and falsehoods is still usually the best cure for the madness of this current moment. In the end, truth and the law managed to outpace even the ghost of Roy Cohn, and that wasn’t a foregone conclusion four weeks ago. That the man who was always able to float just above the surface of accountability may finally find himself paying the price for that, among his other sins, for the rest of his life, might be enough, just now. It’s hardly everything. But I am grateful for it.

nnx3c!-- Rubicon Project Ad Tag --x3en


nn")),c=d(m[i.size_id].split("x").map(function(e)return Number(e)),2),s.width=c[0],s.height=c[1]),s.rubiconTargeting=(Array.isArray(i.targeting)?i.targeting:[]).reduce(function(e,t)return e[t.key]=t.values[0],e,rpfl_elemid:f.adUnitCode),t.push(s)):n.logError("Rubicon: bidRequest undefined at index position:".concat(o),r,e),t,[]).sort(function(e,t))},getUserSyncs:function(e,t,r,n)if(!x&&e.iframeEnabled)var i="";return r&&"string"==typeof r.consentString&&("boolean"==typeof r.gdprApplies?i+="?gdpr=".concat(Number(r.gdprApplies),"&gdpr_consent=").concat(r.consentString):i+="?gdpr_consent=".concat(r.consentString)),n&&(i+="".concat(i?"&":"?","us_privacy=").concat(encodeURIComponent(n))),x=!0,"eus","")+i,transformBidParams:function(e)return n.convertTypes(accountId:"number",siteId:"number",zoneId:"number",e)};function v(e,t)function y(e,t)var r=e.params;if("video"===t)var i=[];return[,]:Array.isArray(n.deepAccess(e,""))&&[0]:Array.isArray(e.sizes)&&0e.length)&&(t=e.length);for(var r=0,n=new Array(t);r‘;var i,o,h=function(e)var t=0=e&&t.innerWidth‘+v.vast_url+”“:v.vast_string&&(y=v.vast_string),g.pre_market_bids.push(id:v.deal_id,seatbid:[bid:[,dealid:v.deal_id,price:v.price,adm:y]],cur:v.currency,ext:event_log:[])}var h=n.getBidIdParameter(“mimes”,e.params)||[“application/javascript”,”video/mp4″,”video/webm”],_=id:e.bidId,secure:l,video:w:p,h:f,ext:g,mimes:h;””!=n.getBidIdParameter(“price_floor”,e.params)&&(_.bidfloor=n.getBidIdParameter(“price_floor”,e.params)),””!=n.getBidIdParameter(“start_delay”,e.params)&&(“start_delay”,e.params))),””!=n.getBidIdParameter(“min_duration”,e.params)&&(“min_duration”,e.params)),””!=n.getBidIdParameter(“max_duration”,e.params)&&(“max_duration”,e.params)),””!=n.getBidIdParameter(“placement_type”,e.params)&&(“placement_type”,e.params)),””!=n.getBidIdParameter(“position”,e.params)&&(“position”,e.params)),e.crumbs&&e.crumbs.pubcid&&(c=e.crumbs.pubcid);var S=navigator.language?”language”:”userLanguage”,I=id:s,imp:_,site:id:””,page:a,content:”content”,device:h:screen.height,w:screen.width,dnt:n.getDNT()?1:0,language:navigator[S].split(“-“)[0],make:navigator.vendor?navigator.vendor:””,ua:navigator.userAgent,ext:wrap_response:1;n.getBidIdParameter(“number_of_ads”,e.params)&&(I.ext.number_of_ads=n.getBidIdParameter(“number_of_ads”,e.params));var A=;return 1==n.getBidIdParameter(“spotx_all_google_consent”,e.params)&&(A.consented_providers_settings=u),t&&t.gdprConsent&&(A.consent=t.gdprConsent.consentString,void 0!==t.gdprConsent.gdprApplies&&n.deepSetValue(I,”regs.ext.gdpr”,t.gdprConsent.gdprApplies?1:0)),t&&t.uspConsent&&n.deepSetValue(I,”regs.ext.us_privacy”,t.uspConsent),n.deepAccess(e,”userId.id5id.uid”)&&(A.eids=A.eids||[],A.eids.push()),c&&(A.fpc=c),e&&e.schain&&(I.source=ext:schain:e.schain),e&&e.userId&&e.userId.tdid&&(A.eids=A.eids||[],A.eids.push(source:””,uids:[id:e.userId.tdid,ext:rtiPartner:”TDID”])),n.isEmpty(A)||(I.user=ext:A),method:”POST”,url:””+s,data:I,bidRequest:t})},interpretResponse:function(e,t){var r=[],i=e.body;return i&&n.isArray(i.seatbid)&&n._each(i.seatbid,function(e){n._each(,function(e){var a=;for(var c in t.bidRequest.bids)e.impid==t.bidRequest.bids[c].bidId&&(a=t.bidRequest.bids[c]);n._each(a.params.pre_market_bids,function(t),i.cur=t.currency));var d=””,ttl:360,netRevenue:!0,,cache_key:e.ext.cache_key,vastUrl:””+e.ext.cache_key,videoCacheKey:e.ext.cache_key,mediaType:s.d,width:e.w,height:e.h;d.meta=d.meta||,e&&e.adomain&&0t?e:tfunction d(e,t,n)!e.preload&&e.preloadThreshhold&&function(e,t,n,i)return<=i+n&&u(e)(,t.rect,e.preloadThreshhold,n)&&(e.preload=!0,setTimeout(function()e.trigger("preload",new r("preload",t)),15))function c(n)e.documentElement.clientHeight,h=f(i,o),s=h/(i.heightfunction u(e)return e&&null!==e.offsetParent&&!e.getAttribute("hidden")&&"none"!==getComputedStyle(e).display&&"hidden"!==getComputedStyle(e).visibilityfunction f(e,t)return s(t,l(e.bottom,0))-s(l(,0),t)(o=function(e,t)).prototype=destroy:function()h.splice(h.indexOf(this),1),i.enable(o.prototype),r=function(e,t)var n=this;this.type=e,Object.keys(t).forEach(function(e)n[e]=t[e]),e.addEventListener("scroll",n(function()h.forEach(c),200)),this.getPageOffset=function(e)for(var t=e.offsetLeft,n=e.offsetTop;e=e.offsetParent;)t+=e.offsetLeft,n+=e.offsetTop;returnleft:t,top:n,this.getLinearSpacialHash=function e(t,n,i,o)var r=t%n,h=Math.floor(t/(n,this.getVerticallyVisiblePixels=f,this.getViewportHeight=function()return t.innerHeight,this.getViewportWidth=function(),this.isElementNotHidden=u,this.isElementInViewport=function(n)e.documentElement.clientHeight)&&i.right<=(t.innerWidth,this.Visible=o]); }, ]; 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",fvar 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].exportsvar i=typeof require=="function"&&require;for(var o=0;o= o.length) return done: true ; return done: false, value: o[i++] ; , e: function e(_e) throw _e; , f: F ; throw new TypeError(“Invalid attempt to iterate non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.”); } var normalCompletion = true, didErr = false, err; return s: function s() it = o[Symbol.iterator](); , n: function n() var step =; normalCompletion = step.done; return step; , e: function e(_e2) didErr = true; err = _e2; , f: function f() try if (!normalCompletion && it.return != null) it.return(); finally if (didErr) throw err; ; }

function _unsupportedIterableToArray(o, minLen) if (!o) return; if (typeof o === “string”) return _arrayLikeToArray(o, minLen); var n =, -1); if (n === “Object” && o.constructor) n =; if (n === “Map”

function _arrayLikeToArray(arr, len)

function mountLegacyServices()
Object.keys(window.modules).filter(function (key)
return typeof key === ‘string’ && key.match(/.legacy$/);
).forEach(function (key)
return window.require(key);

function tryToMount(fn, el, name)
fn(el); // init the controller
catch (e)
var elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(“Error initializing controller for “”.concat(name, “” on “”).concat(elementTag, “””), e);

* mount client.js component controllers

function mountComponentModules() {
Object.keys(window.modules).filter(function (key)
return typeof key === ‘string’ && key.match(/.client$/);
).forEach(function (key)
var controllerFn = window.require(key);

if (typeof controllerFn === ‘function’)
var name = key.replace(‘.client”,”‘),
instancesSelector = “[data-uri*=”_components/”.concat(name, “/”]”),
defaultSelector = “[data-uri$=”_components”.concat(name, “”]”),
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);

var _iterator = _createForOfIteratorHelper(instances),

for (_iterator.s(); !(_step = _iterator.n()).done;)
var el = _step.value;
tryToMount(controllerFn, el, name);

catch (err)

var _iterator2 = _createForOfIteratorHelper(defaults),

for (_iterator2.s(); !(_step2 = _iterator2.n()).done;)
var _el = _step2.value;
tryToMount(controllerFn, _el, name);

catch (err)

} // 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

// ]]