<?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>This week in Cursor + .NET — 7 rules (week ending September 13, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 13 Sep 2026 14:23:59 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-september-13-2026-1imb</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-september-13-2026-1imb</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 23: No Bool Flag Parameters
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 13 Sep&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-09-13" 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;Sat 12 Sep&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-09-12" 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;Fri 11 Sep&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-09-11" 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;Thu 10 Sep&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-09-10" 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;Wed 09 Sep&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-09-09" 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;Tue 08 Sep&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-09-08" 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;Mon 07 Sep&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-09-07" 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>This week in Cursor + .NET — 7 rules (week ending September 06, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 06 Sep 2026 13:40:47 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-september-06-2026-2df6</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-september-06-2026-2df6</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 16: async void Outside Event Handlers
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 06 Sep&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://agentic-architect.dev/blog/#2026-09-06" 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;Sat 05 Sep&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-09-05" 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;Fri 04 Sep&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-09-04" 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;Thu 03 Sep&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-09-03" 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;Wed 02 Sep&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-09-02" 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;Tue 01 Sep&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-09-01" 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;Mon 31 Aug&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-08-31" 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>This week in Cursor + .NET — 7 rules (week ending August 30, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 30 Aug 2026 14:52:16 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-august-30-2026-3ono</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-august-30-2026-3ono</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 9: Scoped Capture in Singleton
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 30 Aug&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-08-30" 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;Sat 29 Aug&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-08-29" 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;Fri 28 Aug&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-08-28" 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;Thu 27 Aug&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-08-27" 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;Wed 26 Aug&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-08-26" 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;Tue 25 Aug&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-08-25" 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;Mon 24 Aug&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-08-24" 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>This week in Cursor + .NET — 7 rules (week ending August 23, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 23 Aug 2026 10:41:38 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-august-23-2026-40ng</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-august-23-2026-40ng</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 2: Persistence Boundaries
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 23 Aug&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-08-23" 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;Sat 22 Aug&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-08-22" 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;Fri 21 Aug&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-08-21" 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;Thu 20 Aug&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-08-20" 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;Wed 19 Aug&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-08-19" 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;Tue 18 Aug&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-08-18" 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;Mon 17 Aug&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-08-17" 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>This week in Cursor + .NET — 7 rules (week ending August 16, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 16 Aug 2026 10:40:29 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-august-16-2026-988</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-august-16-2026-988</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 20: Source-Generated JSON Serialisation
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 16 Aug&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-08-16" 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;Sat 15 Aug&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-08-15" 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;Fri 14 Aug&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-08-14" 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;Thu 13 Aug&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-08-13" 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;Wed 12 Aug&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://agentic-architect.dev/blog/#2026-08-12" 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;Tue 11 Aug&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-08-11" 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;Mon 10 Aug&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-08-10" 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>This week in Cursor + .NET — 7 rules (week ending August 09, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 09 Aug 2026 10:52:41 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-august-09-2026-2fpi</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-august-09-2026-2fpi</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 13: Strongly-Typed IDs
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 09 Aug&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-08-09" 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;Sat 08 Aug&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-08-08" 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;Fri 07 Aug&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-08-07" 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;Thu 06 Aug&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-08-06" 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;Wed 05 Aug&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-08-05" 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;Tue 04 Aug&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-08-04" 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;Mon 03 Aug&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-08-03" 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>This week in Cursor + .NET — 7 rules (week ending August 02, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 02 Aug 2026 11:34:18 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-august-02-2026-4bo3</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-august-02-2026-4bo3</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 6: TimeProvider Injection
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 02 Aug&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-08-02" 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;Sat 01 Aug&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-08-01" 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;Fri 31 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-31" 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;Thu 30 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-30" 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;Wed 29 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-29" 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;Tue 28 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-28" 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;Mon 27 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-27" 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>I Burned My £20 Cursor Budget on Opus 5 (And All I Got Was 44 Files of Absolute Garbage)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Mon, 27 Jul 2026 22:13:51 +0000</pubDate>
      <link>https://dev.to/agentic_architect/i-burned-my-ps20-cursor-budget-on-opus-5-and-all-i-got-was-44-files-of-absolute-garbage-je2</link>
      <guid>https://dev.to/agentic_architect/i-burned-my-ps20-cursor-budget-on-opus-5-and-all-i-got-was-44-files-of-absolute-garbage-je2</guid>
      <description>&lt;p&gt;So, I decided to do a little experiment. With Opus 5 just launched, I set it loose on a pretty deep, open-ended task: scan the landscape, dig into niche corners of the web, and find viable, low-competition opportunities to make money online.&lt;/p&gt;

&lt;p&gt;Spoiler alert: It completely torched my £20 monthly Cursor credit budget in one sitting, left my workspace looking like a digital bomb site, and handed me virtually zero actionable value.&lt;/p&gt;

&lt;p&gt;Here’s what actually happened, why Opus 5 disappointed me, and what you should probably use instead to keep your Cursor credits from evaporating.&lt;/p&gt;

&lt;p&gt;The "Analysis": 44 Files of Pure Fluff&lt;br&gt;
When you hand a model a massive, exploratory prompt, you hope for clean, distilled insight. What Opus 5 gave me instead was sheer volume masking as intelligence.&lt;/p&gt;

&lt;p&gt;It generated 44 separate analysis files.&lt;/p&gt;

&lt;p&gt;Forty-four.&lt;/p&gt;

&lt;p&gt;As I clicked through directory after directory, it became clear fast: it was mostly repetitive nonsense, circular logic, and generic market research buzzwords.&lt;/p&gt;

&lt;p&gt;And after eating through my entire monthly allowance, do you want to know what its single grand takeaway was?&lt;/p&gt;

&lt;p&gt;"You should look into building software to help businesses with their tax management."&lt;/p&gt;

&lt;p&gt;Ground-breaking stuff. Truly cutting-edge enterprise strategy. I definitely needed 44 markdown files and a blown credit limit to realize tax software exists.&lt;/p&gt;

&lt;p&gt;My Take on Opus 5: Overhyped &amp;amp; Credit-Hungry&lt;br&gt;
From my own experience with this test, Opus 5 is just not that great for deep, multi-step agentic workflows.&lt;/p&gt;

&lt;p&gt;It gets bogged down in creating artificial structure, burns through token context at an alarming rate, and ends up giving you high-level common sense wrapped in an impressive-looking file tree. The "context tax" and credit burn rate simply don't match the quality of the actual output.&lt;/p&gt;

&lt;p&gt;What You Should Use Instead: Grok 4.5 High Fast&lt;br&gt;
If you’re using Cursor daily for coding, refactoring, or standard project architecture, save your money.&lt;/p&gt;

&lt;p&gt;In my experience, sticking with Cursor’s Grok 4.5 High Fast is by far the best use of your monthly credits:&lt;/p&gt;

&lt;p&gt;Speed &amp;amp; Efficiency: It doesn't waste time over-generating file bloat.&lt;/p&gt;

&lt;p&gt;Cost-Effective: You won't blow through your tier limit on a single run.&lt;/p&gt;

&lt;p&gt;Practical Output: It gets straight to the point without hallucinatory rabbit holes.&lt;/p&gt;

&lt;p&gt;For almost every real-world task in your IDE, Grok 4.5 High Fast gives you 90% of the reasoning power at a fraction of the cost and time.&lt;/p&gt;

&lt;p&gt;The Wildcard: Fable 5?&lt;br&gt;
In hindsight, Fable 5 probably would have been a much better fit for that initial, creative research prompt. Its reasoning style seems better suited for broad-spectrum exploratory tasks without spiraling into a file-creation frenzy.&lt;/p&gt;

&lt;p&gt;Unfortunately, I can’t verify that for you right now—because Opus 5 ate my entire credit budget before I could run the comparison!&lt;/p&gt;

&lt;p&gt;The Bottom Line&lt;br&gt;
Don't fall into the trap of assuming the most expensive, heavy-weight model will magically solve loose, complex prompts. Keep your Cursor setups clean, save your budget, and stick with Grok 4.5 High Fast for your day-to-day dev workflows. Your wallet (and your file tree) will thank you.&lt;/p&gt;

&lt;p&gt;Tell me what your experience of Opus 5 has been....&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>vibecoding</category>
      <category>productivity</category>
    </item>
    <item>
      <title>This week in Cursor + .NET — 6 rules (week ending July 26, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 26 Jul 2026 11:36:53 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-6-rules-week-ending-july-26-2026-dbc</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-6-rules-week-ending-july-26-2026-dbc</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 24: ValueTask Only When Justified
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 26 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-26" 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;Sat 25 Jul&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-07-25" 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;Fri 24 Jul&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-07-24" 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;Thu 23 Jul&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-07-23" 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;Tue 21 Jul&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-07-21" 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;Mon 20 Jul&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-07-20" 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>This week in Cursor + .NET — 7 rules (week ending July 19, 2026)</title>
      <dc:creator>Agentic Architect</dc:creator>
      <pubDate>Sun, 19 Jul 2026 11:30:25 +0000</pubDate>
      <link>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-july-19-2026-jeb</link>
      <guid>https://dev.to/agentic_architect/this-week-in-cursor-net-7-rules-week-ending-july-19-2026-jeb</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 17: ConfigureAwait false in Libraries
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Sun 19 Jul&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-07-19" 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;Sat 18 Jul&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://agentic-architect.dev/blog/#2026-07-18" 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;Fri 17 Jul&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-07-17" 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;Thu 16 Jul&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-07-16" 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;Wed 15 Jul&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-07-15" 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;Tue 14 Jul&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-07-14" 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;Mon 13 Jul&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-07-13" 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>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>
  </channel>
</rss>
