<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Scientific Journal of Objective Truths and Proof: Technology]]></title><description><![CDATA[Evan on Technology (mostly Linux, and Rust)]]></description><link>https://substack.evancarroll.com/s/technology</link><image><url>https://substackcdn.com/image/fetch/$s_!YVUb!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29009f8a-94b2-4df5-9f5d-bbe4dcb8007a_260x260.png</url><title>Scientific Journal of Objective Truths and Proof: Technology</title><link>https://substack.evancarroll.com/s/technology</link></image><generator>Substack</generator><lastBuildDate>Wed, 08 Apr 2026 13:40:52 GMT</lastBuildDate><atom:link href="https://substack.evancarroll.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Evan Carroll]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[evancarroll@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[evancarroll@substack.com]]></itunes:email><itunes:name><![CDATA[Evan Carroll (Chief Editor)]]></itunes:name></itunes:owner><itunes:author><![CDATA[Evan Carroll (Chief Editor)]]></itunes:author><googleplay:owner><![CDATA[evancarroll@substack.com]]></googleplay:owner><googleplay:email><![CDATA[evancarroll@substack.com]]></googleplay:email><googleplay:author><![CDATA[Evan Carroll (Chief Editor)]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[I found a secret child prison in my neighborhood using OpenStreetMap.]]></title><description><![CDATA[A little bit of derping, and you too can find a secret detention facility.]]></description><link>https://substack.evancarroll.com/p/i-found-a-secret-child-prison</link><guid isPermaLink="false">https://substack.evancarroll.com/p/i-found-a-secret-child-prison</guid><dc:creator><![CDATA[Evan Carroll (Chief Editor)]]></dc:creator><pubDate>Thu, 28 Aug 2025 12:01:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!U3Of!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This story was held for a long time. I wanted to get it in the hands of an Immigration Journalists that covers these issues, but none of them wanted it.</em></p><div><hr></div><p>I just saw <a href="https://www.openstreetmap.org/relation/14659875/">this property on OpenStreetMap</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U3Of!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U3Of!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png 424w, https://substackcdn.com/image/fetch/$s_!U3Of!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png 848w, https://substackcdn.com/image/fetch/$s_!U3Of!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png 1272w, https://substackcdn.com/image/fetch/$s_!U3Of!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U3Of!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png" width="707" height="789" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:789,&quot;width&quot;:707,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:139320,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/168420575?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U3Of!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png 424w, https://substackcdn.com/image/fetch/$s_!U3Of!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png 848w, https://substackcdn.com/image/fetch/$s_!U3Of!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png 1272w, https://substackcdn.com/image/fetch/$s_!U3Of!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53928e20-5949-45ad-aeab-b02e119e40ab_707x789.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Using the satellite imagery, I can see that it&#8217;s now got stuff happening in and around it including a not-mapped soccer field in the top right.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jzYq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jzYq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png 424w, https://substackcdn.com/image/fetch/$s_!jzYq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png 848w, https://substackcdn.com/image/fetch/$s_!jzYq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png 1272w, https://substackcdn.com/image/fetch/$s_!jzYq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jzYq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png" width="731" height="787" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:787,&quot;width&quot;:731,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:791376,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/168420575?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jzYq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png 424w, https://substackcdn.com/image/fetch/$s_!jzYq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png 848w, https://substackcdn.com/image/fetch/$s_!jzYq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png 1272w, https://substackcdn.com/image/fetch/$s_!jzYq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff298d2b4-f8a4-4572-bb5d-7a34b1444adc_731x787.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This looks familiar. I look at the history for this node.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v1VW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v1VW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png 424w, https://substackcdn.com/image/fetch/$s_!v1VW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png 848w, https://substackcdn.com/image/fetch/$s_!v1VW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png 1272w, https://substackcdn.com/image/fetch/$s_!v1VW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v1VW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png" width="330" height="883" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a735330b-8bb4-46b2-9b29-44a00837407f_330x883.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:883,&quot;width&quot;:330,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:63361,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/168420575?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!v1VW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png 424w, https://substackcdn.com/image/fetch/$s_!v1VW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png 848w, https://substackcdn.com/image/fetch/$s_!v1VW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png 1272w, https://substackcdn.com/image/fetch/$s_!v1VW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa735330b-8bb4-46b2-9b29-44a00837407f_330x883.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I remember this. You can see immediately that it was added by EvanCarroll &#8212; me. This is an old psychiatry hospital named HopeBridge that had a ton of scandals. I digitized it after it closed as a disused hospital. Now it&#8217;s back, but with a soccer field, presumably with different owners. Nothing new there.</p><p>I want to update the listing so I go searching for information on the address &#8220;5556 Gasmer, Houston TX 77035.&#8221; I can&#8217;t find anything. I turn to HCAD. I search there. HCAD lists the owner of the property at 5556 GASMER MANAGEMENT LLC.&#8221; They&#8217;re intentionally trying to keep this anonymous. Fishy. Not the end of the world but this is sketch.</p><p>I search on Google Maps which knows them as &#8220;Children first residential care Gasmer.&#8221; Interesting. No website in their Google Maps listing. Nothing. What kind of hospital relies on word-of-mouth?</p><p>There is a website for <a href="https://www.childrenfirstinc.org/">Children First Inc</a>. But, it&#8217;s not clear it&#8217;s the right group. The Google Maps listing is for Children First Residential Care. That website is Children First Clinical Care.</p><p>Searching for permutations on that name I was able to find this <a href="https://www.tdlr.texas.gov/TABS/Search/Project/TABS2021008436">this PDF</a>, which tells me its Project Name &#8220;Children First Residential Care - CFRC - Gasmer&#8221;. This confirms the address is still &#8220;5556 Gasmer Dr., Houston, TX 77035&#8221;. </p><p>Doing more research on this I find this <a href="https://clearinghouse-umich-production.s3.amazonaws.com/media/doc/159664.pdf">case filing</a>, and it says this,</p><blockquote><p>GHIRP has been providing legal services to unaccompanied immigrant children in Galveston and Houston since 2020, when the organization was founded. Since the organization opened, our legal services dedicated to unaccompanied immigrant children have expanded each year. In 2020, we provided direct representation to approximately 35 unaccompanied immigrant children. In 2021, GHIRP initiated services in a newly opened <strong>ORR facility in Houston (Children's First Residential Care TX Gasmer)</strong>, providing KYR presentations, intakes, direct representation, social services, and referrals for children who were released to other jurisdictions. In 2023, GHIRP began providing the same legal services to unaccompanied children in a second ORR shelter named LSSS Upbring Krause Children's Center. GHIRP&#8217;s direct representation services dedicated to children who are not in custody have also expanded, from 35 cases in our first year of existence (2020) to now serving approximately 300 clients per year (2025). Currently, GHIRP serves a combined annual number of nearly 1,500 children per year, including approximately 1,500 children detained in ORR custody, approximately 300 children receiving direct representation services per year, 120-150 children receiving social services per year, and approximately 35-50 children receiving pro se assistance per year.</p></blockquote><ul><li><p>GHIRP = Galveston-Houston Immigration Representation Project</p></li><li><p>ORR = <a href="https://en.wikipedia.org/wiki/Office_of_Refugee_Resettlement">Office of Refugee Resettlement</a></p></li><li><p>KYR = Know Your Rights</p></li></ul><p>It turns out this is one of the detention prisons for unaccompanied kids managed by a contractor for the Office of Refugee Resettlement.</p><p>I found a secret kid prison in my neighborhood using OpenStreetMap.</p><div><hr></div><p>I believe a similar story in <a href="https://www.democracynow.org/2018/7/9/cia_linked_military_contractor_used_arizona">2018 was published about these with Amy Goodman&#8217;s reporting.</a></p>]]></content:encoded></item><item><title><![CDATA[Evan with OpenStreetMap versus the New York Times]]></title><description><![CDATA[Unhappy with the NYT's map, I spiced up Open Street Map. Now OSM is running circles around NYT.]]></description><link>https://substack.evancarroll.com/p/open-street-map-versus-new-york-times</link><guid isPermaLink="false">https://substack.evancarroll.com/p/open-street-map-versus-new-york-times</guid><dc:creator><![CDATA[Evan Carroll (Chief Editor)]]></dc:creator><pubDate>Tue, 08 Jul 2025 04:51:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FKsp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recently a bunch of a kids died because of supremely incompetent government &#8212; recently made overly great again, and a horribly <a href="https://en.wikipedia.org/wiki/Camp_Mystic">incompetent summer camp</a>. To illustrate the camp, this is what the <a href="https://www.nytimes.com/interactive/2025/07/05/us/camp-mystic-texas-flooding.html">New York Times put out</a> &#8212; lacking all the goodness that a map is supposed to have.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_g1T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_g1T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png 424w, https://substackcdn.com/image/fetch/$s_!_g1T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png 848w, https://substackcdn.com/image/fetch/$s_!_g1T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png 1272w, https://substackcdn.com/image/fetch/$s_!_g1T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_g1T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png" width="582" height="359.82572614107886" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:964,&quot;resizeWidth&quot;:582,&quot;bytes&quot;:1026689,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/167786571?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_g1T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png 424w, https://substackcdn.com/image/fetch/$s_!_g1T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png 848w, https://substackcdn.com/image/fetch/$s_!_g1T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png 1272w, https://substackcdn.com/image/fetch/$s_!_g1T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269b9d89-c741-4fa8-a571-ec8c37b07dcf_964x596.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Unsatisfied with one vague map, the New York Times, put out a second aerial map with even less data and with deceptfully labeled &#8220;Cabin on the Flats,&#8221; which actually includes all the cabins they&#8217;re not showing behind the tree line.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f-kw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f-kw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png 424w, https://substackcdn.com/image/fetch/$s_!f-kw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png 848w, https://substackcdn.com/image/fetch/$s_!f-kw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png 1272w, https://substackcdn.com/image/fetch/$s_!f-kw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f-kw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png" width="594" height="362.9635359116022" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/babfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:553,&quot;width&quot;:905,&quot;resizeWidth&quot;:594,&quot;bytes&quot;:912725,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/167786571?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f-kw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png 424w, https://substackcdn.com/image/fetch/$s_!f-kw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png 848w, https://substackcdn.com/image/fetch/$s_!f-kw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png 1272w, https://substackcdn.com/image/fetch/$s_!f-kw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabfac28-1ad6-47bc-8e8d-54953b89469f_905x553.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I found their maps to vague; I wanted to do better. I used OpenStreetMap and some quick cross referencing of the Camp Mystic brochures and other news data and I came up with this,</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pZdR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pZdR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png 424w, https://substackcdn.com/image/fetch/$s_!pZdR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png 848w, https://substackcdn.com/image/fetch/$s_!pZdR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png 1272w, https://substackcdn.com/image/fetch/$s_!pZdR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pZdR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png" width="1456" height="872" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:872,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2847507,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/167786571?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pZdR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png 424w, https://substackcdn.com/image/fetch/$s_!pZdR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png 848w, https://substackcdn.com/image/fetch/$s_!pZdR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png 1272w, https://substackcdn.com/image/fetch/$s_!pZdR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0ba93-c195-4c6b-ab56-238cc7b09560_1501x899.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Viola. Now you can see every building. The yellow outline is the flats which is where the campers were. You can see my <a href="https://www.openstreetmap.org/way/581009591">digitized contributions on Open Street Maps</a>. But here is an image generate from it without any satellite imagery.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N5Iy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N5Iy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png 424w, https://substackcdn.com/image/fetch/$s_!N5Iy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png 848w, https://substackcdn.com/image/fetch/$s_!N5Iy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png 1272w, https://substackcdn.com/image/fetch/$s_!N5Iy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N5Iy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:401491,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/167786571?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!N5Iy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png 424w, https://substackcdn.com/image/fetch/$s_!N5Iy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png 848w, https://substackcdn.com/image/fetch/$s_!N5Iy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png 1272w, https://substackcdn.com/image/fetch/$s_!N5Iy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb798d1-d627-4fa3-a42b-420ea587e276_1840x920.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Log in if you want to see the total campsite digitized (or most of it anyway).</p><p>Now when the <a href="https://nypost.com/2025/07/07/us-news/haunting-photo-shows-camp-mystic-cabin-where-every-girl-was-swept-away-by-texas-floods/">news mentions Bubble Inn</a> you can quickly find it. This is the cabin which had all of 13 of the girls which inhabited it swept away in flood waters. You can read more about that in the <a href="https://nypost.com/2025/07/07/us-news/haunting-photo-shows-camp-mystic-cabin-where-every-girl-was-swept-away-by-texas-floods/">coverage by the New York Post</a>.</p><p>If you want to see both camps together the Camp Mystic Guadalupe River, and Camp Mystic Cypress Lake, then here is a map for you! (Requested in pvmsg)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5eMv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5eMv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png 424w, https://substackcdn.com/image/fetch/$s_!5eMv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png 848w, https://substackcdn.com/image/fetch/$s_!5eMv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png 1272w, https://substackcdn.com/image/fetch/$s_!5eMv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5eMv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png" width="1124" height="933" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:933,&quot;width&quot;:1124,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:327386,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/167786571?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5eMv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png 424w, https://substackcdn.com/image/fetch/$s_!5eMv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png 848w, https://substackcdn.com/image/fetch/$s_!5eMv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png 1272w, https://substackcdn.com/image/fetch/$s_!5eMv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4c4295-d82e-444e-a673-91b0a78a21b5_1124x933.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The highlighted area is the &#8220;Cabin on the Flats&#8221; of Camp Mystic Guadalupe River. Compare that to the label the NYT placed above.</p><div><hr></div><p>Here is a copy of the USGS 3D Elevation map of the region. You can see the cabins for the kids are square in the river&#8217;s trough.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pgex!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pgex!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png 424w, https://substackcdn.com/image/fetch/$s_!pgex!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png 848w, https://substackcdn.com/image/fetch/$s_!pgex!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png 1272w, https://substackcdn.com/image/fetch/$s_!pgex!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pgex!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png" width="1043" height="890" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:890,&quot;width&quot;:1043,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:692871,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/167786571?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pgex!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png 424w, https://substackcdn.com/image/fetch/$s_!pgex!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png 848w, https://substackcdn.com/image/fetch/$s_!pgex!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png 1272w, https://substackcdn.com/image/fetch/$s_!pgex!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9ad93c-2a3d-458b-93de-58f998effe73_1043x890.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I overlaid it with the digitized buildings.</p><div><hr></div><p>Also worth pointing out that there is an extinct creek that some sources show running right through the camp site called Edmunson Creek. This is an overlay on the <a href="https://apps.nationalmap.gov/downloader/">USGS The National Map Topographic</a>. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FKsp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FKsp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png 424w, https://substackcdn.com/image/fetch/$s_!FKsp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png 848w, https://substackcdn.com/image/fetch/$s_!FKsp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png 1272w, https://substackcdn.com/image/fetch/$s_!FKsp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FKsp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png" width="1084" height="926" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:926,&quot;width&quot;:1084,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:989106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/167786571?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FKsp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png 424w, https://substackcdn.com/image/fetch/$s_!FKsp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png 848w, https://substackcdn.com/image/fetch/$s_!FKsp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png 1272w, https://substackcdn.com/image/fetch/$s_!FKsp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3dfe50-f0f5-4f8a-bcd0-262959c0f2f9_1084x926.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>For comedy, <a href="https://maps.app.goo.gl/fpLz7GtTJeyyyQ4h6">this is the level of detail you get with Google.</a> If you&#8217;re interested to learn more about mapping and how you can contribute, comment below and I&#8217;ll write more about OpenStreetMap.</p><div><hr></div><p>I have follow up to this article where I write about <a href="https://substack.evancarroll.com/p/reddit-bad-moderation-blacklisting-substack-msm-shilling">the poor reception I got on r/Texas and my general experiences on Reddit</a>. I have another article about Camp Mystic entitled <a href="https://substack.evancarroll.com/p/camp-mystic-cabins-and-the-100-year-flood-plane">&#8220;</a><strong><a href="https://substack.evancarroll.com/p/camp-mystic-cabins-and-the-100-year-flood-plane">Camp Mystic, cabins, and the 100 year flood plane&#8221;</a></strong></p><p><em>Scientific Journal of Objective Truths and Proof 2025:7-7.0.0</em></p>]]></content:encoded></item><item><title><![CDATA[claude-code: Anthropic's CVSS 9.x "by design"]]></title><description><![CDATA[Claude code executes code on your computer and sends your files to Anthropic.]]></description><link>https://substack.evancarroll.com/p/introducing-claude-podman</link><guid isPermaLink="false">https://substack.evancarroll.com/p/introducing-claude-podman</guid><dc:creator><![CDATA[Evan Carroll (Chief Editor)]]></dc:creator><pubDate>Fri, 02 May 2025 14:34:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/33f773c1-9352-4645-a163-7a6ef546d71a_640x640.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>(Almost) Vulnerability:</p><ul><li><p>Remote and arbitrary code execution</p></li><li><p>Arbitrary file exfiltration</p></li></ul><p>That&#8217;s what it does <strong>by design</strong>. Claude has the ability to read any files on your disk and execute any code that a remote LLM decides is a good idea. They call this &#8220;claude-cli&#8221;. And while it probably takes the title for my favorite use case of remote code execution, I think we should take the security implications of it seriously.</p><h2>Solution</h2><p>Introducing <a href="https://github.com/EvanCarroll/claude-podman">claude-podman</a> finally you don&#8217;t have to trust Bezos and Google! Claude podman runs claude code in a rootless podman container which</p><ul><li><p>Limits the file access of claude-code to </p><ul><li><p>The current working directory</p></li><li><p>The claude configuration files</p></li></ul></li><li><p>Limits code execution to <a href="https://hub.docker.com/layers/library/node/current-alpine/images/sha256-0d468be7d2997dd2f6a3cda45e121a6b5140eb7ba3eba299a215030dbb0fb1ca">node:current-alpine</a></p></li></ul><p>As a rootless container running as non-root user, claude-podman is a maximally secure way of running claude-code within a container: <code>claude-code</code> can&#8217;t even self-update! Even if it gets root, it&#8217;s still in a container. And even if it breaks out of the container it only has access to running as a regular process which makes it no more risky than it&#8217;s normal deployment mode which everyone except the elite few is likely using.</p><p>Find the repo here: <a href="https://github.com/EvanCarroll/claude-podman">https://github.com/EvanCarroll/claude-podman</a></p><p><em>Scientific Journal of Objective Truths and Proof 2025:5-2.0.0</em></p>]]></content:encoded></item><item><title><![CDATA[A lesson in informing users of your shortcoming]]></title><description><![CDATA[Retro: own your product's shortcomings, a tale of oauth-proxy]]></description><link>https://substack.evancarroll.com/p/own-your-product-shortcomings</link><guid isPermaLink="false">https://substack.evancarroll.com/p/own-your-product-shortcomings</guid><dc:creator><![CDATA[Evan Carroll (Chief Editor)]]></dc:creator><pubDate>Mon, 28 Apr 2025 01:03:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BT9M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;m starting a company. I need the ability for a user to login with oidc (OAuth 2.0). This is how popular sites implement that cool &#8220;One Click Login&#8221; for Google and other sites you probably already have an account at. In order to do this the cool-kids-way is to implement a reverse proxy on top of your app that handles oidc. Then you get the best practices and you don&#8217;t have to write your own implementation. You can also update that reverse proxy without breaking anything in your app. This takes care of all the complexities of OAuth2 for you.</p><p>One such product is the beautiful <a href="https://oauth2-proxy.github.io/oauth2-proxy/">oauth2-proxy</a>. I found it and loved the interface. <a href="https://github.com/oauth2-proxy/manifests/pull/301">I even contributed to solve a bug in the Helm manifest.</a> <strong>It supports <a href="https://oauth2-proxy.github.io/oauth2-proxy/configuration/providers/">multiple authentication providers</a>.</strong></p><p>After getting everything working with Google SSO, I added an additional provider: the LinkedIn provider I configured a LinkedIn provider with the new configuration format called &#8220;<a href="https://oauth2-proxy.github.io/oauth2-proxy/configuration/alpha-config">Alpha Config</a>.&#8221; The configuration took and validated, but I couldn&#8217;t see any difference in the login page. The end points also didn&#8217;t respond as I would have thought when trying to target a different provider. Turns out, <strong>oauth-proxy does NOT support multiple providers at the same time.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BT9M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BT9M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png 424w, https://substackcdn.com/image/fetch/$s_!BT9M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png 848w, https://substackcdn.com/image/fetch/$s_!BT9M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png 1272w, https://substackcdn.com/image/fetch/$s_!BT9M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BT9M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png" width="347" height="260.25" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1280,&quot;resizeWidth&quot;:347,&quot;bytes&quot;:129632,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://substack.evancarroll.com/i/162295387?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BT9M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png 424w, https://substackcdn.com/image/fetch/$s_!BT9M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png 848w, https://substackcdn.com/image/fetch/$s_!BT9M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png 1272w, https://substackcdn.com/image/fetch/$s_!BT9M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c229aac-fd9b-49c0-9cb2-5c72549e837d_1280x960.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The reason for this confusion is because they updated only the configuration file format (Alpha Config) to support multiple providers. They built some future-proofing by making the provider in the new format an array and calling it <code>providers</code>, but they do nothing with the non-primary provider. Ouch. All that work chasing this solution and it&#8217;s a dead end.</p><p>Nothing in the docs clearly owned this shortcoming. But in this case, it&#8217;s very important to document what you can&#8217;t do. Especially when your users will expect it. The <a href="https://github.com/oauth2-proxy/oauth2-proxy/issues/926">feature request for Multiple Providers was opened in 2020</a>. It has 63 upvotes. The <a href="https://github.com/oauth2-proxy/oauth2-proxy/pull/947">last PR on that feature landed in 2021</a>. This is probably not getting fixed any time soon. Time to go back to the drawing board.</p><p><a href="https://github.com/oauth2-proxy/oauth2-proxy/pull/3046">I submitted a PR to document this</a>, which was since accepted. Hopefully it saves someone a headache.</p><p><em>Scientific Journal of Objective Truths and Proof 2025:4-27.0.0</em></p>]]></content:encoded></item><item><title><![CDATA[Kubernetes needs a real --force]]></title><description><![CDATA[For ten million years developers have created and used tools with --force options. Kubernetes message is clear: those days are over.]]></description><link>https://substack.evancarroll.com/p/kubernetes-needs-a-dash-dash-force</link><guid isPermaLink="false">https://substack.evancarroll.com/p/kubernetes-needs-a-dash-dash-force</guid><dc:creator><![CDATA[Evan Carroll (Chief Editor)]]></dc:creator><pubDate>Sat, 26 Apr 2025 19:28:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f7685ab1-7af9-4475-b5aa-b80bf0f685c0_640x640.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You can really learn a lot watching Claude agentically debug problems within Kubernetes. Some technologies are very hard to debug. Kubernetes is one of them. I consider myself senior level, and figuring out why things don't get removed, deleted, or terminated has always been difficult for me. I don&#8217;t understand what design decision was so poor that this is the way it had to be, but Claude can be a useful tool at solving these problems. Claude gets that pattern when something does NOT get removed or deleted</p><ul><li><p>Audit the entire server to figure out what&#8217;s the hold up</p></li><li><p>Guess about what could be a dependency</p></li><li><p>Try to delete the thing</p><ul><li><p>If that fails, remove associated &#8220;finalizers&#8221; and try again or restart the process</p></li><li><p>if it succeeds you&#8217;re done.</p></li></ul></li></ul><h2>Removing a chart dependency on cert-manager</h2><p>I had a declared <code>cert-manager</code> as an optional dependency in a helm chart. This worked well when I was just running everything as one app on Kubernetes within that chart, but it apparently violated some conventions with Kubernetes. I went to migrate <code>cert-manager</code> out of the chart and I couldn&#8217;t.</p><p>My first step was to simply uninstall the chart, and delete the namespace. Ideally, this would be facilitated by helm with a `&#8212;purge` command. But everything in Kubernetes is more difficult. Uninstalling the chart and deleting the namespace didn&#8217;t work though because the dependency installed crds: a crd is a custom resource. They&#8217;re not installed in the namespace, but they&#8217;re &#8220;maintained by Helm.&#8221; Those crds weren&#8217;t cleaned up.  Cleaning them up is documented, but it&#8217;s <a href="https://cert-manager.io/v1.6-docs/installation/helm/#uninstalling-with-helm">cute watching agentic AI figure this out the hard way.</a></p><pre><code>
&#9679; Bash(kubectl get crd certificaterequests.cert-manager.io -o yaml | grep -A5 'metadata:' | grep -E &#8230;
      'labels:|annotations:|name:' | head -10)
