<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Api-Design on Tokenise</title><link>https://tokenise.rosvetic.com/tags/api-design/</link><description>Recent content in Api-Design on Tokenise</description><generator>Hugo</generator><language>en-gb</language><lastBuildDate>Fri, 30 Oct 2026 07:07:00 +0000</lastBuildDate><atom:link href="https://tokenise.rosvetic.com/tags/api-design/index.xml" rel="self" type="application/rss+xml"/><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></channel></rss>