<?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 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>
    <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>
  </channel>
</rss>