&nbsp;&nbsp;&#9151; &nbsp;  annotations:
         meta.helm.sh/release-name: ACME
             f:annotations:
               f:meta.helm.sh/release-name: {}

&#9679; The issue is clear now. The CRDs are owned by the "ACME" Helm release, which is causing the conflict when you try to install cert-manager in its own namespace.</code></pre><p>In fact, one of the ways Claude does this is simple.</p><pre><code>kubectl get crd | grep cert-manager

kubectl delete crd certificaterequests.cert-manager.io certificates.cert-manager.io  challenges.acme.cert-manager.io clusterissuers.cert-manager.io issuers.cert-manager.io orders.acme.cert-manager.io --ignore-not-found</code></pre><p>That command just hangs&#8230; this is where I would be in over my head. Claude tries this next</p><pre><code>kubectl get challenges.acme.cert-manager.io --all-namespaces</code></pre><p>At this point, I&#8217;ll be honest. I don&#8217;t even know what this command does. News to me, you can get a challenge to a cert and it&#8217;s represented as a crd. From here, it knows it needs to delete the challenge,</p><pre><code>kubectl delete challenges.acme.cert-manager.io -n coworkunion coworkunion-prometheus-tls-cert-1-1841491659-3150586538</code></pre><p>Will that work? Of course not, because it&#8217;s Kubernetes, and it&#8217;s too stupid to include a <code>&#8212;force</code> flag. Next up, Claude knows it needs to remove the finalizers. <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/">Finalizers are hooks that have to return success</a> before a resource can be cleaned up.  How does it do that? Maybe there is a convenient flag like <code>kubectl delete &#8212;ignore-finalizers</code> that would function like <code>&#8212;force</code> but it would be more fine grained? Of course not, it&#8217;s Kubernetes. Removing the finalizers on the command line looks like this,</p><pre><code><code>kubectl get crd challenges.acme.cert-manager.io -o json | jq '.metadata.finalizers = null' | kubectl  replace --raw /apis/apiextensions.k8s.io/v1/customresourcedefinitions/challenges.acme.cert-manager.io  -f -</code></code></pre><p>Of course, if any human wrote code like that on the command line they&#8217;d be insane so let&#8217;s look at it</p><ul><li><p><code>kubectl get crd challenges.acme.cert-manager.io -o json</code></p><p>Get everything about the crd as json. This for reference shows a finalizer for <code>&#8220;customresourcecleanup.apiextensions.k8s.io&#8221;</code> which is probably <a href="https://cert-manager.io/v1.6-docs/installation/helm/#namespace-stuck-in-terminating-state">what the documentation is referring to when it says</a>,</p><blockquote><p>If the namespace has been marked for deletion without deleting the cert-manager installation first, the namespace may become stuck in a terminating state. This is typically due to the fact that the <code>APIService</code> resource still exists however the webhook is no longer running so is no longer reachable. To resolve this, ensure you have run the above commands correctly, and if you're still experiencing issues then run:</p></blockquote></li><li><p><code>jq '.metadata.finalizers = null'</code></p><p>Remove just the finalizers value from the metadata, effectively deleting the hook. Return the whole documented as JSON.</p></li><li><p><code>kubectl  replace --raw /apis/apiextensions.k8s.io/v1/customresourcedefinitions/challenges.acme.cert-manager.io  -f -</code></p><p>This is command like patch, but that focuses on the difference.</p></li></ul><p>Why did it write that in such a way? No idea. It&#8217;s probably the same as this,</p><pre><code>kubectl patch crd challenges.acme.cert-manager.io -p '{"metadata":{"finalizers":null}}' --type=merge</code></pre><p>Which is what I did after I got sick of watching it show off. That removed the finalizer which made possible to delete the last crd. </p><p>But you can&#8217;t deny that it&#8217;s amusing and entertaining see how it solves these problems without reading the docs.</p><h2>Addendum for the tribal</h2><p>Just want to reiterate,</p><ol><li><p>I knew about the docs before I ran the LLM. This was only to see how it would go about figuring this out as a learning exercise. That note was always in there.</p></li><li><p>This is not abnormal. Most every piece of software that I&#8217;ve used is &#8220;caveat emptor&#8221;.  You can remove an rpm ignoring it&#8217;s normally blocking hooks with <code>rpm -e &#8212;noscripts</code> you can remove a package in Debian that is in an inconsistent state with <code>dpkg --force-remove-reinstreq</code> where normally dpkg would want to reinstall the package thinking that a reinstallation will allow an uninstallation. But sometimes the package needs to be removed in order for an installation to work, and so it&#8217;s there!</p></li><li><p>This bug isn&#8217;t rare. It&#8217;s common. It&#8217;s in the *Frequently* Asked Questions for cert-manager.</p></li><li><p>This is not about security. It&#8217;s about convenience. I can remove something by manually removing finalizers and dependent resources. If I can do it, there should be a command to do what I&#8217;m doing automatically. It&#8217;s not complex. The argument here is whether or not it should be convenient.</p></li></ol><p>Take care. Hope you enjoyed the adventure.</p><p><em>Scientific Journal of Objective Truths and Proof 2025:4-26.0.0</em></p>]]></content:encoded></item><item><title><![CDATA[Git Cliff and monorepos]]></title><description><![CDATA[An introduction to the monorepo capabilities of git cliff]]></description><link>https://substack.evancarroll.com/p/git-cliff-and-monorepos</link><guid isPermaLink="false">https://substack.evancarroll.com/p/git-cliff-and-monorepos</guid><dc:creator><![CDATA[Evan Carroll (Chief Editor)]]></dc:creator><pubDate>Tue, 11 Mar 2025 04:39:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YVUb!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29009f8a-94b2-4df5-9f5d-bbe4dcb8007a_260x260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><a href="https://substack.evancarroll.com/p/git-cliff-for-automated-release-management">For a general overview of </a></em><code>git cliff</code><em><a href="https://substack.evancarroll.com/p/git-cliff-for-automated-release-management"> see my earlier article on it.</a> This article expands on that focusing just on git cliff&#8217;s abilities to address monorepos.</em></p><p>A monorepo is a single code repository that contains multiple &#8220;projects&#8221; <strong>which may each be versioned differently<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>.</strong> This is an older way to develop and it remains popular (mostly for cultural reasons) with those that come from pre-git source control management systems, like svn and cvs.</p><p>In order to emulate a mono repo we&#8217;ll create a sandbox. This sets up a code repository in the directory &#8220;repo&#8221; which has three projects &#8220;foo&#8221;, &#8220;bar&#8221;, and &#8220;baz&#8221;. Each of these projects have a fresh change log and are versioned to 1.0.0. But because we&#8217;re using a monorepo, the version tags are project specific. For example, there are two separate tags for <code>foo-1.0.0</code> and <code>bar-1.0.0</code>. When viewing the repository at &#8220;foo-1.0.0&#8221; the code in all other non-foo projects should be ignored.</p><pre><code>git init repo
cd repo
git-cliff --init
echo "INITIAL COMMIT" &gt;README.md
git add README.md
git commit -a -m 'initial commit'

