Phase 19: Capstone Projects

Capstone 09 Kod Göç Etme Ajanı (Repo-Level Dil / Çalışma Zamanı Yükseltme)

Amazon'un MigrationBench (Java 8 ila 17) ve Google'ın App Engine Py2-to-Py3 göçörü 2026 barını belirledi. Modern'in OpenRewrite'i, belirleyici AST'lerin ölçekli olarak yeniden yazılmasını sağlar. Grit aynı sorunu kodemod tarzı DSL ile hedefliyor. Üretim örneği her ikisini birleştirir: güvenli yeniden yazılar için belirleyici bir altyapı eklemiş belirsiz durumlar için bir ajan katmanı, her dal için bir kum kutusu ve PR açılmadan önce yeşilye dönen bir test harnesini. Son taş 50 gerçek depoyu göç etmek ve başarısızlık taksonomisi ile geçiş oranını yayınlamak.

Type: Capstone

Languages: Python (agent), Java / Python (targets), TypeScript (dashboard)

Prerequisites: Phase 5 (NLP), Phase 7 (transformers), Phase 11 (LLM engineering), Phase 13 (tools), Phase 14 (agents), Phase 15 (autonomous), Phase 17 (infrastructure)

Phases exercised:P5 · P7 · P11 · P13 · P14 · P15 · P17

Time: 30 hours

Sorun

Büyük ölçekli kod göçü, 2026 kodlama ajanlarının en temiz üretim uygulamalarından biridir. Yerel gerçeklik açık (test süiti göçden sonra geçer mi?), ödüller gerçek (Java-8 filosu göçü kişilik ölçeği projesidir) ve referans değerleri kamuoyundadır (MigrationBench 50-repo alt kümesi). Modern'in OpenRewrite'i belirleyici tarafı ele alıyor. Ajan katmanı OpenRewrite reçetelerinin yapamayacağı her şeyi ele alıyor: belirsiz yeniden yazılar, yapılandırma sistemi sürüklemesi, uzun kuyruğu sentaksisi, geçici bağımlılık kırılması.

Java 8 repo (veya Python 2 repo) alan bir ajan oluşturup yeşil-CI göçüran bir dal üretirsiniz. Geçit oranını, test kapsamının korunmasını, repo başına maliyetleri ve bir başarısızlık taksonomisini ölçersiniz.

Anlam

Bu boru hattı iki katman içindedir.deterministic substrate(OpenRewrite for Java, libcst for Python) mekanik yeniden yazmaların büyük kısmını güvenli bir şekilde çalışır: ithalat, yöntem imzaları, sıfır güvenlik düzenlemeleri, kaynaklarla deneme, eski API değiştirmeleri.agent layer(OpenAI Agents SDK veya LangGraph over Claude Opus 4.7 ve GPT-5.4-Codex) reçetelerinin yapamadığı durumları ele alır: yapılandırma dosyası yükseltmeleri (Maven/Gradle/pyproject), geçici bağımlılık çatışmaları, test parçaları, özel notlar.

Her repo, hedef çalıştırma süresi önceden kurulmuş bir Daytona kum kutusu alır. Ajan iterasyon yapar: oluşturma çalıştır, hataları sınıflandır, düzeltme uygulay, tekrar çalıştır. Zor sınırlar: 30 dakika her repo, 8 $ her repo, 20 ajan dönüş. Tüm testler geçerse ve kapsama delta olumsuz değilse, dal bir PR açar.

Başarısızlık taksonomisi teslim edilebilir. 50 repos'da, ne bozuldu? Depozisyonlar? Özel notlar? Kullanım sürümü oluşturun? Göçmenlikle ilgili olmayan test parçaları? Her sınıf bir sayım ve örnek farklılık elde eder. Gelecekteki tarif yazarları ilk üçü hedef alabilirler.

Mimarlık

target repo
      |
      v
OpenRewrite / libcst deterministic recipes
   (safe, fast, auditable, ~70-80% of fixes)
      |
      v
Daytona sandbox per branch
      |
      v
agent loop (Claude Opus 4.7 / GPT-5.4-Codex):
   - run build -> capture failures
   - classify failures (build, test, lint)
   - apply fix (patch or retry recipe)
   - rerun
   - budget: 30 min, $8, 20 turns
      |
      v
test + coverage delta gate
      |
      v (passed)
open PR
      |
      v (failed)
file under failure class + attach repro

Yüküm

  • Deterministik altyapı: OpenRewrite (Java) veya libcst (Python)
  • Agent: OpenAI Agents SDK veya LangGraph over Claude Opus 4.7 + GPT-5.4-Codex
  • Kum Kutusu: Daytona devcontainers per branch, ön monte edilmiş hedef çalıştırma süresi (Java 17 / Python 3.12)
  • Yapım sistemleri: Maven, Gradle, uv (Python)
  • Benchmarks: Amazon MigrationBench 50-repo alt kümesi (Java 8 ila 17), Google App Engine Py2-to-Py3 repos
  • Test harness: paralel koşucusu, Jacoco (Java) veya coverage.py (Python) üzerinden kapsam
  • Gözlem: Her farklı parçayla repo başına Langfuse + iz paketleri
  • Dashboard: sınıf başına sayılar ve örnek farklılıkları olan hata taksonomisi dashboard

