I want everything to be blazing fast.

Notes from building !prod, a command deck for fleets of coding agents.

October 2026
2026-10-27
The tree the node was building
A remote build is only as good as the copy it builds. Three bug reports filed within one minute showed three ways the gateway's copy had drifted from the checkout: files cut by extension, directories that never went away, and a Swift package that never reached the Mac.
6 min
2026-10-21
The diff that was empty
Turning an associated function into a method is the mirror of making a method static, and the easier half. Writing it turned up something else: every write tool in the project reported an empty diff once it had applied its edit, because the old text was read after it was overwritten.
5 min
2026-10-19
Two conversions, three decisions
A type migration that writes .into() at every broken site sounds like the dangerous version. It holds up when the analyzer decides which conversions stay: only the ones that type-check and break nothing else are kept; the rest are taken back and left for a person. Type-correct, not judged right.
6 min
2026-10-18
The caller nobody edited
A declaration edit can leave call text unchanged while breaking type inference. The original generify report illustrates why callers still need checking, and why failed caller discovery must stop the plan.
5 min
2026-10-17
Two negations, one meaning
Inverting a boolean predicate requires changing both its body and its uses. Three direct-call shapes explain the negations and parentheses; a September prod-code implementation also shows the limits of reference discovery and textual rewriting.
5 min
2026-10-14
The receiver that did something
Removing an unused receiver can still remove an evaluation at the call site. A September prod-code implementation blocked selected receiver shapes; its textual rule shows why type checks alone cannot establish that a rewrite preserves behaviour.
5 min
2026-10-13
The callers a return-type assist leaves behind
A September rust-analyzer probe wrapped a function’s return type without updating its callers. The first prod-code implementation added propagation candidates and a report of unresolved calls. Its limits show why the caller side needs a separate check.
5 min
2026-10-12
What checking a fix revealed
September's prod-code fixes exposed a per-file exception that skipped its own case, a refusal that said too much, and an estimated cost replaced by a reported measurement. What those records teach about checking a fix.
4 min
2026-10-11
The function that was a file
Checking a proposed edit to a large file took half a minute, and running the check on sixteen threads changed almost nothing. The cause was a single function. Splitting it with the tool itself took the check to four seconds; the work turned up six bugs in the tool.
7 min
2026-10-11
Offloading the language server to a cluster
A Swift subproject can sit inside a Rust checkout, and a validation request can disturb the engine answering navigation queries. How prod-code v0.3.29 chooses a compatible node and separates proposed edits from ordinary analysis.
4 min
2026-10-10
Every place a struct is built
Turning a value computed inside a method into a field is three small edits. The hard part is the third: finding every place the struct is built, among everything the analyzer calls a reference to it. Imports, return types and `Self` all qualify, and a pattern that lists every field breaks.
5 min
2026-10-09
The dry run someone else paid for
A dry run is supposed to be the cheap step. Here it cost the next query, whoever asked it, twenty seconds. Moving validation onto a second analyzer fixed that, but the first measurement of the fix was taken on the wrong machine, and the second showed the cost had only moved.
8 min
All 114 posts →
Series