Skip to content
brandon@moba: ~/whoami
brandon@moba:~$ whoami --verbose

Backend engineer building production systems at scale — film school grad turned engineer, now leading backend at Moba. This blog collects what I've learned along the way.

Events synced
7M
Essays shipped
167
Polyglot services
6
Bilingual writing
EN/KR
#

Work

#

Recent Posts

See all 167 posts →
ai-ml

AI Code Review Confusion Patterns

Thirteen distinct ways Claude, Copilot, and Codex behave on PRs — ten failure modes plus two productive behaviors to amplify, plus an analyst-side error class. With detection signals and the empirical tiebreaker that resolves factual disagreements.

ai-ml

Claude Code Agent Teams

Experimental feature for orchestrating multiple Claude Code instances as a coordinated team with shared task lists and inter-agent messaging

ai-ml

Codex `apply_patch` Hooks: The Matcher Fires, the Payload Differs

Corrected 2026-09-20. Codex hooks do see `apply_patch` as a tool, and an `Edit|Write` matcher reaches it. What still breaks a reused Claude hook is the payload: patch text instead of a file path, and many files per call.

devops

AI PR Review Validation Patterns

Fifteen patterns where AI code reviewers (Claude, Copilot, Codex) produce false positives, plus the classification framework and reinforcing-comment templates that keep triage fast.

devops

Claude Code: Shared + Personal AI Config Pattern

Split AI instructions into committed (shared) and gitignored (personal) layers

devops

The pre-commit hook race that put my files in someone else's commit

Two sessions committing to one repo, a slow pre-commit hook, and `fatal: cannot lock ref HEAD`. The loud failure is the easy one — the quiet failure hands your staged files to the other session's commit under its message.

general

Markdownlint Conventions

7,500 markdownlint errors across 200 markdown files. The rules that mattered, the configuration that stuck, two pre-commit traps that surface only in nested scopes, a wrapped issue reference that turns into a heading, and the strict-preset migration that collapsed an 18-rule custom config into one extends + five carve-outs.

devops

Anthropic Prompt Cache TTL + Cost Mechanics

Anthropic silently dropped Claude Code's prompt-cache TTL from 1 hour to 5 minutes around early March 2026. Without explicit awareness, idle gaps ≥5 min between messages evaporate the cache and force a full cold cache-write on the next message — pricing it at 1.25× base input on the entire conversation prefix.

devops

Serena MCP — Multi-Profile Setup for Claude Code (cpers/cwork)

Installing the Serena MCP server across a Claude Code dual-profile setup (cpers/cwork) plus Codex, including the four recommended hooks, the system-prompt override, and the non-obvious "installer writes to default ~/.claude.json, misses profile-specific stores" trap.

ai-ml

Gemini Asymmetric Embeddings

Retrieval gets better when queries and documents are encoded differently. Gemini expressed that with a task_type parameter, and its newer model moved the same idea into the prompt.

enko