<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Unicode on Nick Liu - Software Engineer</title><link>https://nick-liu.com/tags/unicode/</link><description>Recent content in Unicode on Nick Liu - Software Engineer</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>nickboy@users.noreply.github.com (Nick Liu)</managingEditor><webMaster>nickboy@users.noreply.github.com (Nick Liu)</webMaster><copyright>2026 Nick Liu</copyright><lastBuildDate>Sun, 02 Aug 2026 13:49:57 -0700</lastBuildDate><atom:link href="https://nick-liu.com/tags/unicode/index.xml" rel="self" type="application/rss+xml"/><item><title>I hid zero-width characters in a CS1 spec. The model did not blink.</title><link>https://nick-liu.com/posts/obfuscated-spec-zero-width-characters/</link><pubDate>Fri, 07 Aug 2026 00:00:00 +0000</pubDate><author>nickboy@users.noreply.github.com (Nick Liu)</author><guid>https://nick-liu.com/posts/obfuscated-spec-zero-width-characters/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 
I made two sabotaged copies of a CS1 problem. Into the first I inserted zero-width characters, invisible in any editor. Into the second I went heavier and swapped letters for Unicode look-alikes as well. The hidden tests stayed byte-for-byte identical. If obfuscation works as an AI defense, the model's score should drop. It scored 0.85 on both copies. The attack did nothing. My fairness check flagged both copies anyway, and that second part is the one worth writing about.

&lt;/div&gt;

&lt;nav class="series-progress" aria-label="Series progress"&gt;
 &lt;span class="series-progress-label"&gt;Auditing AI-Solvability · Part 4 of 5&lt;/span&gt;
 &lt;ol class="series-progress-dots"&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/ai-resistant-cs1-problems/" title="I went looking for AI-resistant CS1 problems. The search came up empty."&gt;1&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/eval-harness-honesty-rules/" title="A crash is never a pass. Three rules that kept 1,095 eval runs honest."&gt;2&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/cohens-kappa-zero-agreement/" title="Cohen&amp;#39;s kappa came back 0.00. The agreement was 6 out of 8."&gt;3&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-current"&gt;
 &lt;a href="https://nick-liu.com/posts/obfuscated-spec-zero-width-characters/" title="I hid zero-width characters in a CS1 spec. The model did not blink." aria-current="step"&gt;4&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/python-pptx-official-template/" title="Do not restyle a deck to look official. Wipe the template and keep its masters."&gt;5&lt;/a&gt;
 &lt;/li&gt;&lt;/ol&gt;
 &lt;/nav&gt;

&lt;h2 class="relative group"&gt;Why sabotage my own problem
 &lt;div id="why-sabotage-my-own-problem" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-sabotage-my-own-problem" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Instructors keep looking for ways to make assignments that AI tools fail. One family of ideas is to leave the problem alone and poison the text: invisible characters, homoglyphs, formatting tricks that a human reader never notices but that might derail a model reading the same bytes. Before trusting any resistance my tool (&lt;a href="https://nick-liu.com/posts/ai-resistant-cs1-problems/" &gt;part 1&lt;/a&gt;) reported, I needed to know what this kind of tampering does to a score, because a problem that scores low for wording reasons is fake difficulty, not a real skill gap.&lt;/p&gt;</description><content:encoded>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 
I made two sabotaged copies of a CS1 problem. Into the first I inserted zero-width characters, invisible in any editor. Into the second I went heavier and swapped letters for Unicode look-alikes as well. The hidden tests stayed byte-for-byte identical. If obfuscation works as an AI defense, the model's score should drop. It scored 0.85 on both copies. The attack did nothing. My fairness check flagged both copies anyway, and that second part is the one worth writing about.

&lt;/div&gt;

&lt;nav class="series-progress" aria-label="Series progress"&gt;
 &lt;span class="series-progress-label"&gt;Auditing AI-Solvability · Part 4 of 5&lt;/span&gt;
 &lt;ol class="series-progress-dots"&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/ai-resistant-cs1-problems/" title="I went looking for AI-resistant CS1 problems. The search came up empty."&gt;1&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/eval-harness-honesty-rules/" title="A crash is never a pass. Three rules that kept 1,095 eval runs honest."&gt;2&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/cohens-kappa-zero-agreement/" title="Cohen&amp;#39;s kappa came back 0.00. The agreement was 6 out of 8."&gt;3&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-current"&gt;
 &lt;a href="https://nick-liu.com/posts/obfuscated-spec-zero-width-characters/" title="I hid zero-width characters in a CS1 spec. The model did not blink." aria-current="step"&gt;4&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/python-pptx-official-template/" title="Do not restyle a deck to look official. Wipe the template and keep its masters."&gt;5&lt;/a&gt;
 &lt;/li&gt;&lt;/ol&gt;
 &lt;/nav&gt;

