Bumping a PHP monorepo to 8.5: the mechanics

Sixty-seven packages, one CI matrix, one PHPStan target. What it takes to actually move the floor.

May 11, 2026 · 4 min · Russell

PHP 8.5 restraint: features we did not adopt

An upgrade is also a decision about what not to use. Property hooks, the pipe operator, and an array_find pass we mostly rejected.

May 11, 2026 · 6 min · Russell

Spec Kitty mission lifecycle: a domain modeling pass through Giiken

What a full Spec Kitty mission actually looks like end to end: spec, plan, tasks, implement, review, merge.

May 11, 2026 · 3 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

What a real AI-assisted PR looks like

PR

April 2, 2026 · 4 min · Russell

Build an eval harness for 184 AI agent prompts with promptfoo

How to build an LLM-as-judge eval system that scores AI agent prompts on quality, identity, and safety.

March 30, 2026 · 9 min · Russell

Prompting isn't engineering, it's storytelling

The best prompts don’t give instructions. They set a scene the model can reason inside.

March 29, 2026 · 3 min · Russell

He spent two years letting cars drive him. Now he's back on horses.

A man spent two years letting cars drive him around. He’s back on horses. 865 engineers debated whether that means the cars are broken.

March 27, 2026 · 2 min · Russell

Managing LLM context in a real application

How Claudriel manages LLM context in production: conversation trimming, turn budgets, model fallback, prompt caching, and per-turn token telemetry.

March 27, 2026 · 6 min · Russell

Vibe coding isn't the problem. Your workflow is.

The critics of vibe coding aren’t wrong about the symptoms — they’re wrong about the cause.

March 27, 2026 · 3 min · Russell