Writing

Blog

Showing 1–10 of 22

Bisect in CI: Reproducing the Commit Is the Hard Part
GitToolingDevOps

Bisect in CI: Reproducing the Commit Is the Hard Part

git bisect run in a pipeline is one line and almost useless on its own: the work is making an arbitrary historical commit provisionable, buildable and testable — and reading the loop's own exit status honestly.

October 12, 202610 min read
Read post
Parallel Agents on Git Worktrees: Isolation Is Not a Checkout
GitAgentsTooling

Parallel Agents on Git Worktrees: Isolation Is Not a Checkout

A worktree per task stops two coding agents from overwriting each other's files. It does not isolate the approvals, hook paths and untracked instructions that decide what an agent does next — nor the lifecycle a headless run leaves behind.

October 12, 202612 min read
Read post
Git Bisect: The Algorithm Is Trivial, Your Predicate Is Not
GitDebuggingTooling

Git Bisect: The Algorithm Is Trivial, Your Predicate Is Not

Bisect halves an interval and asks your predicate one question per step. On the same history, a broad predicate and a targeted one returned different culprits — both with exit status zero.

October 10, 202615 min read
Read post
Git Worktree: One Repository, Many Working Trees
GitToolingDevOps

Git Worktree: One Repository, Many Working Trees

One repository, several working directories on a single object store. What git worktree shares, what it isolates, the branch mutex, the lifecycle, relative paths, and the submodule limits the manual still calls incomplete.

October 9, 202613 min read
Read post
Sudo Mode in Symfony 8.2: The Rule That Silently Drops the Freshness Check
SymfonySecurityPHP

Sudo Mode in Symfony 8.2: The Rule That Silently Drops the Freshness Check

Symfony 8.2 makes sudo mode a primitive: IS_AUTHENTICATED_RECENTLY, a clock instead of a session flag, and a step-up that needs no code of yours. Plus the multi-attribute rule that silently drops the check.

October 5, 202615 min read
Read post
ETag: The Concurrency Guard Hiding in a Cache Header
HTTPArchitectureReliability

ETag: The Concurrency Guard Hiding in a Cache Header

ETag is a cache validator on reads and a concurrency guard on writes — the specification requires different comparison rules for each. Built end to end in PHP and Go, and proven with two real writers racing for one resource.

September 30, 202622 min read
Read post
Dapr: A Portable API Over Non-Portable Guarantees
DaprArchitectureReliability

Dapr: A Portable API Over Non-Portable Guarantees

Dapr's building blocks are portable; the guarantees underneath them are not. The same requests against two stores Dapr calls Stable — one failure is refused, the other is silent. With a runnable demo.

September 29, 202615 min read
Read post
Four Failure Shapes From Public Postmortems
AIArchitectureReliability

Four Failure Shapes From Public Postmortems

Seven published incidents, two predating LLMs, collapse into four shapes: the label became the goal, the gate never held, validation stayed inside, and the recovery was never tested.

September 29, 202613 min read
Read post
Where I Deliberately Don't Use AI
AILLMArchitecture

Where I Deliberately Don't Use AI

AI can do more than I let it do. A practitioner's boundary list — the places I deliberately don't use it, the two questions that draw the line, and where I have already changed my mind.

September 29, 202613 min read
Read post
Observability for AI Agents: Instrument the Trajectory, Not the Request
AIObservabilityLLM

Observability for AI Agents: Instrument the Trajectory, Not the Request

A 200 OK tells you nothing when the failure is a plausible wrong answer. Instrumenting agent systems: the span model, payload policy, tail sampling, cost accounting, and the path to diagnosis.

September 29, 202621 min read
Read post