for PROJ in foo bar baz; do
(
  mkdir $PROJ
  cd $PROJ
  echo "New readme for $PROJ" &gt;README.md
  git add README.md
  git commit -a -m"Added new project $PROJ"
  git tag "$PROJ-1.0.0"

  git-cliff --unreleased --bump &gt;CHANGELOG.md
  git add CHANGELOG.md
  git commit -a -m"chore($PROJ): git-cliff"
  git tag $(git cliff --unreleased --tag-pattern="$PROJ-.*" --bumped-version)
)
done</code></pre><p>As before, this part is key and will remain unmodified generating the chore commit.</p><pre><code>git-cliff --unreleased --bump --prepend CHANGELOG.md
git add CHANGELOG.md
git commit -a -m'chore: git-cliff'
git tag $(git cliff --tag-pattern="$PROJ-*" --bumped-version)</code></pre><h2>Demonstrating a single fix</h2><p>To demonstrate a single fix, we can use this code</p><pre><code># Single commit test on foo
PROJ=foo
cd $PROJ
echo Short fix &gt;&gt;README.md
git commit -a -m"fix: single commit $PROJ"

git-cliff --unreleased --bump --prepend CHANGELOG.md
git add CHANGELOG.md
git commit -a -m'chore: git-cliff'
git tag $(git cliff --tag-pattern="$PROJ-*" --bumped-version)</code></pre><h2>Two commits on the same project?</h2><p>Here we demonstrate two commits on the same project. This kind of thing will happen often in a PR for example, especially when the source is an integration branch.</p><pre><code>PROJ=foo
cd $PROJ
echo One more fix &gt;&gt;README.md
git commit -a -m"feat: [1/2] dual commit/single proj $PROJ"
echo Always another one &gt;&gt;README.md
git commit -a -m"feat: [2/2] dual commit/single proj $PROJ"