Yapın

  1. Recipe pass.İlk olarak OpenRewrite (Java) veya libcst (Python) reçetelerini çalıştırın.
  1. Build trial.Daytona kum kutusu: hedef çalıştırma zamanını kur, inşaat çalıştır. Yeşilse testlere geç. Kırmızısa ajanı teslim et.
  1. Agent loop.LangGraph ile araçlar: run_build- Evet .read_file- Evet .edit_file- Evet .run_test- Evet .git_diff.Agent hataları sınıflandırır ( derinlik, sentaks, test, yapı aracı) ve hedefli bir düzeltme uyguluyor.
  1. Budget caps.30 dakika, 8 dolar, 20 ajan döner. "Budget_exhaust" altında herhangi bir ihlal durur ve dosyaları mevcut fark ile "budget_exhaust" altında durur.
  1. Test + coverage gate.Build yeşil gittiğinde test paketini çalıştırın. Kapsamı temel repo ile karşılaştırın. Kapsam 2'den fazla düşerse, "kapsam_iğneleme" altında dosya.
  1. PR open.Başarıya ulaştığınızda, şubenize basın, PR'yi farklılık ve hangi tariflerin uygulanıp hangi temsilcinin yazarı olduğunu özetleyerek açın.
  1. Failure taxonomy.Her başarısız repo için bir sınıf ile etiketleyin: dep_upgrade_required- Evet .build_tool_drift- Evet .custom_annotation- Evet .test_flake- Evet .syntax_edge_case- Evet .budget_exhaustedBir takım tahtası yap.
  1. 50-repo run.MigrationBench alt kümesi boyunca çalıştır. Sınıf başına geçiş oranını, rapora göre maliyet, kapsam-sağlama ve sadece karşılaştırma-deterministik bir temel çizgi raporlayın.

Kullan

$ migrate legacy-java-service --target java17
[recipe]   27 rewrites applied (JUnit 4->5, HashMap initializer, try-with-resources)
[build]    FAIL: cannot find symbol sun.misc.BASE64Encoder
[agent]    turn 1 classify: removed_jdk_api
[agent]    turn 2 apply: sun.misc.BASE64Encoder -> java.util.Base64
[build]    OK
[tests]    412/412 passing; coverage 84.1% -> 84.3%
[pr]       opened #1841  cost=$3.20  turns=4

Gönder

outputs/skill-migration-agent.mdbir repo verildiğinde, bir deterministik reçeteyi uyguluyor, sonra yeşil göçlü bir dal üretmek için bir ajan döngüsü yapar veya repo'yu taksonomi sınıfı altında dosyalar.

WeightCriterionHow it is measured
25MigrationBench pass rate50-repo subset pass@1
20Test-coverage preservationMean coverage delta vs base
20Cost per migrated repo$/repo on passing runs
20Agent / deterministic-tool integrationFraction of fixes that OpenRewrite handled vs agent authored
15Failure analysis write-upTaxonomy completeness with exemplars
100

Egzersizler

  1. Göçürürken sadece OpenRewrite ile (ajan yok) boru hattını çalıştırın. Geçit oranını tüm boru hattına karşılaştırın. Ajanın farkı olan durumları belirleyin.
  1. "Lint-clean" kontrolünü uygulayın: göçden sonra bir stil linter çalıştırın (Java için lekesiz, Python için ruff). Yeni lint hataları ortaya çıktığında PR'yi başarısız edin.
  1. "Minimal fark" optimizerini ekleyin: ajanın dalı testleri geçtikten sonra, gereksiz değişiklikleri ikinci bir geçişle kesin.
  1. Üçüncü bir göçe kadar uzan: Node 18'e Node 22. Kum kutu sarılmasını yeniden kullanın; tarif katmanını özel bir kod mod için değiştirin.
  1. UX metrik olarak ilk yeşil yapı zamanını ölçün. Hedef: p50 10 dakikadan az.

Anahtar Terimler

TermWhat people sayWhat it actually means
Deterministic substrate"Recipe engine"OpenRewrite / libcst: declarative AST rewrites with safety guarantees
Codemod"Code-modifying program"A rewrite rule that changes source code mechanically
Build drift"Tool version skew"Subtle Maven / Gradle / uv behavior changes between major versions
Failure class"Taxonomy bucket"A labeled reason a repo did not migrate: dep, syntax, test, build-tool, budget
Coverage delta"Coverage preservation"Change in test coverage % from base to migrated branch
Agent turn"Tool-call round"One plan -> act -> observe cycle in the agent loop
Budget exhaustion"Hit the ceiling"The repo consumed its 30-min / $8 / 20-turn limit without passing

Daha Fazla Okumak

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.