<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Agentic Architect</title>
    <description>The latest articles on DEV Community by Agentic Architect (@agentic_architect).</description>
    <link>https://dev.to/agentic_architect</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3943025%2Fd93dd98f-3af5-45cf-8a86-24170f172687.png</url>
      <title>DEV Community: Agentic Architect</title>
      <link>https://dev.to/agentic_architect</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/agentic_architect"/>
    <language>en</language>
    <item>
      <title>Do We Actually Need Fable 5? A Reality Check on Frontier AI</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 12 Jul 2026 23:18:10 +0000</pubDate>
      <link>https://dev.to/agentic_architect/do-we-actually-need-fable-5-a-reality-check-on-frontier-ai-2434</link>
      <guid>https://dev.to/agentic_architect/do-we-actually-need-fable-5-a-reality-check-on-frontier-ai-2434</guid>
      <description>&lt;p&gt;Now that Fable 5 is open to the public again, I decided to jump back in and start tinkering.&lt;/p&gt;

&lt;p&gt;So, what are my conclusions after spending hard-earned cash on tokens?&lt;/p&gt;

&lt;p&gt;Are Fable 5's responses good? Yes, of course they are.&lt;br&gt;
Is it really expensive? Yes—in fact, I would argue that it is too expensive.&lt;/p&gt;

&lt;p&gt;Granted, that is a complex claim to make, so let me break down how I am looking at it.&lt;/p&gt;

&lt;p&gt;To figure out if the cost is justified, the real question you have to ask is: What is your end goal?&lt;/p&gt;

&lt;p&gt;Are you building a full front-to-backend web or mobile app?&lt;/p&gt;

&lt;p&gt;Are you tackling a complete website redesign?&lt;/p&gt;

&lt;p&gt;Or do you just need it to scour your entire codebase to track down a tricky security hole or a difficult bug?&lt;/p&gt;

&lt;p&gt;Depending on your answer, that "too expensive" label can definitely shift. I would argue that it is only truly worth spending the extra money on a frontier model if you are dealing with a massively difficult bug or a major architectural redesign. And honestly, even then, it is still up for debate.&lt;/p&gt;

&lt;p&gt;The reality is that there are so many cheaper, highly capable models available right now that paying a premium for the absolute cutting-edge is often unnecessary.&lt;/p&gt;

&lt;p&gt;I liken it to the evolution of smartphones. Smartphone cameras used to get noticeably better with each new release. But a few years ago, they hit a critical mass. The advancements in hardware and software between the latest flagship phone and the previous version became virtually undetectable to the human eye. The cheaper, slightly older model simply became "good enough" for almost every picture you would ever need to take.&lt;/p&gt;

&lt;p&gt;I believe we have already reached that exact point with LLMs.&lt;/p&gt;

&lt;p&gt;In my day job this week, I saw the release of GPT-5.6. I tested it out, and while it was undeniably good, I quickly found myself returning to GPT-5.5. The responses from 5.5 were more than good enough for the size of the codebase and the specific tasks I was working on. Plus, it used far fewer tokens, which saved my daily quota.&lt;/p&gt;

&lt;p&gt;So in short: sure, give the frontier models a try (with Fable 5 being the current star of the show). But use them with caution and strategy. More often than not, there is another LLM out there that will do exactly what you need for a fraction of the cost.&lt;/p&gt;