git cliff --unreleased --bump --tag-pattern "$PROJ-.*" --prepend CHANGELOG.md
git commit -a -m'chore: git-cliff'
git tag $(git cliff --unreleased --tag-pattern="$PROJ-.*" --bumped-version)</code></pre><h2>Crossing project boundaries in one chore commit</h2><p>But what if your integration branch crosses boundaries, not a problem. Here is the code that would handle that.</p><pre><code># Create commit
for PROJ in foo baz; do
(
  cd $PROJ
  echo "Dual project fix" &gt;&gt;README.md
)
done
git commit -a -m'fix: dual plugin commit'

# Iterate through project updating changelogs
for PROJ in foo baz; do
(
  cd $PROJ
  git cliff --unreleased --bump --tag-pattern="$PROJ-.*" --prepend CHANGELOG.md
)
done

# Create a chore commit
git commit -a -m'chore: git-cliff'

# Set version tags to that commit
for PROJ in foo baz; do
(
  cd $PROJ
  git tag $(git cliff --unreleased --tag-pattern="$PROJ-.*" --bumped-version)
)
done</code></pre><p>You&#8217;ll notice here that this is the complex use case for version management in a monorepo. We have to break our pattern substantially, this is because in one chore commit we want</p><ul><li><p>All the changelogs generated</p></li><li><p>All bumped versions tagged</p></li></ul><p>This is only meant to demonstrate an overview of the monorepo functionality of git cliff. Git cliff is actively developed. As always, customizations will likely be required and be sure to read the documentation!</p><p><em>Scientific Journal of Objective Truths and Proof 2025:3-10.1.0</em></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>If you need neither different versioning nor changelogs for each project just ignore the monorepo functionality.</p></div></div>]]></content:encoded></item><item><title><![CDATA[An introduction to git cliff for release management]]></title><description><![CDATA[Learn how to automate your software releases]]></description><link>https://substack.evancarroll.com/p/git-cliff-for-automated-release-management</link><guid isPermaLink="false">https://substack.evancarroll.com/p/git-cliff-for-automated-release-management</guid><dc:creator><![CDATA[Evan Carroll (Chief Editor)]]></dc:creator><pubDate>Tue, 11 Mar 2025 04:36:50 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4b4260ee-717d-4904-aa40-0de36652dc06_640x640.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This article introduces tooling that requires a firm understanding of Semantic Versioning, and Conventional Commits. These were previously explained in my articles on <a href="https://substack.evancarroll.com/p/modern-software-versioning">Modern Versioning</a>, and <a href="https://substack.evancarroll.com/p/modern-changelogs">Modern Changelogs</a>.</em></p><p><a href="https://git-cliff.org/">Git Cliff</a> is a tool by <a href="https://github.com/orhun">Orhun Parmaks&#305;z</a> that allows you to automate changelogs and versions. In it&#8217;s simplest form it assumes there is one version-number bearing project in a repository. The set up looks something like this,</p><pre><code># Create new repo dir
git init foo
cd foo
echo readme &gt;README.md
git add README.md
git commit -a -m 'initial commit'
git tag 1.0.0

