<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Writing on web engineering, testing and agents · jeremn.dev</title><description>Notes on web engineering, testing and agents. By Jérémie Néhlil, freelance fullstack JavaScript engineer in SvelteKit, React and Node.</description><link>https://jeremn.dev/</link><language>en</language><item><title>Cloudflare Workers AI: everything the free tier decided</title><link>https://jeremn.dev/blog/workers-ai-what-the-free-tier-decided/</link><guid isPermaLink="true">https://jeremn.dev/blog/workers-ai-what-the-free-tier-decided/</guid><description>I wanted to run open models without the hardware to run them, so I built a scanner on Cloudflare Workers AI and kept it inside the free tier. The free tier is why it existed, why it worked, and in the end why it died.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><category>Cloudflare</category><category>LLM</category><category>Tooling</category></item><item><title>Diving into Herdr</title><link>https://jeremn.dev/blog/diving-into-herdr/</link><guid isPermaLink="true">https://jeremn.dev/blog/diving-into-herdr/</guid><description>A terminal workspace manager that recognizes the coding agents running inside its panes. What it adds on top of tmux, how the client and the server split the work, what the five agent states actually mean, and where it stops helping.</description><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate><category>Agents</category><category>Tooling</category><category>Terminal</category></item><item><title>Contract tests without the stack</title><link>https://jeremn.dev/blog/contract-tests-without-the-stack/</link><guid isPermaLink="true">https://jeremn.dev/blog/contract-tests-without-the-stack/</guid><description>A suite that checks two applications still agree without starting either of them. What Pact writes down, the two settings that stop it reporting green over half a contract, the pipeline rule that admits its own blind spot, and the part of the work worth handing to an agent.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate><category>Testing</category><category>CI</category><category>Agents</category></item><item><title>Making Stryker run on a Svelte monorepo</title><link>https://jeremn.dev/blog/stryker-on-a-svelte-monorepo/</link><guid isPermaLink="true">https://jeremn.dev/blog/stryker-on-a-svelte-monorepo/</guid><description>The practical half: how the configs are split, what a surviving mutant is actually telling you, the four fixes that cover most of them, and the details that cost real time to get right when the whole thing has to run on every merge request.</description><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate><category>Testing</category><category>Svelte</category><category>CI</category></item><item><title>Who checks the agent&apos;s tests</title><link>https://jeremn.dev/blog/who-checks-the-agents-tests/</link><guid isPermaLink="true">https://jeremn.dev/blog/who-checks-the-agents-tests/</guid><description>Coverage says a line ran, not that anything was verified, and an agent asked for tests will happily produce the difference. Mutation testing tells the two apart. Putting it inside the agent&apos;s loop failed in exactly the way it was built to catch, and repairing that is what earns an automated check the right to block.</description><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate><category>Agents</category><category>Testing</category><category>Svelte</category></item><item><title>The best model still needs rules</title><link>https://jeremn.dev/blog/best-model-still-needs-rules/</link><guid isPermaLink="true">https://jeremn.dev/blog/best-model-still-needs-rules/</guid><description>A refactor that could not be avoided turned into a fair test of coding agents, because it had to actually ship. The strongest model produced mediocre code on its own. What made it useful was the structure built around it, one correction at a time, and the limit that structure never removed was knowing the work was correct.</description><pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate><category>Agents</category><category>Svelte</category><category>Refactoring</category></item><item><title>Renovate: the cost of a locked-down agent</title><link>https://jeremn.dev/blog/two-years-of-renovate-part-four/</link><guid isPermaLink="true">https://jeremn.dev/blog/two-years-of-renovate-part-four/</guid><description>The major upgrades the automation will not open on its own. A frontier agent on a locked-down runner produced confident, wrong merge requests, because the safeguards that hardened it also cut it off from what it needed. Run without those constraints, a different agent could verify the same upgrade. The problem was never the model.</description><pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate><category>Renovate</category><category>Agents</category><category>CI</category></item><item><title>Renovate: a small agent for the common failures</title><link>https://jeremn.dev/blog/two-years-of-renovate-part-three/</link><guid isPermaLink="true">https://jeremn.dev/blog/two-years-of-renovate-part-three/</guid><description>Automated dependency merge requests fail in a handful of predictable ways. A small model clears the mechanical ones, and when it cannot, it writes down what it found.</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><category>Renovate</category><category>Agents</category><category>CI</category></item><item><title>Renovate: refining the automation</title><link>https://jeremn.dev/blog/two-years-of-renovate-part-two/</link><guid isPermaLink="true">https://jeremn.dev/blog/two-years-of-renovate-part-two/</guid><description>Grouping so the output stays readable, cooldowns that had to be taught not to fight each other, moving onto a managed swarm, and finally letting minor and patch updates merge themselves.</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><category>Renovate</category><category>Dependencies</category><category>CI</category></item><item><title>Renovate: automating dependency management</title><link>https://jeremn.dev/blog/two-years-of-renovate-part-one/</link><guid isPermaLink="true">https://jeremn.dev/blog/two-years-of-renovate-part-one/</guid><description>Installing the bot took an afternoon. Teaching it what our repository actually was took a year, and most of that is grouping, a regex, and a CI job that writes changesets on its behalf.</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><category>Renovate</category><category>Dependencies</category><category>CI</category></item><item><title>Ten months of Svelte 5</title><link>https://jeremn.dev/blog/ten-months-of-svelte-5/</link><guid isPermaLink="true">https://jeremn.dev/blog/ten-months-of-svelte-5/</guid><description>Atoms upward, Svelte 4 and Svelte 5 side by side the whole time, while the product kept shipping. Almost none of it hurt. This is the part that did.</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><category>Svelte</category><category>Migration</category></item></channel></rss>