<?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>Shell on Nick Liu - Software Engineer</title><link>https://nick-liu.com/tags/shell/</link><description>Recent content in Shell 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>Wed, 05 Aug 2026 22:49:23 -0700</lastBuildDate><atom:link href="https://nick-liu.com/tags/shell/index.xml" rel="self" type="application/rss+xml"/><item><title>My commands vanished with exit 0. The culprit was a file named env.</title><link>https://nick-liu.com/posts/silent-failures-env-shadow/</link><pubDate>Thu, 13 Aug 2026 00:00:00 +0000</pubDate><author>nickboy@users.noreply.github.com (Nick Liu)</author><guid>https://nick-liu.com/posts/silent-failures-env-shadow/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 
`env -u VAR command` did nothing. Exit code 0, no output, no error. A different command, same thing. A different variable, same thing. Any invocation that started with `env` just quietly evaporated. What finally made the problem visible was a `git init` that reported success while creating no `.git` directory at all.

&lt;/div&gt;

&lt;p&gt;That was a year ago. The case closed last month, and the culprit was not uv, not some third-party installer, not anything exotic. It was this repo&amp;rsquo;s own bootstrap script. The thing that caught it was the regression test I had written for the original incident.&lt;/p&gt;</description><content:encoded>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 
`env -u VAR command` did nothing. Exit code 0, no output, no error. A different command, same thing. A different variable, same thing. Any invocation that started with `env` just quietly evaporated. What finally made the problem visible was a `git init` that reported success while creating no `.git` directory at all.

&lt;/div&gt;

&lt;p&gt;That was a year ago. The case closed last month, and the culprit was not uv, not some third-party installer, not anything exotic. It was this repo&amp;rsquo;s own bootstrap script. The thing that caught it was the regression test I had written for the original incident.&lt;/p&gt;
&lt;p&gt;This post is three silent failures from the same repo, plus that ending. They share a shape worth naming.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Case 1: the executable that should have been sourced
 &lt;div id="case-1-the-executable-that-should-have-been-sourced" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#case-1-the-executable-that-should-have-been-sourced" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;uv&amp;rsquo;s installer drops a file at &lt;code&gt;~/.local/bin/env&lt;/code&gt;. It is a PATH snippet, a few &lt;code&gt;export&lt;/code&gt; lines meant to be sourced by your shell profile. It is not a program.&lt;/p&gt;