# Git cliff setup
git-cliff --init
git add cliff.toml
git commit -a -m'ci: added git cliff'

git-cliff --unreleased --bump &gt;CHANGELOG.md
git add CHANGELOG.md
git commit -a -m'chore: git-cliff'
git tag $(git cliff --bumped-version)</code></pre><p>Now you have a project configured with <code>git cliff</code>, and it&#8217;s bumped its first version. After you run those commands, you&#8217;ll see two versions tagged and one of them was calculated by <code>git cliff</code>.</p><pre><code>$ git tag
1.0.0
1.0.1</code></pre><p>And the <code>git log</code> will show your chore commit,</p><pre><code>commit a840842e48984fc454b2d673e5bc8d6e94547f3a (HEAD -&gt; main, tag: 1.0.1)
Author: Evan Carroll &lt;me@evancarroll.com&gt;
Date:   Mon Mar 10 18:37:50 2025 -0500

    chore: git-cliff</code></pre><p>While there are lots of ways to use git cliff, I believe the best practice is to have</p><ul><li><p>A separate commit for the files touched by git cliff</p></li><li><p>Where that separate commit is the tag point for the new version</p></li></ul><p>In order to achieve this, whenever you want to publish a new commit simply run</p><pre><code><code>git-cliff --unreleased --bump --prepend CHANGELOG.md
