<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tool-Agnostic on Tokenise</title><link>https://tokenise.rosvetic.com/tags/tool-agnostic/</link><description>Recent content in Tool-Agnostic on Tokenise</description><generator>Hugo</generator><language>en-gb</language><lastBuildDate>Sun, 01 Nov 2026 07:04:00 +0000</lastBuildDate><atom:link href="https://tokenise.rosvetic.com/tags/tool-agnostic/index.xml" rel="self" type="application/rss+xml"/><item><title>Gate the NuGet packages your agent adds: a lock file, the audit, and a short script for what advisories miss</title><link>https://tokenise.rosvetic.com/posts/nuget-lockfile-gate-agent-added-packages/</link><pubDate>Sun, 01 Nov 2026 07:04:00 +0000</pubDate><guid>https://tokenise.rosvetic.com/posts/nuget-lockfile-gate-agent-added-packages/</guid><description>&lt;p&gt;An agent is asked to add retry logic and comes back with a green build and a diff that includes one new line in a &lt;code&gt;.csproj&lt;/code&gt;: a &lt;code&gt;PackageReference&lt;/code&gt; to something with a plausible name. The build passes because the package exists. Nobody asks who published it, when, or what else came with it, because a 40-file diff has better places for the eye to go.&lt;/p&gt;</description></item><item><title>Run your README's code blocks as Vitest tests so an agent can't leave the docs lying</title><link>https://tokenise.rosvetic.com/posts/readme-code-blocks-as-vitest-tests/</link><pubDate>Sat, 31 Oct 2026 16:04:00 +0000</pubDate><guid>https://tokenise.rosvetic.com/posts/readme-code-blocks-as-vitest-tests/</guid><description>&lt;p&gt;An agent renames a function, updates every caller, fixes the tests, and ships a clean diff. The README still shows the old name. Nothing failed, because nothing reads the README except the next developer, who pastes the example, gets a compile error and loses ten minutes deciding whether to trust anything else on the page.&lt;/p&gt;</description></item><item><title>Move to TypeScript 7 in two passes: get clean on 6.0, then diff the two compilers</title><link>https://tokenise.rosvetic.com/posts/typescript-7-migration-two-compilers-diff/</link><pubDate>Sat, 31 Oct 2026 11:07:00 +0000</pubDate><guid>https://tokenise.rosvetic.com/posts/typescript-7-migration-two-compilers-diff/</guid><description>&lt;p&gt;A project that compiles cleanly on TypeScript 6.0 can still fail on 7.0, and the reason is almost always one line in &lt;code&gt;tsconfig.json&lt;/code&gt;. 7.0 turned the options 6.0 deprecated into hard errors, changed what &lt;code&gt;rootDir&lt;/code&gt; and &lt;code&gt;types&lt;/code&gt; default to, and shipped without a programmatic API. None of that is hard to fix. The risk is finding it one CI failure at a time, or handing the whole thing to an agent that &amp;ldquo;fixes&amp;rdquo; errors by loosening the config.&lt;/p&gt;</description></item><item><title>Check an agent's architecture summary against the import graph before you trust it</title><link>https://tokenise.rosvetic.com/posts/check-agent-architecture-summary-against-import-graph/</link><pubDate>Sat, 31 Oct 2026 07:03:00 +0000</pubDate><guid>https://tokenise.rosvetic.com/posts/check-agent-architecture-summary-against-import-graph/</guid><description>&lt;p&gt;Day one in a repo you didn&amp;rsquo;t write, and the agent&amp;rsquo;s tour reads beautifully. &amp;ldquo;The entry point wires up a core client, which delegates to utility modules and throws typed errors.&amp;rdquo; Every sentence sounds right. Some of them aren&amp;rsquo;t, and nothing in the prose tells you which.&lt;/p&gt;</description></item><item><title>What the AI productivity studies measured, and what to measure on your own team</title><link>https://tokenise.rosvetic.com/posts/ai-productivity-studies-what-they-measured/</link><pubDate>Fri, 30 Oct 2026 16:02:00 +0000</pubDate><guid>https://tokenise.rosvetic.com/posts/ai-productivity-studies-what-they-measured/</guid><description>&lt;p&gt;Three sources get quoted whenever someone argues about whether AI makes a team faster: a METR trial, the DORA report and the Stack Overflow survey. They measure different things, and only one of them tried to time anything.&lt;/p&gt;</description></item><item><title>Move a JavaScript module to strict TypeScript one flag at a time, with the compiler and your tests as the gate</title><link>https://tokenise.rosvetic.com/posts/js-to-strict-typescript-one-flag-at-a-time/</link><pubDate>Fri, 30 Oct 2026 11:05:00 +0000</pubDate><guid>https://tokenise.rosvetic.com/posts/js-to-strict-typescript-one-flag-at-a-time/</guid><description>&lt;p&gt;A 400-line JavaScript module has to become TypeScript, and the obvious plan is to rename every file to &lt;code&gt;.ts&lt;/code&gt;, flip &lt;code&gt;strict&lt;/code&gt; on and let an agent grind through the errors. That plan produces a diff nobody can review. Hundreds of errors arrive at once, the fastest way to silence them is &lt;code&gt;any&lt;/code&gt; or a cast, and somewhere in the pile a &amp;ldquo;fix&amp;rdquo; quietly changes what the function returns.&lt;/p&gt;</description></item><item><title>Write the OpenAPI file first, then let the compiler and a short test catch every place the agent drifts from it</title><link>https://tokenise.rosvetic.com/posts/contract-first-openapi-csharp-vitest-drift/</link><pubDate>Fri, 30 Oct 2026 07:07:00 +0000</pubDate><guid>https://tokenise.rosvetic.com/posts/contract-first-openapi-csharp-vitest-drift/</guid><description>&lt;p&gt;The ticket says the invoice response has a &lt;code&gt;totalMinor&lt;/code&gt; field. The backend developer&amp;rsquo;s agent returns &lt;code&gt;total&lt;/code&gt;, because that read more naturally to it. The frontend developer&amp;rsquo;s agent calls &lt;code&gt;invoice.totalMinor&lt;/code&gt;, divides by 100 and renders &lt;code&gt;NaN&lt;/code&gt;. Both pull requests are green. Each side&amp;rsquo;s tests were written by the side that made the mistake, so each side agreed with itself.&lt;/p&gt;</description></item><item><title>Build a feature from a spec, tests first, then let Stryker.NET list what the spec forgot</title><link>https://tokenise.rosvetic.com/posts/spec-first-aspnet-core-feature-stryker-gaps/</link><pubDate>Thu, 29 Oct 2026 23:12:00 +0000</pubDate><guid>https://tokenise.rosvetic.com/posts/spec-first-aspnet-core-feature-stryker-gaps/</guid><description>&lt;p&gt;A pricing rule arrives as a ticket: promo codes, a cap on one of them, a minimum spend on another, and &amp;ldquo;obviously only one code per order&amp;rdquo;. The agent writes the endpoint in a minute. It looks right. Two weeks later a customer with a 30.00 basket gets told the minimum isn&amp;rsquo;t met, because the check says &lt;code&gt;&amp;lt;=&lt;/code&gt; where the ticket meant &lt;code&gt;&amp;lt;&lt;/code&gt;, and nobody can say which of the two the ticket actually meant.&lt;/p&gt;</description></item></channel></rss>