Skip to content
kc@kumarChandrachooda.com:~$ cd /blog/archive && read --section="top" 0%
Archive

Every article

Newest first, grouped by year. Search or filter by topic.

  • 556 articles
  • 26 matching
.NET 28 Feb 2026

Maintained for Fourteen Months, Documented for Two

A Christmas Day commit on an unfinished feature, three years of unactioned dependabot, a final fix by a stranger - and the estate's real lesson, which is about re-reading rather than writing.

.NET 27 Feb 2026

The Container You Cannot Configure

A product whose entire interface is a YAML document, shipped in an image that document cannot enter - plus the resilience inventory of a gateway with retries and nothing else.

.NET 27 Feb 2026

The Empty Test Project Is Load-Bearing

CI builds Release, where six extensions compile against NuGet instead of your working tree - and the only thing that notices is a project with no tests in it.

.NET 26 Feb 2026

The Package Identity That Stranded Sixteen Releases

One commit reclaimed a clean package id and deleted the version prefix in the same breath - leaving two identities on the public feed with inverted version ordering and a csproj that cannot build the package it consumes.

.NET 25 Feb 2026

The AMQP Property the Broker Vetoed

A caller-identity feature added at 21:10, disabled at 22:31 and deleted four days later - and the residue is a gateway that carries no caller identity into a message at all.

.NET 25 Feb 2026

The Rename That Silently Unbound a Signing Key

Of eight JWT keys in the README's flagship example, four bind to nothing, three restate defaults and one has any effect - and the last edit to that README came ten minutes before the commit that invalidated it.

.NET 24 Feb 2026

What Does a 202 Actually Promise

One YAML key turns an HTTP route into a message publisher - and between BasicPublish returning and the gateway writing 202 there is nothing at all.

.NET 23 Feb 2026

Discovery That Works by Accident

Nothing in either host references an extension type, so nothing should load one - and the reason six packages are found anyway is a call five steps earlier in a fluent chain.

.NET 23 Feb 2026

Load Order Decides What Your Traces See

An int? sorted into a HashSet, no shipped config that sets it, and two middlewares whose relative position determines whether your production failures appear in Jaeger at all.

.NET 22 Feb 2026

Four Members Are the Whole Plugin Contract

Two strings and two void methods buy you six shipping packages - and the list of things the interface never asks for is the more instructive half.

.NET 21 Feb 2026

Twelve Projects and One Star

Reading a repository one project at a time hides everything that lives in the edges between them - and in this estate the edges are where the interesting failures are.

.NET 20 Feb 2026

Nothing Was Ever Frozen

The retrospective - configuration stays mutable, ordering stays emergent, one method absorbs every concern, and the only outside contributor correctly chose to duplicate sixteen lines rather than refactor.

.NET 20 Feb 2026

Your API Gateway Cannot Proxy an Image

Every downstream response is buffered into a UTF-16 string and re-encoded on the way out, so binary bodies corrupt silently behind a plausible status code and a recomputed Content-Length.

.NET 19 Feb 2026

Everything Is a Singleton

Twenty-two registrations, zero scoped, zero transient - a lifetime decision that buys a genuinely fast request path and enables exactly three bugs, all of them the same mistake.

.NET 18 Feb 2026

Building a Second Container to Read One Value

services.BuildServiceProvider() inside ConfigureServices - what it actually costs, why it does not leak here, and how a zero-parameter extension method signature forced it.

.NET 18 Feb 2026

The Claims Map That Does Not Exist

The README and the sample both configure an auth claims alias map, the configuration class has no such property, and the binder's ignore-unknown-keys behaviour is what makes the omission silent.

.NET 17 Feb 2026

Three Predicates, One Flag

Three components decide independently whether a route needs authentication, only one of them consults auth.enabled - and the combination that turns a public route into a 403.

.NET 16 Feb 2026

Five Parses to Reject One Request

A validated POST is parsed, re-serialised and parsed again on its way to a schema compiled fresh per request - and when it fails validation the caller gets HTTP 200.

.NET 16 Feb 2026

The Parser That Works Because Its Bug Is Harmless

Two mini-languages share one parser that runs both resolvers unconditionally and strips the first and last character from every token - and it is correct only by coincidence.

.NET 15 Feb 2026

The Payload Template That Could Never Load

Two notions of module identity, a silent continue on a missing file - and a live bug the unreachable code was hiding.

.NET 14 Feb 2026

Match All and the Reserved Word Nobody Documented

Forty lines build every upstream path Ntrada can express, and thirty more build the downstream URL - where named segments substitute, one key appends, and one config flag runs backwards.

.NET 14 Feb 2026

Thirteen Lines Are the Whole Pipeline

Ntrada's request pipeline is a gate and a dictionary lookup - and four extension hooks around it, one of which lost the thing it existed to see when a disposal bug was fixed.

.NET 13 Feb 2026

The Route Table Is a Compiler Output

Ntrada writes no middleware - it compiles YAML into ASP.NET Core endpoints and lets the framework's matcher do the work. Then you try to declare a PATCH route.

.NET 12 Feb 2026

No Coding Whatsoever

A 2018 API gateway promises that routing, auth, validation and messaging need no code at all - this series reads the source that makes the promise true, and the places where it is not.

Microservices 30 Sep 2025

A Gateway Written in YAML

DShop.Api.Next rebuilds the whole code-first gateway as Ntrada configuration - a 17-line Program.cs and a folder of YAML. Reading both side by side shows exactly what you trade when a gateway becomes data.