&lt;p&gt;What are your thoughts on this? I would be interested to hear how you balance cost and capability in your own workflows.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>This week in Cursor + .NET — 8 rules + 1 essay (week ending July 12, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 12 Jul 2026 11:31:28 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-8-rules-1-essay-week-ending-july-12-2026-34b9</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-8-rules-1-essay-week-ending-july-12-2026-34b9</guid>
      <description>&lt;p&gt;&lt;em&gt;Every weekday a single, opinionated rule for senior C#/.NET engineers using Cursor. Here's the full week in one read — canonical posts live on &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;the Agentic Architect blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  New essays this week
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://agentic-architect.dev/blog/09-glm-5-2-vs-claude-fable-5.html" rel="noopener noreferrer"&gt;GLM 5.2 vs Claude Fable 5: agentic coding at a fraction of the cost&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Tue 07 Jul · AI models&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I ran the same agent task on both. Fable 5 is faster and stronger on benchmarks, but GLM 5.2 finished for $2.76 vs over $10. The honest cost math for running agents on open weights.&lt;/p&gt;

&lt;h2&gt;
  
  
  8 daily senior rules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rule 10: AsNoTracking for Reads
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 12 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every read-only EF Core query should call AsNoTracking. Add a rule that recognises query methods returning DTOs (not entities) and inserts the call. Cursor never does this by default and your read perf degrades silently across releases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-12" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 9: Scoped Capture in Singleton
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sat 11 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The single most expensive .NET runtime bug: a Singleton holding a Scoped service. Cursor cheerfully writes this without warning. Audit constructor parameters of any class registered as Singleton — if any are typically Scoped (DbContext, repositories, MediatR sender), flag it before merge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-11" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 8: CancellationToken Propagation
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Fri 10 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every async method in your codebase should accept and forward a CancellationToken. Make it a rule that any new async signature without one is flagged. Stops the AI from quietly losing cancellation half-way down a call chain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-10" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 7: IHttpClientFactory Discipline
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Thu 09 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Refuse new HttpClient() in any generated code. Force Cursor to inject IHttpClientFactory or a typed client. The classic socket-exhaustion bug is exactly the kind of footgun an AI hands you without realising.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-09" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 6: TimeProvider Injection
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Wed 08 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Never let Cursor hardcode DateTime.Now or DateTime.UtcNow in business logic. Inject TimeProvider (or your own IClock) instead. This makes time deterministic for tests and stops the AI reaching for static APIs whenever it generates time-aware code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-08" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  GLM 5.2 vs Claude Fable 5 — the full comparison
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Wed 08 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Side-by-side: pricing per million tokens, benchmarks, context windows, and the honest verdict on which model to use for which kind of agent run. Open weights vs closed frontier, with the real cost math.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-08" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 5: Minimal API Groups
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Tue 07 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Use MapGroup and EndPoints for .NET 9 services. It keeps the context window lean and focused, helping the AI provide more accurate code suggestions than it can with massive, bloated Controllers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-07" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 4: Validator Enforcement
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Mon 06 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every MediatR Request must have a FluentValidation rule. Force the AI to check the validator before writing handler logic. This prevents "context rot" where the AI forgets your business constraints.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-06" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try one rule before you trust the whole kit
&lt;/h2&gt;

&lt;p&gt;The free &lt;strong&gt;&lt;a href="https://agentic-architect.dev/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; is one drop-in Cursor rule that ends the morning re-explanation ritual. Install in 60 seconds, see whether Cursor actually remembers your DI lifetimes, and decide for yourself whether the full kit is worth £9.00.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free sample:&lt;/strong&gt; &lt;a href="https://agentic-architect.dev/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt; on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full kit (£9.00, one-time):&lt;/strong&gt; &lt;a href="https://payhip.com/b/98aSq?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=paid_kit" rel="noopener noreferrer"&gt;Agentic Architect Kit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily rules feed:&lt;/strong&gt; &lt;a href="https://agentic-architect.dev/blog/?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=blog_index" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Canonical home for everything in this digest: &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>ai</category>
      <category>cursor</category>
    </item>
    <item>
      <title>The AI Senior Dev Dilemma: Am I Coding or Just Prompting?</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sat, 11 Jul 2026 00:50:38 +0000</pubDate>
      <link>https://dev.to/agentic_architect/the-ai-senior-dev-dilemma-am-i-coding-or-just-prompting-2j78</link>
      <guid>https://dev.to/agentic_architect/the-ai-senior-dev-dilemma-am-i-coding-or-just-prompting-2j78</guid>
      <description>&lt;p&gt;So, I’m still fairly new to this dev thing—five years full-time, now a senior dev.&lt;/p&gt;

&lt;p&gt;I was recently told to pick up Angular for a new project at work, but honestly? I’ve been letting AI do a lot of the heavy lifting. My manager knows exactly how I’m working and is happy with the pace, mostly because my tickets are getting closed right on time.&lt;/p&gt;

&lt;p&gt;I give the agent full access to the codebase, but I’m strict: it’s never allowed to push changes directly. It just gives me suggestions, and I review them before pasting anything into the files.&lt;/p&gt;

&lt;p&gt;I’ll admit, the logic it spits out makes sense, but I’m definitely not the one who wrote it. It works, mostly because I keep the agent on a very tight leash. I’ve even started using it for code reviews, and it saves me so much time. I genuinely feel like I couldn't do this job half as fast—or as well—without it.&lt;/p&gt;

&lt;p&gt;Now, the app is nearly ready after months of development, and I can’t say I’ve learned a hell of a lot about Angular. Should I have? Or is that just my ego talking? What’s the actual value in hand-typing boilerplate just to "learn" it, when the agent can build it for me in seconds anyway?&lt;/p&gt;

&lt;p&gt;I do feel like a fraud sometimes, like I’m nothing more than a "vibe coder." I spent six years at uni and another five working full-time, but am I really any better than a vibe coder?&lt;/p&gt;

&lt;p&gt;I like to think so, but the doubt creeps in now and again.&lt;/p&gt;

&lt;p&gt;What do you think?&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>ai</category>
      <category>codereview</category>
    </item>
    <item>
      <title>GLM 5.2 vs Claude Fable 5: agentic coding at a fraction of the cost</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Tue, 07 Jul 2026 22:01:53 +0000</pubDate>
      <link>https://dev.to/agentic_architect/glm-52-vs-claude-fable-5-agentic-coding-at-a-fraction-of-the-cost-562l</link>
      <guid>https://dev.to/agentic_architect/glm-52-vs-claude-fable-5-agentic-coding-at-a-fraction-of-the-cost-562l</guid>
      <description>&lt;p&gt;GLM 5.2 vs Claude Fable 5: &lt;em&gt;agentic coding at a fraction of the cost&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I gave GLM 5.2 and Claude Fable 5 the same real job: redesign a project plan and start implementing it. Fable 5 finished in about 9 minutes and cost me a little over $10. GLM 5.2 took about 17 minutes and cost $2.76. The open model was slower, no question. But the output was just as good for this task, and it cost roughly a quarter as much. That math has me excited about running agents on open weights this year.&lt;/p&gt;

&lt;p&gt;The task and the numbers&lt;/p&gt;

&lt;p&gt;Same prompt on both, same repo context, same agent harness. The job wasn't a toy benchmark. It was the kind of thing I actually do in a working week: take a half-formed project plan, restructure it, and start writing the code. Here's what each run looked like.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;API cost&lt;/th&gt;
&lt;th&gt;Output quality&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Fable 5&lt;/td&gt;
&lt;td&gt;about 9 min&lt;/td&gt;
&lt;td&gt;over $10.00&lt;/td&gt;
&lt;td&gt;Clean plan, usable first pass at the code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM 5.2&lt;/td&gt;
&lt;td&gt;about 17 min&lt;/td&gt;
&lt;td&gt;$2.76&lt;/td&gt;
&lt;td&gt;Equally good plan and first pass for this task&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Fable 5 is clearly the faster model, and on raw benchmarks it's the stronger one too. What surprised me was how little that mattered for this task. GLM 5.2's plan was just as workable, and the code it produced was fine. I went in expecting to pay the Fable 5 tax for quality and came out thinking I'd overpaid.&lt;/p&gt;

&lt;p&gt;What each model actually is&lt;/p&gt;

&lt;p&gt;Two different labs, two different bets. Fable 5 is Anthropic's top generally available model, a new tier above Opus they're calling Mythos-class. GLM 5.2 is Z.ai's (formerly Zhipu) open-weight coding flagship, with the weights out under MIT.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;th&gt;GLM 5.2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Maker&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Z.ai (Zhipu)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Released&lt;/td&gt;
&lt;td&gt;June 9, 2026&lt;/td&gt;
&lt;td&gt;June 13, 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tier&lt;/td&gt;
&lt;td&gt;Mythos-class (above Opus)&lt;/td&gt;
&lt;td&gt;Open weights, MIT licence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Architecture&lt;/td&gt;
&lt;td&gt;Closed&lt;/td&gt;
&lt;td&gt;Sparse MoE, about 40B active / 753B total&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max output&lt;/td&gt;
&lt;td&gt;128K tokens&lt;/td&gt;
&lt;td&gt;128K tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model ID&lt;/td&gt;
&lt;td&gt;claude-fable-5&lt;/td&gt;
&lt;td&gt;GLM-5.2 (Z.ai API / HF weights)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pricing, per million tokens&lt;/p&gt;

&lt;p&gt;This is where the story changes. Fable 5 is $10 in and $50 out per million tokens. GLM 5.2 is $1.40 in and $4.40 out. Cached input is where Fable 5 claws some back, but it's still several times more expensive.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Per 1M tokens&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;th&gt;GLM 5.2&lt;/th&gt;
&lt;th&gt;Ratio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;td&gt;$1.40&lt;/td&gt;
&lt;td&gt;about 7x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$50.00&lt;/td&gt;
&lt;td&gt;$4.40&lt;/td&gt;
&lt;td&gt;about 11x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached input&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;$0.26&lt;/td&gt;
&lt;td&gt;about 4x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch input&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;(vendor batch)&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch output&lt;/td&gt;
&lt;td&gt;$25.00&lt;/td&gt;
&lt;td&gt;(vendor batch)&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Agentic loops are output-heavy. The model reads your files, thinks, edits, reads again. Most of the token spend is output, which is exactly where Fable 5 is most expensive. That's why my $10+ run vs $2.76 run lined up so closely with the output-price ratio.&lt;/p&gt;

&lt;p&gt;Where Fable 5 wins&lt;/p&gt;

&lt;p&gt;On benchmarks, Fable 5 is ahead and it's not subtle. Anthropic puts it state-of-the-art on CursorBench and FrontierBench, and it's the first to break 90 percent on their core analytics benchmark. The independent numbers agree:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;SWE-bench Verified: 95.0% for Fable 5. GLM 5.2 doesn't publish a comparable Verified number.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SWE-bench Pro: 80.0% for Fable 5 vs 62.1 for GLM 5.2. Same suite, Fable 5 clearly ahead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FrontierCode / FrontierBench: Fable 5 takes the #1 spot. GLM 5.2 scores 74.4 on FrontierSWE, which is strong for an open model but behind Fable 5.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Speed. In my run, Fable 5 finished in roughly half the wall-clock time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're doing the hardest long-horizon refactors, the ones where a model has to hold a plan together across many steps and a wrong turn costs you an hour of cleanup, Fable 5 is the safer pick. The gap on SWE-bench Pro is real.&lt;/p&gt;

&lt;p&gt;Where GLM 5.2 wins&lt;/p&gt;

&lt;p&gt;Price is the obvious one, but it's not the only one. GLM 5.2 is the top open-weight model on the Artificial Analysis Intelligence Index (51, fifth overall, with Fable 5, Opus 4.8, and GPT-5.5 ahead of it). For an open model that's a serious showing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;SWE-bench Pro 62.1 beats GPT-5.5's 58.6 on the same suite. That's the headline number Z.ai published, and it holds up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Terminal-Bench 2.1: 81.0, up from GLM 5.1's 62.0. Big jump on shell-and-tool work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;1M context, usable. Z.ai trained for long context specifically, and the 1M window isn't just a spec-sheet number.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MIT weights. You can self-host. No per-token bill at all if you have the GPUs, and no vendor lock-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cost. My run came in at roughly a quarter of Fable 5's price for output-equivalent work.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The GLM Coding Plan subscription is reportedly about a tenth of Anthropic's Claude Code and Claude Max tiers, if you'd rather pay a flat fee than meter tokens. For someone running agents all day, that alone changes the economics.&lt;/p&gt;

&lt;p&gt;The honest verdict&lt;/p&gt;

&lt;p&gt;Fable 5 is the better model. The benchmarks say so and my run felt that way too, faster and a touch more confident on the hard parts. If the task is hard and a wrong step is expensive, pay for Fable 5.&lt;/p&gt;

&lt;p&gt;But most of my agent runs aren't that. They're plan-and-implement, refactor-and-test, the bread and butter where good-enough plus cheap wins on volume. For those, GLM 5.2 is now my default. $2.76 instead of $10-plus per run means I can let the agent loop without watching the meter, and that changes how I work. An open model that's this close, this much cheaper, and self-hostable is the thing I've been waiting for open weights to deliver.&lt;/p&gt;

&lt;p&gt;If you're running agents on closed frontier models and wincing at the bill, give GLM 5.2 a real task this week and compare. I'd guess you keep Fable 5 for the hard ones and switch the rest.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Free starter (3 Cursor rules):&lt;/strong&gt; &lt;a href="https://agentic-architect.dev/#free-kit-signup" rel="noopener noreferrer"&gt;https://agentic-architect.dev/#free-kit-signup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full kit (£9, one-time):&lt;/strong&gt; &lt;a href="https://payhip.com/b/98aSq?utm_source=devto&amp;amp;utm_medium=09-glm-5-2-vs-claude-fable-5&amp;amp;utm_campaign=paid_kit" rel="noopener noreferrer"&gt;Get Agentic Architect&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://agentic-architect.dev/blog/09-glm-5-2-vs-claude-fable-5.html" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/09-glm-5-2-vs-claude-fable-5.html&lt;/a&gt;. Part of the &lt;a href="https://agentic-architect.dev/" rel="noopener noreferrer"&gt;Agentic Architect&lt;/a&gt; persistence kit for Cursor + .NET.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cursor</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>This week in Cursor + .NET — 7 rules (week ending July 05, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 05 Jul 2026 11:48:24 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-july-05-2026-47im</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-july-05-2026-47im</guid>
      <description>&lt;p&gt;&lt;em&gt;Every weekday a single, opinionated rule for senior C#/.NET engineers using Cursor. Here's the full week in one read — canonical posts live on &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;the Agentic Architect blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7 daily senior rules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rule 3: Structured Logging
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 05 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Enforce ILogger with structured templates. Never use string interpolation in logs. This ensures that when you feed logs back into Cursor for debugging, the AI recognizes the patterns immediately.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-05" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 2: Persistence Boundaries
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sat 04 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Never let the AI write database logic in your Controllers. Enforce a strict boundary where all IQueryable access stays in the Infrastructure layer. This keeps your business logic "pure" and readable for the LLM.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-04" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 1: The Result Pattern
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Fri 03 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Stop using nulls for flow control. Use a Result object to force Cursor to handle success and failure cases explicitly. This prevents 90% of AI-generated logic errors in Web APIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-03" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 25: ActivitySource for OpenTelemetry
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Thu 02 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Logs alone won't debug a distributed system. Add a static readonly ActivitySource per project and wrap every external call (DB, HTTP, queue) in StartActivity. Cursor never adds OTEL spans on its own — give it a rule that recognises external-call patterns and proposes the trace.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-02" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 24: ValueTask Only When Justified
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Wed 01 Jul&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;ValueTask is a perf optimisation for hot paths that often return synchronously. It is not a drop-in for Task. Cursor swaps them around without thinking. Flag ValueTask returns and ask whether the method is actually mostly synchronous. If not, revert to Task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-07-01" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 23: No Bool Flag Parameters
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Tue 30 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;SendEmail(string to, bool isHtml) should be SendHtmlEmail and SendPlainEmail. Bool flags hide branching that belongs in the type system. Flag any method signature with two or more bool parameters as a refactor candidate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-30" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 22: BackgroundService Over Task.Run
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Mon 29 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Long-running work in ASP.NET Core goes in a BackgroundService, not Task.Run inside a controller. Cursor will happily fire Task.Run and call it "async work" — your request thread will die mid-execution and you'll never know why. Catch Task.Run outside test code and propose a hosted service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-29" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try one rule before you trust the whole kit
&lt;/h2&gt;

&lt;p&gt;The free &lt;strong&gt;&lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; is one drop-in Cursor rule that ends the morning re-explanation ritual. Install in 60 seconds, see whether Cursor actually remembers your DI lifetimes, and decide for yourself whether the full kit is worth £9.00.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free sample:&lt;/strong&gt; &lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt; on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full kit (£9.00, one-time):&lt;/strong&gt; &lt;a href="https://payhip.com/b/98aSq?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=paid_kit" rel="noopener noreferrer"&gt;Agentic Architect Kit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily rules feed:&lt;/strong&gt; &lt;a href="https://agentic-architect.dev/blog/?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=blog_index" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Canonical home for everything in this digest: &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>ai</category>
      <category>cursor</category>
    </item>
    <item>
      <title>This week in Cursor + .NET — 6 rules (week ending June 28, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 28 Jun 2026 11:58:43 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-6-rules-week-ending-june-28-2026-55f9</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-6-rules-week-ending-june-28-2026-55f9</guid>
      <description>&lt;p&gt;&lt;em&gt;Every weekday a single, opinionated rule for senior C#/.NET engineers using Cursor. Here's the full week in one read — canonical posts live on &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;the Agentic Architect blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6 daily senior rules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rule 21: Channels for Producer Consumer
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 28 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;System.Threading.Channels beats BlockingCollection and beats roll-your-own queue plus SemaphoreSlim. The AI reaches for ConcurrentQueue every time and stitches it together by hand. A rule that detects producer/consumer patterns and proposes Channel will save you a class.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-28" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 20: Source-Generated JSON Serialisation
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sat 27 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Reflection-based System.Text.Json is fine for prototypes. For hot paths and AOT, use JsonSerializable source generation. Cursor never thinks of this on its own — add a rule that flags new DTO classes and asks whether they should be source-generated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-27" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 19: NetArchTest for Boundaries
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Fri 26 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Architectural rules belong in tests, not in code review. Encode them as NetArchTest assertions ("no class in Domain references EntityFrameworkCore") and they fail your build instead of your standup. Add the corresponding test whenever a new layer or project is introduced.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-26" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 18: WebApplicationFactory for Integration Tests
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Thu 25 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In-memory EF Core providers lie. Use WebApplicationFactory with Testcontainers (SQL Server, Postgres) for real integration coverage. Cursor defaults to UseInMemoryDatabase — it passes locally and ships the bug to production. Flag the in-memory provider in test projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-25" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 17: ConfigureAwait false in Libraries
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Wed 24 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Library code (non-ASP.NET) should ConfigureAwait false on every awaited Task. ASP.NET Core code should not. Cursor mixes the two contexts in the same solution. Detect the project type and enforce the right default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-24" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 15: Records for Value Objects, Classes for Entities
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Mon 22 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Value objects (Money, Address, Coordinates) should be records. Entities with identity (Order, Customer) should be classes with an Id. Cursor mixes these constantly. A rule that classifies based on the presence or absence of an identity property keeps the distinction honest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-22" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try one rule before you trust the whole kit
&lt;/h2&gt;

&lt;p&gt;The free &lt;strong&gt;&lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; is one drop-in Cursor rule that ends the morning re-explanation ritual. Install in 60 seconds, see whether Cursor actually remembers your DI lifetimes, and decide for yourself whether the full kit is worth £9.00.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free sample:&lt;/strong&gt; &lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt; on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full kit (£9.00, one-time):&lt;/strong&gt; &lt;a href="https://payhip.com/b/98aSq?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=paid_kit" rel="noopener noreferrer"&gt;Agentic Architect Kit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily rules feed:&lt;/strong&gt; &lt;a href="https://agentic-architect.dev/blog/?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=blog_index" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Canonical home for everything in this digest: &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>ai</category>
      <category>cursor</category>
    </item>
    <item>
      <title>This week in Cursor + .NET — 7 rules (week ending June 21, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 21 Jun 2026 12:21:23 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-june-21-2026-2n6k</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-june-21-2026-2n6k</guid>
      <description>&lt;p&gt;&lt;em&gt;Every weekday a single, opinionated rule for senior C#/.NET engineers using Cursor. Here's the full week in one read — canonical posts live on &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;the Agentic Architect blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7 daily senior rules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rule 14: Sealed By Default
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 21 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Mark every class sealed unless inheritance is explicitly planned. Stops Cursor inventing accidental inheritance hierarchies "for flexibility." Small but measurable virtual-call perf wins too.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-21" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 13: Strongly-Typed IDs
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sat 20 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;OrderId as record struct OrderId(Guid Value) beats raw Guid everywhere. Stops the AI passing a CustomerId where an OrderId was expected — a bug the compiler can't catch with primitive obsession but catches instantly with domain primitives.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-20" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 12: IOptionsSnapshot Over Raw Config
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Fri 19 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Business code should never call IConfiguration directly. Strongly-typed IOptions or IOptionsSnapshot bindings only. The AI loves to "just grab the config value" — refuse it and force a settings class with validation attributes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-19" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 11: Rethrow, Don't throw ex
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Thu 18 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;throw ex resets the stack trace. throw preserves it. Cursor gets this wrong about 40 percent of the time when generating catch blocks. Rewrite any naked throw ex to throw unless the exception has been explicitly wrapped.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-18" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 10: AsNoTracking for Reads
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Wed 17 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every read-only EF Core query should call AsNoTracking. Add a rule that recognises query methods returning DTOs (not entities) and inserts the call. Cursor never does this by default and your read perf degrades silently across releases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-17" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 9: Scoped Capture in Singleton
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Tue 16 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The single most expensive .NET runtime bug: a Singleton holding a Scoped service. Cursor cheerfully writes this without warning. Audit constructor parameters of any class registered as Singleton — if any are typically Scoped (DbContext, repositories, MediatR sender), flag it before merge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-16" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 8: CancellationToken Propagation
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Mon 15 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every async method in your codebase should accept and forward a CancellationToken. Make it a rule that any new async signature without one is flagged. Stops the AI from quietly losing cancellation half-way down a call chain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-15" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try one rule before you trust the whole kit
&lt;/h2&gt;

&lt;p&gt;The free &lt;strong&gt;&lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; is one drop-in Cursor rule that ends the morning re-explanation ritual. Install in 60 seconds, see whether Cursor actually remembers your DI lifetimes, and decide for yourself whether the full kit is worth £9.00.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free sample:&lt;/strong&gt; &lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt; on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full kit (£9.00, one-time):&lt;/strong&gt; &lt;a href="https://payhip.com/b/98aSq?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=paid_kit" rel="noopener noreferrer"&gt;Agentic Architect Kit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily rules feed:&lt;/strong&gt; &lt;a href="https://agentic-architect.dev/blog/?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=blog_index" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Canonical home for everything in this digest: &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>ai</category>
      <category>cursor</category>
    </item>
    <item>
      <title>This week in Cursor + .NET — 7 rules (week ending June 14, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 14 Jun 2026 12:15:51 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-june-14-2026-3lg5</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-june-14-2026-3lg5</guid>
      <description>&lt;p&gt;&lt;em&gt;Every weekday a single, opinionated rule for senior C#/.NET engineers using Cursor. Here's the full week in one read — canonical posts live on &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;the Agentic Architect blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7 daily senior rules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rule 7: IHttpClientFactory Discipline
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 14 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Refuse new HttpClient() in any generated code. Force Cursor to inject IHttpClientFactory or a typed client. The classic socket-exhaustion bug is exactly the kind of footgun an AI hands you without realising.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-14" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 6: TimeProvider Injection
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sat 13 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Never let Cursor hardcode DateTime.Now or DateTime.UtcNow in business logic. Inject TimeProvider (or your own IClock) instead. This makes time deterministic for tests and stops the AI reaching for static APIs whenever it generates time-aware code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-13" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 5: Minimal API Groups
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Fri 12 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Use MapGroup and EndPoints for .NET 9 services. It keeps the context window lean and focused, helping the AI provide more accurate code suggestions than it can with massive, bloated Controllers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-12" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 4: Validator Enforcement
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Thu 11 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every MediatR Request must have a FluentValidation rule. Force the AI to check the validator before writing handler logic. This prevents "context rot" where the AI forgets your business constraints.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-11" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 3: Structured Logging
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Wed 10 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Enforce ILogger with structured templates. Never use string interpolation in logs. This ensures that when you feed logs back into Cursor for debugging, the AI recognizes the patterns immediately.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-10" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 2: Persistence Boundaries
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Tue 09 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Never let the AI write database logic in your Controllers. Enforce a strict boundary where all IQueryable access stays in the Infrastructure layer. This keeps your business logic "pure" and readable for the LLM.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-09" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 1: The Result Pattern
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Mon 08 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Stop using nulls for flow control. Use a Result object to force Cursor to handle success and failure cases explicitly. This prevents 90% of AI-generated logic errors in Web APIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-08" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try one rule before you trust the whole kit
&lt;/h2&gt;

&lt;p&gt;The free &lt;strong&gt;&lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; is one drop-in Cursor rule that ends the morning re-explanation ritual. Install in 60 seconds, see whether Cursor actually remembers your DI lifetimes, and decide for yourself whether the full kit is worth £9.00.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free sample:&lt;/strong&gt; &lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt; on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full kit (£9.00, one-time):&lt;/strong&gt; &lt;a href="https://payhip.com/b/98aSq?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=paid_kit" rel="noopener noreferrer"&gt;Agentic Architect Kit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily rules feed:&lt;/strong&gt; &lt;a href="https://agentic-architect.dev/blog/?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=blog_index" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Canonical home for everything in this digest: &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>ai</category>
      <category>cursor</category>
    </item>
    <item>
      <title>The AI-generated C# that passes review and breaks in production</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Tue, 09 Jun 2026 21:34:17 +0000</pubDate>
      <link>https://dev.to/agentic_architect/the-ai-generated-c-that-passes-review-and-breaks-in-production-5ci3</link>
      <guid>https://dev.to/agentic_architect/the-ai-generated-c-that-passes-review-and-breaks-in-production-5ci3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — AI assistants are producing C# that &lt;em&gt;looks&lt;/em&gt; correct and passes review, but reintroduces production regressions we spent years training out of teams. I'm trying to find out whether other .NET teams see the same patterns — and what's actually catching them before merge.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;More AI-generated C# is landing in pull requests. Most of it is fine.&lt;/p&gt;

&lt;p&gt;But a &lt;strong&gt;specific category keeps slipping through&lt;/strong&gt; — and it's the dangerous one, because it compiles, tests pass, and a human skim says "looks good."&lt;/p&gt;




&lt;h2&gt;
  
  
  The pattern
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The code compiles. Tests pass. Review approves. Production finds out.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These aren't syntax errors. They're &lt;strong&gt;architectural intent&lt;/strong&gt; violations — the kind of thing a senior dev would have caught in review &lt;em&gt;before&lt;/em&gt; PR volume tripled.&lt;/p&gt;




&lt;h2&gt;
  
  
  Five regressions I keep seeing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. EF Core read paths without &lt;code&gt;AsNoTracking()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Fine in dev. Expensive on a hot read path in prod.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Looks reasonable. Tracks entities you never mutate.&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Orders&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CustomerId&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToListAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cancellationToken&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix direction:&lt;/strong&gt; &lt;code&gt;AsNoTracking()&lt;/code&gt; on read-only queries, or a team convention documented in &lt;code&gt;CLAUDE.md&lt;/code&gt; / Copilot instructions.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Captive dependency (scoped service in a singleton)
&lt;/h3&gt;

&lt;p&gt;Compiles. Runs. Wrong state across requests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Singleton lives forever; scoped dependency does not.&lt;/span&gt;
&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddScoped&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IOrderRepository&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OrderRepository&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddSingleton&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ReportCache&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt; &lt;span class="c1"&gt;// ctor takes IOrderRepository&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix direction:&lt;/strong&gt; align lifetimes, or inject &lt;code&gt;IServiceScopeFactory&lt;/code&gt; instead of capturing scoped services.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Dropped &lt;code&gt;CancellationToken&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The method accepts cancellation. The downstream call ignores it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Signature honours cancellation; body doesn't.&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CancellationToken&lt;/span&gt; &lt;span class="n"&gt;cancellationToken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// overload with token exists&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix direction:&lt;/strong&gt; forward &lt;code&gt;cancellationToken&lt;/code&gt; to every downstream async call that accepts one.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Swallowed exception
&lt;/h3&gt;

&lt;p&gt;Failure disappears. Monitoring stays green.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ "Handle errors gracefully" — AI edition.&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;SaveAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cancellationToken&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ignore&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix direction:&lt;/strong&gt; log and rethrow, or handle a &lt;em&gt;specific&lt;/em&gt; exception type with real recovery logic.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. &lt;code&gt;Task.Run&lt;/code&gt; over blocking I/O
&lt;/h3&gt;

&lt;p&gt;Looks async. Still blocks a thread pool thread.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Offloads the blocking call; doesn't remove it.&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadAllText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix direction:&lt;/strong&gt; &lt;code&gt;ReadAllTextAsync&lt;/code&gt;, &lt;code&gt;OpenReadAsync&lt;/code&gt;, or other truly async I/O APIs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why review misses them
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What reviewers see&lt;/th&gt;
&lt;th&gt;What production sees&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clean diff, idiomatic C#&lt;/td&gt;
&lt;td&gt;Tracking overhead, stale scoped state, ignored cancellation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Green CI&lt;/td&gt;
&lt;td&gt;Incidents that are hard to trace back to a specific PR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"We have analyzers"&lt;/td&gt;
&lt;td&gt;Warnings buried in the IDE or not enforced on merge&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The assistant doesn't carry your team's hard-won context — lifetime rules, EF conventions, "we always forward the token" — and reviewers are &lt;strong&gt;skimming more PRs than before&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why IDE warnings aren't enough (maybe)
&lt;/h2&gt;

&lt;p&gt;Roslynator, Sonar, and the built-in analyzers catch a lot of generic quality issues. That part is in decent shape.&lt;/p&gt;

&lt;p&gt;The gap I keep feeling is less about &lt;strong&gt;detecting&lt;/strong&gt; these while someone is typing — where warnings get ignored — and more about &lt;strong&gt;enforcing&lt;/strong&gt; them &lt;strong&gt;in CI, on the PR&lt;/strong&gt;, so they can't merge.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I'm not convinced the missing piece is "another rule in the IDE." I think it's "this can't ship unless it's fixed."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Two questions for you
&lt;/h2&gt;

&lt;p&gt;I'm genuinely trying to compare notes — &lt;strong&gt;not selling anything.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Are you seeing these AI-introduced regressions slip past review?&lt;/strong&gt; Which ones — if any — show up most on your team?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you've tightened things up — how?&lt;/strong&gt; Custom analyzers? Stricter CI? &lt;code&gt;.editorconfig&lt;/code&gt; severity as errors? Team-specific rules checked automatically? Or still mostly discipline and careful review?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Drop a comment with what's working (or what's failing) on your team. Especially interested in hearing from &lt;strong&gt;tech leads and EMs&lt;/strong&gt; running small-to-mid .NET teams with a steady flow of AI-assisted PRs.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;No product pitch — mapping whether this is a real, recurring team problem or just my bubble. Thanks for reading.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>ai</category>
      <category>codereview</category>
    </item>
    <item>
      <title>This week in Cursor + .NET — 7 rules + 1 essay (week ending June 07, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 07 Jun 2026 20:27:34 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-6-rules-1-essay-week-ending-june-07-2026-2j88</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-6-rules-1-essay-week-ending-june-07-2026-2j88</guid>
      <description>&lt;p&gt;&lt;em&gt;Every weekday a single, opinionated rule for senior C#/.NET engineers using Cursor. Here's the full week in one read — canonical posts live on &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;the Agentic Architect blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  New essays this week
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://agentic-architect.dev/blog/08-cursor-vs-copilot-dotnet.html" rel="noopener noreferrer"&gt;Cursor vs GitHub Copilot for C#/.NET in 2026: which to pay for&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Tue 02 Jun · .NET tooling&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Real pricing, where each one wins on agentic .NET edits, where each one loses, and a straight verdict on which to pay for.&lt;/p&gt;

&lt;h2&gt;
  
  
  7 daily senior rules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rule 25: ActivitySource for OpenTelemetry
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 07 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Logs alone won't debug a distributed system. Add a static readonly ActivitySource per project and wrap every external call (DB, HTTP, queue) in StartActivity. Cursor never adds OTEL spans on its own — give it a rule that recognises external-call patterns and proposes the trace.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-07" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 24: ValueTask Only When Justified
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sat 06 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;ValueTask is a perf optimisation for hot paths that often return synchronously. It is not a drop-in for Task. Cursor swaps them around without thinking. Flag ValueTask returns and ask whether the method is actually mostly synchronous. If not, revert to Task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-06" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 23: No Bool Flag Parameters
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Fri 05 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;SendEmail(string to, bool isHtml) should be SendHtmlEmail and SendPlainEmail. Bool flags hide branching that belongs in the type system. Flag any method signature with two or more bool parameters as a refactor candidate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-05" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 22: BackgroundService Over Task.Run
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Thu 04 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Long-running work in ASP.NET Core goes in a BackgroundService, not Task.Run inside a controller. Cursor will happily fire Task.Run and call it "async work" — your request thread will die mid-execution and you'll never know why. Catch Task.Run outside test code and propose a hosted service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-04" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 21: Channels for Producer Consumer
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Wed 03 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;System.Threading.Channels beats BlockingCollection and beats roll-your-own queue plus SemaphoreSlim. The AI reaches for ConcurrentQueue every time and stitches it together by hand. A rule that detects producer/consumer patterns and proposes Channel will save you a class.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-03" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 20: Source-Generated JSON Serialisation
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Tue 02 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Reflection-based System.Text.Json is fine for prototypes. For hot paths and AOT, use JsonSerializable source generation. Cursor never thinks of this on its own — add a rule that flags new DTO classes and asks whether they should be source-generated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-02" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 19: NetArchTest for Boundaries
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Mon 01 Jun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Architectural rules belong in tests, not in code review. Encode them as NetArchTest assertions ("no class in Domain references EntityFrameworkCore") and they fail your build instead of your standup. Add the corresponding test whenever a new layer or project is introduced.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/#2026-06-01" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try one rule before you trust the whole kit
&lt;/h2&gt;

&lt;p&gt;The free &lt;strong&gt;&lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; is one drop-in Cursor rule that ends the morning re-explanation ritual. Install in 60 seconds, see whether Cursor actually remembers your DI lifetimes, and decide for yourself whether the full kit is worth £9.00.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free sample:&lt;/strong&gt; &lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt; on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full kit (£9.00, one-time):&lt;/strong&gt; &lt;a href="https://payhip.com/b/98aSq?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=paid_kit" rel="noopener noreferrer"&gt;Agentic Architect Kit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily rules feed:&lt;/strong&gt; &lt;a href="https://agentic-architect.dev/blog/?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=blog_index" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Canonical home for everything in this digest: &lt;a href="https://agentic-architect.dev/blog/" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>ai</category>
      <category>cursor</category>
    </item>
    <item>
      <title>Cursor vs GitHub Copilot for C#/.NET in 2026: which to pay for</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Tue, 02 Jun 2026 22:48:38 +0000</pubDate>
      <link>https://dev.to/agentic_architect/cursor-vs-github-copilot-for-cnet-in-2026-which-to-pay-for-l3m</link>
      <guid>https://dev.to/agentic_architect/cursor-vs-github-copilot-for-cnet-in-2026-which-to-pay-for-l3m</guid>
      <description>&lt;p&gt;**Cursor vs GitHub Copilot for C#/.NET in 2026: which to pay for&lt;/p&gt;

&lt;p&gt;If you write C#/.NET for a living, the AI tool question in 2026 is rarely Cursor or nothing. It's whether Cursor earns its seat next to the GitHub Copilot licence your org probably already pays for. This is the honest comparison: what each one actually costs, where each one wins on real .NET work, and where each one quietly falls down.&lt;/p&gt;

&lt;p&gt;The decision you're actually making&lt;/p&gt;

&lt;p&gt;Most teams don't pick between these two from a blank slate. Copilot is usually already there, bundled into the org's GitHub plan. So the real question is narrower and more useful: does Cursor do enough that Copilot can't, on a production .NET codebase, to justify a second subscription? The answer turns on agentic edits, not autocomplete.&lt;/p&gt;

&lt;p&gt;The pricing, in 2026 GBP&lt;/p&gt;

&lt;p&gt;These figures are stamped to 2 June 2026. The vendors quote in USD, so the GBP numbers are converted at about $1 = £0.79 (June 2026) and rounded. Check the live rate and the vendor page before you publish, because Copilot moved to usage-based billing on 1 June 2026 and Cursor now runs on a monthly credit pool.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool / plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;What you actually get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cursor Pro&lt;/td&gt;
&lt;td&gt;approx £16/mo ($20; £12.60/mo billed annually)&lt;/td&gt;
&lt;td&gt;$20 of included API usage, unlimited Tab completions, unlimited Auto mode. Monthly credit pool with overage.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor Ultra (top tier)&lt;/td&gt;
&lt;td&gt;approx £158/mo ($200; £126/mo annually)&lt;/td&gt;
&lt;td&gt;$400 of included API usage and roughly 20x the Pro agent limits. Same frontier model access as Pro.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot Pro&lt;/td&gt;
&lt;td&gt;approx £8/mo ($10)&lt;/td&gt;
&lt;td&gt;Code completions and Next Edit Suggestions stay unlimited and free. 1,500 monthly AI credits (1,000 base + 500 flex) cover agent mode, chat, CLI and PR review.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot Pro+&lt;/td&gt;
&lt;td&gt;approx £31/mo ($39)&lt;/td&gt;
&lt;td&gt;7,000 monthly AI credits (3,900 base + 3,100 flex) and wider model choice. Completions are still free and unlimited.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot Business&lt;/td&gt;
&lt;td&gt;approx £15/user/mo ($19)&lt;/td&gt;
&lt;td&gt;Org policy controls, audit and seat management pooled across the org, plus IP indemnity on the business plan.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Set against a senior .NET rate of about £60 to £120 an hour, both tools are rounding errors. The cost that matters is the time each one saves or wastes, not the monthly fee.&lt;/p&gt;

&lt;p&gt;Where Copilot wins&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;****It's already paid for. If your org has GitHub Enterprise, Copilot is often a checkbox, not a new purchase or a new approval.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;****Visual Studio integration. For teams living in full Visual Studio (not VS Code), Copilot sits natively in the IDE you already debug and profile in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;****Org governance. The Business and Enterprise tiers ship policy controls and seat management pooled across the org, with IP indemnity on the paid org plans.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;****Inline completion quality. Ghost-text completions are unlimited and free on every Copilot tier, and they stay sharp on idiomatic C#. There's no clean acceptance-rate figure here, so take this as hands-on experience rather than a benchmark.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where Cursor wins&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;****Multi-file agentic edits. "Add a CancellationToken to every async method in the Application layer and propagate it" is one prompt across dozens of files. This is the gap that justifies the second seat.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;****Composer and background agents. Longer tasks ("port this controller to Minimal API, write the xUnit tests, run them") iterate without hand-holding. Copilot has its own agent mode now, billed against AI credits since 1 June 2026, and it is closing the gap, so re-check parity by the time you read this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;``&lt;/strong&gt;Directory-scoped .mdc rules + MCP. You can pin your house style (Result over throw, AsNoTracking on reads) and wire local tools through MCP. Cursor's per-directory rule scoping is the edge here for layered architectures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;****Semantic codebase search. "Find where we authorise admin-only endpoints" lands the right file without naming the symbol first.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where each one breaks first&lt;/p&gt;

&lt;p&gt;The trust-earning part. Neither tool is magic, and both regress your architecture if you let them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;****Cursor drifts from your conventions the moment your rules are thin. Without scoped rules and a Learning Log it writes the public-internet average of a .NET codebase: exceptions for business failures, EF Core in the domain layer, DbContext captured by singletons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;****Copilot is strongest at the line and weakest at the cascade. Its agent mode will attempt multi-file work, but it rarely lands a coherent cross-layer refactor in one shot. Worth re-testing as agent mode matures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;****``Both happily generate an N+1 query or a missing AsNoTracking() unless something stops them. That something is rules, not the model.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this job, reach for this&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Reach for&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Inline completion while typing in Visual Studio&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Copilot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native IDE integration, already licensed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add the same field + constructor + DI registration across 12 services&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Cursor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agentic cascade in one prompt; Copilot edits line by line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Port a controller to Minimal API + tests + run them&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Cursor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Iterate-until-tests-pass is Cursor's home turf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Org-wide policy, audit, IP indemnity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Copilot Business&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Org policy controls and indemnity on the business plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pin house style so the AI stops regressing it&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Cursor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Directory-scoped &lt;code&gt;.mdc&lt;/code&gt; rules + Learning Log&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The honest verdict&lt;/p&gt;

&lt;p&gt;If you bill at senior rates and you do real refactors, pay for Cursor even when Copilot is already on the org card. The agentic edit gap is the whole argument, and one saved afternoon covers a year of the subscription. If you live in full Visual Studio, rarely leave inline completion, and your org won't approve a second tool, Copilot alone is a defensible call. The one setup that loses is running either of them ungoverned.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
Whichever tool you pay for, the expensive failure mode is the same: ungoverned agentic edits. The Agentic Architect kit is the scoped rule set and Learning Log that keeps Cursor or Copilot aligned with your layers, DI lifetimes, and read patterns instead of the public-internet average.&lt;/p&gt;

&lt;p&gt;Related comparisons&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/05-cursor-vs-rider-dotnet.html" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
If you're weighing the IDE side of this too, see Cursor vs JetBrains Rider for C#/.NET. More tool, hardware, and model comparisons land here weekly.&lt;/p&gt;

&lt;p&gt;Keep reading&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/05-cursor-vs-rider-dotnet.html" rel="noopener noreferrer"&gt;&lt;/a&gt;Cursor vs Rider&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://agentic-architect.dev/blog/07-cursor-efcore-patterns.html" rel="noopener noreferrer"&gt;&lt;/a&gt;EF Core patterns&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://agentic-architect.dev/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://agentic-architect.dev/hardware/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
Kit: Agentic Architect · Local models: Hardware hub&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Free starter (3 Cursor rules):&lt;/strong&gt; &lt;a href="https://agentic-architect.dev/#free-kit-signup" rel="noopener noreferrer"&gt;https://agentic-architect.dev/#free-kit-signup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full kit (£9, one-time):&lt;/strong&gt; &lt;a href="https://payhip.com/b/98aSq?utm_source=devto&amp;amp;utm_medium=08-cursor-vs-copilot-dotnet&amp;amp;utm_campaign=paid_kit" rel="noopener noreferrer"&gt;Get Agentic Architect&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://agentic-architect.dev/blog/08-cursor-vs-copilot-dotnet.html" rel="noopener noreferrer"&gt;https://agentic-architect.dev/blog/08-cursor-vs-copilot-dotnet.html&lt;/a&gt;. Part of the &lt;a href="https://agentic-architect.dev/" rel="noopener noreferrer"&gt;Agentic Architect&lt;/a&gt; persistence kit for Cursor + .NET.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>ai</category>
      <category>cursor</category>
    </item>
    <item>
      <title>This week in Cursor + .NET — 6 rules + 3 essays (week ending May 31, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 31 May 2026 11:51:26 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-6-rules-3-essays-week-ending-may-31-2026-3354</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-6-rules-3-essays-week-ending-may-31-2026-3354</guid>
      <description>&lt;p&gt;&lt;em&gt;Every weekday a single, opinionated rule for senior C#/.NET engineers using Cursor. Here's the full week in one read — canonical posts live on &lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/" rel="noopener noreferrer"&gt;the Agentic Architect blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  New essays this week
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/06-stop-cursor-ai-drift-dotnet.html" rel="noopener noreferrer"&gt;How to stop Cursor AI forgetting your .NET architecture (the $9 fix)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sat 30 May · .NET tooling&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Cursor forgets your DI patterns, boundaries, and conventions every session. Here's a 4-rule framework that locks your architecture into the AI's long-term memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/07-cursor-efcore-patterns.html" rel="noopener noreferrer"&gt;How to use Cursor AI with Entity Framework Core (without blowing up your database)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sat 30 May · .NET tooling&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Cursor AI generates N+1 queries, eager-loads entire databases, and skips AsNoTracking. Here's a rule-based guardrail system that catches 90% of EF Core mistakes before production.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/05-cursor-vs-rider-dotnet.html" rel="noopener noreferrer"&gt;Cursor vs JetBrains Rider for C#/.NET in 2026: which to pay for&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Tue 26 May · .NET tooling&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Senior .NET teams aren't picking - they're paying for both. The honest comparison, the pricing math, and the config that lets the two tools share state.&lt;/p&gt;

&lt;h2&gt;
  
  
  6 daily senior rules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rule 18: WebApplicationFactory for Integration Tests
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 31 May&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In-memory EF Core providers lie. Use WebApplicationFactory with Testcontainers (SQL Server, Postgres) for real integration coverage. Cursor defaults to UseInMemoryDatabase — it passes locally and ships the bug to production. Flag the in-memory provider in test projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/#2026-05-31" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 17: ConfigureAwait false in Libraries
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sat 30 May&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Library code (non-ASP.NET) should ConfigureAwait false on every awaited Task. ASP.NET Core code should not. Cursor mixes the two contexts in the same solution. Detect the project type and enforce the right default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/#2026-05-30" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 16: async void Outside Event Handlers
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Fri 29 May&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;async void is a deadlock and unhandled-exception trap everywhere except UI event handlers. The AI uses it routinely for "fire and forget" — wrong answer every time. Flag it on sight.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/#2026-05-29" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 15: Records for Value Objects, Classes for Entities
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Thu 28 May&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Value objects (Money, Address, Coordinates) should be records. Entities with identity (Order, Customer) should be classes with an Id. Cursor mixes these constantly. A rule that classifies based on the presence or absence of an identity property keeps the distinction honest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/#2026-05-28" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 14: Sealed By Default
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Wed 27 May&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Mark every class sealed unless inheritance is explicitly planned. Stops Cursor inventing accidental inheritance hierarchies "for flexibility." Small but measurable virtual-call perf wins too.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/#2026-05-27" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 12: IOptionsSnapshot Over Raw Config
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Mon 25 May&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Business code should never call IConfiguration directly. Strongly-typed IOptions or IOptionsSnapshot bindings only. The AI loves to "just grab the config value" — refuse it and force a settings class with validation attributes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/#2026-05-25" rel="noopener noreferrer"&gt;→ Permalink on the blog&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try one rule before you trust the whole kit
&lt;/h2&gt;

&lt;p&gt;The free &lt;strong&gt;&lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; is one drop-in Cursor rule that ends the morning re-explanation ritual. Install in 60 seconds, see whether Cursor actually remembers your DI lifetimes, and decide for yourself whether the full kit is worth £19.99.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free sample:&lt;/strong&gt; &lt;a href="https://github.com/agenticstandardcontact-byte/agentic-architect/blob/main/arch-core-lite.mdc?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=free_sample" rel="noopener noreferrer"&gt;&lt;code&gt;arch-core-lite.mdc&lt;/code&gt; on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full kit (£19.99, one-time):&lt;/strong&gt; &lt;a href="https://agenticarchitect.gumroad.com/l/dotnet-persistence-kit?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=paid_kit" rel="noopener noreferrer"&gt;Agentic Architect on Gumroad&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily rules feed:&lt;/strong&gt; &lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/?utm_source=devto&amp;amp;utm_medium=weekly_digest&amp;amp;utm_campaign=blog_index" rel="noopener noreferrer"&gt;https://agenticstandardcontact-byte.github.io/agentic-architect/blog/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Canonical home for everything in this digest: &lt;a href="https://agenticstandardcontact-byte.github.io/agentic-architect/blog/" rel="noopener noreferrer"&gt;https://agenticstandardcontact-byte.github.io/agentic-architect/blog/&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>ai</category>
      <category>cursor</category>
    </item>
  </channel>
</rss>
