<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Measurement on Nick Liu - Software Engineer</title><link>https://nick-liu.com/tags/measurement/</link><description>Recent content in Measurement on Nick Liu - Software Engineer</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>nickboy@users.noreply.github.com (Nick Liu)</managingEditor><webMaster>nickboy@users.noreply.github.com (Nick Liu)</webMaster><copyright>2026 Nick Liu</copyright><lastBuildDate>Sun, 16 Aug 2026 17:24:04 -0700</lastBuildDate><atom:link href="https://nick-liu.com/tags/measurement/index.xml" rel="self" type="application/rss+xml"/><item><title>Five wrong answers in one day. One nearly deleted 10 GB of coursework.</title><link>https://nick-liu.com/posts/null-is-not-no/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><author>nickboy@users.noreply.github.com (Nick Liu)</author><guid>https://nick-liu.com/posts/null-is-not-no/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; &#10;`mdls kMDItemLastUsedDate` returned `(null)` for Microsoft Word. I read the null as "never opened" and put Office on a removal list: 10.1 GB, four apps. One last check saved me. My home directory held 150 Office documents, a conference presentation edited two weeks earlier, and a PowerPoint lock file, which only exists while the file is open. The proof that the null was misleading had been sitting in my own diagnostic report for an hour.&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;That was one of five. In a single day of hardening this machine, five different&#10;tools told me things that were not true. None of the answers looked like an&#10;error. Each one arrived as a clean, confident finding, and under each one a&#10;check had quietly failed or asked the wrong question. All five had the same&#10;shape underneath. Once I could name the shape, I stopped falling for it.&lt;/p&gt;</description><content:encoded>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; &#10;`mdls kMDItemLastUsedDate` returned `(null)` for Microsoft Word. I read the null as "never opened" and put Office on a removal list: 10.1 GB, four apps. One last check saved me. My home directory held 150 Office documents, a conference presentation edited two weeks earlier, and a PowerPoint lock file, which only exists while the file is open. The proof that the null was misleading had been sitting in my own diagnostic report for an hour.&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;That was one of five. In a single day of hardening this machine, five different&#10;tools told me things that were not true. None of the answers looked like an&#10;error. Each one arrived as a clean, confident finding, and under each one a&#10;check had quietly failed or asked the wrong question. All five had the same&#10;shape underneath. Once I could name the shape, I stopped falling for it.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Case 1: null means &amp;ldquo;I don&amp;rsquo;t know&amp;rdquo;, not &amp;ldquo;no&amp;rdquo;&#10; &lt;div id="case-1-null-means-i-dont-know-not-no" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#case-1-null-means-i-dont-know-not-no" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;The plan was simple: free disk space by removing apps that had never been used.&#10;The evidence came from Spotlight metadata:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; mdls -name kMDItemLastUsedDate -raw &lt;span class="s2"&gt;&amp;#34;/Applications/Google Chrome.app&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;2026-08-15 20:18:18 +0000&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; mdls -name kMDItemLastUsedDate -raw &lt;span class="s2"&gt;&amp;#34;/Applications/Microsoft Word.app&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;(null)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Chrome had a date. Word did not. The conclusion looked solid, because the same&#10;command told the two apps apart: Chrome is in use, Word is not.&lt;/p&gt;&#10;&lt;p&gt;It was not solid. &lt;code&gt;kMDItemLastUsedDate&lt;/code&gt; is null when an app has never been&#10;opened, &lt;em&gt;and&lt;/em&gt; when Spotlight&amp;rsquo;s metadata store has been reset. My store had been&#10;reset. I even knew that, because four hours earlier I had written this line&#10;into my own diagnostic report:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;12:14:16.629 lsd _CSStoreCreateWithURL failed with error ... &amp;#34;The file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; com.apple.LaunchServices-33554481-v2.csstore couldn&amp;#39;t be opened&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; because there is no such file.&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;The LaunchServices database was rebuilding at boot. In one section of my&#10;report, this was a strange log line. In another section, its consequences&#10;became hard evidence for deletion. I never connected the two.&lt;/p&gt;&#10;&lt;p&gt;What answers &amp;ldquo;is this app still needed&amp;rdquo; is user data:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; find ~/Documents ~/Desktop ~/Downloads -iname &lt;span class="s1"&gt;&amp;#39;*.docx&amp;#39;&lt;/span&gt; -o -iname &lt;span class="s1"&gt;&amp;#39;*.pptx&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; wc -l&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; 150&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; ls -t ~/Documents/**/*.pptx &lt;span class="p"&gt;|&lt;/span&gt; head -3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;cs6460-final-GT.pptx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;~$cs6460-milestone2-GT.pptx # lock file: exists only while the file is open&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;cs6460-milestone2-GT.pptx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Documents, lock files, container contents. Things a person made on purpose. An&#10;index field is different: the OS is free to throw it away and rebuild it, and&#10;while that happens the field tells you nothing.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Case 2: a query that never ran is not a query that found nothing&#10; &lt;div id="case-2-a-query-that-never-ran-is-not-a-query-that-found-nothing" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#case-2-a-query-that-never-ran-is-not-a-query-that-found-nothing" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;My environment audit reported &amp;ldquo;no git remotes configured&amp;rdquo; for a repository&#10;that had pushed four signed commits and opened a pull request earlier the same&#10;day.&lt;/p&gt;&#10;&lt;p&gt;The check behind that sentence was this:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~ &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git remote -v&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;fatal: not a git repository (or any of the parent directories): .git&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;These dotfiles are managed with &lt;a href="https://yadm.io/" target="_blank" rel="noreferrer"&gt;yadm&lt;/a&gt;, and yadm keeps its&#10;bare repository in &lt;code&gt;~/.local/share/yadm/repo.git&lt;/code&gt;. &lt;code&gt;$HOME&lt;/code&gt; is the work tree,&#10;not a git directory. Plain &lt;code&gt;git&lt;/code&gt; in &lt;code&gt;$HOME&lt;/code&gt; cannot answer the question at all.&#10;Then &amp;ldquo;cannot answer&amp;rdquo; got recorded as &amp;ldquo;the answer is none&amp;rdquo;.&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; yadm remote -v&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;origin git@github.com:nickboy/dotfiles.git (fetch)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;origin git@github.com:nickboy/dotfiles.git (push)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;The tool did not lie. &lt;code&gt;fatal: not a git repository&lt;/code&gt; and empty output are two&#10;different results, but the code reading them treated both as &amp;ldquo;nothing there&amp;rdquo;.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Case 3: a 404 from the wrong endpoint&#10; &lt;div id="case-3-a-404-from-the-wrong-endpoint" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#case-3-a-404-from-the-wrong-endpoint" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Same audit, same day: &amp;ldquo;branch protection could not be determined&amp;rdquo;. The check&#10;had asked the classic API:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; gh api repos/nickboy/dotfiles/branches/master/protection&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;{&amp;#34;message&amp;#34;:&amp;#34;Branch not protected&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;404&amp;#34;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;That is a real 404, and the message reads like a finding. But GitHub has two&#10;protection mechanisms, and this repo uses the newer one:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; gh api repos/nickboy/dotfiles/rulesets --jq &lt;span class="s1"&gt;&amp;#39;.[] | &amp;#34;\(.name) \(.enforcement)&amp;#34;&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Main Branch Protection active&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;A branch protected by a &lt;strong&gt;ruleset&lt;/strong&gt; returns 404 from &lt;code&gt;/branches/*/protection&lt;/code&gt;.&#10;Any tool that only checks the old endpoint will report every ruleset-protected&#10;branch as unprotected, in a sentence that sounds like it actually checked.&lt;/p&gt;&#10;&lt;p&gt;Asking the right endpoint paid off twice, because the true answer held a&#10;detail the false one would have hidden. The ruleset requires a pull request&#10;and four status checks, with no bypass actors. But&#10;&lt;code&gt;required_approving_review_count&lt;/code&gt; is &lt;code&gt;0&lt;/code&gt;, and there is no signature&#10;requirement. &amp;ldquo;Protected&amp;rdquo; here means &amp;ldquo;must go through a PR and CI&amp;rdquo;. It does not&#10;mean &amp;ldquo;must be reviewed&amp;rdquo;. My signed commits are a habit; the server never&#10;checks them. Recording how strong a control is beats recording that one&#10;exists.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Case 4: the number was real, the units were not&#10; &lt;div id="case-4-the-number-was-real-the-units-were-not" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#case-4-the-number-was-real-the-units-were-not" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;My health check started with a headline number: &lt;code&gt;WindowServer&lt;/code&gt; was eating&#10;62.4% CPU, the biggest single CPU user on the machine. The number came from&#10;&lt;code&gt;ps&lt;/code&gt;:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; ps -Ao pid,%cpu,comm &lt;span class="p"&gt;|&lt;/span&gt; grep WindowServer&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; 436 62.4 .../SkyLight.framework/Resources/WindowServer&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;On macOS, &lt;code&gt;ps %cpu&lt;/code&gt; is a &lt;strong&gt;decaying average&lt;/strong&gt;. It leans hard toward the last&#10;minute, not toward the life of the process. The cumulative figure is CPU time&#10;divided by elapsed time:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; ps -o &lt;span class="nv"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;,etime&lt;span class="o"&gt;=&lt;/span&gt; -p &lt;span class="m"&gt;436&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; 26:03.57 01:02:14 # 1563s CPU / 3734s elapsed = 41.9%&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;So 42%, not 62%. The next morning brought a bigger correction, after sixteen&#10;hours of normal use:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WindowServer 6.6% (16.4 hours)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ghostty 3.3% (16.4 hours)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Six point six. My original 62% came from an hour in which &lt;em&gt;I&lt;/em&gt; was the load. I&#10;was running diagnostics nonstop, with Activity Monitor open and a backup&#10;copying files in the background. I had measured the observer and blamed the&#10;system. The whole &amp;ldquo;WindowServer is the problem&amp;rdquo; section of that report was an&#10;accident of timing.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Case 5: the benchmark that measured nothing happening&#10; &lt;div id="case-5-the-benchmark-that-measured-nothing-happening" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#case-5-the-benchmark-that-measured-nothing-happening" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;ll&lt;/code&gt; felt slow. The alias behind it is &lt;code&gt;eza&lt;/code&gt; with a long list of flags,&#10;including &lt;code&gt;--git&lt;/code&gt;. I benchmarked it and got a number that ended the&#10;discussion:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;eza --all --long --git --icons ... 8.4 ms&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Eight milliseconds. Nothing to fix. Except the same command, in the same&#10;directory, also reported this:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; eza --all --long --git ... ~/Downloads &lt;span class="p"&gt;|&lt;/span&gt; wc -lc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; 0 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Zero lines, zero bytes, exit 0, and 128 ms of system time. The benchmark had&#10;run inside the sandboxed shell my coding agent uses, and that sandbox blocks&#10;the metadata and git reads that &lt;code&gt;--long --git&lt;/code&gt; needs. &lt;code&gt;eza&lt;/code&gt; was making&#10;syscalls, and the sandbox refused every one of them. My benchmark timed the&#10;result with great precision: a program doing nothing, very fast.&lt;/p&gt;&#10;&lt;p&gt;I re-ran everything in a real terminal:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;directory&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;size&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;with &lt;code&gt;--git&lt;/code&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;without&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;nickboy.github.io&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;47 entries, &lt;strong&gt;263 tracked&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;68.8 ms&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;13.9 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;claudedeck&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;125 tracked&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;49.0 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;20.8 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Downloads&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;622 entries, &lt;strong&gt;not a repo&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;49.6 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;39.8 ms&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="chart"&gt;&#10; &lt;canvas data-chart="&#10;type: &amp;#39;bar&amp;#39;,&#10;data: {&#10; labels: [&amp;#39;nickboy.github.io (47 entries, 263 tracked)&amp;#39;, &amp;#39;claudedeck (125 tracked)&amp;#39;, &amp;#39;Downloads (622 entries, not a repo)&amp;#39;],&#10; datasets: [{&#10; label: &amp;#39;with --git&amp;#39;,&#10; data: [68.8, 49.0, 49.6],&#10; backgroundColor: &amp;#39;#6366f1&amp;#39;,&#10; borderRadius: 4,&#10; categoryPercentage: 0.7,&#10; barPercentage: 0.9&#10; }, {&#10; label: &amp;#39;without --git&amp;#39;,&#10; data: [13.9, 20.8, 39.8],&#10; backgroundColor: &amp;#39;#d97706&amp;#39;,&#10; borderRadius: 4,&#10; categoryPercentage: 0.7,&#10; barPercentage: 0.9&#10; }]&#10;},&#10;options: {&#10; indexAxis: &amp;#39;y&amp;#39;,&#10; responsive: true,&#10; plugins: {&#10; title: { display: true, text: &amp;#39;eza wall time by directory, same flags, real terminal&amp;#39;, color: &amp;#39;#9ca3af&amp;#39;, font: { size: 15 } },&#10; legend: { display: true, labels: { color: &amp;#39;#9ca3af&amp;#39; } }&#10; },&#10; scales: {&#10; x: { ticks: { color: &amp;#39;#9ca3af&amp;#39; }, grid: { color: &amp;#39;rgba(156, 163, 175, 0.15)&amp;#39; }, title: { display: true, text: &amp;#39;milliseconds&amp;#39;, color: &amp;#39;#9ca3af&amp;#39; } },&#10; y: { ticks: { color: &amp;#39;#9ca3af&amp;#39; }, grid: { display: false } }&#10; }&#10;}&#10;"&gt;&lt;/canvas&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Inside a repo, &lt;code&gt;--git&lt;/code&gt; costs 2x to 5x, and the cost follows the &lt;strong&gt;repository&lt;/strong&gt;,&#10;not the directory being listed: &lt;code&gt;eza&lt;/code&gt; resolves git status for every tracked&#10;file to fill one column. Listing a 47-entry folder inside a 263-file repo pays&#10;for all 263 files. My everyday alias paid that price in every project&#10;directory, which is exactly where I type it most.&lt;/p&gt;&#10;&lt;p&gt;The flag moved to an opt-in alias, &lt;code&gt;llg&lt;/code&gt;. It also came out of &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;l&lt;/code&gt;, &lt;code&gt;lt&lt;/code&gt;&#10;and &lt;code&gt;tree&lt;/code&gt; completely, because the git column only renders in long view. For&#10;those four, the output is byte-identical with and without the flag. I verified&#10;that instead of assuming it:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;eza --git ... &lt;span class="p"&gt;|&lt;/span&gt; md5&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;eza ... &lt;span class="p"&gt;|&lt;/span&gt; md5&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;no-op&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;no-op&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Dead config, carried for months, costing a git query on every call.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;The common shape&#10; &lt;div id="the-common-shape" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-common-shape" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Five cases, one sentence:&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;A query that failed and a query that found nothing are different results.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;Every case was a tool reporting an absence. In none of them had anyone checked&#10;whether the question ever reached the thing it was asking about.&lt;/p&gt;&#10;&lt;div class="not-prose diagram diagram-light"&gt;&lt;svg id="d485109fa288d8dcflight" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 625.328125px;" viewBox="0 0 625.328125 676" role="graphics-document document" aria-roledescription="flowchart-v2"&gt;&lt;style&gt;#d485109fa288d8dcflight{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d485109fa288d8dcflight .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d485109fa288d8dcflight .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d485109fa288d8dcflight .error-icon{fill:rgb(255, 255, 255);}#d485109fa288d8dcflight .error-text{fill:#000000;stroke:#000000;}#d485109fa288d8dcflight .edge-thickness-normal{stroke-width:1px;}#d485109fa288d8dcflight .edge-thickness-thick{stroke-width:3.5px;}#d485109fa288d8dcflight .edge-pattern-solid{stroke-dasharray:0;}#d485109fa288d8dcflight .edge-thickness-invisible{stroke-width:0;fill:none;}#d485109fa288d8dcflight .edge-pattern-dashed{stroke-dasharray:3;}#d485109fa288d8dcflight .edge-pattern-dotted{stroke-dasharray:2;}#d485109fa288d8dcflight .marker{fill:rgb(74, 86, 92);stroke:rgb(74, 86, 92);}#d485109fa288d8dcflight .marker.cross{stroke:rgb(74, 86, 92);}#d485109fa288d8dcflight svg{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:16px;}#d485109fa288d8dcflight p{margin:0;}#d485109fa288d8dcflight .label{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;color:#333;}#d485109fa288d8dcflight .cluster-label text{fill:#000000;}#d485109fa288d8dcflight .cluster-label span{color:#000000;}#d485109fa288d8dcflight .cluster-label span p{background-color:transparent;}#d485109fa288d8dcflight .label text,#d485109fa288d8dcflight span{fill:#333;color:#333;}#d485109fa288d8dcflight .node rect,#d485109fa288d8dcflight .node circle,#d485109fa288d8dcflight .node ellipse,#d485109fa288d8dcflight .node polygon,#d485109fa288d8dcflight .node path{fill:rgb(255, 255, 255);stroke:rgb(204, 216, 222);stroke-width:1px;}#d485109fa288d8dcflight .rough-node .label text,#d485109fa288d8dcflight .node .label text,#d485109fa288d8dcflight .image-shape .label,#d485109fa288d8dcflight .icon-shape .label{text-anchor:middle;}#d485109fa288d8dcflight .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d485109fa288d8dcflight .rough-node .label,#d485109fa288d8dcflight .node .label,#d485109fa288d8dcflight .image-shape .label,#d485109fa288d8dcflight .icon-shape .label{text-align:center;}#d485109fa288d8dcflight .node.clickable{cursor:pointer;}#d485109fa288d8dcflight .root .anchor path{fill:rgb(74, 86, 92)!important;stroke-width:0;stroke:rgb(74, 86, 92);}#d485109fa288d8dcflight .arrowheadPath{fill:#000000;}#d485109fa288d8dcflight .edgePath .path{stroke:rgb(74, 86, 92);stroke-width:1px;}#d485109fa288d8dcflight .flowchart-link{stroke:rgb(74, 86, 92);fill:none;}#d485109fa288d8dcflight .edgeLabel{background-color:rgb(182, 240, 255);text-align:center;}#d485109fa288d8dcflight .edgeLabel p{background-color:rgb(182, 240, 255);}#d485109fa288d8dcflight .edgeLabel rect{opacity:0.5;background-color:rgb(182, 240, 255);fill:rgb(182, 240, 255);}#d485109fa288d8dcflight .labelBkg{background-color:rgba(182, 240, 255, 0.5);}#d485109fa288d8dcflight .cluster rect{fill:rgb(255, 255, 255);stroke:rgb(129, 146, 154);stroke-width:1px;}#d485109fa288d8dcflight .cluster text{fill:#000000;}#d485109fa288d8dcflight .cluster span{color:#000000;}#d485109fa288d8dcflight div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid rgb(129, 146, 154);border-radius:2px;pointer-events:none;z-index:100;}#d485109fa288d8dcflight .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#d485109fa288d8dcflight rect.text{fill:none;stroke-width:0;}#d485109fa288d8dcflight .icon-shape,#d485109fa288d8dcflight .image-shape{background-color:rgb(182, 240, 255);text-align:center;}#d485109fa288d8dcflight .icon-shape p,#d485109fa288d8dcflight .image-shape p{background-color:rgb(182, 240, 255);padding:2px;}#d485109fa288d8dcflight .icon-shape .label rect,#d485109fa288d8dcflight .image-shape .label rect{opacity:0.5;background-color:rgb(182, 240, 255);fill:rgb(182, 240, 255);}#d485109fa288d8dcflight .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d485109fa288d8dcflight .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d485109fa288d8dcflight .node .neo-node{stroke:rgb(204, 216, 222);}#d485109fa288d8dcflight [data-look="neo"].node rect,#d485109fa288d8dcflight [data-look="neo"].cluster rect,#d485109fa288d8dcflight [data-look="neo"].node polygon{stroke:url(#d485109fa288d8dcflight-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d485109fa288d8dcflight [data-look="neo"].swimlane.cluster rect{filter:none;}#d485109fa288d8dcflight [data-look="neo"].node path{stroke:url(#d485109fa288d8dcflight-gradient);stroke-width:1px;}#d485109fa288d8dcflight [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d485109fa288d8dcflight [data-look="neo"].node .neo-line path{stroke:rgb(204, 216, 222);filter:none;}#d485109fa288d8dcflight [data-look="neo"].node circle{stroke:url(#d485109fa288d8dcflight-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d485109fa288d8dcflight [data-look="neo"].node circle .state-start{fill:#000000;}#d485109fa288d8dcflight [data-look="neo"].icon-shape .icon{fill:url(#d485109fa288d8dcflight-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d485109fa288d8dcflight [data-look="neo"].icon-shape .icon-neo path{stroke:url(#d485109fa288d8dcflight-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d485109fa288d8dcflight :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"&gt;&lt;path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"&gt;&lt;path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"&gt;&lt;path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"&gt;&lt;polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/polygon&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"&gt;&lt;path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcflight_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"&gt;&lt;path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;g class="root"&gt;&lt;g class="clusters"&gt;&lt;g class="cluster" id="d485109fa288d8dcflight-R" data-look="classic"&gt;&lt;rect style="" x="318.96875" y="8" width="298.359375" height="660"&gt;&lt;/rect&gt;&lt;g class="cluster-label" transform="translate(383.3359375, 8)"&gt;&lt;foreignObject width="169.625" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;what actually answered&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="cluster" id="d485109fa288d8dcflight-Q" data-look="classic"&gt;&lt;rect style="" x="8" y="20" width="260.96875" height="636"&gt;&lt;/rect&gt;&lt;g class="cluster-label" transform="translate(65.7578125, 20)"&gt;&lt;foreignObject width="145.453125" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;the question I asked&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgePaths"&gt;&lt;path d="M233.875,82L239.724,82C245.573,82,257.271,82,267.286,82C277.302,82,285.635,82,293.969,82C302.302,82,310.635,82,319.698,82C328.76,82,338.552,82,343.448,82L348.344,82" id="d485109fa288d8dcflight-L_A1_B1_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A1_B1_0" data-points="W3sieCI6MjMzLjg3NSwieSI6ODJ9LHsieCI6MjY4Ljk2ODc1LCJ5Ijo4Mn0seyJ4IjoyOTMuOTY4NzUsInkiOjgyfSx7IngiOjMxOC45Njg3NSwieSI6ODJ9LHsieCI6MzUyLjM0Mzc1LCJ5Ijo4Mn1d" data-look="classic" marker-end="url(#d485109fa288d8dcflight_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M228.406,210L235.167,210C241.927,210,255.448,210,266.375,210C277.302,210,285.635,210,293.969,210C302.302,210,310.635,210,321.4,210C332.164,210,345.359,210,351.957,210L358.555,210" id="d485109fa288d8dcflight-L_A2_B2_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A2_B2_0" data-points="W3sieCI6MjI4LjQwNjI1LCJ5IjoyMTB9LHsieCI6MjY4Ljk2ODc1LCJ5IjoyMTB9LHsieCI6MjkzLjk2ODc1LCJ5IjoyMTB9LHsieCI6MzE4Ljk2ODc1LCJ5IjoyMTB9LHsieCI6MzYyLjU1NDY4NzUsInkiOjIxMH1d" data-look="classic" marker-end="url(#d485109fa288d8dcflight_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M242.961,338L247.296,338C251.63,338,260.299,338,268.801,338C277.302,338,285.635,338,293.969,338C302.302,338,310.635,338,318.302,338C325.969,338,332.969,338,336.469,338L339.969,338" id="d485109fa288d8dcflight-L_A3_B3_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A3_B3_0" data-points="W3sieCI6MjQyLjk2MDkzNzUsInkiOjMzOH0seyJ4IjoyNjguOTY4NzUsInkiOjMzOH0seyJ4IjoyOTMuOTY4NzUsInkiOjMzOH0seyJ4IjozMTguOTY4NzUsInkiOjMzOH0seyJ4IjozNDMuOTY4NzUsInkiOjMzOH1d" data-look="classic" marker-end="url(#d485109fa288d8dcflight_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M243.969,466L248.135,466C252.302,466,260.635,466,268.969,466C277.302,466,285.635,466,293.969,466C302.302,466,310.635,466,320.749,466C330.862,466,342.755,466,348.702,466L354.648,466" id="d485109fa288d8dcflight-L_A4_B4_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A4_B4_0" data-points="W3sieCI6MjQzLjk2ODc1LCJ5Ijo0NjZ9LHsieCI6MjY4Ljk2ODc1LCJ5Ijo0NjZ9LHsieCI6MjkzLjk2ODc1LCJ5Ijo0NjZ9LHsieCI6MzE4Ljk2ODc1LCJ5Ijo0NjZ9LHsieCI6MzU4LjY0ODQzNzUsInkiOjQ2Nn1d" data-look="classic" marker-end="url(#d485109fa288d8dcflight_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M216.922,594L225.596,594C234.271,594,251.62,594,264.461,594C277.302,594,285.635,594,293.969,594C302.302,594,310.635,594,320.806,594C330.977,594,342.984,594,348.988,594L354.992,594" id="d485109fa288d8dcflight-L_A5_B5_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A5_B5_0" data-points="W3sieCI6MjE2LjkyMTg3NSwieSI6NTk0fSx7IngiOjI2OC45Njg3NSwieSI6NTk0fSx7IngiOjI5My45Njg3NSwieSI6NTk0fSx7IngiOjMxOC45Njg3NSwieSI6NTk0fSx7IngiOjM1OC45OTIxODc1LCJ5Ijo1OTR9XQ==" data-look="classic" marker-end="url(#d485109fa288d8dcflight_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class="edgeLabels"&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A1_B1_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A2_B2_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A3_B3_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A4_B4_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A5_B5_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="nodes"&gt;&lt;g class="node default" id="d485109fa288d8dcflight-flowchart-A1-0" data-look="classic" transform="translate(138.484375, 82)"&gt;&lt;rect class="basic label-container" style="" x="-95.390625" y="-27" width="190.78125" height="54"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-65.390625, -12)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="130.78125" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;is Word still used?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcflight-flowchart-A2-1" data-look="classic" transform="translate(138.484375, 210)"&gt;&lt;rect class="basic label-container" style="" x="-89.921875" y="-27" width="179.84375" height="54"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-59.921875, -12)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="119.84375" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;any git remotes?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcflight-flowchart-A3-2" data-look="classic" transform="translate(138.484375, 338)"&gt;&lt;rect class="basic label-container" style="" x="-104.4765625" y="-27" width="208.953125" height="54"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-74.4765625, -12)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="148.953125" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;is master protected?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcflight-flowchart-A4-3" data-look="classic" transform="translate(138.484375, 466)"&gt;&lt;rect class="basic label-container" style="" x="-105.484375" y="-39" width="210.96875" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-75.484375, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="150.96875" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;how much CPU does&lt;br&gt;WindowServer use?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcflight-flowchart-A5-4" data-look="classic" transform="translate(138.484375, 594)"&gt;&lt;rect class="basic label-container" style="" x="-78.4375" y="-27" width="156.875" height="54"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-48.4375, -12)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="96.875" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;how fast is ll?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcflight-flowchart-B1-5" data-look="classic" transform="translate(468.1484375, 82)"&gt;&lt;rect class="basic label-container" style="" x="-115.8046875" y="-39" width="231.609375" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-85.8046875, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="171.609375" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;a Spotlight index&lt;br&gt;that had just been reset&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcflight-flowchart-B2-6" data-look="classic" transform="translate(468.1484375, 210)"&gt;&lt;rect class="basic label-container" style="" x="-105.59375" y="-39" width="211.1875" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-75.59375, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="151.1875" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;$HOME, which is not&lt;br&gt;a git directory&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcflight-flowchart-B3-7" data-look="classic" transform="translate(468.1484375, 338)"&gt;&lt;rect class="basic label-container" style="" x="-124.1796875" y="-39" width="248.359375" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-94.1796875, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="188.359375" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;the old protection API,&lt;br&gt;which cannot see rulesets&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcflight-flowchart-B4-8" data-look="classic" transform="translate(468.1484375, 466)"&gt;&lt;rect class="basic label-container" style="" x="-109.5" y="-39" width="219" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-79.5, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="159" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;a decaying average of&lt;br&gt;the last minute&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcflight-flowchart-B5-9" data-look="classic" transform="translate(468.1484375, 594)"&gt;&lt;rect class="basic label-container" style="" x="-109.15625" y="-39" width="218.3125" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-79.15625, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="158.3125" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;a sandbox that blocks&lt;br&gt;the real syscalls&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;defs&gt;&lt;filter id="d485109fa288d8dcflight-drop-shadow" height="130%" width="130%"&gt;&lt;feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"&gt;&lt;/feDropShadow&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;defs&gt;&lt;filter id="d485109fa288d8dcflight-drop-shadow-small" height="150%" width="150%"&gt;&lt;feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"&gt;&lt;/feDropShadow&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;linearGradient id="d485109fa288d8dcflight-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"&gt;&lt;stop offset="0%" stop-color="rgb(204, 216, 222)" stop-opacity="1"&gt;&lt;/stop&gt;&lt;stop offset="100%" stop-color="rgb(28, 209, 255)" stop-opacity="1"&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;/svg&gt;&lt;/div&gt;&#10; &lt;div class="not-prose diagram diagram-dark"&gt;&lt;svg id="d485109fa288d8dcfdark" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 625.328125px;" viewBox="0 0 625.328125 676" role="graphics-document document" aria-roledescription="flowchart-v2"&gt;&lt;style&gt;#d485109fa288d8dcfdark{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d485109fa288d8dcfdark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d485109fa288d8dcfdark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d485109fa288d8dcfdark .error-icon{fill:#a44141;}#d485109fa288d8dcfdark .error-text{fill:#ddd;stroke:#ddd;}#d485109fa288d8dcfdark .edge-thickness-normal{stroke-width:1px;}#d485109fa288d8dcfdark .edge-thickness-thick{stroke-width:3.5px;}#d485109fa288d8dcfdark .edge-pattern-solid{stroke-dasharray:0;}#d485109fa288d8dcfdark .edge-thickness-invisible{stroke-width:0;fill:none;}#d485109fa288d8dcfdark .edge-pattern-dashed{stroke-dasharray:3;}#d485109fa288d8dcfdark .edge-pattern-dotted{stroke-dasharray:2;}#d485109fa288d8dcfdark .marker{fill:lightgrey;stroke:lightgrey;}#d485109fa288d8dcfdark .marker.cross{stroke:lightgrey;}#d485109fa288d8dcfdark svg{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:16px;}#d485109fa288d8dcfdark p{margin:0;}#d485109fa288d8dcfdark .label{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;color:#ccc;}#d485109fa288d8dcfdark .cluster-label text{fill:#F9FFFE;}#d485109fa288d8dcfdark .cluster-label span{color:#F9FFFE;}#d485109fa288d8dcfdark .cluster-label span p{background-color:transparent;}#d485109fa288d8dcfdark .label text,#d485109fa288d8dcfdark span{fill:#ccc;color:#ccc;}#d485109fa288d8dcfdark .node rect,#d485109fa288d8dcfdark .node circle,#d485109fa288d8dcfdark .node ellipse,#d485109fa288d8dcfdark .node polygon,#d485109fa288d8dcfdark .node path{fill:#1f2020;stroke:#ccc;stroke-width:1px;}#d485109fa288d8dcfdark .rough-node .label text,#d485109fa288d8dcfdark .node .label text,#d485109fa288d8dcfdark .image-shape .label,#d485109fa288d8dcfdark .icon-shape .label{text-anchor:middle;}#d485109fa288d8dcfdark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d485109fa288d8dcfdark .rough-node .label,#d485109fa288d8dcfdark .node .label,#d485109fa288d8dcfdark .image-shape .label,#d485109fa288d8dcfdark .icon-shape .label{text-align:center;}#d485109fa288d8dcfdark .node.clickable{cursor:pointer;}#d485109fa288d8dcfdark .root .anchor path{fill:lightgrey!important;stroke-width:0;stroke:lightgrey;}#d485109fa288d8dcfdark .arrowheadPath{fill:lightgrey;}#d485109fa288d8dcfdark .edgePath .path{stroke:lightgrey;stroke-width:1px;}#d485109fa288d8dcfdark .flowchart-link{stroke:lightgrey;fill:none;}#d485109fa288d8dcfdark .edgeLabel{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#d485109fa288d8dcfdark .edgeLabel p{background-color:hsl(0, 0%, 34.4117647059%);}#d485109fa288d8dcfdark .edgeLabel rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#d485109fa288d8dcfdark .labelBkg{background-color:rgba(87.75, 87.75, 87.75, 0.5);}#d485109fa288d8dcfdark .cluster rect{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#d485109fa288d8dcfdark .cluster text{fill:#F9FFFE;}#d485109fa288d8dcfdark .cluster span{color:#F9FFFE;}#d485109fa288d8dcfdark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:12px;background:hsl(20, 1.5873015873%, 12.3529411765%);border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#d485109fa288d8dcfdark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#d485109fa288d8dcfdark rect.text{fill:none;stroke-width:0;}#d485109fa288d8dcfdark .icon-shape,#d485109fa288d8dcfdark .image-shape{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#d485109fa288d8dcfdark .icon-shape p,#d485109fa288d8dcfdark .image-shape p{background-color:hsl(0, 0%, 34.4117647059%);padding:2px;}#d485109fa288d8dcfdark .icon-shape .label rect,#d485109fa288d8dcfdark .image-shape .label rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#d485109fa288d8dcfdark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d485109fa288d8dcfdark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d485109fa288d8dcfdark .node .neo-node{stroke:#ccc;}#d485109fa288d8dcfdark [data-look="neo"].node rect,#d485109fa288d8dcfdark [data-look="neo"].cluster rect,#d485109fa288d8dcfdark [data-look="neo"].node polygon{stroke:url(#d485109fa288d8dcfdark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d485109fa288d8dcfdark [data-look="neo"].swimlane.cluster rect{filter:none;}#d485109fa288d8dcfdark [data-look="neo"].node path{stroke:url(#d485109fa288d8dcfdark-gradient);stroke-width:1px;}#d485109fa288d8dcfdark [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d485109fa288d8dcfdark [data-look="neo"].node .neo-line path{stroke:#ccc;filter:none;}#d485109fa288d8dcfdark [data-look="neo"].node circle{stroke:url(#d485109fa288d8dcfdark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d485109fa288d8dcfdark [data-look="neo"].node circle .state-start{fill:#000000;}#d485109fa288d8dcfdark [data-look="neo"].icon-shape .icon{fill:url(#d485109fa288d8dcfdark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d485109fa288d8dcfdark [data-look="neo"].icon-shape .icon-neo path{stroke:url(#d485109fa288d8dcfdark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d485109fa288d8dcfdark :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"&gt;&lt;path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"&gt;&lt;path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"&gt;&lt;path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"&gt;&lt;polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/polygon&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"&gt;&lt;path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="d485109fa288d8dcfdark_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"&gt;&lt;path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;g class="root"&gt;&lt;g class="clusters"&gt;&lt;g class="cluster" id="d485109fa288d8dcfdark-R" data-look="classic"&gt;&lt;rect style="" x="318.96875" y="8" width="298.359375" height="660"&gt;&lt;/rect&gt;&lt;g class="cluster-label" transform="translate(383.3359375, 8)"&gt;&lt;foreignObject width="169.625" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;what actually answered&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="cluster" id="d485109fa288d8dcfdark-Q" data-look="classic"&gt;&lt;rect style="" x="8" y="20" width="260.96875" height="636"&gt;&lt;/rect&gt;&lt;g class="cluster-label" transform="translate(65.7578125, 20)"&gt;&lt;foreignObject width="145.453125" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;the question I asked&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgePaths"&gt;&lt;path d="M233.875,82L239.724,82C245.573,82,257.271,82,267.286,82C277.302,82,285.635,82,293.969,82C302.302,82,310.635,82,319.698,82C328.76,82,338.552,82,343.448,82L348.344,82" id="d485109fa288d8dcfdark-L_A1_B1_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A1_B1_0" data-points="W3sieCI6MjMzLjg3NSwieSI6ODJ9LHsieCI6MjY4Ljk2ODc1LCJ5Ijo4Mn0seyJ4IjoyOTMuOTY4NzUsInkiOjgyfSx7IngiOjMxOC45Njg3NSwieSI6ODJ9LHsieCI6MzUyLjM0Mzc1LCJ5Ijo4Mn1d" data-look="classic" marker-end="url(#d485109fa288d8dcfdark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M228.406,210L235.167,210C241.927,210,255.448,210,266.375,210C277.302,210,285.635,210,293.969,210C302.302,210,310.635,210,321.4,210C332.164,210,345.359,210,351.957,210L358.555,210" id="d485109fa288d8dcfdark-L_A2_B2_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A2_B2_0" data-points="W3sieCI6MjI4LjQwNjI1LCJ5IjoyMTB9LHsieCI6MjY4Ljk2ODc1LCJ5IjoyMTB9LHsieCI6MjkzLjk2ODc1LCJ5IjoyMTB9LHsieCI6MzE4Ljk2ODc1LCJ5IjoyMTB9LHsieCI6MzYyLjU1NDY4NzUsInkiOjIxMH1d" data-look="classic" marker-end="url(#d485109fa288d8dcfdark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M242.961,338L247.296,338C251.63,338,260.299,338,268.801,338C277.302,338,285.635,338,293.969,338C302.302,338,310.635,338,318.302,338C325.969,338,332.969,338,336.469,338L339.969,338" id="d485109fa288d8dcfdark-L_A3_B3_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A3_B3_0" data-points="W3sieCI6MjQyLjk2MDkzNzUsInkiOjMzOH0seyJ4IjoyNjguOTY4NzUsInkiOjMzOH0seyJ4IjoyOTMuOTY4NzUsInkiOjMzOH0seyJ4IjozMTguOTY4NzUsInkiOjMzOH0seyJ4IjozNDMuOTY4NzUsInkiOjMzOH1d" data-look="classic" marker-end="url(#d485109fa288d8dcfdark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M243.969,466L248.135,466C252.302,466,260.635,466,268.969,466C277.302,466,285.635,466,293.969,466C302.302,466,310.635,466,320.749,466C330.862,466,342.755,466,348.702,466L354.648,466" id="d485109fa288d8dcfdark-L_A4_B4_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A4_B4_0" data-points="W3sieCI6MjQzLjk2ODc1LCJ5Ijo0NjZ9LHsieCI6MjY4Ljk2ODc1LCJ5Ijo0NjZ9LHsieCI6MjkzLjk2ODc1LCJ5Ijo0NjZ9LHsieCI6MzE4Ljk2ODc1LCJ5Ijo0NjZ9LHsieCI6MzU4LjY0ODQzNzUsInkiOjQ2Nn1d" data-look="classic" marker-end="url(#d485109fa288d8dcfdark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M216.922,594L225.596,594C234.271,594,251.62,594,264.461,594C277.302,594,285.635,594,293.969,594C302.302,594,310.635,594,320.806,594C330.977,594,342.984,594,348.988,594L354.992,594" id="d485109fa288d8dcfdark-L_A5_B5_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A5_B5_0" data-points="W3sieCI6MjE2LjkyMTg3NSwieSI6NTk0fSx7IngiOjI2OC45Njg3NSwieSI6NTk0fSx7IngiOjI5My45Njg3NSwieSI6NTk0fSx7IngiOjMxOC45Njg3NSwieSI6NTk0fSx7IngiOjM1OC45OTIxODc1LCJ5Ijo1OTR9XQ==" data-look="classic" marker-end="url(#d485109fa288d8dcfdark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class="edgeLabels"&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A1_B1_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A2_B2_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A3_B3_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A4_B4_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A5_B5_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="nodes"&gt;&lt;g class="node default" id="d485109fa288d8dcfdark-flowchart-A1-0" data-look="classic" transform="translate(138.484375, 82)"&gt;&lt;rect class="basic label-container" style="" x="-95.390625" y="-27" width="190.78125" height="54"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-65.390625, -12)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="130.78125" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;is Word still used?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcfdark-flowchart-A2-1" data-look="classic" transform="translate(138.484375, 210)"&gt;&lt;rect class="basic label-container" style="" x="-89.921875" y="-27" width="179.84375" height="54"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-59.921875, -12)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="119.84375" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;any git remotes?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcfdark-flowchart-A3-2" data-look="classic" transform="translate(138.484375, 338)"&gt;&lt;rect class="basic label-container" style="" x="-104.4765625" y="-27" width="208.953125" height="54"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-74.4765625, -12)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="148.953125" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;is master protected?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcfdark-flowchart-A4-3" data-look="classic" transform="translate(138.484375, 466)"&gt;&lt;rect class="basic label-container" style="" x="-105.484375" y="-39" width="210.96875" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-75.484375, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="150.96875" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;how much CPU does&lt;br&gt;WindowServer use?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcfdark-flowchart-A5-4" data-look="classic" transform="translate(138.484375, 594)"&gt;&lt;rect class="basic label-container" style="" x="-78.4375" y="-27" width="156.875" height="54"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-48.4375, -12)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="96.875" height="24"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;how fast is ll?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcfdark-flowchart-B1-5" data-look="classic" transform="translate(468.1484375, 82)"&gt;&lt;rect class="basic label-container" style="" x="-115.8046875" y="-39" width="231.609375" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-85.8046875, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="171.609375" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;a Spotlight index&lt;br&gt;that had just been reset&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcfdark-flowchart-B2-6" data-look="classic" transform="translate(468.1484375, 210)"&gt;&lt;rect class="basic label-container" style="" x="-105.59375" y="-39" width="211.1875" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-75.59375, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="151.1875" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;$HOME, which is not&lt;br&gt;a git directory&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcfdark-flowchart-B3-7" data-look="classic" transform="translate(468.1484375, 338)"&gt;&lt;rect class="basic label-container" style="" x="-124.1796875" y="-39" width="248.359375" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-94.1796875, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="188.359375" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;the old protection API,&lt;br&gt;which cannot see rulesets&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcfdark-flowchart-B4-8" data-look="classic" transform="translate(468.1484375, 466)"&gt;&lt;rect class="basic label-container" style="" x="-109.5" y="-39" width="219" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-79.5, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="159" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;a decaying average of&lt;br&gt;the last minute&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d485109fa288d8dcfdark-flowchart-B5-9" data-look="classic" transform="translate(468.1484375, 594)"&gt;&lt;rect class="basic label-container" style="" x="-109.15625" y="-39" width="218.3125" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-79.15625, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="158.3125" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;a sandbox that blocks&lt;br&gt;the real syscalls&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;defs&gt;&lt;filter id="d485109fa288d8dcfdark-drop-shadow" height="130%" width="130%"&gt;&lt;feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#FFFFFF"&gt;&lt;/feDropShadow&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;defs&gt;&lt;filter id="d485109fa288d8dcfdark-drop-shadow-small" height="150%" width="150%"&gt;&lt;feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#FFFFFF"&gt;&lt;/feDropShadow&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;linearGradient id="d485109fa288d8dcfdark-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"&gt;&lt;stop offset="0%" stop-color="#cccccc" stop-opacity="1"&gt;&lt;/stop&gt;&lt;stop offset="100%" stop-color="hsl(180, 0%, 18.3529411765%)" stop-opacity="1"&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;/svg&gt;&lt;/div&gt;&#10;&lt;p&gt;&amp;ldquo;Absence of evidence is not evidence of absence&amp;rdquo; is an old phrase. The working&#10;version is more direct: &lt;strong&gt;evidence gathered by a broken method is not evidence&#10;at all&lt;/strong&gt;, and a broken method usually exits 0.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;The test that could not fail&#10; &lt;div id="the-test-that-could-not-fail" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-test-that-could-not-fail" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;The same day turned up a bug that had survived for a year because the test&#10;guarding it was written backwards.&lt;/p&gt;&#10;&lt;p&gt;Ghostty on macOS reads both &lt;code&gt;~/.config/ghostty/config&lt;/code&gt; and&#10;&lt;code&gt;~/Library/Application Support/com.mitchellh.ghostty/config&lt;/code&gt;. My bootstrap&#10;script had symlinked the second to the first, so the same file was parsed&#10;twice. For single-value keys the last value wins, so nothing looked wrong. But&#10;repeatable keys append:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; ghostty +show-config &lt;span class="p"&gt;|&lt;/span&gt; grep -c &lt;span class="s1"&gt;&amp;#39;^custom-shader = &amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;4 # the file declares 2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Two extra full-screen shader passes on every frame, for a year. And the test&#10;suite stayed green the whole time, because it contained this:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;GHOSTTY_LINK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Library/Application Support/com.mitchellh.ghostty/config&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$GHOSTTY_LINK&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -L &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$GHOSTTY_LINK&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; run_test &lt;span class="s2"&gt;&amp;#34;Ghostty config is symlink&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;[ -L \&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$GHOSTTY_LINK&lt;/span&gt;&lt;span class="s2"&gt;\&amp;#34; ]&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Two problems in four lines. The assertion checks the &lt;strong&gt;opposite&lt;/strong&gt; of the&#10;correct rule, because the symlink should not exist at all. And the assertion&#10;sits inside a guard, so when I deleted the symlink, the test did not fail. It&#10;silently stopped running. The first post in this series was a catalog of&#10;safety nets that had quietly died. This test is the sharpest example I have&#10;found since: it disappeared at the exact moment it finally had something to&#10;say.&lt;/p&gt;&#10;&lt;p&gt;The replacement tests the property instead of the mechanism:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;run_test &lt;span class="s2"&gt;&amp;#34;Ghostty config is not parsed twice (custom-shader not duplicated)&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;[ &amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;$LOADED_SHADERS&lt;/span&gt;&lt;span class="s2"&gt;&amp;#39; -eq &amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;$CFG_SHADERS&lt;/span&gt;&lt;span class="s2"&gt;&amp;#39; ]&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Whatever causes a double parse next time (this symlink, a different symlink,&#10;an include directive, some future Ghostty change), the count stops matching&#10;and the test goes red. I put the symlink back once, on purpose, and watched&#10;the test fail before I trusted it.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Lessons&#10; &lt;div id="lessons" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lessons" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Null, empty, and 404 are answers about the &lt;em&gt;query&lt;/em&gt;, not always about the&#10;world. Before treating one as a finding, confirm the query reached the&#10;right place.&lt;/li&gt;&#10;&lt;li&gt;Decide &amp;ldquo;is this app still needed&amp;rdquo; from data a person created. An index the&#10;OS can reset is not a record of anything.&lt;/li&gt;&#10;&lt;li&gt;Know which average your tool reports. &lt;code&gt;ps %cpu&lt;/code&gt; on macOS leans toward the&#10;last minute; cumulative load is CPU time divided by elapsed time.&lt;/li&gt;&#10;&lt;li&gt;Measure where the work really happens. A sandbox that blocks the syscalls&#10;under test produces a fast, precise, meaningless number.&lt;/li&gt;&#10;&lt;li&gt;Never measure a system while you are the heaviest thing running on it.&lt;/li&gt;&#10;&lt;li&gt;Test the property, not the mechanism. The symlink was one way to get a&#10;double parse; the count catches all of them.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;h2 class="relative group"&gt;References&#10; &lt;div id="references" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#references" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/eza-community/eza" target="_blank" rel="noreferrer"&gt;eza&lt;/a&gt; (&lt;code&gt;--git&lt;/code&gt; cost measured on&#10;v0.23.5)&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://yadm.io/" target="_blank" rel="noreferrer"&gt;yadm&lt;/a&gt; (bare repo location:&#10;&lt;code&gt;~/.local/share/yadm/repo.git&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://docs.github.com/rest/repos/rules" target="_blank" rel="noreferrer"&gt;GitHub rulesets API&lt;/a&gt; (rulesets&#10;are invisible to the older &lt;code&gt;/branches/*/protection&lt;/code&gt; endpoint)&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://ghostty.org/docs/config" target="_blank" rel="noreferrer"&gt;Ghostty configuration&lt;/a&gt; (macOS reads both&#10;the XDG path and the Application Support path)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;ps(1)&lt;/code&gt; on macOS (&lt;code&gt;%cpu&lt;/code&gt; is documented as a decaying average)&lt;/li&gt;&#10;&lt;li&gt;The repo and its test suite:&#10;&lt;a href="https://github.com/nickboy/dotfiles" target="_blank" rel="noreferrer"&gt;nickboy/dotfiles&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</content:encoded></item></channel></rss>