
"In total I probably spent around 45 minutes actively with it. It worked for around 3 hours while I was watching, then another 7 hours alone. This post is a recollection of what happened and what I learned from it. All prompting was done by voice using pi, starting with Opus 4.5 and switching to GPT-5.2 Codex for the long tail of test fixing."
"My initial prompt asked the agent to figure out how to validate the port. Through that conversation, the agent and I aligned on a path: reuse the existing Rust snapshot tests and port incrementally (lexer -> parser -> runtime). This meant the agent built Go-side tooling to: Parse Rust's test input files (which embed settings as JSON headers). Parse the reference insta .snap snapshots and compare output. Maintain a skip-list to temporarily opt out of failing tests."
"MiniJinja is a re-implementation of Jinja2 for Rust. I originally wrote it because I wanted to do a infrastructure automation project in Rust and Jinja was popular for that. The original project didn't go anywhere, but MiniJinja itself continued being useful for both me and other users. The way MiniJinja is tested is with snapshot tests: inputs and expected outputs, using insta to verify they match. These snapshot tests were what I wanted to use to validate the Go port."
MiniJinja was ported from Rust to native Go using an agent that performed most of the work with minimal human intervention and voice prompting. The active human time was roughly 45 minutes while the agent continued running unattended for many hours. The porting process reused Rust snapshot tests and progressed incrementally through lexer, parser, and runtime stages. The agent produced Go tooling to parse Rust test inputs with JSON headers, read insta .snap snapshots, compare outputs, and manage a skip-list for failing tests. A tight feedback loop and GPT-based models supported rapid iteration and test fixing.
Read at Armin Ronacher's Thoughts and Writings
Unable to calculate read time
Collection
[
|
...
]