The Types Landed, but Nothing Got Safer — Where I Delegated a JS→TS Migration to Claude Code, and Where I Didn't
A green tsc run does not mean any is gone. Measuring a migration by type coverage, drawing a clear line between what Claude Code handles well and what a human must decide, and a CI ratchet that refuses regressions.
Productionizing a Claude Design Prototype — Single Source, CI, and OGP Auto-Generation
Turn a Claude Design prototype into something that survives production with Claude Code. The call to keep the generated runtime as your foundation, separating logic with a mixin, a single-source data design around a ledger CSV, and CI auto-updates with real-browser OGP capture — implementation included.
Running Claude Code Hooks as a Quality Gate Without Breaking Your Pipeline
An implementation note on running Claude Code Hooks as a safety valve for automation: when to block with exit code 2 versus JSON output, how to keep formatters from looping or over-blocking, and how to log every hook firing so misfires are traceable.
Claude Code Says 'All Tests Pass' but CI Goes Red — Designing Around Exit Code Pitfalls
Locally, Claude Code reports 'all tests pass.' You push it, and GitHub Actions turns red within minutes. The root cause is usually not Claude Code itself but how the shell and the test runner interpret exit codes. Here is a practical, experience-backed walkthrough.
Letting Claude Code Handle Dependency Upgrades — A Verification Loop That Catches Breaking Changes
Once a solo project carries 30+ dependencies, the monthly upgrade run becomes a dreaded ritual. This article maps out where Claude Code can take the wheel, where humans must keep judgment, and the verification loop I use to keep breaking changes out of production.
When Claude Code Hits `index.lock` in VMs and CI: Three Workarounds That Actually Stick
When Claude Code freezes on `fatal: Unable to create '.git/index.lock'` inside a VM, container, or CI sandbox, here are three battle-tested workarounds — pick the one that matches the layer of failure you're actually hitting.