1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/0d16c72050851854.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/7ffcc02a3c67389b.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c20e76e7d11dec32.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/59fefb2212bd5b60.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-55b36f0cd6c208fe.js"/>
1<script src="/_next/static/chunks/4bd1b696-100b9d70ed4e49c1.js" async=""></script>
1<script src="/_next/static/chunks/9da6db1e-8a4e8c23641c31bf.js" async=""></script>
1<script src="/_next/static/chunks/1255-a242e0ce0372fddf.js" async=""></script>
1<script src="/_next/static/chunks/main-app-bda8a52fe841b3aa.js" async=""></script>
1<script src="/_next/static/chunks/4554-984b480a9db5f3fe.js" async=""></script>
1<script src="/_next/static/chunks/7563-4dfa0994a9b0e37c.js" async=""></script>
1<script src="/_next/static/chunks/9216-9272709ba40c1cfd.js" async=""></script>
1<script src="/_next/static/chunks/2810-6b74d77b4b0dc790.js" async=""></script>
1<script src="/_next/static/chunks/3091-bf1537ff6571a1bd.js" async=""></script>
1<script src="/_next/static/chunks/app/layout-6ae7b4b583d4bba3.js" async=""></script>
1<script src="/_next/static/chunks/app/not-found-b861935655c5698b.js" async=""></script>
1<script src="/_next/static/chunks/5001-fae0bebdd93f95e3.js" async=""></script>
1<script src="/_next/static/chunks/2423-c8b1388240338d7d.js" async=""></script>
1<script src="/_next/static/chunks/652-f40dcb480b4e356f.js" async=""></script>
1<script src="/_next/static/chunks/app/archive/page-cf30053c25d6ee7f.js" async=""></script>
1<meta name="next-size-adjust" content=""/><title>Archive - Hans L'Hoest</title><meta name="description" content="Archive of all blog posts"/><link rel="canonical" href="https://hans.lhoest.eu/archive"/><meta property="og:title" content="Archive - Hans L'Hoest"/><meta property="og:description" content="Archive of all blog posts"/><meta property="og:url" content="https://hans.lhoest.eu/archive"/><meta property="og:site_name" content="Hans L'Hoest"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Archive - Hans L'Hoest"/><meta name="twitter:description" content="Archive of all blog posts"/><link rel="icon" href="https://cdn.hashnode.com/res/hashnode/image/upload/v1707752725693/i-k76v8Z6.jpg"/>
1<script type="text/javascript">window.addEventListener('message',function(e){var d=e.data;if(!d||d.__hnWidget!==1||typeof d.h!=='number'||d.h<=0)return;var f=document.querySelectorAll('.hn-widget-frame');for(var i=0;i<f.length;i++){if(f[i].contentWindow===e.source){f[i].style.height=d.h+'px';break;}}});</script>
1<script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script>
1</head><body class="__variable_c2612a __variable_246ccd __variable_3069d5 bg-background dark:bg-background"><div hidden=""><!--$--><!--/$--></div>
1<script>((a2, b2, c4, d3, e2, f2, g4, h3) => { 2 let i3 = document.documentElement, j2 = ["light", "dark"]; 3 function k2(b3) { 4 var c5; 5 (Array.isArray(a2) ? a2 : [a2]).forEach((a3) => { 6 let c6 = a3 === "class", d4 = c6 && f2 ? e2.map((a4) => f2[a4] || a4) : e2; 7 c6 ? (i3.classList.remove(...d4), i3.classList.add(f2 && f2[b3] ? f2[b3] : b3)) : i3.setAttribute(a3, b3); 8 }), c5 = b3, h3 && j2.includes(c5) && (i3.style.colorScheme = c5); 9 } 10 if (d3) k2(d3); 11 else try { 12 let a3 = localStorage.getItem(b2) || c4, d4 = g4 && a3 === "system" ? window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light" : a3; 13 k2(d4); 14 } catch { 15 } 16 })("class","theme","system",null,["light","dark"],null,true,true)</script>
16<main id="main-content" class="min-h-screen bg-background dark:bg-background"><header class="sticky top-0 z-50 w-full py-4 bg-background backdrop-blur-sm transition-transform duration-300 translate-y-0"><a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:left-4 focus:top-4 focus:z-50 focus:rounded-md focus:bg-background focus:px-4 focus:py-2 focus:text-sm focus:shadow">Skip to main content</a><div class="relative w-full mx-auto xl:max-w-[80rem] 2xl:max-w-[90rem] px-4 sm:px-12 md:px-18 lg:px-16 xl:px-10"><div class="flex items-center justify-between gap-3 xl:hidden"><div class="flex items-center gap-3 min-w-0 flex-1"><a title="Hans L'Hoest" class="text-lg font-semibold text-foreground truncate min-w-0" href="/">Hans L'Hoest</a></div><div class="flex items-center gap-2 shrink-0"><button class="gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent py-2 h-9 w-9 px-0 flex items-center justify-center text-muted-foreground hover:text-foreground bg-transparent border-border shadow-none" aria-label="Open search (press Control or Command and K)"><i class="fa-jelly fa-search text-sm" aria-hidden="true"></i><span class="sr-only">Open search (press Control or Command and K)</span></button><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent w-9 px-3 h-9 text-muted-foreground hover:text-foreground shadow-none" type="button" id="radix-_R_19ianpfalb_" aria-haspopup="menu" aria-expanded="false" data-state="closed" data-slot="dropdown-menu-trigger"><i class="fa-jelly fa-sun text-sm scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" aria-hidden="true"></i><i class="fa-jelly fa-moon absolute text-sm scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" aria-hidden="true"></i><span class="sr-only">Toggle theme</span></button><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input bg-background hover:bg-accent hover:text-accent-foreground py-2 h-9 w-10 px-0 shadow-none" type="button" aria-haspopup="dialog" aria-expanded="false" aria-controls="radix-_R_1pianpfalb_" data-state="closed" data-slot="sheet-trigger"><i class="fa-jelly fa-bars" aria-hidden="true"></i><span class="sr-only">Open menu</span></button></div></div><div class="hidden xl:grid gap-4 items-center xl:grid-cols-[1fr_auto_1fr] xl:gap-6 max-w-full xl:mx-auto xl:max-w-[80rem] 2xl:max-w-[90rem]"><div class="flex items-center w-full gap-3 min-w-0"><p class="font-semibold text-foreground min-w-0 truncate text-lg sm:text-xl"><a title="Hans L'Hoest" href="/">Hans L'Hoest</a></p></div><div></div><div class="flex items-center justify-end gap-3 text-muted-foreground"><button class="gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent py-2 h-9 w-9 px-0 flex items-center justify-center text-muted-foreground hover:text-foreground bg-transparent border-border shadow-none" aria-label="Open search (press Control or Command and K)"><i class="fa-jelly fa-search text-sm" aria-hidden="true"></i><span class="sr-only">Open search (press Control or Command and K)</span></button><div class="flex items-center gap-3"><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focu
16s-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent w-9 px-3 h-9 text-muted-foreground hover:text-foreground shadow-none" type="button" id="radix-_R_3eianpfalb_" aria-haspopup="menu" aria-expanded="false" data-state="closed" data-slot="dropdown-menu-trigger"><i class="fa-jelly fa-sun text-sm scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" aria-hidden="true"></i><i class="fa-jelly fa-moon absolute text-sm scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" aria-hidden="true"></i><span class="sr-only">Toggle theme</span></button></div></div></div></div></header><div data-slot="dialog-header" class="flex flex-col gap-2 text-center sm:text-left sr-only"><h2 id="radix-_R_4anpfalbH1_" data-slot="dialog-title" class="text-lg leading-none font-semibold">Command Palette</h2><p id="radix-_R_4anpfalbH2_" data-slot="dialog-description" class="text-muted-foreground text-sm">Search for a command to run...</p></div><div class="px-4 sm:px-8"><div class="w-full xl:mx-auto xl:max-w-[80rem] 2xl:max-w-[90rem]"><div class="space-y-8 max-w-4xl w-full mx-auto pt-2 sm:pt-10 pb-16"><header class="space-y-3 text-center"><h1 id="archive-heading" class="text-3xl sm:text-4xl font-bold tracking-tight text-balance text-foreground">Archive</h1><p class="text-sm text-muted-foreground">35<!-- --> <!-- -->posts<!-- --> published so far</p></header><section aria-labelledby="archive-heading"><ol class="space-y-0 list-none p-0 border border-border rounded-lg overflow-hidden"><li class="list-none"><article aria-labelledby="archive-post-696e1f49408873ab1698a14a" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/the-unification-of-commands-and-skills-in-claude-code"><time dateTime="2026-01-19T12:10:49.633Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Jan 19, 2026</time><div class="flex-1 min-w-0"><h2 id="archive-post-696e1f49408873ab1698a14a" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">The Unification of Commands and Skills in Claude Code</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6966a7fad64630736a139ce0" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/agent-chisels-my-llm-agent-skills-and-workflows"><time dateTime="2026-01-13T20:15:54.890Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Jan 13, 2026</time><div class="flex-1 min-w-0"><h2 id="archive-post-6966a7fad64630736a139ce0" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Agent Chisels: My LLM Agent Skills and Workflows</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6966a938d64630736a139ce6" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/my-best-technical-decision-of-2025-moving-to-proton-for-peace-of-mind"><time dateTime="2025-12-22T23:00:00.000Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Dec 22, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-6966a938d64630736a139ce6" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">My Best Technical Decision of 2025: Moving to Proton for Peace of Mind</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6946b49f8e28b52e8a9fdb68" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/implementing-an-urgent-feature-with-opencode-claude-and-zed"><time dateTime="2025-12-17T23:00:00.000Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Dec 17, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-6946b49f8e28b52e8a9fdb68" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Implementing an Urgent Feature with Opencode, Claude, and Zed</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6966a8d079641da13973fea5" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/til-rules-to-remember"><time dateTime="2025-12-15T23:00:00.000Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Dec 15, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-6966a8d079641da13973fea5" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">TIL rules to remember</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-68e77de17fe332d3ff45be2a" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/dora-research-evidence-based-and-scientifically-groun
16ded-software-engineering"><time dateTime="2025-10-09T09:18:25.225Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Oct 9, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-68e77de17fe332d3ff45be2a" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">DORA Research: Evidence-Based and Scientifically Grounded Software Engineering</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6966aa1a98812ba1fe2bf5c6" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/my-agentic-coding-stack-for-october-2025"><time dateTime="2025-10-05T22:00:00.000Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Oct 5, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-6966aa1a98812ba1fe2bf5c6" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">My agentic coding stack for October 2025</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-68b6a624f790221b7d5295fc" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/grounded-decision-records-from-ai-conversations"><time dateTime="2025-09-02T08:09:08.602Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Sep 2, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-68b6a624f790221b7d5295fc" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Grounded decision records from AI conversations</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-68a8c5f8af5fc29389f2bddb" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/examples-of-using-claude-codes-output-styles"><time dateTime="2025-08-22T19:33:12.263Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Aug 22, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-68a8c5f8af5fc29389f2bddb" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Examples of using Claude Code's output styles</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-68a8c25053869f04efe845e7" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/how-to-use-jujutsu-jj-with-claude-code"><time dateTime="2025-08-22T19:17:36.468Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Aug 22, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-68a8c25053869f04efe845e7" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">How to Use Jujutsu (jj) with Claude Code</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-68a857004a7dd86cd015268c" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/remove-claude-code-branding-from-commit-messages-using-output-styles"><time dateTime="2025-08-22T11:39:44.162Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Aug 22, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-68a857004a7dd86cd015268c" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Remove Claude Code branding from commit messages using output styles</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-68a837b71fe75619a3bc39a6" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/claude-code-output-styles"><time dateTime="2025-08-22T09:26:15.530Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Aug 22, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-68a837b71fe75619a3bc39a6" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Output Styles in Claude Code</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-688741671db00348fa2b28fc" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/groun
16ding-ai-instructions-in-living-documentation"><time dateTime="2025-07-28T09:22:47.977Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Jul 28, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-688741671db00348fa2b28fc" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Grounding AI Instructions in Living Documentation</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-68660f383c7036692178cead" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/using-code-coverage-as-a-check-for-test-refactoring"><time dateTime="2025-07-03T05:03:52.130Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Jul 3, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-68660f383c7036692178cead" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Using Code Coverage as a Check for Test Refactoring</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-685ed80299d55fa4bd92ff45" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/rust-code-coverage-use-llvm-cov-over-tarpaulin"><time dateTime="2025-06-27T17:42:26.668Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Jun 27, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-685ed80299d55fa4bd92ff45" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Rust code coverage: use 'llvm-cov' over 'tarpaulin'</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-685d0497984535ec4e70f6e4" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/test-naming-guidelines"><time dateTime="2025-06-26T08:28:07.010Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Jun 26, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-685d0497984535ec4e70f6e4" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Test Naming Guidelines</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-685cfc2db497f1f632bfb155" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/rust-when-cargo-code-coverage-works-locally-but-fails-in-ci"><time dateTime="2025-06-26T07:52:13.348Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Jun 26, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-685cfc2db497f1f632bfb155" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Rust: When Cargo Code Coverage Works Locally But Fails in CI</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-67e2b183aa5b5375aa261bcb" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/continuous-deployment-for-personal-cli-tools"><time dateTime="2025-03-25T13:37:07.305Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Mar 25, 2025</time><div class="flex-1 min-w-0"><h2 id="archive-post-67e2b183aa5b5375aa261bcb" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Continuous Deployment for Personal CLI Tools</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-675964d3f97bc4eea948ba7c" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/groun
16d-your-adrs-with-a-verification-section"><time dateTime="2024-12-11T10:09:23.309Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Dec 11, 2024</time><div class="flex-1 min-w-0"><h2 id="archive-post-675964d3f97bc4eea948ba7c" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Ground Your ADRs with a Verification Section</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6752efe53b82418f97037d79" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/notes-on-preparatory-refactoring"><time dateTime="2024-12-06T12:36:53.970Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Dec 6, 2024</time><div class="flex-1 min-w-0"><h2 id="archive-post-6752efe53b82418f97037d79" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Notes on Preparatory Refactoring</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6746f909df8dc2b9c2298d88" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/less-mentioned-benefits-of-architecture-decision-records"><time dateTime="2024-11-27T10:48:41.852Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Nov 27, 2024</time><div class="flex-1 min-w-0"><h2 id="archive-post-6746f909df8dc2b9c2298d88" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Less Mentioned Benefits of Architecture Decision Records</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6735c24402d1a21e671af0c6" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/notes-on-tdd-where-did-it-all-go-wrong"><time dateTime="2024-11-14T09:26:28.316Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Nov 14, 2024</time><div class="flex-1 min-w-0"><h2 id="archive-post-6735c24402d1a21e671af0c6" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Notes on ð TDD, Where Did It All Go Wrong</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6735b937ad76894d3b794d2d" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/notes-on-tdd-ddd-from-the-ground-up-live-coding"><time dateTime="2024-11-14T08:47:51.946Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Nov 14, 2024</time><div class="flex-1 min-w-0"><h2 id="archive-post-6735b937ad76894d3b794d2d" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Notes on TDD & DDD From the Ground Up Live Coding</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6642f078d520666bd0889e19" class="border-b border-border"><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/how-to-extract-all-todos-from-code-using-scala-cli"><time dateTime="2024-05-14T05:02:48.196Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">May 14, 2024</time><div class="flex-1 min-w-0"><h2 id="archive-post-6642f078d520666bd0889e19" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">How to extract all TODOs from code using Scala-CLI</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li><li class="list-none"><article aria-labelledby="archive-post-6625fd7d685af5536a27f4a2" class=""><a class="flex items-center gap-4 p-4 hover:bg-muted transition-colors group" href="/slice-work-into-smaller-prioritised-deliverables-instead-of-using-story-points"><time dateTime="2024-04-22T06:02:37.219Z" class="text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20">Apr 22, 2024</time><div class="flex-1 min-w-0"><h2 id="archive-post-6625fd7d685af5536a27f4a2" class="text-base font-medium text-foreground group-hover:text-primary transition-colors break-words">Slice Work into Smaller, Prioritised Deliverables instead of using Story Points</h2><p class="text-sm text-muted-foreground mt-1">Hans L'Hoest</p></div></a></article></li></ol></section></div><nav class="flex items-center justify-center gap-2 py-8" aria-label="Pagination"><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focu
16s-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground rounded-md text-xs h-9 px-3" disabled=""><i class="fa-jelly fa-angle-left mr-2" aria-hidden="true"></i>Previous</button><div class="hidden sm:flex items-center gap-1"><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground shadow-sm hover:bg-primary/90 rounded-md text-xs h-9 w-9 px-0" disabled=""><span>1</span></button><a class="inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground rounded-md text-xs h-9 w-9 px-0" href="/archive?page=2">2</a></div><div class="flex sm:hidden items-center px-3 py-1 text-sm text-muted-foreground">Page <!-- -->1<!-- --> of <!-- -->2</div><a class="inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground rounded-md text-xs h-9 px-3" href="/archive?page=2">Next<i class="fa-jelly fa-angle-right ml-2" aria-hidden="true"></i></a></nav></div></div>
16<script type="application/ld+json">{"@context":"https://schema.org","@type":"CollectionPage","name":"Archive - Hans L'Hoest","url":"https://hans.lhoest.eu/archive","mainEntityOfPage":"https://hans.lhoest.eu/archive","description":"Archive of all posts published on Hans L'Hoest","publisher":{"@type":"Organization","name":"Hans L'Hoest","url":"https://hans.lhoest.eu"},"hasPart":[{"@type":"Article","headline":"The Unification of Commands and Skills in Claude Code","url":"https://hans.lhoest.eu/the-unification-of-commands-and-skills-in-claude-code"},{"@type":"Article","headline":"Agent Chisels: My LLM Agent Skills and Workflows","url":"https://hans.lhoest.eu/agent-chisels-my-llm-agent-skills-and-workflows"},{"@type":"Article","headline":"My Best Technical Decision of 2025: Moving to Proton for Peace of Mind","url":"https://hans.lhoest.eu/my-best-technical-decision-of-2025-moving-to-proton-for-peace-of-mind"},{"@type":"Article","headline":"Implementing an Urgent Feature with Opencode, Claude, and Zed","url":"https://hans.lhoest.eu/implementing-an-urgent-feature-with-opencode-claude-and-zed"},{"@type":"Article","headline":"TIL rules to remember","url":"https://hans.lhoest.eu/til-rules-to-remember"},{"@type":"Article","headline":"DORA Research: Evidence-Based and Scientifically Grounded Software Engineering","url":"https://hans.lhoest.eu/dora-research-evidence-based-and-scientifically-grounded-software-engineering"},{"@type":"Article","headline":"My agentic coding stack for October 2025","url":"https://hans.lhoest.eu/my-agentic-coding-stack-for-october-2025"},{"@type":"Article","headline":"Grounded decision records from AI conversations","url":"https://hans.lhoest.eu/grounded-decision-records-from-ai-conversations"},{"@type":"Article","headline":"Examples of using Claude Code's output styles","url":"https://hans.lhoest.eu/examples-of-using-claude-codes-output-styles"},{"@type":"Article","headline":"How to Use Jujutsu (jj) with Claude Code","url":"https://hans.lhoest.eu/how-to-use-jujutsu-jj-with-claude-code"},{"@type":"Article","headline":"Remove Claude Code branding from commit messages using output styles","url":"https://hans.lhoest.eu/remove-claude-code-branding-from-commit-messages-using-output-styles"},{"@type":"Article","headline":"Output Styles in Claude Code","url":"https://hans.lhoest.eu/claude-code-output-styles"},{"@type":"Article","headline":"Grounding AI Instructions in Living Documentation","url":"https://hans.lhoest.eu/grounding-ai-instructions-in-living-documentation"},{"@type":"Article","headline":"Using Code Coverage as a Check for Test Refactoring","url":"https://hans.lhoest.eu/using-code-coverage-as-a-check-for-test-refactoring"},{"@type":"Article","headline":"Rust code coverage: use 'llvm-cov' over 'tarpaulin'","url":"https://hans.lhoest.eu/rust-code-coverage-use-llvm-cov-over-tarpaulin"},{"@type":"Article","headline":"Test Naming Guidelines","url":"https://hans.lhoest.eu/test-naming-guidelines"},{"@type":"Article","headline":"Rust: When Cargo Code Coverage Works Locally But Fails in CI","url":"https://hans.lhoest.eu/rust-when-cargo-code-coverage-works-locally-but-fails-in-ci"},{"@type":"Article","headline":"Continuous Deployment for Personal CLI Tools","url":"https://hans.lhoest.eu/continuous-deployment-for-personal-cli-tools"},{"@type":"Article","headline":"Ground Your ADRs with a Verification Section","url":"https://hans.lhoest.eu/ground-your-adrs-with-a-verification-section"},{"@type":"Article","headline":"Notes on Preparatory Refactoring","url":"https://hans.lhoest.eu/notes-on-preparatory-refactoring"},{"@type":"Article","headline":"Less Mentioned Benefits of Architecture Decision Records","url":"https://hans.lhoest.eu/less-mentioned-benefits-of-architecture-decision-records"},{"@type":"Article","headline":"Notes on ð TDD, Where Did It All Go Wrong","url":"https://hans.lhoest.eu/notes-on-tdd-where-did-it-all-go-wrong"},{"@type":"Article","headline":"Notes on TDD & DDD From the Ground Up Live Coding","url":"https://hans.lhoest.eu/notes-on-tdd-ddd-from-the-ground-up-live-coding"},{"@type":"Article","headline":"How to extract all TODOs from code using Scala-CLI","url":"https://hans.lhoest.eu/how-to-extract-all-todos-from-code-using-scala-cli"},{"@type":"Article","headline":"Slice Work into Smaller, Prioritised Deliverables instead of using Story Points","url":"https://hans.lhoest.eu/slice-work-into-smaller-prioritised-deliverables-instead-of-using-story-points"}]}</script>
16<footer class="px-4 pt-8 pb-20 sm:px-8 text-muted-foreground" aria-label="Footer"><div class="w-full max-w-4xl mx-auto"><div class="flex flex-col items-center gap-4 text-center text-sm"><p class="font-medium"><time dateTime="2026"><span class="font-sans">©</span> <!-- -->2026</time> <!-- -->Hans L'Hoest</p><nav aria-label="Footer navigation"><ul class="flex flex-wrap justify-center gap-4 text-sm tracking-wide"><li><a class="transition hover:text-foreground" href="/members">Members</a></li><li><a class="transition hover:text-foreground" href="/archive">Archive</a></li><li><a class="transition hover:text-foreground" target="_blank" rel="noopener" href="https://hashnode.com/privacy-policy">Privacy</a></li><li><a class="transition hover:text-foreground" target="_blank" rel="noopener" href="https://hashnode.com/terms">Terms</a></li></ul></nav><div class="pt-8 flex justify-center gap-6"><a target="_blank" rel="noopener" class="flex items-center gap-2 text-sm transition hover:text-foreground" title="Sitemap" href="/sitemap.xml"><i class="fa-regular fa-sitemap"></i><span>Sitemap</span></a><a target="_blank" rel="noopener" class="flex items-center gap-2 text-sm transition hover:text-foreground" title="RSS Feed" href="/rss.xml"><i class="fa-regular fa-rss"></i><span>RSS</span></a></div></div></div></footer></main><!--$--><!--/$-->
16<script src="/_next/static/chunks/webpack-55b36f0cd6c208fe.js" id="_R_" async=""></script>
16<script>(self.__next_f=self.__next_f||[]).push([0])</script>
16<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[16174,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"ThemeProvider\"]\n3:I[82180,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"TooltipProvider\"]\n4:I[63851,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"UrqlProvider\"]\n5:I[82714,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"ConsentManager\"]\n6:I[9766,[],\"\"]\n7:I[98924,[],\"\"]\n8:I[33293,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"4345\",\"static/chunks/app/not-found-b861935655c5698b.js\"],\"default\"]\n9:I[21447,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"Integrations\"]\na:I[35514,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"Analytics\"]\nc:I[24431,[],\"OutletBoundary\"]\ne:I[15278,[],\"AsyncMetadataOutlet\"]\n10:I[24431,[],\"ViewportBoundary\"]\n12:I[24431,[],\"MetadataBoundary\"]\n13:\"$Sreact.suspense\"\n15:I[57150,[],\"\"]\n:HL[\"/_next/static/media/22a5144ee8d83bca-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/72a2a501b11d0ccb.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/8934b430a4adeb19-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/8e9860b6e62d6359-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/c4b700dcb2187787-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/0d16c72050851854.css\",\"style\"]\n:HL[\"/_next/static/css/7ffcc02a3c67389b.css\",\"style\"]\n:HL[\"/_next/static/css/c20e76e7d11dec32.css\",\"style\"]\n:HL[\"/_next/static/css/59fefb2212bd5b60.css\",\"style\"]\n0:{\"P\":null,\"b\":\"RrCGzNVHUG674hJ_sjvms\",\"p\":\"\",\"c\":[\"\",\"archive?x-host=hans.lhoest.eu\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"archive\",{\"children\":[\"__PAGE__?{\\\"x-host\\\":\\\"hans.lhoest.eu\\\"}\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/0d16c72050851854.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/7ffcc02a3c67389b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c20e76e7d11dec32.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/59fefb2212bd5b60.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script"])</script>
16<script>self.__next_f.push([1,"\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"window.addEventListener('message',function(e){var d=e.data;if(!d||d.__hnWidget!==1||typeof d.h!=='number'||d.h\u003c=0)return;var f=document.querySelectorAll('.hn-widget-frame');for(var i=0;i\u003cf.length;i++){if(f[i].contentWindow===e.source){f[i].style.height=d.h+'px';break;}}});\"}}]}],[\"$\",\"body\",null,{\"className\":\"__variable_c2612a __variable_246ccd __variable_3069d5 bg-background dark:bg-background\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"system\",\"enableSystem\":true,\"disableTransitionOnChange\":true,\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"children\":[[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L8\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L9\",null,{}],[\"$\",\"$La\",null,{}]]}]}]}]}]}]]}]]}],{\"children\":[\"archive\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$Lb\",null,[\"$\",\"$Lc\",null,{\"children\":[\"$Ld\",[\"$\",\"$Le\",null,{\"promise\":\"$@f\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L10\",null,{\"children\":\"$L11\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L12\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$13\",null,{\"fallback\":null,\"children\":\"$L14\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$15\",[]],\"s\":false,\"S\":false}\n11:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nd:null\n16:I[80622,[],\"IconMark\"]\nf:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Archive - Hans L'Hoest\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Archive of all blog posts\"}],[\"$\",\"link\",\"2\",{\"rel\":\"canonical\",\"href\":\"https://hans.lhoest.eu/archive\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:title\",\"content\":\"Archive - Hans L'Hoest\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:description\",\"content\":\"Archive of all blog posts\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:url\",\"content\":\"https://hans.lhoest.eu/archive\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:site_name\",\"content\":\"Hans L'Hoest\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"8\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"9\",{\"name\":\"twitter:title\",\"content\":\"Archive - Hans L'Hoest\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:description\",\"content\":\"Archive of all blog posts\"}],[\"$\",\"link\",\"11\",{\"rel\":\"icon\",\"href\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1707752725693/i-k76v8Z6.jpg\"}],[\"$\",\"$L16\",\"12\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n14:\"$f:metadata\"\n17:I[652,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"5001\",\"static/chunks/5001-fae0bebdd93f95e3.js\",\"2423\",\"static/chunks/2423-c8b1388240338d7d.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"652\",\"static/chunks/652-f40dcb480b4e356f.js\",\"5635\",\"static/chunks/app/archive/page-cf30053c25d6ee7f.js\"],\"BlogHeader\"]\nb:[\"$\",\"main\",null,{\"id\":\"main-content\",\"className\":\"min-h-screen bg-background dark:bg-background\",\"children\":[[\"$\",\"$L17\",null,{\"publication\":{\"__typename\":\"Publication\",\"id\":\"655cad6b619610754e1b95b9\",\"url\":\"https://hans.lhoest.eu\",\"canonicalURL\":\"https://hans.lhoest.eu\",\"urlPattern\":\"simple\",\"title\":\"Hans L'Hoest\",\"displayTitle\":null,\"hasBadges\":true,\"descriptionSEO\":null,\"seo\":{\"title\":null,\"description\":null,\"__typename\":\"SEO\"},\"publicMembers\":{\"totalDocuments\":1,\"__typename\":\"PublicMembers\"},\"about\":null,\"features\":{\"proTeam\":{\"isEnabled\":false,\"__typename\":\"ProTeamFeature\"},\"newsletter\":{\"isEnabled\":true,\"__"])</script>
16<script>self.__next_f.push([1,"typename\":\"NewsletterFeature\"},\"viewCount\":{\"isEnabled\":false,\"__typename\":\"ViewCountFeature\"},\"readTime\":{\"isEnabled\":true,\"__typename\":\"ReadTimeFeature\"},\"textSelectionSharer\":{\"isEnabled\":true,\"__typename\":\"TextSelectionSharerFeature\"},\"gptBotCrawling\":{\"__typename\":\"GPTBotCrawlingFeature\",\"isEnabled\":true},\"headlessCMS\":{\"isEnabled\":false,\"__typename\":\"HeadlessCMSFeature\"},\"__typename\":\"PublicationFeatures\"},\"aeoSettings\":{\"isEnabled\":false,\"llmsTxtEnabled\":true,\"crawlers\":{\"gptBot\":true,\"claudeBot\":true,\"perplexityBot\":true,\"googleExtended\":true,\"ccBot\":true,\"__typename\":\"AeoCrawlerSettings\"},\"__typename\":\"PublicationAeoSettings\"},\"metaTags\":null,\"ogMetaData\":{\"image\":null,\"__typename\":\"OpenGraphMetaData\"},\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"name\":\"Hans L'Hoest\",\"username\":\"hanlho\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\"},\"preferences\":{\"__typename\":\"PublicationPreferences\",\"logo\":null,\"dar
16kMode\":{\"__typename\":\"DarkModePreferences\",\"logo\":null,\"enabled\":false},\"navbarItems\":[],\"enabledPages\":{\"__typename\":\"EnabledPages\",\"badges\":true,\"newsletter\":true,\"members\":true},\"layout\":\"stacked\",\"disableFooterBranding\":true,\"isSubscriptionModalDisabled\":true},\"favicon\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1707752725693/i-k76v8Z6.jpg\",\"headerColor\":null,\"integrations\":{\"fbPixelID\":null,\"fathomSiteID\":null,\"fathomCustomDomainEnabled\":false,\"fathomCustomDomain\":null,\"hotjarSiteID\":null,\"matomoSiteID\":null,\"matomoURL\":null,\"gaTrackingID\":null,\"gTagManagerID\":null,\"plausibleAnalyticsEnabled\":false,\"wmPaymentPointer\":null,\"koalaPublicKey\":null,\"msClarityID\":null,\"openPanelClientId\":null,\"consentManagement\":{\"enabled\":false,\"version\":1,\"privacyPolicyURL\":null,\"__typename\":\"ConsentManagement\"},\"__typename\":\"PublicationIntegrations\"},\"imprintV2\":null,\"postsCount\":{\"totalDocuments\":35,\"__typename\":\"PostConnection\"},\"isTeam\":true,\"links\":{\"twitter\":null,\"instagram\":null,\"github\":\"https://github.com/lhohan\",\"website\":\"https://hans.lhoest.eu\",\"hashnode\":\"https://hashnode.com/@hanlho\",\"youtube\":null,\"dailydev\":null,\"linkedin\":\"https://www.linkedin.com/in/hanlho\",\"mastodon\":\"https://mas.to/@hanlho\",\"facebook\":null,\"bluesky\":\"https://bsky.app/profile/hanlho.com\",\"__typename\":\"PublicationLinks\"},\"domainInfo\":{\"__typename\":\"DomainInfo\",\"hashnodeSubdomain\":\"hanlho\",\"domain\":{\"__typename\":\"Domain\",\"host\":\"hans.lhoest.eu\",\"ready\":true},\"wwwPrefixedDomain\":null},\"redirectionRules\":[{\"source\":\"/fizzbuzz-functional-fun\",\"destination\":\"/fizzbuzz-functional-fun-in-scala\",\"type\":301,\"__typename\":\"RedirectionRule\"},{\"source\":\"/test-naming-guidelines-also-usable-to-instruct-llms\",\"destination\":\"/test-naming-guidelines\",\"type\":301,\"__typename\":\"RedirectionRule\"},{\"source\":\"/examples-of-using-claude-codes-output-stules\",\"destination\":\"/examples-of-using-claude-codes-output-styles\",\"type\":301,\"__typename\":\"RedirectionRule\"}],\"customRules\":[],\"totalRecommendedPublications\":0,\"allowContributorEdits\":false,\"posts\":{\"edges\":[{\"node\":{\"__typename\":\"Post\",\"id\":\"696e1f49408873ab1698a14a\",\"title\":\"The Unification of Commands and Skills in Claude Code\",\"slug\":\"the-unification-of-commands-and-skills-in-claude-code\",\"publishedAt\":\"2026-01-19T12:10:49.633Z\",\"cuid\":\"cmkl4iyld000h02le56b4aizd\",\"url\":\"https://hans.lhoest.eu/the-unification-of-commands-and-skills-in-claude-code\",\"subtitle\":null,\"brief\":\"In Claude Code, a skill is a modular function-like component that can process requests â like /code-review or /commit. As of version 2.1.1, these skills can be directly invoked through slash commands. So a code-review skill can also be invoked direct...\",\"readTimeInMinutes\":7,\"views\":7,\"tags\":[{\"id\":\"6836c8089bdd890f147ff156\",\"slug\":\"claude-code\",\"name\":\"claude-code\",\"__typename\":\"Tag\"},{\"id\":\"576b3918decdd3bf3610c80b\",\"slug\":\"skills\",\"name\":\"skills\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\""])</script>
16<script>self.__next_f.push([1,"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"1\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6966a7fad64630736a139ce0\",\"title\":\"Agent Chisels: My LLM Agent Skills and Workflows\",\"slug\":\"agent-chisels-my-llm-agent-skills-and-workflows\",\"publishedAt\":\"2026-01-13T20:15:54.890Z\",\"cuid\":\"cmkd17ocq000102jpav9p6y9g\",\"url\":\"https://hans.lhoest.eu/agent-chisels-my-llm-agent-skills-and-workflows\",\"subtitle\":null,\"brief\":\"I have been meaning to share more about my LLM workflows and tooling for a while, partly to have a reference for conversations, but mostly to learn in public.\\nAgent Chisels is where I will be sharing the custom artefacts (primarily skills, with comma...\",\"readTimeInMinutes\":3,\"views\":5,\"tags\":[{\"id\":\"6836c8089bdd890f147ff156\",\"slug\":\"claude-code\",\"name\":\"claude-code\",\"__typename\":\"Tag\"},{\"id\":\"63ec0c658dd6c5e9122eadc4\",\"slug\":\"ai-agents\",\"name\":\"ai agents\",\"__typename\":\"Tag\"},{\"id\":\"635ad52efe8087002dee4707\",\"slug\":\"llm\",\"name\":\"llm\",\"__typename\":\"Tag\"},{\"id\":\"65b0269d3ed29087ca31d7d1\",\"slug\":\"opencode\",\"name\":\"opencode\",\"__typename\":\"Tag\"},{\"id\":\"62e222060b03c4b2903a7ecc\",\"slug\":\"adr\",\"name\":\"ADR\",\"__typename\":\"Tag\"},{\"id\":\"62a5e3c1165482d2b3eee034\",\"slug\":\"jj\",\"name\":\"jj\",\"__typename\":\"Tag\"},{\"id\":\"68a8c63b46301ec0d97ad549\",\"slug\":\"jujutsu\",\"name\":\"jujutsu\",\"__typename\":\"Tag\"},{\"id\":\"5cf2dc8d994bbf330a1f82cd\",\"slug\":\"developer-experience\",\"name\":\"developer experience\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"2\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6966a938d64630736a139ce6\",\"title\":\"My Best Technical Decision of 2025: Moving to Proton for Peace of Mind\",\"slug\":\"my-best-technical-decision-of-2025-moving-to-proton-for-peace-of-mind\",\"publishedAt\":\"2025-12-22T23:00:00.000Z\",\"cuid\":\"cmkd1ehgu000202jpgyt47r8w\",\"url\":\"https://hans.lhoest.eu/my-best-technical-decision-of-2025-moving-to-proton-for-peace-of-mind\",\"subtitle\":null,\"brief\":\"This year I bit the bullet and moved mail, calendar and drive from Google to Proton. Knowing that my family is not being profiled when, for example, I plan a doctor's appointment feels liberating.\\nSure, there were fun and useful technical improvement...\",\"readTimeInMinutes\":3,\"views\":3,\"tags\":[{\"id\":\"643d8d89a75bf124a0d202fb\",\"slug\":\"proton\",\"name\":\"Proton\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b952fc\",\"slug\":\"privacy\",\"name\":\"privacy\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"3\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6946b49f8e28b52e8a9fdb68\",\"title\":\"Implementing an Urgent Feature with Opencode, Claude, and Zed\",\"slug\":\"implementing-an-urgent-feature-with-opencode-claude-and-zed\",\"publishedAt\":\"2025-12-17T23:00:00.000Z\",\"cuid\":\"cmjeejt56000702l7gbke4fow\",\"url\":\"https://hans.lhoest.eu/implementing-an-urgent-feature-with-opencode-claude-and-zed\",\"subtitle\":null,\"brief\":\"This is a short post to share a positive experience I had using an LLM agent to quickly add a feature to an existing personal CLI time-tracking application. Below, I describe how I added it using Zed, Opencode and Claude.\\nTo start, I wasn't even sure...\",\"readTimeInMinutes\":5,\"views\":14,\"tags\":[{\"id\":\"6946b49ff419fabe34a6374c\",\"slug\":\"testing-dsl\",\"name\":\"testing dsl\",\"__typename\":\"Tag\"},{\"id\":\"65b0269d3ed29087ca31d7d1\",\"slug\":\"opencode\",\"name\":\"opencode\",\"__typename\":\"Tag\"},{\"id\":\"635ad52efe8087002dee4707\",\"slug\":\"llm\",\"name\":\"llm\",\"__typename\":\"Tag\"},{\"id\":\"6836c8"])</script>
16<script>self.__next_f.push([1,"089bdd890f147ff156\",\"slug\":\"claude-code\",\"name\":\"claude-code\",\"__typename\":\"Tag\"},{\"id\":\"64428046a75bf124a0e99dc0\",\"slug\":\"zed\",\"name\":\"Zed\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"4\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6966a8d079641da13973fea5\",\"title\":\"TIL rules to remember\",\"slug\":\"til-rules-to-remember\",\"publishedAt\":\"2025-12-15T23:00:00.000Z\",\"cuid\":\"cmkd1c9d2000302lba5h23zst\",\"url\":\"https://hans.lhoest.eu/til-rules-to-remember\",\"subtitle\":null,\"brief\":\"I have been writing \\\"Today I Learned\\\" posts (TILs) for a few weeks now and I started writing them as a complement to long form blogging. But I found myself spending 45-60 minutes, sometimes longer, per TIL instead of 15-25. This defeated the purpose ...\",\"readTimeInMinutes\":1,\"views\":3,\"tags\":[{\"id\":\"5674471d958ef13879b9477e\",\"slug\":\"writing\",\"name\":\"writing\",\"__typename\":\"Tag\"},{\"id\":\"5d93238ce235795f6eb6dd79\",\"slug\":\"til\",\"name\":\"TIL\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"5\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"68e77de17fe332d3ff45be2a\",\"title\":\"DORA Research: Evidence-Based and Scientifically Grounded Software Engineering\",\"slug\":\"dora-research-evidence-based-and-scientifically-grounded-software-engineering\",\"publishedAt\":\"2025-10-09T09:18:25.225Z\",\"cuid\":\"cmgj7gcsp000j02l48vax4emk\",\"url\":\"https://hans.lhoest.eu/dora-research-evidence-based-and-scientifically-grounded-software-engineering\",\"subtitle\":null,\"brief\":\"Years ago, the book Accelerate changed my view on software development and delivery fundamentally.\\nOf course, there are its findings (dare I say 'revolutionary'?) on which technical and organisational factors drive high performance software delivery....\",\"readTimeInMinutes\":1,\"views\":8,\"tags\":[{\"id\":\"65e1cc0ce6e1e2d4a839a01c\",\"slug\":\"dora\",\"name\":\"dora\",\"__typename\":\"Tag\"},{\"id\":\"662091a8fc66a629c162e40e\",\"slug\":\"grounded\",\"name\":\"grounded\",\"__typename\":\"Tag\"},{\"id\":\"569d22c892921b8f79d35f68\",\"slug\":\"software-engineering\",\"name\":\"Software Engineering\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"6\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6966aa1a98812ba1fe2bf5c6\",\"title\":\"My agentic coding stack for October 2025\",\"slug\":\"my-agentic-coding-stack-for-october-2025\",\"publishedAt\":\"2025-10-05T22:00:00.000Z\",\"cuid\":\"cmkd1jbkh000602jrc7xh28w5\",\"url\":\"https://hans.lhoest.eu/my-agentic-coding-stack-for-october-2025\",\"subtitle\":null,\"brief\":\"After wrapping my head around the constant changes in LLM subscriptions and performance, hereâs my new coding stack for October 2025:\\n\\nWarp Pro: my go-to agentic CLI, speedy and reliable for coding and task automation. Supports most top end LLMs.\\n\\nZe...\",\"readTimeInMinutes\":1,\"views\":6,\"tags\":[{\"id\":\"635ad52efe8087002dee4707\",\"slug\":\"llm\",\"name\":\"llm\",\"__typename\":\"Tag\"},{\"id\":\"63ec0c658dd6c5e9122eadc4\",\"slug\":\"ai-agents\",\"name\":\"ai agents\",\"__typename\":\"Tag\"},{\"id\":\"630658c9d69cbd56715883d6\",\"slug\":\"warp\",\"name\":\"Warp\",\"__typename\":\"Tag\"},{\"id\":\"64428046a75bf124a0e99dc0\",\"slug\":\"zed\",\"name\":\"Zed\",\"__typename\":\"Tag\"},{\"id\":\"62b0490d0924134a8048c08b\",\"slug\":\"open-source\",\"name\":\"open source\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"Us"])</script>
16<script>self.__next_f.push([1,"er\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"7\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"68b6a624f790221b7d5295fc\",\"title\":\"Grounded decision records from AI conversations\",\"slug\":\"grounded-decision-records-from-ai-conversations\",\"publishedAt\":\"2025-09-02T08:09:08.602Z\",\"cuid\":\"cmf29oquy000202jvf3ub2zi7\",\"url\":\"https://hans.lhoest.eu/grounded-decision-records-from-ai-conversations\",\"subtitle\":null,\"brief\":\"If you've read some of my posts before or worked with me, you know I like using Architectural Decision Records (ADRs) for lots of reasons. To me the most important one is documenting the why of a decision.\\nIf you've worked with AI models before, you'...\",\"readTimeInMinutes\":5,\"views\":13,\"tags\":[{\"id\":\"68b6a624f40a27ecd60458a8\",\"slug\":\"decision-records\",\"name\":\"decision-records\",\"__typename\":\"Tag\"},{\"id\":\"6836c8089bdd890f147ff156\",\"slug\":\"claude-code\",\"name\":\"claude-code\",\"__typename\":\"Tag\"},{\"id\":\"62e222060b03c4b2903a7ecc\",\"slug\":\"adr\",\"name\":\"ADR\",\"__typename\":\"Tag\"},{\"id\":\"6421e5071fde617d62bd7d3c\",\"slug\":\"architecture-decisions\",\"name\":\"architecture-decisions\",\"__typename\":\"Tag\"},{\"id\":\"63ec0c658dd6c5e9122eadc4\",\"slug\":\"ai-agents\",\"name\":\"ai agents\",\"__typename\":\"Tag\"},{\"id\":\"635ad52efe8087002dee4707\",\"slug\":\"llm\",\"name\":\"llm\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"8\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"68a8c5f8af5fc29389f2bddb\",\"title\":\"Examples of using Claude Code's output styles\",\"slug\":\"examples-of-using-claude-codes-output-styles\",\"publishedAt\":\"2025-08-22T19:33:12.263Z\",\"cuid\":\"cmen8a30m000202jr9r2d7y87\",\"url\":\"https://hans.lhoest.eu/examples-of-using-claude-codes-output-styles\",\"subtitle\":null,\"brief\":\"A very short post on Claude Codeâs new output styles feature which I have been experimenting with in the past days.\\nHere are some actual examples of how you can leverage output styles to change âhard-configuredâ Claude Code behaviour:\\n\\
16nRemove Claude ...\",\"readTimeInMinutes\":1,\"views\":8,\"tags\":[{\"id\":\"6836c8089bdd890f147ff156\",\"slug\":\"claude-code\",\"name\":\"claude-code\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"9\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"68a8c25053869f04efe845e7\",\"title\":\"How to Use Jujutsu (jj) with Claude Code\",\"slug\":\"how-to-use-jujutsu-jj-with-claude-code\",\"publishedAt\":\"2025-08-22T19:17:36.468Z\",\"cuid\":\"cmen7q0yb000902lb8u6w8gb7\",\"url\":\"https://hans.lhoest.eu/how-to-use-jujutsu-jj-with-claude-code\",\"subtitle\":null,\"brief\":\"I prefer Jujutsu (jj) over Git for version control, but getting Claude Code to work with jj proved tricky since Claude Code defaults to git. This post explains how to configure Claude Code to use jj instead of Git for version control operations and f...\",\"readTimeInMinutes\":6,\"views\":87,\"tags\":[{\"id\":\"68a8c63b46301ec0d97ad548\",\"slug\":\"jj-vcs\",\"name\":\"jj-vcs\",\"__typename\":\"Tag\"},{\"id\":\"68a8c63b46301ec0d97ad549\",\"slug\":\"jujutsu\",\"name\":\"jujutsu\",\"__typename\":\"Tag\"},{\"id\":\"6836c8089bdd890f147ff156\",\"slug\":\"claude-code\",\"name\":\"claude-code\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v17102327"])</script>
16<script>self.__next_f.push([1,"66102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"10\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"68a857004a7dd86cd015268c\",\"title\":\"Remove Claude Code branding from commit messages using output styles\",\"slug\":\"remove-claude-code-branding-from-commit-messages-using-output-styles\",\"publishedAt\":\"2025-08-22T11:39:44.162Z\",\"cuid\":\"cmemrd76q000b02la9girgvah\",\"url\":\"https://hans.lhoest.eu/remove-claude-code-branding-from-commit-messages-using-output-styles\",\"subtitle\":null,\"brief\":\"When Claude Code creates git commits for you, it automatically adds its own signature to every commit message, including a promotional link and co-author attribution. Personally I think this is pretty annoying but especially for professional work or ...\",\"readTimeInMinutes\":3,\"views\":39,\"tags\":[{\"id\":\"6836c8089bdd890f147ff156\",\"slug\":\"claude-code\",\"name\":\"claude-code\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"11\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"68a837b71fe75619a3bc39a6\",\"title\":\"Output Styles in Claude Code\",\"slug\":\"claude-code-output-styles\",\"publishedAt\":\"2025-08-22T09:26:15.530Z\",\"cuid\":\"cmemmljoq000r02jy7w8afty4\",\"url\":\"https://hans.lhoest.eu/claude-code-output-styles\",\"subtitle\":null,\"brief\":\"Claude Code's output styles control how the AI responds to your requests. This summary covers the built-in styles and when to use each one.\\n\\nTLDR: Output styles = stored system prompts that change Claude's behaviour. Slash commands = stored user prom...\",\"readTimeInMinutes\":3,\"views\":18,\"tags\":[{\"id\":\"6836c8089bdd890f147ff156\",\"slug\":\"claude-code\",\"name\":\"claude-code\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"12\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"688741671db00348fa2b28fc\",\"title\":\"Grounding AI Instructions in Living Documentation\",\"slug\":\"grounding-ai-instructions-in-living-documentation\",\"publishedAt\":\"2025-07-28T09:22:47.977Z\",\"cuid\":\"cmdmwgsvd000402k19mht2rwo\",\"url\":\"https://hans.lhoest.eu/grounding-ai-instructions-in-living-documentation\",\"subtitle\":null,\"brief\":\"Context engineering shows interesting potential to ground documentation to actual code, or as how I sometimes refer to it: reality.\\nLinking AI instruction files (CLAUDE.md, .rules, .cursorrules, etc) to development documentation may turn static docs ...\",\"readTimeInMinutes\":1,\"views\":2,\"tags\":[{\"id\":\"688741670d3c250aff3ef56b\",\"slug\":\"living-documentation\",\"name\":\"living documentation\",\"__typename\":\"Tag\"},{\"id\":\"635ad52efe8087002dee4707\",\"slug\":\"llm\",\"name\":\"llm\",\"__typename\":\"Tag\"},{\"id\":\"6866a62fd98fc224bf4fdfa2\",\"slug\":\"context-engineering\",\"name\":\"context engineering\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"13\",\"__typename\":\"PostEdge\"}
16,{\"node\":{\"__typename\":\"Post\",\"id\":\"68660f383c7036692178cead\",\"title\":\"Using Code Coverage as a Check for Test Refactoring\",\"slug\":\"using-code-coverage-as-a-check-for-test-refactoring\",\"publishedAt\":\"2025-07-03T05:03:52.130Z\",\"cuid\":\"cmcmx7io2000602kzdk5o1y1w\",\"url\":\"https://hans.lhoest.eu/using-code-coverage-as-a-check-for-test-refactoring\",\"subtitle\":null,\"brief\":\"TLDR: Use "])</script>
16<script>self.__next_f.push([1,"code coverage reports to verify that test refactorings haven't accidentally changed what functionality you're testing. Same coverage percentage before and after refactoring gives confidence your tests still cover the same code paths.\\nIf we ...\",\"readTimeInMinutes\":4,\"views\":2,\"tags\":[{\"id\":\"68660f38d98fc224bfb55268\",\"slug\":\"ai-assisted-refactoring\",\"name\":\"AI Assisted Refactoring\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b9549b\",\"slug\":\"testing\",\"name\":\"Testing\",\"__typename\":\"Tag\"},{\"id\":\"56744720958ef13879b947df\",\"slug\":\"refactoring\",\"name\":\"refactoring\",\"__typename\":\"Tag\"},{\"id\":\"5c37fdd4a4823a3652f815aa\",\"slug\":\"code-coverage\",\"name\":\"code coverage\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"14\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"685ed80299d55fa4bd92ff45\",\"title\":\"Rust code coverage: use 'llvm-cov' over 'tarpaulin'\",\"slug\":\"rust-code-coverage-use-llvm-cov-over-tarpaulin\",\"publishedAt\":\"2025-06-27T17:42:26.668Z\",\"cuid\":\"cmcf3nxwr000002ifg8bub67z\",\"url\":\"https://hans.lhoest.eu/rust-code-coverage-use-llvm-cov-over-tarpaulin\",\"subtitle\":null,\"brief\":\"A few days ago, I wrote about an issue I encountered where the code coverage for one of my projects failed on CI but worked fine locally. [I also discussed a
16solution](https://hans.lhoest.eu/rust-when-cargo-code-coverage-works-locally-but-fails-in-ci...\",\"readTimeInMinutes\":1,\"views\":6,\"tags\":[{\"id\":\"5684bee6bf03be7d4a9ed853\",\"slug\":\"rust\",\"name\":\"Rust\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"15\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"685d0497984535ec4e70f6e4\",\"title\":\"Test Naming Guidelines\",\"slug\":\"test-naming-guidelines\",\"publishedAt\":\"2025-06-26T08:28:07.010Z\",\"cuid\":\"cmcd4f7xe000002l406gm1jnv\",\"url\":\"https://hans.lhoest.eu/test-naming-guidelines\",\"subtitle\":null,\"brief\":\"TLDR: Below are test naming guidelines that help me write consistent, clear test names.\\nThis is quick post with the Test Naming Guidelines I have been using to make my test names consistent across multiple projects. I use also these with LLMs when wr...\",\"readTimeInMinutes\":2,\"views\":9,\"tags\":[{\"id\":\"56744723958ef13879b9549b\",\"slug\":\"testing\",\"name\":\"Testing\",\"__typename\":\"Tag\"},{\"id\":\"65c45410531feeef17bd4a67\",\"slug\":\"behavior-driven-development-bdd\",\"name\":\"Behavior-Driven Development (BDD)\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"16\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"685cfc2db497f1f632bfb155\",\"title\":\"Rust: When Cargo Code Coverage Works Locally But Fails in CI\",\"slug\":\"rust-when-cargo-code-coverage-works-locally-but-fails-in-ci\",\"publishedAt\":\"2025-06-26T07:52:13.348Z\",\"cuid\":\"cmcd3525g000a02l75w8l80nz\",\"url\":\"https://hans.lhoest.eu/rust-when-cargo-code-coverage-works-locally-but-fails-in-ci\",\"subtitle\":null,\"brief\":\"A short post to help if you run into the same issue.\\nTLDR: If your code coverage reports show vastly different results between local development and CI, explicitly set --engine llvm in your cargo tarpaulin command.\\nI recently ran into a frustration y...\",\"readTimeInMinutes\":2,\"views\":5,\"tags\":[{\"id\":\"5684bee6bf03be7d4a9ed853\",\"slug\":\"rust\",\"name\":\"Rust\",\"__typename\":\"Tag\"}],\"author\":{\"__typenam"])</script>
16<script>self.__next_f.push([1,"e\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"17\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"67e2b183aa5b5375aa261bcb\",\"title\":\"Continuous Deployment for Personal CLI Tools\",\"slug\":\"continuous-deployment-for-personal-cli-tools\",\"publishedAt\":\"2025-03-25T13:37:07.305Z\",\"cuid\":\"cm8ojidpl000609jyexmoa0wi\",\"url\":\"https://hans.lhoest.eu/continuous-deployment-for-personal-cli-tools\",\"subtitle\":null,\"brief\":\"Git pre-push hooks can automate local installation of your personal CLI tools, creating a development workflow where your working environment always has the latest version of your code.\\nWhen developing CLI tools, for example for personal use, I often...\",\"readTimeInMinutes\":2,\"views\":11,\"tags\":[{\"id\":\"67e2b183eac204d667df2122\",\"slug\":\"development-experience\",\"name\":\"development experience\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b9526c\",\"slug\":\"git\",\"name\":\"Git\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b953a7\",\"slug\":\"cli\",\"name\":\"cli\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"18\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"675964d3f97bc4eea948ba7c\",\"title\":\"Ground Your ADRs with a Verification Section\",\"slug\":\"ground-your-adrs-with-a-verification-section\",\"publishedAt\":\"2024-12-11T10:09:23.309Z\",\"cuid\":\"cm4jqan3h001d09l99n4c1gan\",\"url\":\"https://hans.lhoest.eu/ground-your-adrs-with-a-verification-section\",\"subtitle\":null,\"brief\":\"Making architectural decisions is one thing, but have you ever wondered how to make them more effective? Adding a Verification section to Architecture Decision Records (ADRs) can make the difference. This simple addition bridges the gap between theor...\",\"readTimeInMinutes\":7,\"views\":17,\"tags\":[{\"id\":\"62e222060b03c4b2903a7ecc\",\"slug\":\"adr\",\"name\":\"ADR\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b9529a\",\"slug\":\"architecture\",\"name\":\"architecture\",\"__typename\":\"Tag\"},{\"id\":\"5f9962c7ae41043093cdb288\",\"slug\":\"decision-making\",\"name\":\"decision making\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"19\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6752efe53b82418f97037d79\",\"title\":\"Notes on Preparatory Refactoring\",\"slug\":\"notes-on-preparatory-refactoring\",\"publishedAt\":\"2024-12-06T12:36:53.970Z\",\"cuid\":\"cm4cqd2z6000n09mj8cggd9ai\",\"url\":\"https://hans.lhoest.eu/notes-on-preparatory-refactoring\",\"subtitle\":null,\"brief\":\"Notes inspired by Emily Bache's short Youtube video Design Better Code with Preparatory Refactoring in TDD | Demo.\\nA preparatory refactoring is a refactoring to make future changes to accommodate new requirements easy. By definition, current behavior...\",\"readTimeInMinutes\":2,\"views\":30,\"tags\":[{\"id\":\"56744721958ef13879b94898\",\"slug\":\"tdd\",\"name\":\"TDD (Test-driven development)\",\"__typename\":\"Tag\"},{\"id\":\"56744720958ef13879b947df\",\"slug\":\"refactoring\",\"name\":\"refactoring\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"20\",\"__typename\":\"PostEdge\"}
16,{\"node\":{\"__typename\":\"P"])</script>
16<script>self.__next_f.push([1,"ost\",\"id\":\"6746f909df8dc2b9c2298d88\",\"title\":\"Less Mentioned Benefits of Architecture Decision Records\",\"slug\":\"less-mentioned-benefits-of-architecture-decision-records\",\"publishedAt\":\"2024-11-27T10:48:41.852Z\",\"cuid\":\"cm3zrj9mk000409l221vsh6y5\",\"url\":\"https://hans.lhoest.eu/less-mentioned-benefits-of-architecture-decision-records\",\"subtitle\":null,\"brief\":\"Teams adopt Architecture Decision Records (ADRs) to document decisions, avoid revisiting settled matters, onboard newcomers, adapt to changing circumstances, and sharpen their thinking. However, there are several other valuable benefits that often go...\",\"readTimeInMinutes\":2,\"views\":20,\"tags\":[{\"id\":\"56744723958ef13879b9529a\",\"slug\":\"architecture\",\"name\":\"architecture\",\"__typename\":\"Tag\"},{\"id\":\"62e222060b03c4b2903a7ecc\",\"slug\":\"adr\",\"name\":\"ADR\",\"__typename\":\"Tag\"},{\"id\":\"5f9962c7ae41043093cdb288\",\"slug\":\"decision-making\",\"name\":\"decision making\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"21\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6735c24402d1a21e671af0c6\",\"title\":\"Notes on ð TDD, Where Did It All Go Wrong\",\"slug\":\"notes-on-tdd-where-did-it-all-go-wrong\",\"publishedAt\":\"2024-11-14T09:26:28.316Z\",\"cuid\":\"cm3h3vg7w000c09l3aofng37t\",\"url\":\"https://hans.lhoest.eu/notes-on-tdd-where-did-it-all-go-wrong\",\"subtitle\":null,\"brief\":\"My short notes on ð TDD, Where Did It All Go Wrong\\nStill a lot of testing wisdom in this talk (re-watched 6 years after publication).\\nFocus on behaviour\\nBehaviour should be your primary focus when writing tests. The need for a new test should arise ...\",\"readTimeInMinutes\":2,\"views\":19,\"tags\":[{\"id\":\"5e24855732d5fad159b74681\",\"slug\":\"notes\",\"name\":\"notes\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b9549b\",\"slug\":\"testing\",\"name\":\"Testing\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94898\",\"slug\":\"tdd\",\"name\":\"TDD (Test-driven development)\",\"__typename\":\"Tag\"},{\"id\":\"652f7df5e1014c2f159eb33e\",\"slug\":\"tdd-vs-bdd\",\"name\":\"tdd vs bdd\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94aa0\",\"slug\":\"bdd\",\"name\":\"bdd\",\"__typename\":\"Tag\"},{\"id\":\"5da132d3ac85846e618751a5\",\"slug\":\"gherkin\",\"name\":\"Gherkin\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"22\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6735b937ad76894d3b794d2d\",\"title\":\"Notes on TDD \u0026 DDD From the Ground Up Live Coding\",\"slug\":\"notes-on-tdd-ddd-from-the-ground-up-live-coding\",\"publishedAt\":\"2024-11-14T08:47:51.946Z\",\"cuid\":\"cm3h2hswa001u09l825s7gnq1\",\"url\":\"https://hans.lhoest.eu/notes-on-tdd-ddd-from-the-ground-up-live-coding\",\"subtitle\":null,\"brief\":\"Some short notes from Chris Simon's Talk TDD \u0026 DDD From the Ground Up Live Coding\\nWhen choosing the right testing level, developers face an important trade-off. Higher-level tests provide better coverage for refactoring, but make it harder to pinpoin...\",\"readTimeInMinutes\":1,\"views\":8,\"tags\":[{\"id\":\"5e24855732d5fad159b74681\",\"slug\":\"notes\",\"name\":\"notes\",\"__typename\":\"Tag\"},{\"id\":\"576b14ad41d2cbca360cf875\",\"slug\":\"ddd\",\"name\":\"DDD\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94898\",\"slug\":\"tdd\",\"name\":\"TDD (Test-driven development)\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b9549b\",\"slug\":\"testing\",\"name\":\"Testing\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage"])</script>
16<script>self.__next_f.push([1,"\",\"url\":\"\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"23\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6642f078d520666bd0889e19\",\"title\":\"How to extract all TODOs from code using Scala-CLI\",\"slug\":\"how-to-extract-all-todos-from-code-using-scala-cli\",\"publishedAt\":\"2024-05-14T05:02:48.196Z\",\"cuid\":\"clw5xfmo3000u0aie326m0c3h\",\"url\":\"https://hans.lhoest.eu/how-to-extract-all-todos-from-code-using-scala-cli\",\"subtitle\":null,\"brief\":\"In recent years, Scala CLI has replaced sbt for my home and smaller work projects. Scala CLI lacks the extensive plugin ecosystem of sbt, so you need to write any additional functionalities yourself. Fortunately, writing simple scripts is a primary u...\",\"readTimeInMinutes\":3,\"views\":19,\"tags\":[{\"id\":\"6642f078cfdcf6a57ceca388\",\"slug\":\"scala-cli\",\"name\":\"scala-cli\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b952a7\",\"slug\":\"scala\",\"name\":\"Scala\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1715588640335/b44b5f8b-fd0f-4e23-9145-e048b7ebe7db.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"24\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6625fd7d685af5536a27f4a2\",\"title\":\"Slice Work into Smaller, Prioritised Deliverables instead of using Story Points\",\"slug\":\"slice-work-into-smaller-prioritised-deliverables-instead-of-using-story-points\",\"publishedAt\":\"2024-04-22T06:02:37.219Z\",\"cuid\":\"clvajvtb7000n0ajt31f8fmyy\",\"url\":\"https://hans.lhoest.eu/slice-work-into-smaller-prioritised-deliverables-instead-of-using-story-points\",\"subtitle\":null,\"brief\":\"Have you ever wondered if there are better ways to estimate work than using Story Points? Below is a potentially simpler, more effective method to prioritise and estimate your software development tasks that could save your team countless hours of de...\",\"readTimeInMinutes\":2,\"views\":11,\"tags\":[{\"id\":\"570a9a273aeb5317437380e4\",\"slug\":\"scrum\",\"name\":\"Scrum\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94ad1\",\"slug\":\"software-development\",\"name\":\"software development\",\"__typename\":\"Tag\"},{\"id\":\"569d22c892921b8f79d35f68\",\"slug\":\"software-engineering\",\"name\":\"Software Engineering\",\"__typename\":\"Tag\"},{\"id\":\"5cc0737a1f0f0cef704f362b\",\"slug\":\"estimation\",\"name\":\"Estimation\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"655cad4129cea36d4407e01f\",\"username\":\"hanlho\",\"name\":\"Hans L'Hoest\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710232766102/s7_2QfO0-.jpg\",\"followersCount\":0},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1713514896079/46bf1fb5-804f-4a06-b07d-43c22809ab10.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"25\",\"__typename\":\"PostEdge\"}],\"pageInfo\":{\"hasNextPage\":true,\"endCursor\":\"25\",\"totalDocuments\":35,\"__typename\":\"PageInfo\"},\"totalDocuments\":35,\"__typename\":\"PostConnection\"}},\"posts\":[\"$b:props:children:0:props:publication:posts:edges:0:node\",\"$b:props:children:0:props:publication:posts:edges:1:node\",\"$b:props:children:0:props:publication:posts:edges:2:node\",\"$b:props:children:0:props:publication:posts:edges:3:node\",\"$b:props:children:0:props:publication:posts:edges:4:node\",\"$b:props:children:0:props:publication:posts:edges:5:node\",\"$b:props:children:0:props:publication:posts:edges:6:node\",\"$b:props:children:0:props:publication:posts:edges:7:node\",\"$b:props:children:0:props:publication:posts:edges:8:node\",\"$b:props:children:0:props:publication:posts:edges:9:node\",\"$b:props:children:0:props:publication:posts:edges:10:node\",\"$b:props:children:0:props:publication:posts:edges:11:node\",\"$b:props:children:0:props:publication:posts:edges:12:node\",\"$b:props:children:0:props:publication:posts:edges:13:node\",\"$b:props:children:0:props:publication:posts:edges:14:node\",\"$b:props:children:0:props:publicat"])</script>
16<script>self.__next_f.push([1,"ion:posts:edges:15:node\",\"$b:props:children:0:props:publication:posts:edges:16:node\",\"$b:props:children:0:props:publication:posts:edges:17:node\",\"$b:props:children:0:props:publication:posts:edges:18:node\",\"$b:props:children:0:props:publication:posts:edges:19:node\",\"$b:props:children:0:props:publication:posts:edges:20:node\",\"$b:props:children:0:props:publication:posts:edges:21:node\",\"$b:props:children:0:props:publication:posts:edges:22:node\",\"$b:props:children:0:props:publication:posts:edges:23:node\",\"$b:props:children:0:props:publication:posts:edges:24:node\"],\"host\":\"hans.lhoest.eu\"}],\"$L18\",\"$L19\",\"$L1a\"]}]\n1b:I[52619,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"5001\",\"static/chunks/5001-fae0bebdd93f95e3.js\",\"2423\",\"static/chunks/2423-c8b1388240338d7d.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"652\",\"static/chunks/652-f40dcb480b4e356f.js\",\"5635\",\"static/chunks/app/archive/page-cf30053c25d6ee7f.js\"],\"\"]\n18:[\"$\",\"div\",null,{\"className\":\"px-4 sm:px-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-full xl:mx-auto xl:max-w-[80rem] 2xl:max-w-[90rem]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"space-y-8 max-w-4xl w-full mx-auto pt-2 sm:pt-10 pb-16\",\"children\":[[\"$\",\"header\",null,{\"className\":\"space-y-3 text-center\",\"children\":[[\"$\",\"h1\",null,{\"id\":\"archive-heading\",\"className\":\"text-3xl sm:text-4xl font-bold tracking-tight text-balance text-foreground\",\"children\":\"Archive\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground\",\"children\":[35,\" \",\"posts\",\" published so far\"]}]]}],[\"$\",\"section\",null,{\"aria-labelledby\":\"archive-heading\",\"children\":[\"$\",\"ol\",null,{\"className\":\"space-y-0 list-none p-0 border border-border rounded-lg overflow-hidden\",\"children\":[[\"$\",\"li\",\"696e1f49408873ab1698a14a\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-696e1f49408873ab1698a14a\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/the-unification-of-commands-and-skills-in-claude-code\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2026-01-19T12:10:49.633Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Jan 19, 2026\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-696e1f49408873ab1698a14a\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"The Unification of Commands and Skills in Claude Code\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}],[\"$\",\"li\",\"6966a7fad64630736a139ce0\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6966a7fad64630736a139ce0\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/agent-chisels-my-llm-agent-skills-and-workflows\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2026-01-13T20:15:54.890Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Jan 13, 2026\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6966a7fad64630736a139ce0\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Agent Chisels: My LLM Agent Skills and Workflows\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}],[\"$\",\"li\",\"6966a938d64630736a139ce6\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6966a938d64
16630736a139ce6\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/my-best-technical-decision-of-2025-moving-to-proton-for-peace-of-mind\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-12-22T23:00:00.000Z\",\"className\":\"text-sm text-muted-foreground"])</script>
16<script>self.__next_f.push([1," whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Dec 22, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6966a938d64630736a139ce6\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"My Best Technical Decision of 2025: Moving to Proton for Peace of Mind\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}],[\"$\",\"li\",\"6946b49f8e28b52e8a9fdb68\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6946b49f8e28b52e8a9fdb68\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/implementing-an-urgent-feature-with-opencode-claude-and-zed\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-12-17T23:00:00.000Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Dec 17, 2025\"}],\"$L1c\"]}]}]}],\"$L1d\",\"$L1e\",\"$L1f\",\"$L20\",\"$L21\",\"$L22\",\"$L23\",\"$L24\",\"$L25\",\"$L26\",\"$L27\",\"$L28\",\"$L29\",\"$L2a\",\"$L2b\",\"$L2c\",\"$L2d\",\"$L2e\",\"$L2f\",\"$L30\",\"$L31\"]}]}]]}],\"$L32\"]}]}]\n33:T114e,{\"@context\":\"https://schema.org\",\"@type\":\"CollectionPage\",\"name\":\"Archive - Hans L'Hoest\",\"url\":\"https://hans.lhoest.eu/archive\",\"mainEntityOfPage\":\"https://hans.lhoest.eu/archive\",\"description\":\"Archive of all posts published on Hans L'Hoest\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Hans L'Hoest\",\"url\":\"https://hans.lhoest.eu\"},\"hasPart\":[{\"@type\":\"Article\",\"headline\":\"The Unification of Commands and Skills in Claude Code\",\"url\":\"https://hans.lhoest.eu/the-unification-of-commands-and-skills-in-claude-code\"},{\"@type\":\"Article\",\"headline\":\"Agent Chisels: My LLM Agent Skills and Workflows\",\"url\":\"https://hans.lhoest.eu/agent-chisels-my-llm-agent-skills-and-workflows\"},{\"@type\":\"Article\",\"headline\":\"My Best Technical Decision of 2025: Moving to Proton for Peace of Mind\",\"url\":\"https://hans.lhoest.eu/my-best-technical-decision-of-2025-moving-to-proton-for-peace-of-mind\"},{\"@type\":\"Article\",\"headline\":\"Implementing an Urgent Feature with Opencode, Claude, and Zed\",\"url\":\"https://hans.lhoest.eu/implementing-an-urgent-feature-with-opencode-claude-and-zed\"},{\"@type\":\"Article\",\"headline\":\"TIL rules to remember\",\"url\":\"https://hans.lhoest.eu/til-rules-to-remember\"},{\"@type\":\"Article\",\"headline\":\"DORA Research: Evidence-Based and Scientifically Grounded Software Engineering\",\"url\":\"https://hans.lhoest.eu/dora-research-evidence-based-and-scientifically-grounded-software-engineering\"},{\"@type\":\"Article\",\"headline\":\"My agentic coding stack for October 2025\",\"url\":\"https://hans.lhoest.eu/my-agentic-coding-stack-for-october-2025\"},{\"@type\":\"Article\",\"headline\":\"Grounded decision records from AI conversations\",\"url\":\"https://hans.lhoest.eu/grounded-decision-records-from-ai-conversations\"},{\"@type\":\"Article\",\"headline\":\"Examples of using Claude Code's output styles\",\"url\":\"https://hans.lhoest.eu/examples-of-using-claude-codes-output-styles\"},{\"@type\":\"Article\",\"headline\":\"How to Use Jujutsu (jj) with Claude Code\",\"url\":\"https://hans.lhoest.eu/how-to-use-jujutsu-jj-with-claude-code\"},{\"@type\":\"Article\",\"headline\":\"Remove Claude Code branding from commit messages using output styles\",\"url\":\"https://hans.lhoest.eu/remove-claude-code-branding-from-commit-messages-using-output-styles\"},{\"@type\":\"Article\",\"headline\":\"Output Styles in Claude Code\",\"url\":\"https://hans.lhoest.eu/claude-code-output-styles\"},{\"@type\":\"Article\",\"headline\":\"Grounding AI Instructions in Living Documentation\",\"url\":\"https://hans.lhoest.eu/grounding-ai-instructions-in-living-documentation\"},{\"@type\":\"Article\",\"headline\":\"Using Code Coverage as a Check for Test Refactoring\",\"url\":\"https://hans.lhoest.eu/using-code-coverage-as-a-check-for-test-refactoring\"},{\"@type\":\"Article\",\"headline\":\"Rust code coverage: use 'llvm-cov' over 'tarpaulin'\",\"url\":\"https://hans.lhoest.eu/rust-code-coverage-use-llvm-cov-over-tarpaulin\"},{\"@type\":\"Article\",\"headline\":\"Test Naming Guidelines\",\"url\""])</script>
16<script>self.__next_f.push([1,":\"https://hans.lhoest.eu/test-naming-guidelines\"},{\"@type\":\"Article\",\"headline\":\"Rust: When Cargo Code Coverage Works Locally But Fails in CI\",\"url\":\"https://hans.lhoest.eu/rust-when-cargo-code-coverage-works-locally-but-fails-in-ci\"},{\"@type\":\"Article\",\"headline\":\"Continuous Deployment for Personal CLI Tools\",\"url\":\"https://hans.lhoest.eu/continuous-deployment-for-personal-cli-tools\"},{\"@type\":\"Article\",\"headline\":\"Ground Your ADRs with a Verification Section\",\"url\":\"https://hans.lhoest.eu/ground-your-adrs-with-a-verification-section\"},{\"@type\":\"Article\",\"headline\":\"Notes on Preparatory Refactoring\",\"url\":\"https://hans.lhoest.eu/notes-on-preparatory-refactoring\"},{\"@type\":\"Article\",\"headline\":\"Less Mentioned Benefits of Architecture Decision Records\",\"url\":\"https://hans.lhoest.eu/less-mentioned-benefits-of-architecture-decision-records\"},{\"@type\":\"Article\",\"headline\":\"Notes on ð TDD, Where Did It All Go Wrong\",\"url\":\"https://hans.lhoest.eu/notes-on-tdd-where-did-it-all-go-wrong\"},{\"@type\":\"Article\",\"headline\":\"Notes on TDD \u0026 DDD From the Ground Up Live Coding\",\"url\":\"https://hans.lhoest.eu/notes-on-tdd-ddd-from-the-ground-up-live-coding\"},{\"@type\":\"Article\",\"headline\":\"How to extract all TODOs from code using Scala-CLI\",\"url\":\"https://hans.lhoest.eu/how-to-extract-all-todos-from-code-using-scala-cli\"},{\"@type\":\"Article\",\"headline\":\"Slice Work into Smaller, Prioritised Deliverables instead of using Story Points\",\"url\":\"https://hans.lhoest.eu/slice-work-into-smaller-prioritised-deliverables-instead-of-using-story-points\"}]}19:[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$33\"}}]\n1c:[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6946b49f8e28b52e8a9fdb68\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Implementing an Urgent Feature with Opencode, Claude, and Zed\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]\n1d:[\"$\",\"li\",\"6966a8d079641da13973fea5\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6966a8d079641da13973fea5\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/til-rules-to-remember\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-12-15T23:00:00.000Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Dec 15, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6966a8d079641da13973fea5\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"TIL rules to remember\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n1e:[\"$\",\"li\",\"68e77de17fe332d3ff45be2a\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-68e77de17fe332d3ff45be2a\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/dora-research-evidence-based-and-scientifically-grounded-software-engineering\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-10-09T09:18:25.225Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Oct 9, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-68e77de17fe332d3ff45be2a\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"DORA Research: Evidence-Based and Scientifically Grounded Software Engineering\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n1f:[\"$\",\"li\",\"6966aa1a98812ba1fe2bf5c6\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6966aa1a98812ba1fe2bf5c6\",\"className\":\"border-b border"])</script>
16<script>self.__next_f.push([1,"-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/my-agentic-coding-stack-for-october-2025\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-10-05T22:00:00.000Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Oct 5, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6966aa1a98812ba1fe2bf5c6\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"My agentic coding stack for October 2025\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n20:[\"$\",\"li\",\"68b6a624f790221b7d5295fc\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-68b6a624f790221b7d5295fc\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/grounded-decision-records-from-ai-conversations\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-09-02T08:09:08.602Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Sep 2, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-68b6a624f790221b7d5295fc\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Grounded decision records from AI conversations\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n21:[\"$\",\"li\",\"68a8c5f8af5fc29389f2bddb\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-68a8c5f8af5fc29389f2bddb\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/examples-of-using-claude-codes-output-styles\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-08-22T19:33:12.263Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Aug 22, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-68a8c5f8af5fc29389f2bddb\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Examples of using Claude Code's output styles\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n22:[\"$\",\"li\",\"68a8c25053869f04efe845e7\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-68a8c25053869f04efe845e7\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/how-to-use-jujutsu-jj-with-claude-code\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-08-22T19:17:36.468Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Aug 22, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-68a8c25053869f04efe845e7\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"How to Use Jujutsu (jj) with Claude Code\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n23:[\"$\",\"li\",\"68a857004a7dd86cd015268c\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-68a857004a7dd86cd015268c\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/remove-claude-code-branding-from-commit-messages-using-output-styles\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-08-22T11:39:44.162Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Aug 22, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\","])</script>
16<script>self.__next_f.push([1,"\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-68a857004a7dd86cd015268c\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Remove Claude Code branding from commit messages using output styles\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n24:[\"$\",\"li\",\"68a837b71fe75619a3bc39a6\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-68a837b71fe75619a3bc39a6\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/claude-code-output-styles\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-08-22T09:26:15.530Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Aug 22, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-68a837b71fe75619a3bc39a6\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Output Styles in Claude Code\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n25:[\"$\",\"li\",\"688741671db00348fa2b28fc\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-688741671db00348fa2b28fc\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/grounding-ai-instructions-in-living-documentation\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-07-28T09:22:47.977Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Jul 28, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-688741671db00348fa2b28fc\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Grounding AI Instructions in Living Documentation\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n26:[\"$\",\"li\",\"68660f383c7036692178cead\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-68660f383c7036692178cead\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/using-code-coverage-as-a-check-for-test-refactoring\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-07-03T05:03:52.130Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Jul 3, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-68660f383c7036692178cead\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Using Code Coverage as a Check for Test Refactoring\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n27:[\"$\",\"li\",\"685ed80299d55fa4bd92ff45\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-685ed80299d55fa4bd92ff45\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/rust-code-coverage-use-llvm-cov-over-tarpaulin\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-06-27T17:42:26.668Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Jun 27, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-685ed80299d55fa4bd92ff45\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Rust code coverage: use 'llvm-cov' over 'tarpaulin'\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n28:[\"$\",\"li\",\"685d0497984535ec4e70f6e4\",{\"cla"])</script>
16<script>self.__next_f.push([1,"ssName\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-685d0497984535ec4e70f6e4\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/test-naming-guidelines\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-06-26T08:28:07.010Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Jun 26, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-685d0497984535ec4e70f6e4\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Test Naming Guidelines\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n29:[\"$\",\"li\",\"685cfc2db497f1f632bfb155\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-685cfc2db497f1f632bfb155\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/rust-when-cargo-code-coverage-works-locally-but-fails-in-ci\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-06-26T07:52:13.348Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Jun 26, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-685cfc2db497f1f632bfb155\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Rust: When Cargo Code Coverage Works Locally But Fails in CI\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n2a:[\"$\",\"li\",\"67e2b183aa5b5375aa261bcb\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-67e2b183aa5b5375aa261bcb\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/continuous-deployment-for-personal-cli-tools\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2025-03-25T13:37:07.305Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Mar 25, 2025\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-67e2b183aa5b5375aa261bcb\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Continuous Deployment for Personal CLI Tools\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n2b:[\"$\",\"li\",\"675964d3f97bc4eea948ba7c\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-675964d3f97bc4eea948ba7c\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/ground-your-adrs-with-a-verification-section\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2024-12-11T10:09:23.309Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Dec 11, 2024\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-675964d3f97bc4eea948ba7c\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Ground Your ADRs with a Verification Section\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n2c:[\"$\",\"li\",\"6752efe53b82418f97037d79\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6752efe53b82418f97037d79\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/notes-on-preparatory-refactoring\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2024-12-06T12:36:53.970Z\",\"className\":\"text-sm text-muted-foreground whitespace"])</script>
16<script>self.__next_f.push([1,"-nowrap flex-shrink-0 w-20\",\"children\":\"Dec 6, 2024\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6752efe53b82418f97037d79\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Notes on Preparatory Refactoring\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n2d:[\"$\",\"li\",\"6746f909df8dc2b9c2298d88\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6746f909df8dc2b9c2298d88\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/less-mentioned-benefits-of-architecture-decision-records\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2024-11-27T10:48:41.852Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Nov 27, 2024\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6746f909df8dc2b9c2298d88\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Less Mentioned Benefits of Architecture Decision Records\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n2e:[\"$\",\"li\",\"6735c24402d1a21e671af0c6\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6735c24402d1a21e671af0c6\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/notes-on-tdd-where-did-it-all-go-wrong\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2024-11-14T09:26:28.316Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Nov 14, 2024\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6735c24402d1a21e671af0c6\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Notes on ð TDD, Where Did It All Go Wrong\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n2f:[\"$\",\"li\",\"6735b937ad76894d3b794d2d\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6735b937ad76894d3b794d2d\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/notes-on-tdd-ddd-from-the-ground-up-live-coding\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2024-11-14T08:47:51.946Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Nov 14, 2024\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6735b937ad76894d3b794d2d\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Notes on TDD \u0026 DDD From the Ground Up Live Coding\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n30:[\"$\",\"li\",\"6642f078d520666bd0889e19\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6642f078d520666bd0889e19\",\"className\":\"border-b border-border\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/how-to-extract-all-todos-from-code-using-scala-cli\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2024-05-14T05:02:48.196Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"May 14, 2024\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6642f078d520666bd0889e19\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"How to extract all TODOs from code using Scala-CLI\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-"])</script>
16<script>self.__next_f.push([1,"muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n31:[\"$\",\"li\",\"6625fd7d685af5536a27f4a2\",{\"className\":\"list-none\",\"children\":[\"$\",\"article\",null,{\"aria-labelledby\":\"archive-post-6625fd7d685af5536a27f4a2\",\"className\":\"\",\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/slice-work-into-smaller-prioritised-deliverables-instead-of-using-story-points\",\"className\":\"flex items-center gap-4 p-4 hover:bg-muted transition-colors group\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2024-04-22T06:02:37.219Z\",\"className\":\"text-sm text-muted-foreground whitespace-nowrap flex-shrink-0 w-20\",\"children\":\"Apr 22, 2024\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"id\":\"archive-post-6625fd7d685af5536a27f4a2\",\"className\":\"text-base font-medium text-foreground group-hover:text-primary transition-colors break-words\",\"children\":\"Slice Work into Smaller, Prioritised Deliverables instead of using Story Points\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-1\",\"children\":\"Hans L'Hoest\"}]]}]]}]}]}]\n32:[\"$\",\"nav\",null,{\"className\":\"flex items-center justify-center gap-2 py-8\",\"aria-label\":\"Pagination\",\"children\":[[\"$\",\"button\",null,{\"className\":\"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none [\u0026_svg]:size-4 [\u0026_svg]:shrink-0 border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground rounded-md text-xs h-9 px-3\",\"ref\":\"$undefined\",\"disabled\":true,\"children\":[[\"$\",\"i\",null,{\"className\":\"fa-jelly fa-angle-left mr-2\",\"aria-hidden\":true}],\"Previous\"]}],[\"$\",\"div\",null,{\"className\":\"hidden sm:flex items-center gap-1\",\"children\":[[\"$\",\"button\",\"1\",{\"className\":\"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none [\u0026_svg]:size-4 [\u0026_svg]:shrink-0 bg-primary text-primary-foreground shadow-sm hover:bg-primary/90 rounded-md text-xs h-9 w-9 px-0\",\"ref\":\"$undefined\",\"disabled\":true,\"children\":[\"$\",\"span\",null,{\"children\":1}]}],[\"$\",\"$L1b\",\"2\",{\"href\":\"/archive?page=2\",\"children\":2,\"className\":\"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none [\u0026_svg]:size-4 [\u0026_svg]:shrink-0 border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground rounded-md text-xs h-9 w-9 px-0\",\"ref\":null,\"disabled\":false}]]}],[\"$\",\"div\",null,{\"className\":\"flex sm:hidden items-center px-3 py-1 text-sm text-muted-foreground\",\"children\":[\"Page \",1,\" of \",2]}],[\"$\",\"$L1b\",null,{\"href\":\"/archive?page=2\",\"children\":[\"Next\",[\"$\",\"i\",null,{\"className\":\"fa-jelly fa-angle-right ml-2\",\"aria-hidden\":true}]],\"className\":\"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none [\u0026_svg]:size-4 [\u0026_svg]:shrink-0 border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground rounded-md text-xs h-9 px-3\",\"ref\":null,\"disabled\":false}]]}]\n1a:[\"$\",\"footer\",null,{\"className\":\"px-4 pt-8 pb-20 sm:px-8 text-muted-foreground\",\"aria-label\":\"Footer\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-full max-w-4xl mx-auto\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-col items-center gap-4 text-center text-sm\",\"children\":[false,[\"$\",\"p\",null,{\"className\":\"font-medium\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2026\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-sans\",\"children\":\"©\"}],\" \",2026]}],\" \",\"Hans L'Hoest\"]}],[\"$\",\"nav\",null,{\"aria-label\":\"Footer navigation\",\"children\":[\"$\",\"ul\",null,{\"className\":\"flex flex-wrap justify-center ga"])</script>
16<script>self.__next_f.push([1,"p-4 text-sm tracking-wide\",\"children\":[[\"$\",\"li\",\"/members\",{\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/members\",\"className\":\"transition hover:text-foreground\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Members\"}]}],[\"$\",\"li\",\"/archive\",{\"children\":[\"$\",\"$L1b\",null,{\"href\":\"/archive\",\"className\":\"transition hover:text-foreground\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Archive\"}]}],[\"$\",\"li\",\"https://hashnode.com/privacy-policy\",{\"children\":[\"$\",\"$L1b\",null,{\"href\":\"https://hashnode.com/privacy-policy\",\"className\":\"transition hover:text-foreground\",\"target\":\"_blank\",\"rel\":\"noopener\",\"children\":\"Privacy\"}]}],[\"$\",\"li\",\"https://hashnode.com/terms\",{\"children\":[\"$\",\"$L1b\",null,{\"href\":\"https://hashnode.com/terms\",\"className\":\"transition hover:text-foreground\",\"target\":\"_blank\",\"rel\":\"noopener\",\"children\":\"Terms\"}]}]]}]}],[\"$\",\"div\",null,{\"className\":\"pt-8 flex justify-center gap-6\",\"children\":[[\"$\",\"$L1b\",null,{\"href\":\"/sitemap.xml\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"flex items-center gap-2 text-sm transition hover:text-foreground\",\"title\":\"Sitemap\",\"children\":[[\"$\",\"i\",null,{\"className\":\"fa-regular fa-sitemap\"}],[\"$\",\"span\",null,{\"children\":\"Sitemap\"}]]}],[\"$\",\"$L1b\",null,{\"href\":\"/rss.xml\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"flex items-center gap-2 text-sm transition hover:text-foreground\",\"title\":\"RSS Feed\",\"children\":[[\"$\",\"i\",null,{\"className\":\"fa-regular fa-rss\"}],[\"$\",\"span\",null,{\"children\":\"RSS\"}]]}]]}],false]}]}]}]\n"])</script>
16</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.