Preserve failed test evidence before you retry

Design a qualification harness that keeps the first failure, accounts for uncertain resources, and publishes useful evidence without exposing secrets.

October 25, 2026 · 5 min · Russell

CLI help must not mutate your filesystem

Defer application boot and filesystem authority until your CLI framework has validated that a mutating command will actually execute.

October 24, 2026 · 4 min · Russell

Do not let generated content replace your homepage

Keep generated collection routes from replacing your application homepage when detail pages live at the root.

October 23, 2026 · 4 min · Russell

Test machine publishers through their real tools

Prove a machine publisher has the permissions it needs, and no broader authority, by exercising the registered tools it will actually call.

October 21, 2026 · 5 min · Russell

Five contracts a PHP listing layer should prove

Test filter semantics, cache invalidation, and installed package behavior before trusting a PHP listing layer.

October 20, 2026 · 4 min · Russell

Fixing a hardcoded revision key in Waaseyaa's entity storage

How Waaseyaa’s EntityRepository let entity types configure their revision-pointer column, but ten call sites still read the literal revision_id string, and how a single private accessor plus a two-way test closed the gap.

September 26, 2026 · 4 min · Russell

A nested git worktree broke our pre-push gate

A stray PHPStan cache in a nested git worktree got scanned as production code, showing why filesystem-exclusion rules for local gates need to match at any depth.

September 5, 2026 · 4 min · Russell

The PHP 8.5 deprecation sweep: from 34 warnings to zero

Three deprecation categories. Twenty-nine call sites. A test corpus that surfaces them all.

May 11, 2026 · 4 min · Russell

Testing a 48-package monorepo at scale

How in-memory implementations, a layered test strategy, and AI-assisted test generation keep a 48-package PHP monorepo testable.

March 22, 2026 · 6 min · Russell

Building a temporal layer so your AI never lies about time

How Claudriel’s temporal subsystem pins time per request, resolves timezones from context, and detects clock drift before it corrupts AI reasoning.

March 17, 2026 · 8 min · Russell