git add CHANGELOG.md
git commit -a -m'chore: git-cliff'
git tag $(git cliff --bumped-version)</code></code></pre><p><strong>Note: the only thing that changes in these four lines from the above, is the </strong><code>&#8220;--prepend&#8221;</code><strong> argument. </strong>You can repeat this process for each new commit-cycle</p><pre><code><code>echo "New Code" &gt;&gt; main.rs
git add main.rs
git commit -a -m'feat: added a new pseudo rust feature'

git-cliff --unreleased --bump --prepend CHANGELOG.md
git add CHANGELOG.md
git commit -a -m'chore: git-cliff'
git tag $(git cliff --bumped-version)</code></code></pre><p>And now you&#8217;ll see the commit with the new tag <code>1.1.0</code></p><pre><code>commit 2aeb571078c4ef24022cb5dfba1fbc7eabd6fdfc (HEAD -&gt; main, tag: 1.1.0)
Author: Evan Carroll &lt;me@evancarroll.com&gt;
Date:   Mon Mar 10 18:40:43 2025 -0500

    chore: git-cliff</code></pre><h2>Monorepos</h2><p>I have whole entry on just <a href="https://substack.evancarroll.com/p/git-cliff-and-monorepos">git cliff and monorepos</a>. I highly suggest it but I&#8217;m partial. It felt out of place diving into all that detail here.</p><h2>Other functionality</h2><p>In all this code we rely on just the defaults of git cliff, which is rather amazing. It has a slew of other cool features. If you&#8217;re entertaining adoption I suggest reading about,</p><ul><li><p><a href="https://git-cliff.org/docs/configuration/changelog">Templating</a>: there is a ton of functionality here. The prebuilt templates are <a href="https://git-cliff.org/docs/usage/initializing">documented in </a><code>&#8212;init</code>. However you can create your own &#8212; no Rust required!</p></li><li><p><a href="https://git-cliff.org/docs/configuration/remote">Host integrations</a> (for GitLab, GitHub, and BitBucket)</p></li></ul><p><em>Scientific Journal of Objective Truths and Proof 2025:3-10.0.0</em></p>]]></content:encoded></item><item><title><![CDATA[Modern changelogs]]></title><description><![CDATA[How to get changelogs and version numbers for free!]]></description><link>https://substack.evancarroll.com/p/modern-changelogs</link><guid isPermaLink="false">https://substack.evancarroll.com/p/modern-changelogs</guid><dc:creator><![CDATA[Evan Carroll (Chief Editor)]]></dc:creator><pubDate>Fri, 07 Mar 2025 18:37:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YVUb!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29009f8a-94b2-4df5-9f5d-bbe4dcb8007a_260x260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This article details <a href="https://en.wikipedia.org/wiki/Changelog">changelogs</a> and follows my earlier article <a href="https://substack.evancarroll.com/p/modern-software-versioning">&#8220;Modern software versioning&#8221;</a> where I explain Semantic Versioning.</em></p><p>Aside from a version number, most software is distributed with a <a href="https://en.wikipedia.org/wiki/Changelog">changelog</a>. A changelog will tell you &#8212; log &#8212; what has changed with a new release of software. These changes are tied back to version numbers. Historically programmers describe changes in two places,</p><ul><li><p>user-facing changelogs.</p></li><li><p>commit messages which are only viewable by developers</p></li></ul><p>Despite being conceptually different, for efficiency most simply concentrate change documentation into commit messages killing two birds with one stone. But, we can do better than that. <strong>In this article we will kill three birds with one stone.</strong></p><h2>Recap on Semantic Version</h2><p>Recall that Semantic Versioning is a standard for version numbers that allows you to compare any two versions and state affirmatively the type of change between them as one of either</p><ul><li><p><strong>&#8220;major&#8221; (also known as a &#8220;breaking change&#8221;):</strong> incompatibility with potentially more features and bug fixes</p></li><li><p><strong>&#8220;minor&#8221;:</strong> more features and potentially bug fixes</p></li><li><p><strong>&#8220;patch&#8221;:</strong> just bug fixes</p></li></ul><h2>Automating version management</h2><p>Let&#8217;s assume we have source-control management (SCM) like git. Going back to our,</p><pre><code><code>semvarAfter = bump(semvarBefore, change)</code></code></pre><p>Where <code>change</code> is of type <code>ENUM[MAJOR,MINOR,PATCH]</code>.</p><p>In order to provide full automation of releases, we have to be able to derive both arguments to <code>bump</code>:</p><ul><li><p><code>semvarBefore</code></p><p>This is easy to determine: version numbers are typically stored in git tags. You can determine the last version by applying the coalition in the Semantic Versioning spec (the standardized sorting order).</p></li><li><p><code>change</code></p><p>This is the problem: we need a deterministic method to get a value for <code>change</code> by deciding which variant of the <code>ENUM[MAJOR,MINOR,PATCH]</code> represents the changes in code want to publish.</p></li></ul><p>One solution that enables automation is to simply tag each commit with a token that represents the change type.</p><h2>Enter <a href="https://www.conventionalcommits.org/https://www.conventionalcommits.org/">Conventional Commits</a></h2><p><a href="https://www.conventionalcommits.org/">Conventional Commit</a> is one of many standards for tokens, and token placement. The tokens used by Conventional Commits, are</p><ul><li><p>&#8220;<code>BREAKING CHANGE:</code>&#8221; For a major change.</p></li><li><p>&#8220;<code>feat:</code>&#8221; For a minor change, abbreviation of &#8220;feature&#8221;</p></li><li><p>&#8220;<code>fix:</code>&#8221; For a patch level change</p></li></ul><p>Where &#8220;type&#8221; is our token above.</p><pre><code>&lt;type&gt;[optional scope]: &lt;description&gt;

