A Rust migration can preserve types and still change behaviour
GitHub’s account of migrating the Copilot runtime from TypeScript to Rust includes mistakes that survived translation: numbers serialized differently, empty strings took different fallback paths, and asynchronous work blocked the wrong thread. The lesson is concrete: preserving a function’s apparent purpose is not enough. Clients can depend on small runtime behaviours that the new implementation changes.
GitHub · Sep 16, 2026
Why it matters
These examples make useful review questions for any migration between languages or runtimes.
More context
The article was updated September 23; this card covers its regression examples, not every part of the long report. Try contract tests for serialized values, cancellation and fallback behaviour before migrating a boundary.
Keep in mind
This is GitHub’s practitioner report, not an independent evaluation of AI migration quality. Its own account acknowledges remaining unknown bugs.
Original read