&lt;p&gt;At some point, something gave it an executable bit. I could not figure out what at the time, so that part of the case stayed open. But the consequences were mechanical from there:&lt;/p&gt;
&lt;div class="not-prose diagram diagram-light"&gt;&lt;svg id="d8345951872e82ea1light" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 276px;" viewBox="0 0 276 902" role="graphics-document document" aria-roledescription="flowchart-v2"&gt;&lt;style&gt;#d8345951872e82ea1light{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;}}#d8345951872e82ea1light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d8345951872e82ea1light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d8345951872e82ea1light .error-icon{fill:rgb(255, 255, 255);}#d8345951872e82ea1light .error-text{fill:#000000;stroke:#000000;}#d8345951872e82ea1light .edge-thickness-normal{stroke-width:1px;}#d8345951872e82ea1light .edge-thickness-thick{stroke-width:3.5px;}#d8345951872e82ea1light .edge-pattern-solid{stroke-dasharray:0;}#d8345951872e82ea1light .edge-thickness-invisible{stroke-width:0;fill:none;}#d8345951872e82ea1light .edge-pattern-dashed{stroke-dasharray:3;}#d8345951872e82ea1light .edge-pattern-dotted{stroke-dasharray:2;}#d8345951872e82ea1light .marker{fill:rgb(74, 86, 92);stroke:rgb(74, 86, 92);}#d8345951872e82ea1light .marker.cross{stroke:rgb(74, 86, 92);}#d8345951872e82ea1light svg{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:16px;}#d8345951872e82ea1light p{margin:0;}#d8345951872e82ea1light .label{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;color:#333;}#d8345951872e82ea1light .cluster-label text{fill:#000000;}#d8345951872e82ea1light .cluster-label span{color:#000000;}#d8345951872e82ea1light .cluster-label span p{background-color:transparent;}#d8345951872e82ea1light .label text,#d8345951872e82ea1light span{fill:#333;color:#333;}#d8345951872e82ea1light .node rect,#d8345951872e82ea1light .node circle,#d8345951872e82ea1light .node ellipse,#d8345951872e82ea1light .node polygon,#d8345951872e82ea1light .node path{fill:rgb(255, 255, 255);stroke:rgb(204, 216, 222);stroke-width:1px;}#d8345951872e82ea1light .rough-node .label text,#d8345951872e82ea1light .node .label text,#d8345951872e82ea1light .image-shape .label,#d8345951872e82ea1light .icon-shape .label{text-anchor:middle;}#d8345951872e82ea1light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d8345951872e82ea1light .rough-node .label,#d8345951872e82ea1light .node .label,#d8345951872e82ea1light .image-shape .label,#d8345951872e82ea1light .icon-shape .label{text-align:center;}#d8345951872e82ea1light .node.clickable{cursor:pointer;}#d8345951872e82ea1light .root .anchor path{fill:rgb(74, 86, 92)!important;stroke-width:0;stroke:rgb(74, 86, 92);}#d8345951872e82ea1light .arrowheadPath{fill:#000000;}#d8345951872e82ea1light .edgePath .path{stroke:rgb(74, 86, 92);stroke-width:1px;}#d8345951872e82ea1light .flowchart-link{stroke:rgb(74, 86, 92);fill:none;}#d8345951872e82ea1light .edgeLabel{background-color:rgb(182, 240, 255);text-align:center;}#d8345951872e82ea1light .edgeLabel p{background-color:rgb(182, 240, 255);}#d8345951872e82ea1light .edgeLabel rect{opacity:0.5;background-color:rgb(182, 240, 255);fill:rgb(182, 240, 255);}#d8345951872e82ea1light .labelBkg{background-color:rgba(182, 240, 255, 0.5);}#d8345951872e82ea1light .cluster rect{fill:rgb(255, 255, 255);stroke:rgb(129, 146, 154);stroke-width:1px;}#d8345951872e82ea1light .cluster text{fill:#000000;}#d8345951872e82ea1light .cluster span{color:#000000;}#d8345951872e82ea1light 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;}#d8345951872e82ea1light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#d8345951872e82ea1light rect.text{fill:none;stroke-width:0;}#d8345951872e82ea1light .icon-shape,#d8345951872e82ea1light .image-shape{background-color:rgb(182, 240, 255);text-align:center;}#d8345951872e82ea1light .icon-shape p,#d8345951872e82ea1light .image-shape p{background-color:rgb(182, 240, 255);padding:2px;}#d8345951872e82ea1light .icon-shape .label rect,#d8345951872e82ea1light .image-shape .label rect{opacity:0.5;background-color:rgb(182, 240, 255);fill:rgb(182, 240, 255);}#d8345951872e82ea1light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d8345951872e82ea1light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d8345951872e82ea1light .node .neo-node{stroke:rgb(204, 216, 222);}#d8345951872e82ea1light [data-look="neo"].node rect,#d8345951872e82ea1light [data-look="neo"].cluster rect,#d8345951872e82ea1light [data-look="neo"].node polygon{stroke:url(#d8345951872e82ea1light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d8345951872e82ea1light [data-look="neo"].swimlane.cluster rect{filter:none;}#d8345951872e82ea1light [data-look="neo"].node path{stroke:url(#d8345951872e82ea1light-gradient);stroke-width:1px;}#d8345951872e82ea1light [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d8345951872e82ea1light [data-look="neo"].node .neo-line path{stroke:rgb(204, 216, 222);filter:none;}#d8345951872e82ea1light [data-look="neo"].node circle{stroke:url(#d8345951872e82ea1light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d8345951872e82ea1light [data-look="neo"].node circle .state-start{fill:#000000;}#d8345951872e82ea1light [data-look="neo"].icon-shape .icon{fill:url(#d8345951872e82ea1light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d8345951872e82ea1light [data-look="neo"].icon-shape .icon-neo path{stroke:url(#d8345951872e82ea1light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d8345951872e82ea1light :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;marker id="d8345951872e82ea1light_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="d8345951872e82ea1light_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="d8345951872e82ea1light_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="d8345951872e82ea1light_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="d8345951872e82ea1light_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="d8345951872e82ea1light_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="d8345951872e82ea1light_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="d8345951872e82ea1light_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="d8345951872e82ea1light_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="d8345951872e82ea1light_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="d8345951872e82ea1light_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="d8345951872e82ea1light_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&gt;&lt;g class="edgePaths"&gt;&lt;path d="M138,134L138,138.167C138,142.333,138,150.667,138,158.333C138,166,138,173,138,176.5L138,180" id="d8345951872e82ea1light-L_A_B_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_A_B_0" data-points="W3sieCI6MTM4LCJ5IjoxMzR9LHsieCI6MTM4LCJ5IjoxNTl9LHsieCI6MTM4LCJ5IjoxODR9XQ==" data-look="classic" marker-end="url(#d8345951872e82ea1light_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M138,310L138,314.167C138,318.333,138,326.667,138,334.333C138,342,138,349,138,352.5L138,356" id="d8345951872e82ea1light-L_B_C_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_B_C_0" data-points="W3sieCI6MTM4LCJ5IjozMTB9LHsieCI6MTM4LCJ5IjozMzV9LHsieCI6MTM4LCJ5IjozNjB9XQ==" data-look="classic" marker-end="url(#d8345951872e82ea1light_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M138,462L138,466.167C138,470.333,138,478.667,138,486.333C138,494,138,501,138,504.5L138,508" id="d8345951872e82ea1light-L_C_D_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_C_D_0" data-points="W3sieCI6MTM4LCJ5Ijo0NjJ9LHsieCI6MTM4LCJ5Ijo0ODd9LHsieCI6MTM4LCJ5Ijo1MTJ9XQ==" data-look="classic" marker-end="url(#d8345951872e82ea1light_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M138,566L138,570.167C138,574.333,138,582.667,138,590.333C138,598,138,605,138,608.5L138,612" id="d8345951872e82ea1light-L_D_E_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_D_E_0" data-points="W3sieCI6MTM4LCJ5Ijo1NjZ9LHsieCI6MTM4LCJ5Ijo1OTF9LHsieCI6MTM4LCJ5Ijo2MTZ9XQ==" data-look="classic" marker-end="url(#d8345951872e82ea1light_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M138,766L138,770.167C138,774.333,138,782.667,138,790.333C138,798,138,805,138,808.5L138,812" id="d8345951872e82ea1light-L_E_F_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_E_F_0" data-points="W3sieCI6MTM4LCJ5Ijo3NjZ9LHsieCI6MTM4LCJ5Ijo3OTF9LHsieCI6MTM4LCJ5Ijo4MTZ9XQ==" data-look="classic" marker-end="url(#d8345951872e82ea1light_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_A_B_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_B_C_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_C_D_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_D_E_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_E_F_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="d8345951872e82ea1light-flowchart-A-0" data-look="classic" transform="translate(138, 71)"&gt;&lt;rect class="basic label-container" style="" x="-130" y="-63" width="260" height="126"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-100, -48)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="200" height="96"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;uv installer drops ~/.local/bin/env&lt;br&gt;(a PATH snippet, meant to be sourced)&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d8345951872e82ea1light-flowchart-B-1" data-look="classic" transform="translate(138, 247)"&gt;&lt;rect class="basic label-container" style="" x="-130" y="-63" width="260" height="126"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-100, -48)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="200" height="96"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;something marks it executable&lt;br&gt;(culprit unknown, case left open)&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d8345951872e82ea1light-flowchart-C-3" data-look="classic" transform="translate(138, 411)"&gt;&lt;rect class="basic label-container" style="" x="-130" y="-51" width="260" height="102"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-100, -36)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="200" height="72"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;~/.local/bin sits second in PATH,&lt;br&gt;ahead of /usr/bin&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d8345951872e82ea1light-flowchart-D-5" data-look="classic" transform="translate(138, 539)"&gt;&lt;rect class="basic label-container" style="" x="-129.828125" y="-27" width="259.65625" height="54"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-99.828125, -12)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="199.65625" 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;it now shadows /usr/bin/env&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d8345951872e82ea1light-flowchart-E-7" data-look="classic" transform="translate(138, 691)"&gt;&lt;rect class="basic label-container" style="" x="-130" y="-75" width="260" height="150"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-100, -60)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="200" height="120"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;'env ... cmd' runs the snippet instead:&lt;br&gt;sets a few variables, exits 0,&lt;br&gt;never runs cmd&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d8345951872e82ea1light-flowchart-F-9" data-look="classic" transform="translate(138, 855)"&gt;&lt;rect class="basic label-container" style="" x="-129.4140625" y="-39" width="258.828125" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-99.4140625, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="198.828125" 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;symptom: git init succeeds,&lt;br&gt;no .git exists&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="d8345951872e82ea1light-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="d8345951872e82ea1light-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="d8345951872e82ea1light-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;
 &lt;div class="not-prose diagram diagram-dark"&gt;&lt;svg id="d8345951872e82ea1dark" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 276px;" viewBox="0 0 276 902" role="graphics-document document" aria-roledescription="flowchart-v2"&gt;&lt;style&gt;#d8345951872e82ea1dark{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;}}#d8345951872e82ea1dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d8345951872e82ea1dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d8345951872e82ea1dark .error-icon{fill:#a44141;}#d8345951872e82ea1dark .error-text{fill:#ddd;stroke:#ddd;}#d8345951872e82ea1dark .edge-thickness-normal{stroke-width:1px;}#d8345951872e82ea1dark .edge-thickness-thick{stroke-width:3.5px;}#d8345951872e82ea1dark .edge-pattern-solid{stroke-dasharray:0;}#d8345951872e82ea1dark .edge-thickness-invisible{stroke-width:0;fill:none;}#d8345951872e82ea1dark .edge-pattern-dashed{stroke-dasharray:3;}#d8345951872e82ea1dark .edge-pattern-dotted{stroke-dasharray:2;}#d8345951872e82ea1dark .marker{fill:lightgrey;stroke:lightgrey;}#d8345951872e82ea1dark .marker.cross{stroke:lightgrey;}#d8345951872e82ea1dark svg{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:16px;}#d8345951872e82ea1dark p{margin:0;}#d8345951872e82ea1dark .label{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;color:#ccc;}#d8345951872e82ea1dark .cluster-label text{fill:#F9FFFE;}#d8345951872e82ea1dark .cluster-label span{color:#F9FFFE;}#d8345951872e82ea1dark .cluster-label span p{background-color:transparent;}#d8345951872e82ea1dark .label text,#d8345951872e82ea1dark span{fill:#ccc;color:#ccc;}#d8345951872e82ea1dark .node rect,#d8345951872e82ea1dark .node circle,#d8345951872e82ea1dark .node ellipse,#d8345951872e82ea1dark .node polygon,#d8345951872e82ea1dark .node path{fill:#1f2020;stroke:#ccc;stroke-width:1px;}#d8345951872e82ea1dark .rough-node .label text,#d8345951872e82ea1dark .node .label text,#d8345951872e82ea1dark .image-shape .label,#d8345951872e82ea1dark .icon-shape .label{text-anchor:middle;}#d8345951872e82ea1dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d8345951872e82ea1dark .rough-node .label,#d8345951872e82ea1dark .node .label,#d8345951872e82ea1dark .image-shape .label,#d8345951872e82ea1dark .icon-shape .label{text-align:center;}#d8345951872e82ea1dark .node.clickable{cursor:pointer;}#d8345951872e82ea1dark .root .anchor path{fill:lightgrey!important;stroke-width:0;stroke:lightgrey;}#d8345951872e82ea1dark .arrowheadPath{fill:lightgrey;}#d8345951872e82ea1dark .edgePath .path{stroke:lightgrey;stroke-width:1px;}#d8345951872e82ea1dark .flowchart-link{stroke:lightgrey;fill:none;}#d8345951872e82ea1dark .edgeLabel{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#d8345951872e82ea1dark .edgeLabel p{background-color:hsl(0, 0%, 34.4117647059%);}#d8345951872e82ea1dark .edgeLabel rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#d8345951872e82ea1dark .labelBkg{background-color:rgba(87.75, 87.75, 87.75, 0.5);}#d8345951872e82ea1dark .cluster rect{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#d8345951872e82ea1dark .cluster text{fill:#F9FFFE;}#d8345951872e82ea1dark .cluster span{color:#F9FFFE;}#d8345951872e82ea1dark 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;}#d8345951872e82ea1dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#d8345951872e82ea1dark rect.text{fill:none;stroke-width:0;}#d8345951872e82ea1dark .icon-shape,#d8345951872e82ea1dark .image-shape{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#d8345951872e82ea1dark .icon-shape p,#d8345951872e82ea1dark .image-shape p{background-color:hsl(0, 0%, 34.4117647059%);padding:2px;}#d8345951872e82ea1dark .icon-shape .label rect,#d8345951872e82ea1dark .image-shape .label rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#d8345951872e82ea1dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d8345951872e82ea1dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d8345951872e82ea1dark .node .neo-node{stroke:#ccc;}#d8345951872e82ea1dark [data-look="neo"].node rect,#d8345951872e82ea1dark [data-look="neo"].cluster rect,#d8345951872e82ea1dark [data-look="neo"].node polygon{stroke:url(#d8345951872e82ea1dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d8345951872e82ea1dark [data-look="neo"].swimlane.cluster rect{filter:none;}#d8345951872e82ea1dark [data-look="neo"].node path{stroke:url(#d8345951872e82ea1dark-gradient);stroke-width:1px;}#d8345951872e82ea1dark [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d8345951872e82ea1dark [data-look="neo"].node .neo-line path{stroke:#ccc;filter:none;}#d8345951872e82ea1dark [data-look="neo"].node circle{stroke:url(#d8345951872e82ea1dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d8345951872e82ea1dark [data-look="neo"].node circle .state-start{fill:#000000;}#d8345951872e82ea1dark [data-look="neo"].icon-shape .icon{fill:url(#d8345951872e82ea1dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d8345951872e82ea1dark [data-look="neo"].icon-shape .icon-neo path{stroke:url(#d8345951872e82ea1dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d8345951872e82ea1dark :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;marker id="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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="d8345951872e82ea1dark_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&gt;&lt;g class="edgePaths"&gt;&lt;path d="M138,134L138,138.167C138,142.333,138,150.667,138,158.333C138,166,138,173,138,176.5L138,180" id="d8345951872e82ea1dark-L_A_B_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_A_B_0" data-points="W3sieCI6MTM4LCJ5IjoxMzR9LHsieCI6MTM4LCJ5IjoxNTl9LHsieCI6MTM4LCJ5IjoxODR9XQ==" data-look="classic" marker-end="url(#d8345951872e82ea1dark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M138,310L138,314.167C138,318.333,138,326.667,138,334.333C138,342,138,349,138,352.5L138,356" id="d8345951872e82ea1dark-L_B_C_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_B_C_0" data-points="W3sieCI6MTM4LCJ5IjozMTB9LHsieCI6MTM4LCJ5IjozMzV9LHsieCI6MTM4LCJ5IjozNjB9XQ==" data-look="classic" marker-end="url(#d8345951872e82ea1dark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M138,462L138,466.167C138,470.333,138,478.667,138,486.333C138,494,138,501,138,504.5L138,508" id="d8345951872e82ea1dark-L_C_D_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_C_D_0" data-points="W3sieCI6MTM4LCJ5Ijo0NjJ9LHsieCI6MTM4LCJ5Ijo0ODd9LHsieCI6MTM4LCJ5Ijo1MTJ9XQ==" data-look="classic" marker-end="url(#d8345951872e82ea1dark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M138,566L138,570.167C138,574.333,138,582.667,138,590.333C138,598,138,605,138,608.5L138,612" id="d8345951872e82ea1dark-L_D_E_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_D_E_0" data-points="W3sieCI6MTM4LCJ5Ijo1NjZ9LHsieCI6MTM4LCJ5Ijo1OTF9LHsieCI6MTM4LCJ5Ijo2MTZ9XQ==" data-look="classic" marker-end="url(#d8345951872e82ea1dark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M138,766L138,770.167C138,774.333,138,782.667,138,790.333C138,798,138,805,138,808.5L138,812" id="d8345951872e82ea1dark-L_E_F_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_E_F_0" data-points="W3sieCI6MTM4LCJ5Ijo3NjZ9LHsieCI6MTM4LCJ5Ijo3OTF9LHsieCI6MTM4LCJ5Ijo4MTZ9XQ==" data-look="classic" marker-end="url(#d8345951872e82ea1dark_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_A_B_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_B_C_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_C_D_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_D_E_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_E_F_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="d8345951872e82ea1dark-flowchart-A-0" data-look="classic" transform="translate(138, 71)"&gt;&lt;rect class="basic label-container" style="" x="-130" y="-63" width="260" height="126"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-100, -48)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="200" height="96"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;uv installer drops ~/.local/bin/env&lt;br&gt;(a PATH snippet, meant to be sourced)&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d8345951872e82ea1dark-flowchart-B-1" data-look="classic" transform="translate(138, 247)"&gt;&lt;rect class="basic label-container" style="" x="-130" y="-63" width="260" height="126"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-100, -48)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="200" height="96"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;something marks it executable&lt;br&gt;(culprit unknown, case left open)&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d8345951872e82ea1dark-flowchart-C-3" data-look="classic" transform="translate(138, 411)"&gt;&lt;rect class="basic label-container" style="" x="-130" y="-51" width="260" height="102"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-100, -36)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="200" height="72"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;~/.local/bin sits second in PATH,&lt;br&gt;ahead of /usr/bin&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d8345951872e82ea1dark-flowchart-D-5" data-look="classic" transform="translate(138, 539)"&gt;&lt;rect class="basic label-container" style="" x="-129.828125" y="-27" width="259.65625" height="54"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-99.828125, -12)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="199.65625" 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;it now shadows /usr/bin/env&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d8345951872e82ea1dark-flowchart-E-7" data-look="classic" transform="translate(138, 691)"&gt;&lt;rect class="basic label-container" style="" x="-130" y="-75" width="260" height="150"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-100, -60)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="200" height="120"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;'env ... cmd' runs the snippet instead:&lt;br&gt;sets a few variables, exits 0,&lt;br&gt;never runs cmd&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="d8345951872e82ea1dark-flowchart-F-9" data-look="classic" transform="translate(138, 855)"&gt;&lt;rect class="basic label-container" style="" x="-129.4140625" y="-39" width="258.828125" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-99.4140625, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="198.828125" 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;symptom: git init succeeds,&lt;br&gt;no .git exists&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="d8345951872e82ea1dark-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="d8345951872e82ea1dark-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="d8345951872e82ea1dark-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;
&lt;p&gt;Every &lt;code&gt;env -u X cmd&lt;/code&gt;, every shebang-adjacent &lt;code&gt;env&lt;/code&gt; trick, every script that spelled out &lt;code&gt;env&lt;/code&gt; for portability: all of them ran a five-line PATH snippet and stopped. With exit 0, because the snippet ran fine. It was just never asked to run your command, since sourcing semantics and executing semantics are different contracts.&lt;/p&gt;
&lt;p&gt;The fix was one line:&lt;/p&gt;
&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;chmod -x ~/.local/bin/env&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Finding the line took the better part of a debugging session. So the incident became a permanent test, with the story written into the comment:&lt;/p&gt;
&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="c1"&gt;# uv&amp;#39;s installer drops a PATH snippet at ~/.local/bin/env meant to be&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# SOURCED; if it ever becomes executable it shadows /usr/bin/env (PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# puts ~/.local/bin second) and silently swallows every &amp;#39;env ... cmd&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# invocation with exit 0. That exact trap cost a debugging session.&lt;/span&gt;
&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;env resolves to /usr/bin/env (no executable shim)&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&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;#34;\$(command -v env)\&amp;#34; = /usr/bin/env ]&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;There is also a generalized version: a scan that flags any executable in &lt;code&gt;~/.local/bin&lt;/code&gt; shadowing a system command. The specific trap gets a named test; the class of trap gets a sweep.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Case 2: the fixture that reformatted my real repo
 &lt;div id="case-2-the-fixture-that-reformatted-my-real-repo" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#case-2-the-fixture-that-reformatted-my-real-repo" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;I was writing a fixture test for the secret scanner: create a throwaway git repo in a temp directory, plant a fake credential, confirm the scanner catches it. Standard stuff.&lt;/p&gt;
&lt;p&gt;The test runs inside the yadm pre-commit hook. yadm exports &lt;code&gt;GIT_DIR&lt;/code&gt; and &lt;code&gt;GIT_WORK_TREE&lt;/code&gt; for its own purposes, and here is the part I did not respect enough: those environment variables outrank &lt;code&gt;git -C &amp;lt;path&amp;gt;&lt;/code&gt;. The &lt;code&gt;-C&lt;/code&gt; flag changes the working directory; the environment still decides which repository you are talking to.&lt;/p&gt;
&lt;p&gt;So the fixture&amp;rsquo;s &lt;code&gt;git init&lt;/code&gt; reinitialized the real yadm repository. It flipped &lt;code&gt;core.bare&lt;/code&gt; and broke the repo&amp;rsquo;s configuration. Recovery turned out to be one setting, with zero history lost:&lt;/p&gt;
&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;yadm gitconfig core.bare false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;But the lesson went into the suite in capital letters:&lt;/p&gt;
&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="c1"&gt;# CRITICAL: every call strips GIT_DIR/GIT_WORK_TREE — the yadm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# pre_commit hook exports them, and an ambient GIT_DIR silently&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# redirects fixture git commands at the REAL yadm repo (this once&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# flipped its core.bare).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;GL_GIT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;env -u GIT_DIR -u GIT_WORK_TREE git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$GL_GIT&lt;/span&gt; -C &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$GL_TMP&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; init -q&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The suite now also runs a hostile-environment simulation: it deliberately plants a decoy &lt;code&gt;GIT_DIR&lt;/code&gt; and confirms the fixtures ignore it. And the fake credential is assembled at runtime, so no secret-shaped literal ever exists in the repo for a scanner to trip on:&lt;/p&gt;
&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="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;aws_key = &amp;#34;%s%s&amp;#34;\n&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;AKIA&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ZZZQK9X2M4P7L3TQ&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$GL_TMP&lt;/span&gt;&lt;span class="s2"&gt;/leak.txt&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;Case 3: the file manager that shrugged
 &lt;div id="case-3-the-file-manager-that-shrugged" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#case-3-the-file-manager-that-shrugged" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;yazi 26 renamed a fetcher config field from &lt;code&gt;id&lt;/code&gt; to &lt;code&gt;group&lt;/code&gt;. My config still said &lt;code&gt;id&lt;/code&gt;. When yazi hits a config it cannot parse, it does not error; it falls back to its presets and carries on looking almost normal. The git and mactag columns just stopped being enriched, and I only noticed weeks later, by accident.&lt;/p&gt;
&lt;p&gt;The canary here is two words:&lt;/p&gt;
&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;yazi --version &lt;span class="c1"&gt;# exits 1 when the config fails to parse&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;That exit-code behavior is something I tested, not something I read somewhere. It now runs in the test suite and again after upgrades, as a schema check. When yazi next renames a field, the failure will be loud and same-day instead of silent and discovered by luck.&lt;/p&gt;

&lt;h2 class="relative group"&gt;The ending: a year later, the case closed itself
 &lt;div id="the-ending-a-year-later-the-case-closed-itself" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-ending-a-year-later-the-case-closed-itself" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Here is where case 1 gets its resolution, and it did not come from detective work.&lt;/p&gt;
&lt;p&gt;An unrelated idempotency audit of the bootstrap script added one final step to it: after bootstrapping, run the full test suite as self-verification. The very first self-verification run came back red.&lt;/p&gt;
&lt;p&gt;The bootstrap script contained a blanket &lt;code&gt;chmod +x ~/.local/bin/*&lt;/code&gt;. The &amp;ldquo;scripts must be executable&amp;rdquo; convention, applied to a whole directory. It had just re-armed the uv trap, a year after I defused it, and it had presumably been the original armer all along. One line took down three tests at once: the &lt;code&gt;env&lt;/code&gt; resolution test, the PATH shadow sweep, and the gitleaks fixtures, whose &lt;code&gt;env -u&lt;/code&gt; calls were being swallowed again.&lt;/p&gt;
&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="c1"&gt;# before: the whole directory gets the executable bit.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# uv&amp;#39;s source-me env snippet is in there, so the trap gets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# re-armed on every bootstrap run.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod +x ~/.local/bin/*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# after: only scripts yadm actually tracks get chmod&amp;#39;d.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# untracked files (including uv&amp;#39;s env) never gain the bit.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The full lifecycle reads like this: symptom, defusal, regression test, then a year of quiet, then the test catches the original root cause in the act of reoffending, and the root cause gets fixed. The gap between step three and step four was twelve months. The gap between &amp;ldquo;bootstrap gained self-verification&amp;rdquo; and &amp;ldquo;cold case closed&amp;rdquo; was a few minutes.&lt;/p&gt;

&lt;h2 class="relative group"&gt;The common shape
 &lt;div id="the-common-shape" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-common-shape" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;All three cases had no error message. All three returned success. All three were a system helpfully falling back to something instead of failing: a snippet standing in for a binary, an environment variable standing in for a flag, presets standing in for a config.&lt;/p&gt;
&lt;p&gt;Silent fallback is the expensive kind of bug. A loud failure costs you five minutes. A quiet substitution costs you weeks, because nothing marks the moment where reality diverged from your model of it.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Institutionalizing the paranoia
 &lt;div id="institutionalizing-the-paranoia" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#institutionalizing-the-paranoia" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Every incident in this post exists in the test suite as a named check. The suite grew from 74 checks to 105 across this overhaul, and almost all of that growth is &amp;ldquo;we got bitten here&amp;rdquo; items. Case 1 is the proof that the habit pays twice: the test written to protect the future is the same one that closed the past.&lt;/p&gt;
&lt;p&gt;The other byproduct is a small document, &lt;code&gt;docs/upgrade-watch.md&lt;/code&gt;, pairing every config file that tracks an upstream schema with a canary that fails loudly:&lt;/p&gt;
&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;| Config file | Canary |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| --------------------------- | ----------------------- |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| ~/.config/yazi/yazi.toml | yazi --version |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| ~/.config/atuin/config.toml | atuin doctor |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| ~/.tmux.conf | throwaway-server parse |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| ~/.local/bin/env (uv) | suite `env` check |&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;Lessons
 &lt;div id="lessons" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lessons" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Environment variables outrank the flags on your command line. &lt;code&gt;git -C&lt;/code&gt; does not protect you from an ambient &lt;code&gt;GIT_DIR&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A file that is meant to be sourced becomes a command-swallowing trap the moment it gains an executable bit and a good PATH position.&lt;/li&gt;
&lt;li&gt;Tools that silently fall back to defaults on a bad config need a canary with a real exit code. Test the canary&amp;rsquo;s behavior; do not assume it.&lt;/li&gt;
&lt;li&gt;Write the regression test even when the root cause is still unknown. Mine waited a year and then caught the culprit red-handed.&lt;/li&gt;
&lt;li&gt;Bootstrap scripts should only touch files they own. A wildcard &lt;code&gt;chmod&lt;/code&gt; is a loaded gun pointed at the future.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;References
 &lt;div id="references" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#references" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/astral-sh/uv" target="_blank" rel="noreferrer"&gt;uv&lt;/a&gt; (the installer that ships the &lt;code&gt;~/.local/bin/env&lt;/code&gt; snippet)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sxyazi/yazi" target="_blank" rel="noreferrer"&gt;yazi&lt;/a&gt; (the config-schema rename landed in yazi 26; exit-code canary behavior verified on this machine)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yadm.io/docs/hooks" target="_blank" rel="noreferrer"&gt;yadm hooks documentation&lt;/a&gt; (the pre-commit hook environment where &lt;code&gt;GIT_DIR&lt;/code&gt;/&lt;code&gt;GIT_WORK_TREE&lt;/code&gt; are exported)&lt;/li&gt;
&lt;li&gt;The repo and its test suite: &lt;a href="https://github.com/nickboy/dotfiles" target="_blank" rel="noreferrer"&gt;nickboy/dotfiles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>