A note about this build log entry: I published this after the week it covers. DevNitro reconstructed a draft from work-related entries in my journal, Git commit history, and time tracking. I reviewed, edited, and approved the final post. The story reflects what I knew and built at the time.

From the Backlog to the Build Log

Week of October 24 - October 30, 2025

What I Worked On

This was the week the tests grew up. After last week's migration framework landed across three database providers, the suite had to prove itself on every platform I care about. I spent most of the week making GCT's cross-platform integration tests run the same way on Windows and Linux, against SQL Server, Postgres, and SQLite, with no special-casing for any of them.

That meant standing up real databases in Docker during the test run. SQL Server in a container. Postgres in a container. SQLite on disk. Each provider tracks its own migration journal, so the tests had to create, migrate, and seed each one, then check the result. Real databases are the only way I trust a multi-database framework, so this is where the hours went.

The other change was smaller but overdue. I replaced FluentAssertions with a homegrown assertion library, GlobalCove.Fluently, so GCT and the sites it generates stop leaning on a third-party package for something I can own.

What the AI Did Well

Test refactoring is wide, repetitive work, and the AI moved through it fast. Pulling shared database fixtures out of a dozen test classes, rewiring them to a common setup, and keeping each provider's path correct is the kind of change that touches a lot of files. Most of it landed without me reading every line.

The speed win held up. The full suite had crept to about two minutes. After reworking how test databases spin up and drop, it runs in about thirty seconds. Faster tests mean I run them instead of skipping them.

I also set up Claude agents for the first time this week. When the SQL Server migration produced a bad script, I had an agent write a failing test that reproduced the error, then fix it. Reproducing a bug before touching the fix is the behavior I want more of.

What Needed Correction

Postgres fought me. The generated migration scripts were doing drop-and-recreate where they should have done alters, and Postgres was the least forgiving about it. I reworked the script generation to alter existing objects instead of dropping them, which is the correct behavior and took real effort to get right.

I also lost time to my own environment. A build refused to compile until I made sure it targeted .NET 9 and not a .NET 10 release candidate I had installed.

What Shipped

GCT's integration tests run on Windows and Linux against SQL Server, Postgres, and SQLite, using Docker to stand up the server databases on demand. The suite is green again and finishes in about thirty seconds. GlobalCove.Fluently replaced FluentAssertions across the test projects. For clients who want to use the BlankSite blueprint, they can't have the weird license from FluentAssertions. I created Fluently without looking at the source of FluentAssertions and so I'll have to add missing methods over time. Before having generative AI, I would have just found another library. Now, it is easy enough to generate a replacement when needed. The migration scripts now alter schema objects instead of dropping and recreating them.

The Numbers

Category Hours
Product / Features 50h 51m
Content 12h 46m
Community 2h 7m
Total 65h 43m

Almost the entire product block went into the prototype's database and test layer. The content hours were YouTube video work on my HowdyChad channel. A heads-down engineering week.


Cross-platform integration tests are unglamorous work. They are also how I know the multi-database framework holds up on every database and every OS I plan to ship to, instead of hoping it does.

Curious how this site was built?
Watch the 5-minute walkthrough at devnitro.com →

An AI built this blog (but not this post)

This entire blog system (domain models, database, services, UI, auth, etc.) was built by DevNitro on its own in 95 minutes. I recorded every second.

    We respect your privacy. Unsubscribe at any time.