&lt;h2 class="relative group"&gt;Why sabotage my own problem
 &lt;div id="why-sabotage-my-own-problem" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-sabotage-my-own-problem" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Instructors keep looking for ways to make assignments that AI tools fail. One family of ideas is to leave the problem alone and poison the text: invisible characters, homoglyphs, formatting tricks that a human reader never notices but that might derail a model reading the same bytes. Before trusting any resistance my tool (&lt;a href="https://nick-liu.com/posts/ai-resistant-cs1-problems/" &gt;part 1&lt;/a&gt;) reported, I needed to know what this kind of tampering does to a score, because a problem that scores low for wording reasons is fake difficulty, not a real skill gap.&lt;/p&gt;
&lt;p&gt;The donor problem was conditionals-01, a clean baseline that the weak model already passed at 0.75. I audited both sabotaged twins against claude-haiku-4-5, 20 attempts each, the same protocol as every other run in this series.&lt;/p&gt;
&lt;div class="not-prose diagram diagram-light"&gt;&lt;svg id="db1408b5f458ee625light" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 1006.921875px;" viewBox="0 0 1006.921875 222" role="graphics-document document" aria-roledescription="flowchart-v2"&gt;&lt;style&gt;#db1408b5f458ee625light{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#db1408b5f458ee625light .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#db1408b5f458ee625light .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#db1408b5f458ee625light .error-icon{fill:rgb(255, 255, 255);}#db1408b5f458ee625light .error-text{fill:#000000;stroke:#000000;}#db1408b5f458ee625light .edge-thickness-normal{stroke-width:1px;}#db1408b5f458ee625light .edge-thickness-thick{stroke-width:3.5px;}#db1408b5f458ee625light .edge-pattern-solid{stroke-dasharray:0;}#db1408b5f458ee625light .edge-thickness-invisible{stroke-width:0;fill:none;}#db1408b5f458ee625light .edge-pattern-dashed{stroke-dasharray:3;}#db1408b5f458ee625light .edge-pattern-dotted{stroke-dasharray:2;}#db1408b5f458ee625light .marker{fill:rgb(74, 86, 92);stroke:rgb(74, 86, 92);}#db1408b5f458ee625light .marker.cross{stroke:rgb(74, 86, 92);}#db1408b5f458ee625light svg{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:16px;}#db1408b5f458ee625light p{margin:0;}#db1408b5f458ee625light .label{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;color:#333;}#db1408b5f458ee625light .cluster-label text{fill:#000000;}#db1408b5f458ee625light .cluster-label span{color:#000000;}#db1408b5f458ee625light .cluster-label span p{background-color:transparent;}#db1408b5f458ee625light .label text,#db1408b5f458ee625light span{fill:#333;color:#333;}#db1408b5f458ee625light .node rect,#db1408b5f458ee625light .node circle,#db1408b5f458ee625light .node ellipse,#db1408b5f458ee625light .node polygon,#db1408b5f458ee625light .node path{fill:rgb(255, 255, 255);stroke:rgb(204, 216, 222);stroke-width:1px;}#db1408b5f458ee625light .rough-node .label text,#db1408b5f458ee625light .node .label text,#db1408b5f458ee625light .image-shape .label,#db1408b5f458ee625light .icon-shape .label{text-anchor:middle;}#db1408b5f458ee625light .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#db1408b5f458ee625light .rough-node .label,#db1408b5f458ee625light .node .label,#db1408b5f458ee625light .image-shape .label,#db1408b5f458ee625light .icon-shape .label{text-align:center;}#db1408b5f458ee625light .node.clickable{cursor:pointer;}#db1408b5f458ee625light .root .anchor path{fill:rgb(74, 86, 92)!important;stroke-width:0;stroke:rgb(74, 86, 92);}#db1408b5f458ee625light .arrowheadPath{fill:#000000;}#db1408b5f458ee625light .edgePath .path{stroke:rgb(74, 86, 92);stroke-width:1px;}#db1408b5f458ee625light .flowchart-link{stroke:rgb(74, 86, 92);fill:none;}#db1408b5f458ee625light .edgeLabel{background-color:rgb(182, 240, 255);text-align:center;}#db1408b5f458ee625light .edgeLabel p{background-color:rgb(182, 240, 255);}#db1408b5f458ee625light .edgeLabel rect{opacity:0.5;background-color:rgb(182, 240, 255);fill:rgb(182, 240, 255);}#db1408b5f458ee625light .labelBkg{background-color:rgba(182, 240, 255, 0.5);}#db1408b5f458ee625light .cluster rect{fill:rgb(255, 255, 255);stroke:rgb(129, 146, 154);stroke-width:1px;}#db1408b5f458ee625light .cluster text{fill:#000000;}#db1408b5f458ee625light .cluster span{color:#000000;}#db1408b5f458ee625light div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:12px;background:rgb(255, 255, 255);border:1px solid rgb(129, 146, 154);border-radius:2px;pointer-events:none;z-index:100;}#db1408b5f458ee625light .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#db1408b5f458ee625light rect.text{fill:none;stroke-width:0;}#db1408b5f458ee625light .icon-shape,#db1408b5f458ee625light .image-shape{background-color:rgb(182, 240, 255);text-align:center;}#db1408b5f458ee625light .icon-shape p,#db1408b5f458ee625light .image-shape p{background-color:rgb(182, 240, 255);padding:2px;}#db1408b5f458ee625light .icon-shape .label rect,#db1408b5f458ee625light .image-shape .label rect{opacity:0.5;background-color:rgb(182, 240, 255);fill:rgb(182, 240, 255);}#db1408b5f458ee625light .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#db1408b5f458ee625light .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#db1408b5f458ee625light .node .neo-node{stroke:rgb(204, 216, 222);}#db1408b5f458ee625light [data-look="neo"].node rect,#db1408b5f458ee625light [data-look="neo"].cluster rect,#db1408b5f458ee625light [data-look="neo"].node polygon{stroke:url(#db1408b5f458ee625light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#db1408b5f458ee625light [data-look="neo"].swimlane.cluster rect{filter:none;}#db1408b5f458ee625light [data-look="neo"].node path{stroke:url(#db1408b5f458ee625light-gradient);stroke-width:1px;}#db1408b5f458ee625light [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#db1408b5f458ee625light [data-look="neo"].node .neo-line path{stroke:rgb(204, 216, 222);filter:none;}#db1408b5f458ee625light [data-look="neo"].node circle{stroke:url(#db1408b5f458ee625light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#db1408b5f458ee625light [data-look="neo"].node circle .state-start{fill:#000000;}#db1408b5f458ee625light [data-look="neo"].icon-shape .icon{fill:url(#db1408b5f458ee625light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#db1408b5f458ee625light [data-look="neo"].icon-shape .icon-neo path{stroke:url(#db1408b5f458ee625light-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#db1408b5f458ee625light :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"&gt;&lt;path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"&gt;&lt;path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"&gt;&lt;path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"&gt;&lt;polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/polygon&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"&gt;&lt;path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625light_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"&gt;&lt;path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;g class="root"&gt;&lt;g class="clusters"&gt;&lt;/g&gt;&lt;g class="edgePaths"&gt;&lt;path d="M161.389,72L168.606,67.833C175.822,63.667,190.255,55.333,203.053,51.167C215.852,47,227.016,47,232.598,47L238.18,47" id="db1408b5f458ee625light-L_A_B_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_B_0" data-points="W3sieCI6MTYxLjM4OTE2MDE1NjI1LCJ5Ijo3Mn0seyJ4IjoyMDQuNjg3NSwieSI6NDd9LHsieCI6MjQyLjE3OTY4NzUsInkiOjQ3fV0=" data-look="classic" marker-end="url(#db1408b5f458ee625light_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M161.389,150L168.606,154.167C175.822,158.333,190.255,166.667,200.971,170.833C211.688,175,218.688,175,222.188,175L225.688,175" id="db1408b5f458ee625light-L_A_C_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_C_0" data-points="W3sieCI6MTYxLjM4OTE2MDE1NjI1LCJ5IjoxNTB9LHsieCI6MjA0LjY4NzUsInkiOjE3NX0seyJ4IjoyMjkuNjg3NSwieSI6MTc1fV0=" data-look="classic" marker-end="url(#db1408b5f458ee625light_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M438.773,47L445.022,47C451.271,47,463.768,47,474.228,48.893C484.688,50.787,493.111,54.573,497.323,56.467L501.534,58.36" id="db1408b5f458ee625light-L_B_D_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_D_0" data-points="W3sieCI6NDM4Ljc3MzQzNzUsInkiOjQ3fSx7IngiOjQ3Ni4yNjU2MjUsInkiOjQ3fSx7IngiOjUwNS4xODIzNzMwNDY4NzUsInkiOjYwfV0=" data-look="classic" marker-end="url(#db1408b5f458ee625light_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M451.266,175L455.432,175C459.599,175,467.932,175,476.31,173.107C484.688,171.213,493.111,167.427,497.323,165.533L501.534,163.64" id="db1408b5f458ee625light-L_C_D_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_D_0" data-points="W3sieCI6NDUxLjI2NTYyNSwieSI6MTc1fSx7IngiOjQ3Ni4yNjU2MjUsInkiOjE3NX0seyJ4Ijo1MDUuMTgyMzczMDQ2ODc1LCJ5IjoxNjJ9XQ==" data-look="classic" marker-end="url(#db1408b5f458ee625light_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M732.068,60L736.887,57.833C741.707,55.667,751.345,51.333,759.665,49.167C767.984,47,774.984,47,778.484,47L781.984,47" id="db1408b5f458ee625light-L_D_E_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_D_E_0" data-points="W3sieCI6NzMyLjA2NzYyNjk1MzEyNSwieSI6NjB9LHsieCI6NzYwLjk4NDM3NSwieSI6NDd9LHsieCI6Nzg1Ljk4NDM3NSwieSI6NDd9XQ==" data-look="classic" marker-end="url(#db1408b5f458ee625light_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M732.068,162L736.887,164.167C741.707,166.333,751.345,170.667,760.085,172.833C768.826,175,776.667,175,780.587,175L784.508,175" id="db1408b5f458ee625light-L_D_F_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_D_F_0" data-points="W3sieCI6NzMyLjA2NzYyNjk1MzEyNSwieSI6MTYyfSx7IngiOjc2MC45ODQzNzUsInkiOjE3NX0seyJ4Ijo3ODguNTA3ODEyNSwieSI6MTc1fV0=" data-look="classic" marker-end="url(#db1408b5f458ee625light_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class="edgeLabels"&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A_B_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A_C_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_B_D_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_C_D_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_D_E_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_D_F_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="nodes"&gt;&lt;g class="node default" id="db1408b5f458ee625light-flowchart-A-0" data-look="classic" transform="translate(93.84375, 111)"&gt;&lt;rect class="basic label-container" style="" x="-85.84375" y="-39" width="171.6875" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-55.84375, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="111.6875" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;conditionals-01&lt;br&gt;clean spec&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="db1408b5f458ee625light-flowchart-B-1" data-look="classic" transform="translate(340.4765625, 47)"&gt;&lt;rect class="basic label-container" style="" x="-98.296875" y="-39" width="196.59375" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-68.296875, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="136.59375" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;twin 1&lt;br&gt;+ zero-width chars&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="db1408b5f458ee625light-flowchart-C-3" data-look="classic" transform="translate(340.4765625, 175)"&gt;&lt;rect class="basic label-container" style="" x="-110.7890625" y="-39" width="221.578125" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-80.7890625, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="161.578125" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;twin 2&lt;br&gt;+ look-alike letters too&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="db1408b5f458ee625light-flowchart-D-5" data-look="classic" transform="translate(618.625, 111)"&gt;&lt;rect class="basic label-container" style="" x="-117.359375" y="-51" width="234.71875" height="102"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-87.359375, -36)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="174.71875" height="72"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;audit&lt;br&gt;hidden tests unchanged&lt;br&gt;20 attempts each&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="db1408b5f458ee625light-flowchart-E-9" data-look="classic" transform="translate(892.453125, 47)"&gt;&lt;rect class="basic label-container" style="" x="-106.46875" y="-39" width="212.9375" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-76.46875, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="152.9375" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;scores 0.85 and 0.85&lt;br&gt;attack failed&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="db1408b5f458ee625light-flowchart-F-11" data-look="classic" transform="translate(892.453125, 175)"&gt;&lt;rect class="basic label-container" style="" x="-103.9453125" y="-39" width="207.890625" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-73.9453125, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="147.890625" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;construct check&lt;br&gt;flags both: not clean&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;defs&gt;&lt;filter id="db1408b5f458ee625light-drop-shadow" height="130%" width="130%"&gt;&lt;feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"&gt;&lt;/feDropShadow&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;defs&gt;&lt;filter id="db1408b5f458ee625light-drop-shadow-small" height="150%" width="150%"&gt;&lt;feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"&gt;&lt;/feDropShadow&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;linearGradient id="db1408b5f458ee625light-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"&gt;&lt;stop offset="0%" stop-color="rgb(204, 216, 222)" stop-opacity="1"&gt;&lt;/stop&gt;&lt;stop offset="100%" stop-color="rgb(28, 209, 255)" stop-opacity="1"&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;/svg&gt;&lt;/div&gt;
 &lt;div class="not-prose diagram diagram-dark"&gt;&lt;svg id="db1408b5f458ee625dark" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 1006.921875px;" viewBox="0 0 1006.921875 222" role="graphics-document document" aria-roledescription="flowchart-v2"&gt;&lt;style&gt;#db1408b5f458ee625dark{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#db1408b5f458ee625dark .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#db1408b5f458ee625dark .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#db1408b5f458ee625dark .error-icon{fill:#a44141;}#db1408b5f458ee625dark .error-text{fill:#ddd;stroke:#ddd;}#db1408b5f458ee625dark .edge-thickness-normal{stroke-width:1px;}#db1408b5f458ee625dark .edge-thickness-thick{stroke-width:3.5px;}#db1408b5f458ee625dark .edge-pattern-solid{stroke-dasharray:0;}#db1408b5f458ee625dark .edge-thickness-invisible{stroke-width:0;fill:none;}#db1408b5f458ee625dark .edge-pattern-dashed{stroke-dasharray:3;}#db1408b5f458ee625dark .edge-pattern-dotted{stroke-dasharray:2;}#db1408b5f458ee625dark .marker{fill:lightgrey;stroke:lightgrey;}#db1408b5f458ee625dark .marker.cross{stroke:lightgrey;}#db1408b5f458ee625dark svg{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:16px;}#db1408b5f458ee625dark p{margin:0;}#db1408b5f458ee625dark .label{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;color:#ccc;}#db1408b5f458ee625dark .cluster-label text{fill:#F9FFFE;}#db1408b5f458ee625dark .cluster-label span{color:#F9FFFE;}#db1408b5f458ee625dark .cluster-label span p{background-color:transparent;}#db1408b5f458ee625dark .label text,#db1408b5f458ee625dark span{fill:#ccc;color:#ccc;}#db1408b5f458ee625dark .node rect,#db1408b5f458ee625dark .node circle,#db1408b5f458ee625dark .node ellipse,#db1408b5f458ee625dark .node polygon,#db1408b5f458ee625dark .node path{fill:#1f2020;stroke:#ccc;stroke-width:1px;}#db1408b5f458ee625dark .rough-node .label text,#db1408b5f458ee625dark .node .label text,#db1408b5f458ee625dark .image-shape .label,#db1408b5f458ee625dark .icon-shape .label{text-anchor:middle;}#db1408b5f458ee625dark .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#db1408b5f458ee625dark .rough-node .label,#db1408b5f458ee625dark .node .label,#db1408b5f458ee625dark .image-shape .label,#db1408b5f458ee625dark .icon-shape .label{text-align:center;}#db1408b5f458ee625dark .node.clickable{cursor:pointer;}#db1408b5f458ee625dark .root .anchor path{fill:lightgrey!important;stroke-width:0;stroke:lightgrey;}#db1408b5f458ee625dark .arrowheadPath{fill:lightgrey;}#db1408b5f458ee625dark .edgePath .path{stroke:lightgrey;stroke-width:1px;}#db1408b5f458ee625dark .flowchart-link{stroke:lightgrey;fill:none;}#db1408b5f458ee625dark .edgeLabel{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#db1408b5f458ee625dark .edgeLabel p{background-color:hsl(0, 0%, 34.4117647059%);}#db1408b5f458ee625dark .edgeLabel rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#db1408b5f458ee625dark .labelBkg{background-color:rgba(87.75, 87.75, 87.75, 0.5);}#db1408b5f458ee625dark .cluster rect{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#db1408b5f458ee625dark .cluster text{fill:#F9FFFE;}#db1408b5f458ee625dark .cluster span{color:#F9FFFE;}#db1408b5f458ee625dark div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif;font-size:12px;background:hsl(20, 1.5873015873%, 12.3529411765%);border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#db1408b5f458ee625dark .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#db1408b5f458ee625dark rect.text{fill:none;stroke-width:0;}#db1408b5f458ee625dark .icon-shape,#db1408b5f458ee625dark .image-shape{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#db1408b5f458ee625dark .icon-shape p,#db1408b5f458ee625dark .image-shape p{background-color:hsl(0, 0%, 34.4117647059%);padding:2px;}#db1408b5f458ee625dark .icon-shape .label rect,#db1408b5f458ee625dark .image-shape .label rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#db1408b5f458ee625dark .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#db1408b5f458ee625dark .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#db1408b5f458ee625dark .node .neo-node{stroke:#ccc;}#db1408b5f458ee625dark [data-look="neo"].node rect,#db1408b5f458ee625dark [data-look="neo"].cluster rect,#db1408b5f458ee625dark [data-look="neo"].node polygon{stroke:url(#db1408b5f458ee625dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#db1408b5f458ee625dark [data-look="neo"].swimlane.cluster rect{filter:none;}#db1408b5f458ee625dark [data-look="neo"].node path{stroke:url(#db1408b5f458ee625dark-gradient);stroke-width:1px;}#db1408b5f458ee625dark [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#db1408b5f458ee625dark [data-look="neo"].node .neo-line path{stroke:#ccc;filter:none;}#db1408b5f458ee625dark [data-look="neo"].node circle{stroke:url(#db1408b5f458ee625dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#db1408b5f458ee625dark [data-look="neo"].node circle .state-start{fill:#000000;}#db1408b5f458ee625dark [data-look="neo"].icon-shape .icon{fill:url(#db1408b5f458ee625dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#db1408b5f458ee625dark [data-look="neo"].icon-shape .icon-neo path{stroke:url(#db1408b5f458ee625dark-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#db1408b5f458ee625dark :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"&gt;&lt;path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"&gt;&lt;path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"&gt;&lt;path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"&gt;&lt;polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/polygon&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"&gt;&lt;circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"&gt;&lt;path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"&gt;&lt;path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id="db1408b5f458ee625dark_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"&gt;&lt;path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"&gt;&lt;/path&gt;&lt;/marker&gt;&lt;g class="root"&gt;&lt;g class="clusters"&gt;&lt;/g&gt;&lt;g class="edgePaths"&gt;&lt;path d="M161.389,72L168.606,67.833C175.822,63.667,190.255,55.333,203.053,51.167C215.852,47,227.016,47,232.598,47L238.18,47" id="db1408b5f458ee625dark-L_A_B_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_B_0" data-points="W3sieCI6MTYxLjM4OTE2MDE1NjI1LCJ5Ijo3Mn0seyJ4IjoyMDQuNjg3NSwieSI6NDd9LHsieCI6MjQyLjE3OTY4NzUsInkiOjQ3fV0=" data-look="classic" marker-end="url(#db1408b5f458ee625dark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M161.389,150L168.606,154.167C175.822,158.333,190.255,166.667,200.971,170.833C211.688,175,218.688,175,222.188,175L225.688,175" id="db1408b5f458ee625dark-L_A_C_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_C_0" data-points="W3sieCI6MTYxLjM4OTE2MDE1NjI1LCJ5IjoxNTB9LHsieCI6MjA0LjY4NzUsInkiOjE3NX0seyJ4IjoyMjkuNjg3NSwieSI6MTc1fV0=" data-look="classic" marker-end="url(#db1408b5f458ee625dark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M438.773,47L445.022,47C451.271,47,463.768,47,474.228,48.893C484.688,50.787,493.111,54.573,497.323,56.467L501.534,58.36" id="db1408b5f458ee625dark-L_B_D_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_D_0" data-points="W3sieCI6NDM4Ljc3MzQzNzUsInkiOjQ3fSx7IngiOjQ3Ni4yNjU2MjUsInkiOjQ3fSx7IngiOjUwNS4xODIzNzMwNDY4NzUsInkiOjYwfV0=" data-look="classic" marker-end="url(#db1408b5f458ee625dark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M451.266,175L455.432,175C459.599,175,467.932,175,476.31,173.107C484.688,171.213,493.111,167.427,497.323,165.533L501.534,163.64" id="db1408b5f458ee625dark-L_C_D_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_D_0" data-points="W3sieCI6NDUxLjI2NTYyNSwieSI6MTc1fSx7IngiOjQ3Ni4yNjU2MjUsInkiOjE3NX0seyJ4Ijo1MDUuMTgyMzczMDQ2ODc1LCJ5IjoxNjJ9XQ==" data-look="classic" marker-end="url(#db1408b5f458ee625dark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M732.068,60L736.887,57.833C741.707,55.667,751.345,51.333,759.665,49.167C767.984,47,774.984,47,778.484,47L781.984,47" id="db1408b5f458ee625dark-L_D_E_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_D_E_0" data-points="W3sieCI6NzMyLjA2NzYyNjk1MzEyNSwieSI6NjB9LHsieCI6NzYwLjk4NDM3NSwieSI6NDd9LHsieCI6Nzg1Ljk4NDM3NSwieSI6NDd9XQ==" data-look="classic" marker-end="url(#db1408b5f458ee625dark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;path d="M732.068,162L736.887,164.167C741.707,166.333,751.345,170.667,760.085,172.833C768.826,175,776.667,175,780.587,175L784.508,175" id="db1408b5f458ee625dark-L_D_F_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_D_F_0" data-points="W3sieCI6NzMyLjA2NzYyNjk1MzEyNSwieSI6MTYyfSx7IngiOjc2MC45ODQzNzUsInkiOjE3NX0seyJ4Ijo3ODguNTA3ODEyNSwieSI6MTc1fV0=" data-look="classic" marker-end="url(#db1408b5f458ee625dark_flowchart-v2-pointEnd)"&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class="edgeLabels"&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A_B_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_A_C_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_B_D_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_C_D_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_D_E_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="edgeLabel"&gt;&lt;g class="label" data-id="L_D_F_0" transform="translate(0, 0)"&gt;&lt;foreignObject width="0" height="0"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="edgeLabel"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="nodes"&gt;&lt;g class="node default" id="db1408b5f458ee625dark-flowchart-A-0" data-look="classic" transform="translate(93.84375, 111)"&gt;&lt;rect class="basic label-container" style="" x="-85.84375" y="-39" width="171.6875" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-55.84375, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="111.6875" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;conditionals-01&lt;br&gt;clean spec&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="db1408b5f458ee625dark-flowchart-B-1" data-look="classic" transform="translate(340.4765625, 47)"&gt;&lt;rect class="basic label-container" style="" x="-98.296875" y="-39" width="196.59375" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-68.296875, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="136.59375" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;twin 1&lt;br&gt;+ zero-width chars&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="db1408b5f458ee625dark-flowchart-C-3" data-look="classic" transform="translate(340.4765625, 175)"&gt;&lt;rect class="basic label-container" style="" x="-110.7890625" y="-39" width="221.578125" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-80.7890625, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="161.578125" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;twin 2&lt;br&gt;+ look-alike letters too&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="db1408b5f458ee625dark-flowchart-D-5" data-look="classic" transform="translate(618.625, 111)"&gt;&lt;rect class="basic label-container" style="" x="-117.359375" y="-51" width="234.71875" height="102"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-87.359375, -36)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="174.71875" height="72"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;audit&lt;br&gt;hidden tests unchanged&lt;br&gt;20 attempts each&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="db1408b5f458ee625dark-flowchart-E-9" data-look="classic" transform="translate(892.453125, 47)"&gt;&lt;rect class="basic label-container" style="" x="-106.46875" y="-39" width="212.9375" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-76.46875, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="152.9375" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;scores 0.85 and 0.85&lt;br&gt;attack failed&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="node default" id="db1408b5f458ee625dark-flowchart-F-11" data-look="classic" transform="translate(892.453125, 175)"&gt;&lt;rect class="basic label-container" style="" x="-103.9453125" y="-39" width="207.890625" height="78"&gt;&lt;/rect&gt;&lt;g class="label" style="" transform="translate(-73.9453125, -24)"&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width="147.890625" height="48"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"&gt;&lt;span class="nodeLabel"&gt;&lt;p&gt;construct check&lt;br&gt;flags both: not clean&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;defs&gt;&lt;filter id="db1408b5f458ee625dark-drop-shadow" height="130%" width="130%"&gt;&lt;feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#FFFFFF"&gt;&lt;/feDropShadow&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;defs&gt;&lt;filter id="db1408b5f458ee625dark-drop-shadow-small" height="150%" width="150%"&gt;&lt;feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#FFFFFF"&gt;&lt;/feDropShadow&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;linearGradient id="db1408b5f458ee625dark-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"&gt;&lt;stop offset="0%" stop-color="#cccccc" stop-opacity="1"&gt;&lt;/stop&gt;&lt;stop offset="100%" stop-color="hsl(180, 0%, 18.3529411765%)" stop-opacity="1"&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;/svg&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;The attack failed
 &lt;div id="the-attack-failed" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-attack-failed" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Problem&lt;/th&gt;
					&lt;th&gt;Model&lt;/th&gt;
					&lt;th&gt;pass@1&lt;/th&gt;
					&lt;th&gt;construct clean&lt;/th&gt;
					&lt;th&gt;verdict&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;conditionals-01-obf&lt;/td&gt;
					&lt;td&gt;claude-haiku-4-5&lt;/td&gt;
					&lt;td&gt;0.85&lt;/td&gt;
					&lt;td&gt;False&lt;/td&gt;
					&lt;td&gt;AI-SOLVABLE&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;conditionals-01-obf-heavy&lt;/td&gt;
					&lt;td&gt;claude-haiku-4-5&lt;/td&gt;
					&lt;td&gt;0.85&lt;/td&gt;
					&lt;td&gt;False&lt;/td&gt;
					&lt;td&gt;AI-SOLVABLE&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Both copies passed at 0.85, slightly above the clean baseline&amp;rsquo;s 0.75 from an earlier run, which I read as ordinary run-to-run drift rather than obfuscation helping. Zero attempts were derailed by the invisible characters in any way I could detect. To be precise about the evidence base, because this is where sweeping claims get made: this is one problem, one model family, two obfuscation recipes, one summer. I am not writing &amp;ldquo;obfuscation cannot fool LLMs&amp;rdquo;. I am writing that these two attempts did not fool this model on these dates, and I did not find the result surprising after watching the same model shrug off paraphrases in both directions all month.&lt;/p&gt;
&lt;p&gt;This is a negative result about the attack. I want to be straight about that. The experiment did not produce a defense, and I was not shopping for one.&lt;/p&gt;

&lt;h2 class="relative group"&gt;The part that worked
 &lt;div id="the-part-that-worked" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-part-that-worked" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The tool runs four offline fairness checks on every problem, no model call involved: the skill must be declared, the entry point must appear in the spec and be exercised by the tests, the spec must be plain ASCII with no hidden characters, and the layout must be free of construct-irrelevant obstacles. The third check exists precisely for this attack. Both sabotaged twins came back &lt;code&gt;construct clean: False&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That flag matters even though the attack failed. Suppose a future model, or a weaker one, had stumbled over the invisible characters and scored 0.10. Without the check, the tool would have printed AI-RESISTANT, and I would have concluded I owned a problem that tests a real skill. The low score would have been fake difficulty, manufactured by tampering that no human student would even experience, since the rendered text looks identical. The construct check is the thing standing between &amp;ldquo;the model lacks this skill&amp;rdquo; and &amp;ldquo;I vandalized the input encoding&amp;rdquo;. A safeguard, not a headline.&lt;/p&gt;
&lt;p&gt;The vocabulary for this comes from measurement theory: construct-irrelevant variance, score movement caused by something other than the skill you claim to measure. Invisible Unicode in a spec is about as construct-irrelevant as variance gets.&lt;/p&gt;

&lt;h2 class="relative group"&gt;The detector connection
 &lt;div id="the-detector-connection" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-detector-connection" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;There is a sibling arms race on the detection side, and the literature on it shaped how I read my own result. Weber-Wulff and colleagues tested fourteen AI text detectors and all fourteen were easy to fool, with the worst errors landing on writers whose first language is not English. Sadasivan and colleagues argue AI text detection cannot be made reliable at scale. I am careful with both claims: fourteen specific detectors, tested in 2023, and I do not extrapolate to detectors released since. But the shape rhymes with my experiment. Tricks aimed at machines tend to wash out against the machines while the collateral lands on humans, and as someone writing in a second language, the collateral pattern in that first study is not abstract to me.&lt;/p&gt;
&lt;p&gt;So my conclusion sits deliberately small. Obfuscating specs did not lower model scores in my two attempts, and any pipeline that reports AI-resistance should check its inputs for tampering before believing its own numbers, because the day the trick does work is the day it silently poisons your metric.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Lessons
 &lt;div id="lessons" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lessons" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Test the attack before trusting the defense. Two obfuscation recipes, twenty attempts each, zero effect on the score.&lt;/li&gt;
&lt;li&gt;A fairness check earns its keep even when the attack fails. Its job is the counterfactual: the day a low score arrives, it tells you whether the difficulty is real.&lt;/li&gt;
&lt;li&gt;Scope your negative results as tightly as your positive ones. One model family, one problem, two recipes. That is the whole claim.&lt;/li&gt;
&lt;li&gt;Machine-versus-machine tricks have a track record of missing the machine and hitting people. Design assessments assuming the trick washes out.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Part 5 leaves the auditing tool and covers the other artifact of this project: a slide deck generator that steals its polish from the official university template, and the eight-inch hexagon gap it shipped with.&lt;/p&gt;

&lt;h2 class="relative group"&gt;References
 &lt;div id="references" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#references" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2306.15666" target="_blank" rel="noreferrer"&gt;Weber-Wulff et al. (2023), &amp;ldquo;Testing of Detection Tools for AI-Generated Text&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2303.11156" target="_blank" rel="noreferrer"&gt;Sadasivan et al. (2023), &amp;ldquo;Can AI-Generated Text be Reliably Detected?&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://doi.org/10.1037/0003-066X.50.9.741" target="_blank" rel="noreferrer"&gt;Messick (1995), &amp;ldquo;Validity of Psychological Assessment&amp;rdquo;&lt;/a&gt; (construct-irrelevant variance)&lt;/li&gt;
&lt;li&gt;Run data: cs1-auditor &lt;code&gt;.runs/*.json&lt;/code&gt;, pulled 2026-08-01&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>