syntaxai/tdd.md · main · public / images / portability-boundary-found.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 720" width="1200" height="720">
<rect width="1200" height="720" fill="#0a0a0a"/>
<!-- Header -->
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace">
<text x="80" y="46" font-size="20" font-weight="600" fill="#909090">Portability-boundary test — data-driven URL refactor</text>
<text x="80" y="92" font-size="32" font-weight="700" fill="#e8e8e8">Predicted 20–30 min. Landed in 21m 23s.</text>
<text x="80" y="120" font-size="14" fill="#7a7a7a">Pattern portable across DATA-DRIVEN refactors. Cost-flattening holds, but the floor is higher than for fixed-enum.</text>
</g>
<!-- Three-row comparison: PR #42 / PR #53 / PR #55 -->
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace" font-size="13" font-weight="600" letter-spacing="2">
<text x="100" y="172" fill="#909090">DIMENSION</text>
<text x="420" y="172" fill="#909090">PR #42 (FIRST)</text>
<text x="650" y="172" fill="#909090">PR #53 (FIXED-ENUM)</text>
<text x="900" y="172" fill="#909090">PR #55 (DATA-DRIVEN)</text>
</g>
<line x1="80" y1="184" x2="1120" y2="184" stroke="#2a2a2a" stroke-width="1"/>
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace" font-size="15">
<text x="100" y="216" fill="#c8c8c8">wall-clock</text>
<text x="420" y="216" fill="#8a8a8a">an evening</text>
<text x="650" y="216" fill="#7ec77e" font-weight="700">8m 8s</text>
<text x="900" y="216" fill="#c89a3a" font-weight="700">21m 23s</text>
<text x="100" y="246" fill="#c8c8c8">helper imports data</text>
<text x="420" y="246" fill="#8a8a8a">none (fixed regex)</text>
<text x="650" y="246" fill="#8a8a8a">none (fixed regex)</text>
<text x="900" y="246" fill="#c89a3a">ALL_POSTS</text>
<text x="100" y="276" fill="#c8c8c8">helper LOC</text>
<text x="420" y="276" fill="#8a8a8a">13</text>
<text x="650" y="276" fill="#8a8a8a">13</text>
<text x="900" y="276" fill="#c89a3a">24 (lookup + slice)</text>
<text x="100" y="306" fill="#c8c8c8">sibling-test cases</text>
<text x="420" y="306" fill="#8a8a8a">9</text>
<text x="650" y="306" fill="#8a8a8a">12</text>
<text x="900" y="306" fill="#c8c8c8">7</text>
<text x="100" y="336" fill="#c8c8c8">migration mechanism</text>
<text x="420" y="336" fill="#8a8a8a">sed (one-liner)</text>
<text x="650" y="336" fill="#8a8a8a">sed (one-liner)</text>
<text x="900" y="336" fill="#c89a3a">Bun script (~50 LOC)</text>
<text x="100" y="366" fill="#c8c8c8">references rewritten</text>
<text x="420" y="366" fill="#8a8a8a">49</text>
<text x="650" y="366" fill="#8a8a8a">~22</text>
<text x="900" y="366" fill="#c8c8c8">173</text>
<text x="100" y="396" fill="#c8c8c8">files touched (migration)</text>
<text x="420" y="396" fill="#8a8a8a">19</text>
<text x="650" y="396" fill="#8a8a8a">17</text>
<text x="900" y="396" fill="#c8c8c8">46</text>
<text x="100" y="426" fill="#c8c8c8">handler complication</text>
<text x="420" y="426" fill="#8a8a8a">drop owner from sig</text>
<text x="650" y="426" fill="#8a8a8a">rename route segment</text>
<text x="900" y="426" fill="#c89a3a">yyyymm spoof-guard</text>
<text x="100" y="456" fill="#c8c8c8">over-rewrite incidents</text>
<text x="420" y="456" fill="#8a8a8a">0</text>
<text x="650" y="456" fill="#8a8a8a">1 (caught + reverted)</text>
<text x="900" y="456" fill="#c89a3a">1 wider (5+ files)</text>
<text x="100" y="486" fill="#c8c8c8">test count delta</text>
<text x="420" y="486" fill="#8a8a8a">+9 (379 → 388)</text>
<text x="650" y="486" fill="#8a8a8a">+12 (407 → 419)</text>
<text x="900" y="486" fill="#c8c8c8">+7 (419 → 426)</text>
<text x="100" y="516" fill="#c8c8c8">verifier verdict</text>
<text x="420" y="516" fill="#7ec77e">7/7 ✓</text>
<text x="650" y="516" fill="#7ec77e">7/7 ✓</text>
<text x="900" y="516" fill="#7ec77e">7/7 ✓</text>
</g>
<!-- Bottom callout -->
<rect x="80" y="552" width="1040" height="148" fill="#101a10" stroke="#1f3f1f" stroke-width="1" rx="6"/>
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace">
<text x="100" y="584" font-size="16" font-weight="600" fill="#7ec77e">Boundary empirically located between PR #53 and PR #55.</text>
<text x="100" y="610" font-size="14" fill="#c8c8c8">FIXED-ENUM refactors land in ~8 min (template copy + slug rename + paste).</text>
<text x="100" y="630" font-size="14" fill="#c8c8c8">DATA-DRIVEN refactors land in ~21 min (template copy + add ALL_POSTS lookup + spoof guard + migration script + over-rewrite recovery).</text>
<text x="100" y="652" font-size="14" fill="#c8c8c8">Both within predicted bands. Both confirm cost-flattening holds across pattern variants. The added 13 minutes is not the</text>
<text x="100" y="672" font-size="14" fill="#c8c8c8">helper (still mechanical) — it's the migration tooling growing to handle 173 references instead of ~22, and one wider sed-collision.</text>
</g>
<!-- Watermark -->
<text x="1120" y="704" text-anchor="end" font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace" font-size="12" fill="#5a5a5a">https://tdd.md</text>
</svg>