EngineeringAugust 2026 · 2 min read

From Delphi to .NET: what one 3,885-file run produced

From Delphi to .NET: what one 3,885-file run produced

What was run

A Delphi reference corpus of 3,885 files, taken end to end through the pipeline in August 2026. It is not a customer engagement and we are not naming it — what follows is the output, measured on the artefacts themselves rather than estimated from a rate card.

What came out

  • Generated stubs: 20,689 → 1,515 (−92.7%) — placeholders left where the generator could not produce real code
  • Backend compile errors: 2,268 → 36 (−98.4%) — on the generated .NET backend, before any manual fix
  • UI parity: 95.4% — the share of legacy screens reachable and rendered in the generated Angular front end, measured 2026-08-04

The work behind those two drops was unglamorous and specific: type aliases, escaped character literals, the in operator mapped to Contains, empty except mapped to catch { }, set of X mapped to HashSet<T>.

What the same run did not solve

  • 1,515 stubs still standing, each one located and labelled in the output
  • 2,799 raw pointer expressions — no exact equivalent compiles in safe C#
  • 29 empty catch blocks, faithful to the legacy and flagged as debt on the way out

The pointers are the interesting case, because there is no correct answer available. Replicating them exactly does not compile in safe C#; you either accept unsafe and let it spread through the project, or rewrite to reference access case by case. That is a product decision, not a technical one, and the migration surfaces it rather than choosing silently.

This list is the output of the fidelity register: every point where the generator chose faithfulness over cleanliness is recorded with its location and reason. It is the backlog the remediation phase starts from.

What this does and does not prove

It proves the depth exists and works at scale on Delphi. It does not transfer: Delphi is the only language at full parser depth today. For the others, method bodies arrive as stubs and the dependency graph has no code layer — so a COBOL system will not behave like this one, and we would rather say so here than have you find out in week one.

Taking another language to this depth is a scoped project with a precedent now. It is not a promise.