[optional body]

[optional footer(s)]</code></pre><p>These map directly onto our <code>ENUM[MAJOR,MINOR,PATCH]</code>. With each commit message standardized to use the tokens above, we need only</p><ul><li><p>Scan all commits from the last published version, to the code we want to publish (typically <code>HEAD</code>). And,</p></li><li><p>Track the most significant token identified in the scan</p></li></ul><p>Pseudo-code</p><pre><code>change = scanCommits(gitTag, HEAD)</code></pre><p>We can return to our original method of calculating the bumped version,</p><pre><code><code>semvarAfter = bump( semvarBefore, change )</code></code></pre><p>And substitute <code>change</code>,</p><pre><code><code>semvarAfter = bump( semvarBefore, scanCommits(gitTag, HEAD) )</code></code></pre><p>This is how Semantic Release paired with Conventional Commits enables automated release management. If you&#8217;re already using Semantic Versioning, adopting Conventional Commits is the one stone that kills,</p><ul><li><p>Versioning</p></li><li><p>User-facing changelogs</p></li><li><p>Git Commit message standardization</p></li></ul><h3>Conventional Commit Scoping</h3><p>Conventional commits support something called scoping. Which looks like the following (the scope below is <code>lang</code>):</p><pre><code><code>feat(lang): add Polish language</code></code></pre><p>Scoping allows you to develop tooling that reacts differently to changes of different feature sets and projects in your repository. It&#8217;s left for the implementer to decide how to use it.</p><h3>Revisiting changelogs and commit messages</h3><p>It&#8217;s worth revisiting the distinction between user facing changelogs and commit messages. Conventional Commit does not address this distinction. But in practice, <strong>most of the changelog-generating tools only make available to the user-changelogs the first line of the commit message</strong>. Simply keep that <a href="https://git-scm.com/docs/git-commit">title line</a> (first line of the commit message) succinct and user-focused and place the details restricted to developers in the body below. </p><p><em>Scientific Journal of Objective Truths and Proof 2025:3-7.0.0</em></p>]]></content:encoded></item><item><title><![CDATA[Modern software versioning]]></title><description><![CDATA[A quick introduction to Semantic Versioning]]></description><link>https://substack.evancarroll.com/p/modern-software-versioning</link><guid isPermaLink="false">https://substack.evancarroll.com/p/modern-software-versioning</guid><dc:creator><![CDATA[Evan Carroll (Chief Editor)]]></dc:creator><pubDate>Sun, 02 Mar 2025 02:49:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d4b42264-5680-411d-8388-f084407f21dd_478x231.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Not too long ago, version numbers were all ad hoc &#8212; everyone had a different way to do it. Now, and in large part thanks to the adoption by <a href="https://npmjs.com/">npm</a>, most of the world has largely accepted and moved to <a href="https://semver.org/">Semantic Versioning</a>. Semantic Versioning standardizes a tripartite version number <code>x.y.z</code> where <code>x</code> is the <em>&#8220;major number,&#8221;</em> <code>y</code> is the <em>&#8220;minor number,&#8221;</em> and <code>z</code> is the <em>&#8220;patch number.&#8221;</em> Because the version number has meaning, this allows you with any two version numbers to make one of three qualitative and semantic statements</p><ul><li><p>When the <strong>major number (</strong><code>x</code><strong> in </strong><code>x.y.z</code><strong>) changes it </strong><em><strong>&#8220;represents a breaking change and potentially more features and bug fixes&#8221;</strong></em></p><p>Ergo, an upgrade of this sort can <strong>NOT</strong> be assumed to be compatible with your code base at all.</p></li><li><p>Or, when the major number remains static and the <strong>minor number (</strong><code>y</code><strong> in </strong><code>x.y.z</code><strong>) changes it </strong><em><strong>&#8220;represents more features and potentially bug fixes&#8221;</strong></em></p><p>Ergo, a higher minor number can be assumed to be compatible but can <strong>NOT</strong> be assumed to be free of security vulnerabilities nor to be free of additional bugs which may be introduced by the development of new features.</p></li><li><p>Or, when the major number and minor number remains static and the <strong>patch number (</strong><code>z</code><strong> in </strong><code>x.y.z</code><strong>) changes it </strong><em><strong>&#8220;represents solely bug fixes&#8221;</strong></em></p><p>Ergo, a higher patch number can <strong>GENERALLY</strong> be assumed to neither introduce an incompatibility nor additional bugs nor additional vulnerabilities.</p></li></ul><p>Semantic Versioning has proven to be tremendously useful and it has been the status quo for a very long period of time.</p><p>Adopt semantic versioning by making the first public release of your software <strong>1.0.0</strong>. Or increment the major number and from that point on, simply follow the convention above.</p><h2><strong>In practice; developing with Semantic Versioning</strong></h2><p>To think about Semantic Versioning more formally if any two different semantic versions are compared the result of the comparison is the change between the two versions and can be represented as an enumeration of these three outcomes</p><ul><li><p><strong>MAJOR: </strong><em><strong>&#8220;represents a breaking change and potentially more features and bug fixes&#8221;</strong></em></p></li><li><p><strong>MINOR: </strong><em><strong>&#8220;represents more features and potentially bug fixes&#8221;</strong></em></p></li><li><p><strong>PATCH: </strong><em><strong>&#8220;represents solely bug fixes&#8221;</strong></em></p></li></ul><pre><code><code>change = compare( semvarBefore, semvarAfter )</code></code></pre><p>Where <code>change</code> of type <code>ENUM[MAJOR,MINOR,PATCH]</code>.</p><p>Further, knowing the <code>semvarBefore</code> and the <code>change</code> whether <code>MAJOR</code>, <code>MINOR</code>, <code>PATCH</code> you can calculate the next valid <code>semvarAfter.</code> This is done normally with a &#8220;bump&#8221; tool.</p><pre><code>semvarAfter = bump( semvarBefore, change )</code></pre><p>The bumper tool can be implemented simply:</p><ul><li><p>When major changes: increment major, clear (set to zero) minor and patch</p></li><li><p>Or, when minor changes: retain major, increment minor, clear (set to zero) patch</p></li><li><p>Or, when patch changes: retain major and minor, increment patch</p></li></ul><p>When using semantic versioning, a developer will</p><ul><li><p>take the current version number</p></li><li><p>review the changes from that version until the point you wish to publish as a new version to decide which one of the statements above summarizes the magnitude of the changes, and</p></li><li><p>hand both the current version and the type of change or bump needed to the bumper</p></li></ul><p>This would provide them their new version number.</p><h2>Pre-release and build-metadata</h2><p>There are two advanced pieces of functionality that are very useful and often less well known about Semantic Versioning. Let&#8217;s just assume the next version of Ubuntu is 15.0.0</p><ul><li><p><strong>Want to include something external in your version number</strong> like a stupid animal name for your adolescent user base? Semantic Versioning makes this possible with build metadata! Simply suffix the version number with a &#8220;<code>+</code>&#8221; (plus sign) and one or more dot-separated identifiers. For example, <a href="https://discourse.ubuntu.com/t/plucky-puffin-release-notes/48687">the next version of Ubuntu </a>could simply be.</p><p><code>15.0.0+puffin.25.04</code></p><ul><li><p>Where &#8220;puffin&#8221; is the dumb animal name they&#8217;re using to market it</p></li><li><p>Where 25.04 is the release date (April of 2025) the version was first provided</p></li></ul><p>Now they don&#8217;t have to drive everyone nuts with &#8220;puffin&#8221; and &#8220;25.04&#8221; in random locations. There is no spec on your build metadata. It&#8217;s left for you to define and it&#8217;s excluded in comparisons and sorting.</p></li><li><p><strong>Want to provide a pre-release of your software?</strong> Semantic Versioning allows this as well: simply suffix the version number with a &#8220;<code>-</code>&#8221; (hyphen) and one or more dot-separated identifiers</p><ul><li><p><code>15.0.0-alpha+puffin.25.04</code></p></li><li><p><code>15.0.0-beta+puffin.25.04</code></p></li><li><p><code>15.0.0-rc1+puffin.25.04</code></p></li></ul></li></ul><p>It&#8217;s very typical for the build-metadata to include the git-SHA in a repeatable build situation.</p><h2>Read The Spec!</h2><p><a href="https://semver.org/">Semantic Versioning</a> is something you&#8217;ll use all the time. The spec is not long &#8212; only a couple of pages. It&#8217;s useful to read it once. It&#8217;s beautiful in its simplicity.</p><p><em>Scientific Journal of Objective Truths and Proof 2025:3-1.0.0</em></p>]]></content:encoded></item><item><title><![CDATA[AI and Social Credit Scores in the workplace, the latest advent of capitalism]]></title><description><![CDATA[Now more than ever think twice where you write the message, think three times before you send it.]]></description><link>https://substack.evancarroll.com/p/ai-and-social-credit-scores-in-the</link><guid isPermaLink="false">https://substack.evancarroll.com/p/ai-and-social-credit-scores-in-the</guid><dc:creator><![CDATA[Evan Carroll (Chief Editor)]]></dc:creator><pubDate>Wed, 29 Jan 2025 04:16:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YoZq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>&#8220;Operational security&#8221; is basically a fancy term for not being stupid in how you conduct your business. For us, that&#8217;s merely averting termination. We need to work on this.</em></p><p>Here is how the world has evolved and how it impacts you. </p><ul><li><p><strong>Slack</strong> now has an official offering called AI Agents. And, they&#8217;ve long since allowed Enterprise Administrators to read public messages without you knowing.</p><ul><li><p>lurel.io offer products which include &#8220;<a href="https://lurel.io/blog/sentiment-analysis-in-slack-for-workspace-monitoring">Sentiment Analysis</a>&#8221;</p></li><li><p>posipanda offers a service which <a href="https://posipanda.com/identifying-toxic-behavior-in-slack-channels-with-posipanda/">provides a toxicity and kindness score</a>.</p><blockquote><p>Identifying Toxic Behavior in Slack: Posipanda aims to foster a positive work culture by identifying and addressing communication challenges.</p></blockquote></li><li><p>nightfall.ai offers a service to <a href="https://www.nightfall.ai/blog/bullying-harassment-in-slack">monitor for bullying using AI</a></p></li></ul></li><li><p><strong>SalesForce</strong> already makes use of <a href="https://developer.salesforce.com/docs/einstein/genai/guide/toxicity-scoring.html">Toxicity Scoring with LLM and AI</a>, using it&#8217;s Einstein Generative AI. It also integrates with Slack.</p></li><li><p><strong>Microsoft Teams</strong> makes &#8220;Sentiment Analysis&#8221; so easy, it&#8217;s actually in the <a href="https://learn.microsoft.com/en-us/samples/officedev/microsoft-teams-sampldfdfdfeeedfes/officedev-microsoft-teams-samples-msgext-ai-sentiment-analysis-nodejs/">coding example for a bot</a>.</p></li><li><p><strong>Zoom</strong> is also playing around with &#8220;<a href="https://support.zoom.com/hc/en/article?id=zm_kb&amp;sysparm_article=KB0076714">Sentiment Analysis</a>.&#8221;</p></li></ul><p>Remember, at work &#8212; especially in a Right to Work state (right to get fired) &#8212; you have almost no rights nor expectation of privacy, according to <a href="https://www.workplacefairness.org/workplace-surveillance/">Workplace Fairness</a></p><blockquote><p>Employers can legally monitor almost anything an employee does at work as long as the reason for monitoring is important enough to the business. Employers may install video cameras, read postal mail and e-mail, monitor phone and computer usage, use GPS tracking, and more.</p></blockquote><p>Operational security is not having conversations in unsafe venues about,</p><ul><li><p>Your political opinions</p></li><li><p>Your pay</p></li><li><p>Your opinions of leadership and management</p></li></ul><p>Those conversations shouldn&#8217;t be on the company provided communication medium. By all means, reach out and talk to your coworkers. Organize side channels. But don&#8217;t make it so easy that you get marked for spreading negativity on things they administer and maintain. Moreover, think twice before endangering a coworker with that. Most can talk about Trump and Biden and be level headed, but what about the one guy that gets emotional? Is it worth being a party to a conversation which can end up hurting those that get too emotional  &#8212; even if their heart is in the right place?</p><p>Let&#8217;s say a hothead reaches out and they want to know what you thought of the HR meeting, or their own struggles at the workplace. Sympathizing with them publicly or reinforcing their perspectives gives them a permit to continue to vent on the medium. Why put them in a position to dig themselves into a hole by welcoming that conversation there? It can only ever hurt their career.</p><p>When it comes to how you behave at work, assume your employer will act to protect their workplace culture. That&#8217;s a valid and fair assumption. Yes, you&#8217;re losing out, but for your own sake consider how AI is giving them an edge. A dystopian corporate edge.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YoZq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YoZq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YoZq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YoZq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YoZq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YoZq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg" width="422" height="281.18979591836734" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:653,&quot;width&quot;:980,&quot;resizeWidth&quot;:422,&quot;bytes&quot;:82004,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YoZq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YoZq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YoZq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YoZq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2841dcc1-3c00-4a67-8876-19c32fb80f8f_980x653.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Scientific Journal of Objective Truths and Proof 2025:1-28.0.0</em></p>]]></content:encoded></item></channel></rss>