- mutation.py: negation mutants, skip WHILE/DO blocks (endless loop blocked RFC ~8 min) - generator: accept only after mutation check; survivors go back as repair feedback - runner/judge.py: stop tasks scored 100/30/0; gap by keywords, else judge model - proxy: tool schema variant generic_v0 (draft); generator make_k_variant - evalset.py: 88 slots for step F (A-I, H, K) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
43 KiB
Faz 1 Tasarım — ABAP Danışman Modeli: Eval Seti, Görev Formatı, Harness
Durum: taslak v23 · 2026-10-02 · v23: Adım B — FM, rapor, CDS desteği; T13–T15; eşzamanlılık bulgusu.
1. Amaç
Faz 1 iki şey üretir:
- Eval seti: A4H'da otomatik puanlanan ABAP görevleri. Hedef 100 görev; bu dokümanda 10 örnek.
- Harness: Bir modeli EPOD ADT MCP ile A4H'ya bağlar, görevi çalıştırır, puanlar, yörüngeyi kaydeder.
Aynı harness sonraki fazlarda eğitim verisi üretir: başarılı yörüngeler SFT verisi, puanlar RL ödülü olur.
2. Rol sınırı
Modelin sözleşmesi (karar, 2026-10-02): Metin olarak ABAP görevi + genel ABAP MCP arayüzü. Model belirli bir plan formatına veya belirli bir server'ın tool isimlerine bağlı değildir.
plan-agent.md bugün implementer'ı "ABAP idiomlarını güvenilir hatırlamaz" diye tanımlıyor. Bu yüzden zanaat kararlarını planner veriyor. Yeni düzende bu kararlar modele geçer.
| Konu | Spec (fonksiyonel taraf / planner) | Model (ABAP danışmanı) |
|---|---|---|
| Goal, iş kuralları, alan eşlemesi | ✓ | |
| Open questions | ✓ | Eksik görürse durur, sorar |
| Context: obje adı, imza, DDIC | ✓ (kısmi olabilir) | Eksikse ADT ile okur |
| Public kontrat (sınıf adı, public metot imzası, hata davranışı) | ✓ | Değiştirmez |
| Zanaat kararları: tablo tipi, key, erişim yolu, SELECT stratejisi, exception tasarımı, release'e uygun syntax | ✓ | |
| Private tasarım, yardımcı metotlar, testler | ✓ | |
| Kod, aktivasyon, doğrulama döngüsü | ✓ |
Kritik kural: Public kontrat spec'te sabittir. Gizli testler bu kontrata bağlanır. İç tasarım tamamen modelindir.
3. Spec formatı (modelin girdisi)
plan-agent.md yapısı temel alınır, dil STE100 kalır. Değişiklikler:
- Decisions bölümü kaldırılır. Sadece iş kararları kalır ("Business rules").
- Steps iş seviyesine çekilir. Obje sırası ve zanaat detayı modele bırakılır.
- Contract ayrı bölüm olur. Gizli testlerin bağlandığı yer burası.
- Constraints eklenir. İçeriği:
- Hedef release, paket, isim öneki.
- Coding standards: projeye özgü, denetlenebilir kurallar.
- Out of scope: dokunulmayacak objeler ve eklenmeyecek davranışlar.
Bölümler, bu sırayla:
- Goal
- Open questions (pozitif görevlerde boş)
- Context
- Contract
- Business rules
- Constraints
- Acceptance
Plan formatının rolü (karar, 2026-10-02): plan-agent.md formatı zorunlu girdi değil, en iyi sonuç veren girdidir. Model serbest metin ve eksik görev tanımıyla da çalışabilmelidir. Görevlerin çoğu bu formatta yazılır; kategori K (bölüm 8) serbest ve eksik girdiyi ölçer. Kral'ın kendi akışında (/sapplan → build) plan kullanımı değişmez.
Coding standards örneği (her görevde değişebilir):
- No comment restates what the code does.
- No Given/When/Then comment header in a test.
- Method length stays below 40 statements.
- No new global variable.
- No method chaining (release kısıtı olan görevlerde).
- Use text elements for user-facing text.
Bu kuralların çoğu abaplint ile denetlenir (method_length, global_class, syntax version). Kalanlar özel AST kontrolüdür.
4. Model çıktısı
Model şunları üretir:
- Decisions bloğu (STE100):
plan-agent.mdDecisions listesindeki maddeler. Release, tablo tipi ve key, erişim yolu, loop dışı SELECT, exception sınıfı, yeni objelerin adı ve paketi. Her biri tek satır gerekçeyle. - Objeler: A4H'da oluşturulmuş ve aktif.
- Kendi testleri: ABAP Unit, modelin kendi yazdığı.
- ATC kararları: Her P1/P2 bulgusu ya düzeltilir ya da tek satır gerekçeyle bırakılır. False positive belgelenir.
- Rapor (STE100):
build-agent.mdReporting kuralı. Her adım, doğrulama sonucu, sapmalar. - Change summary tablosu: Object · Type · Action · Reason. Throwaway objeler (
$TMPsmoke sınıfı vb.) ayrı işaretlenir.
Davranış kuralları build-agent.md'den uyarlanır:
- Public kontratı değiştirme. Değiştirmen gerekiyorsa dur ve raporla.
- İş kuralı eksik veya çelişkiliyse dur ve sor. Tahmin etme.
- Zanaat kararı spec'te yoksa kendin ver. (Eski kural: "dur ve sor". Bu kural tersine döner.)
- Spec'te istenmeyen davranış ekleme.
- Constraints altındaki out of scope listesine dokunma.
- Aynı doğrulama iki kez başarısız olursa dur ve raporla. Üçüncü deneme yok.
- ABAP Unit'in kapsayamadığı bir davranışı (ör. factory'nin runtime çözümü)
$TMPsmoke objesiyle doğrula. Smoke objesi teslimata girmez. - Testler gerçek veritabanını okumaz. DB erişimi
CL_OSQL_TEST_ENVIRONMENTveyaCL_CDS_TEST_ENVIRONMENTile izole edilir.
5. Ortam
Sistem: A4H, Mac mini üzerinde Docker.
Sistem kimliği: MCP server'da tek sistem bağlı: epodabap, mod write. SAP_BASIS 816 SP01. Modern syntax'ın tamamı mevcut; eski release hedefleri sadece abaplint ile denetlenir.
İzolasyon: MCP server paket (DEVC) oluşturamaz. Bu yüzden her koşu $TMP içinde çalışır, objeler koşuya özel önekle adlanır. Önek şeması: Z<run 3 hane><task 3 hane>_ (ör. Z007003_DISC_CALC). Önek her koşuda yenidir; eski koşunun objeleriyle çakışma olmaz. Spec ve gizli testler isimleri yer tutucuyla taşır ({{P}}DISCOUNT_CALC); harness koşu başında doldurur. 30 karakter sınırı görev yazımında kontrol edilir.
Seed verisi: MCP server'da tablo yazma tool'u yok (sap_sql_query sadece okur). Harness, seed verisini IF_OO_ADT_CLASSRUN uygulayan bir seed sınıfı ile yükler ve sap_run_class ile çalıştırır.
Teardown: Harness, koşu sonunda objeleri ADT'nin kendi silme API'si ile siler. MCP server değişmez, model bu yolu görmez.
POST /sap/bc/adt/deletion/delete
Accept: application/vnd.sap.adt.deletion.response.v1+xml
Content-Type: application/vnd.sap.adt.deletion.request.v1+xml
<del:deletionRequest xmlns:del="http://www.sap.com/adt/deletion"
xmlns:adtcore="http://www.sap.com/adt/core">
<del:object adtcore:uri="/sap/bc/adt/ddic/ddl/sources/zz_sample_client">
<del:transportNumber/>
</del:object>
</del:deletionRequest>
- Yanıt her obje için
del:isDeleted="true|false"ve mesaj döner. DDIC objelerinde silme log linki gelir. - Obje URI'leri
sap_search_objectsonucundakiurialanından alınır (önekle arama). $TMPobjelerindetransportNumberboş kalır.- Harness, CSRF token'ı (
x-csrf-token: fetch) ve oturum cookie'sini yönetir.
Doğrulandı (2026-10-02, Mac mini): 3 bağımlı obje (interface, onu implemente eden sınıf, test sınıfı) tek istekte silindi. Toplam 20 objeden 19'u silindi. Kalan 1 obje (Z002001_IBAN_VALIDATOR) "You are already editing" ile reddedildi: başka bir oturumda (muhtemelen MacBook'taki ADT) açık kilit. Harness bunu deleted: false olarak raporluyor; kilit kalkınca teardown tekrar çalıştırılır.
Önceki doğrulama listesi (tarihsel):
- Bir istekte birden çok
del:objectkabul ediliyor mu? - Bağımlı objeler (ör. sınıf + kullandığı tablo tipi) aynı istekte doğru sırayla siliniyor mu? Değilse harness sırayı verir: test sınıfı → sınıf → interface → CDS → tablo tipi → yapı/tablo → data element → domain → mesaj sınıfı.
isDeleted="false"dönen obje: harness loglar, koşuyu "kirli" işaretler, sonraki koşu yine benzersiz önekle başlar.
Sızıntı koruması (silme başarısız olursa diye, ek güvenlik): Her koşunun öneki benzersizdir. Harness, modelin sap_search_object ve sap_usage_references sonuçlarından başka koşuların öneklerini filtreler.
Paralellik (test edildi, 2026-10-01): MCP server en fazla 8 eşzamanlı oturum tutuyor. Bu sınır bilinçli: A4H ve ADT'nin taşıyabileceği yük kadar. 9. oturum initialize'da ID alıyor ama ilk çağrıda HTTP 404 dönüyor. 8 paralel syntax check 1–2 saniyede bitti. Toplam kapasite 8 oturumla sınırlı; Adım 3 ve 5 (binlerce koşu) için süre hesabı buna göre yapılır. (Karşılaştırma: normal geliştirme sistemlerinde 12 agent aynı anda çalışabiliyor; kısıt A4H'nın kaynakları.)
Makine dağılımı (v13: her şey Mac mini'de):
Yük testi, 2026-10-02, Mac mini M4 Pro 64 GB, A4H çalışırken Qwen 3.8 27B (MLX, nvfp4), num_ctx 32k:
| Ölçüm | Değer |
|---|---|
| A4H bellek (üretim sırasında) | 28,9 GB (Docker limiti 62,7 GB) |
| Sistem boş bellek / swap | %49 / 0,5 GB — baskı yok |
| A4H tepkisi | Etkilenmedi |
| Prompt eval | 119 token/s |
| Üretim (eval) | 31 token/s |
| Test prompt'u (T01 benzeri, tek sınıf + testler) | 11 678 token, 6 dk 18 sn |
Sonuç: A4H, MCP server, harness ve model Mac mini'de birlikte çalışır. MacBook serbest kalır.
- 11 678 token'ın çoğu muhtemelen düşünme (thinking) çıktısı. Ölçümde iki mod da denenir: thinking açık ve kapalı. Süre ve puan farkı baz model seçimine girer.
- Kaba süre tahmini: görev başına 15 tur × ~2 000 token ≈ 16 dk üretim + tool süresi → 20–30 dk/görev. 100 görev ≈ 35–50 saat/model. Mac mini 7/24 koşarsa model başına ~2 gün.
- Opsiyonel koruma: Docker Desktop bellek limitini ~34 GB'a indirmek; HANA büyüyüp modelin alanına girmesin.
- Adım 3'te kapasite yetmezse: ikinci A4H (kiralık VM) veya modeli kiralık GPU'da koşturmak.
Harness kuralları:
- Yerel model (MacBook): tek worker, paralel istek yok. Paralel worker (en fazla 6, 2 oturum senin kullanımın için) sadece model uzakta çalışıyorsa (kiralık GPU).
- Her worker koşu boyunca tek oturum kullanır, koşu sonunda oturumu
DELETEile kapatır. - 404 alan çağrı: oturumu yeniden aç, çağrıyı bir kez tekrarla, koşuyu "kirli" işaretle.
Opsiyonel server iyileştirmesi: sınır aşıldığında initialize aşamasında açık hata (429/503) dönmek. Böylece harness oturumu almadan bekler. Paralel yazma ve aktivasyon henüz test edilmedi; Adım 1.3'te ölçülecek.
Genel ABAP MCP arayüzü (karar, 2026-10-02). Model EPOD tool isimlerini değil, genel bir "ABAP MCP" arayüzünü görür. Ayrıntılı spec: abap-mcp-arayuz.md (sonra yazılacak).
| Genel tool | EPOD karşılığı (ilk adapter) |
|---|---|
search_object |
sap_search_object |
read_source |
sap_pull_source |
object_structure |
sap_object_structure, sap_object_members |
where_used |
sap_usage_references |
create_object |
sap_create_object |
write_source |
sap_push_source, sap_push_element |
activate |
sap_activate |
syntax_check |
sap_syntax_check |
run_unit_tests |
sap_run_unit_test, sap_check_object (coverage) |
run_atc |
sap_atc_run |
- EPOD bu arayüzü native destekleyecek. O zamana kadar harness proxy'si genel arayüzü EPOD tool'larına çeviren ilk adapterdir.
- Delete/teardown arayüzde yok. Harness'e aittir (ADT deletion API).
- Çekirdek dışındaki EPOD tool'ları (
sap_sql_query,sap_run_class,sap_short_dumps,sap_element_info,sap_inactive_objects,sap_pretty_print,sap_push_message) için genel karşılık spec'te kararlaştırılacak. - Eğitimde az miktarda tool isim ve şema varyasyonu kullanılır (ör.
read_source/get_source, parametre adlarında farklılık). Amaç: model belirli bir isim setine ezber yapmasın.
Tool seti (server v2.3.0, 33 tool). Model sadece aşağıdaki beyaz listeyi görür. Server tool'larında readOnlyHint anotasyonu yok; bu yüzden ayrım harness'te beyaz listeyle yapılır.
| Grup | Model görür | Model görmez |
|---|---|---|
| Okuma | sap_search_object, sap_pull_source, sap_object_structure, sap_object_members, sap_usage_references, sap_element_info, sap_inactive_objects, sap_short_dumps, sap_sql_query |
sap_adt_raw_get, sap_list_systems, sap_compare_systems, sap_object_versions, sap_object_diff, sap_pull_source_to_file |
| Yazma | sap_create_object, sap_push_source, sap_push_element, sap_push_message, sap_activate |
sap_push_source_from_file, sap_lock, sap_unlock |
| Kalite | sap_syntax_check, sap_check_object (runUnitTest, coverage), sap_run_unit_test, sap_atc_run, sap_pretty_print |
|
| Çalıştırma | sap_run_class ($TMP smoke için) |
|
| Transport | sap_transport_list, sap_transport_of_object, sap_transport_create, sap_transport_release |
Notlar:
sap_create_object16 tip oluşturur: PROG, CLAS, INTF, FUGR, FUNC, DTEL, DOMA, TABL, TTYP, STRU, DDLS, DDLX, SRVD, DCLS, DDLA, MSAG. BDEF oluşturamaz → kategori J (RAP) için server'a BDEF create eklenmeli.sap_check_objectP1/P2 ATC bulgusunda başarısız döner; G5 bununla ölçülür.coverage=truesadece global sınıfı ölçer.sap_push_sourcevarsayılan olarak aktive eder. Birden çok objeli değişiklikteactivate=false+sap_activatesırası modelin öğrenmesi gereken bir beceri.
Aktivasyon kontrolü: Planlarda geçen "MCP activation wedge" nedeniyle harness, her push sonrası aktif versiyonu ayrıca okur. Modelin raporu değil, aktif kaynak puanlanır.
6. Puanlama
6.1 Kapılar (0/1)
Bir kapı geçilmezse görev puanı 0'dır.
- G1: Kontrattaki tüm objeler var ve aktif.
- G2: Kontrattaki public imzalar spec ile birebir aynı.
- G3: Gizli testlerin derlenmesi ve en az bir testin geçmesi.
- G4: Out of scope listesindeki hiçbir obje değişmemiş. Harness, seed objelerinin aktif kaynağını koşu öncesi ve sonrası karşılaştırır.
- G5: Açık P1 ATC bulgusu yok.
6.2 Bileşenler (kapılar geçildiyse)
| Bileşen | Ağırlık | Ölçüm |
|---|---|---|
| Doğruluk | 40 | Gizli ABAP Unit testlerinin geçme oranı |
| Zanaat | 20 | Görevin craft_checks listesi (abaplint kuralları + özel AST kontrolleri) |
| Clean ABAP + Coding standards | 15 | abaplint Clean ABAP kuralları + görevin coding standards kontrolleri |
| Modelin testleri | 15 | (a) Hatalı referans implementasyonu yakalama, (b) statement/branch coverage (hedef görevde verilir, ör. %70), (c) gerçek DB erişimi yok |
| Disiplin | 10 | Gerekçesiz P2 bulgusu yok; iki başarısızlık sonrası durma kuralına uyma; change summary eksiksiz ve doğru; tool çağrısı bütçesi |
Ağırlıklar başlangıç değeri. İlk baz model ölçümünden sonra ayarlanır.
6.3 Negatif görevler
Beklenen sonuç stop olan görevlerde:
- Model obje oluşturmadan durur ve eksik noktayı adlandırır: 100.
- Model durur ama yanlış noktayı adlandırır: 30.
- Model uygular: 0.
"Doğru noktayı adlandırdı mı" kontrolü: görevde expected_gap anahtar kelimeleri + hakem model. Hakem modeli sadece bu kontrol için kullanılır.
6.4 Release hedefi
A4H en yeni release'te. Ama gerçek sistemler eski olabilir: senin planlarında "this system does not support method chaining" kısıtı var. Bu yüzden her görev bir release_target taşır. abaplint syntax.version ayarı (ör. v702, v740sp05, v750) bu hedefi A4H'dan bağımsız denetler. Hedef release'i aşan syntax G1'i düşürür.
6.5 abaplint ve standart tipler (test edildi, 2026-10-01)
Test: abaplint 2.120.63, abapGit formatında seed objeleri (yapı, tablo tipi, şeffaf tablo) + bunları kullanan bir sınıf.
| Kontrol | Sonuç |
|---|---|
| Seed tiplerini çözme (alan seviyesine kadar) | ✓ ls_order-amountx → "Component not found" |
| Eksik Z tipi | ✓ ZEVAL_TT_MISSING → unknown_types |
Standart tipler (TIMESTAMPL, SYUNAME, WAERS, CL_ABAP_TSTMP) |
Yanlış alarm yok (`errorNamespace: ^(Z |
| Standart sınıfta yanlış parametre adı | ✗ Yakalanmıyor (beklenen) |
db_operation_in_loop |
✓ |
Release hedefi v702: inline DATA(...) |
✓ Hata |
Sonuç ve iş bölümü:
- A4H syntax check / aktivasyon = doğruluk. Standart API kullanımı burada denetlenir.
- abaplint = release hedefi, zanaat, stil. Standart tipleri bilmesi gerekmez.
- Seed objeleri abapGit formatında tutulur; abaplint onları doğrudan okur. Aynı dosyalar A4H'ya MCP ile kurulur.
- Not: v702 hatalarında zincirleme (cascade) hatalar oluşuyor. Release kapısı için hata sayısı değil, "en az bir
check_syntaxhatası var mı" ölçülür.
7. Görev şeması
id: T03
version: 1
category: C # bkz. bölüm 8
difficulty: 2 # 1-3
release_target: v750
expected_outcome: implement # implement | stop
budget:
max_tool_calls: 60
max_activations: 15
spec: spec.md # bölüm 3 formatında, STE100
seed: # görev başında A4H'ya kurulur
objects: seed/ # abapGit formatında DDIC, sınıflar
data: seed/data.json # tablo içerikleri
faulty_reference: seed/ref_faulty/ # modelin testlerini ölçmek için
hidden_tests: hidden/ # global test sınıfı, kontrata bağlı
craft_checks:
- abaplint: db_operation_in_loop
- custom: lookup_table_is_sorted_or_hashed
expected_gap: [] # sadece stop görevlerinde
Gizli testler global test sınıfıdır (FOR TESTING). Modelin sınıfına sadece public kontrat üzerinden erişir. Bu yüzden G2 (imza eşleşmesi) kapıdır.
8. Kategoriler
| Kod | Kategori | Ölçülen beceri |
|---|---|---|
| A | Saf mantık, yeni sınıf | Dil, OO, Clean ABAP |
| B | Veritabanı erişimi + test double | Open SQL, CDS, CL_OSQL_TEST_ENVIRONMENT |
| C | Internal table zanaatı | Tablo tipi, key, erişim yolu |
| D | Exception tasarımı | Class-based exception, T100 mesajları |
| E | Refactoring | Legacy kodu davranışı koruyarak temizleme |
| F | Bilinmeyen obje | Spec'te imzası olmayan seed objesini ADT ile okuyup kullanma |
| G | Release kısıtı | Eski release'e uygun syntax |
| H | Negatif | Eksik veya çelişkili spec'te durma |
| I | Hata düzeltme | Kırmızı test veya short dump'tan kök nedene |
| J | CDS / RAP | View entity, behavior (sonraki dalga) |
| K | Eksik / serbest girdi + farklı tool şeması | Plan formatı olmadan, serbest metin veya eksik görev tanımıyla çalışma; farklı tool isim ve şemalarına uyum. Eksik bilgi kritikse durup sorma (H ile ilişkili) |
Hedef dağılım (beceri kategorisine göre): A 10, B 15, C 15, D 10, E 15, F 10, G 10, H 10, I 5, K 10 (toplam 110). J ikinci dalgada. K görevleri diğer kategorilerin görevlerinin serbest metin veya farklı şemalı varyantları olarak üretilir.
8.1 İkinci boyut: obje tipi
Beceri kategorisi tek başına yetmez. T01–T12'nin hepsi sınıf; gerçek işte function module, rapor ve DDIC de var. Her görev bir beceri kategorisi ve bir ana obje tipi taşır.
| Obje tipi | Hedef pay | MCP ile mümkün mü | Gizli test yöntemi |
|---|---|---|---|
| CLAS / INTF | ~35 % | ✓ | Global test sınıfı, public kontrat üzerinden |
| FUGR / FUNC | ~15 % | ✓ (sap_create_object FUGR + FUNC) |
Global test sınıfı CALL FUNCTION ile çağırır; exception'lar EXCEPTIONS ile kontrol edilir |
| PROG (rapor, selection screen, ALV) | ~10 % | ✓ | SUBMIT ... WITH ... AND RETURN + cl_salv_bs_runtime_info=>set( display = abap_false data = abap_true ) ile ALV verisi yakalanır; WRITE listeleri EXPORTING LIST TO MEMORY + LIST_FROM_MEMORY ile |
| DDIC (TABL, STRU, DTEL, DOMA, TTYP) | ~10 % | ✓ | Yapı kontrolü: sap_object_structure / DD03L, DD04L, DD01L sorguları; kullanan kodun derlenmesi |
| CDS (DDLS, DCLS, DDLX, SRVD) | ~25 % | ✓ (BDEF hariç) | CL_CDS_TEST_ENVIRONMENT ile test double; sonuç kümesi karşılaştırması |
| MSAG + exception | ~5 % | ✓ (sap_push_message) |
T100 mesaj metni ve parametre kontrolü |
CDS alt konuları (25 görev civarı): view entity ve join'ler, association ve path expression, aggregation ve GROUP BY, CASE / cast / built-in fonksiyonlar, parametreli view, access control (DCLS), annotation ve metadata extension (DDLX), table function + AMDP sınıfı, service definition (SRVD), ABAP'tan CDS tüketimi (Open SQL ile association kullanımı). RAP (BDEF) server'a BDEF oluşturma eklenince J kategorisinde.
Kapsam dışı (ADT/MCP ile yapılamıyor): dynpro (CALL SCREEN), SmartForms, BAdI/enhancement implementasyonu, IDoc tanımı. Gerçek işte var ama A4H + MCP ile doğrulanamıyor.
Gerçek işten uyarlanabilir desen: FI-CA event modülleri gibi "sabit arayüzlü FM" işleri. Seed'de örnek bir FM (sabit imza) verilir; görev aynı imzayla yeni bir FM yazmaktır. Bu, F kategorisini (bilinmeyen objeyi okuyup taklit etme) gerçek bir desenle ölçer.
Release ile ilişki: Eski release hedefli görevler (G kategorisi) doğal olarak FM ve rapor ağırlıklı olur: 7.02'de sınıf yerine FORM rutinleri ve FM'ler yaygın.
Harness'te gereken değişiklikler:
- G2 (kontrat): FUNC için imza kontrolü (
FUNCTION ... IMPORTING/EXPORTING/TABLES/EXCEPTIONSbloğu), PROG için selection screen parametreleri. - abaplint dışa aktarımı: şu an sadece CLAS/INTF. PROG ve FUGR abapGit formatı eklenecek.
- Teardown sırası: FUNC → FUGR, PROG.
- Seed kurulumu: FUGR + FUNC (FM önce grup ister).
Sıradaki görevler: T13 (FUNC, sabit arayüzlü FM, kategori F) ve T14 (PROG, selection screen + ALV, kategori B).
9. Örnek görevler
9.1 Tam örnek: T03 (kategori C)
Seed: ZEVAL_DISC_RULE tablosu (CUST_GROUP CHAR4 key, MIN_AMOUNT CURR, DISCOUNT_PCT DEC 5,2), 200 satır. ZEVAL_S_ORDER yapısı ve ZEVAL_TT_ORDER tablo tipi.
spec.md:
# 1. Goal
Calculate the discount for each order line. The sales team uses the result in a
nightly batch run with up to 500 000 order lines.
# 2. Open questions
None.
# 3. Context
- Table ZEVAL_DISC_RULE, package ZEVAL_T03. Key: CUST_GROUP.
Fields: CUST_GROUP (CHAR4), MIN_AMOUNT (CURR 15,2), DISCOUNT_PCT (DEC 5,2).
One customer group has one or more rules.
- Table type ZEVAL_TT_ORDER, line type ZEVAL_S_ORDER.
Fields: ORDER_ID (CHAR10), CUST_GROUP (CHAR4), AMOUNT (CURR 15,2),
CURRENCY (CUKY).
# 4. Contract
- Create the class ZCL_EVAL_DISCOUNT_CALC in the package ZEVAL_T03.
- Public method CALCULATE:
IMPORTING it_orders TYPE zeval_tt_order
RETURNING VALUE(rt_result) TYPE zeval_tt_disc_result
- Create the table type ZEVAL_TT_DISC_RESULT. Line fields: ORDER_ID,
DISCOUNT_PCT, DISCOUNT_AMOUNT (CURR 15,2), CURRENCY.
- The method returns one result line for each order line, in the input order.
# 5. Business rules
- For an order line, use the rule of the same customer group with the highest
MIN_AMOUNT that is less than or equal to AMOUNT.
- If no rule applies, the discount is 0.
- DISCOUNT_AMOUNT is AMOUNT multiplied by DISCOUNT_PCT divided by 100. Round
half up to 2 decimals.
# 6. Constraints
- Release target: 7.50.
- Do not change ZEVAL_DISC_RULE.
# 7. Acceptance
- The hidden tests pass.
- The class runs 500 000 order lines without a database access in a loop.
Gizli testler: kural yok, tek kural, sınır değer (AMOUNT = MIN_AMOUNT), çoklu kural, yuvarlama, boş girdi, sıra korunumu.
craft_checks: db_operation_in_loop (abaplint); özel: kural tablosu SORTED veya HASHED, ya da tek SELECT + sıralı okuma; loop içinde LOOP AT ... WHERE üzerinde standart tablo yok.
faulty_reference: Sınır değerde < yerine <= hatası olan implementasyon. Modelin testleri bunu yakalamalı.
9.2 Kısa örnekler
| ID | Kat. | Release | Görev özeti | Beklenen zanaat / davranış |
|---|---|---|---|---|
| T01 | A | 7.58 | IBAN biçim doğrulayıcı sınıf; mod-97 kontrolü, hata nedenleri enum olarak | Saf fonksiyonlar, ENUM veya sabitler, küçük metotlar |
| T02 | B | 7.58 | Seed tablosundan açık kalemleri yaşlandırma bantlarına göre toplayan sınıf | Tek aggregate SELECT, CL_OSQL_TEST_ENVIRONMENT ile test |
| T03 | C | 7.50 | Yukarıdaki tam örnek | Loop dışı SELECT, sorted/hashed lookup |
| T04 | D | 7.58 | Dosya satırı parser'ı; satır ve alan bilgisiyle anlamlı hata | Class-based exception, T100 mesaj sınıfı, IF_T100_DYN_MSG |
| T05 | E | 7.58 | 300 satırlık seed rapor (FORM'lar, global data) → sınıfa refactor; mevcut çıktı testle sabit | Davranış korunur, global state yok, testlenebilir yapı |
| T06 | F | 7.58 | Seed'deki ZCL_EVAL_FX_PROVIDER ile para birimi çevirimi. Spec sadece sınıf adını verir, imzayı vermez |
Model önce ADT ile okur, sonra kullanır |
| T07 | G | 7.02 | T03 benzeri lookup, ama 7.02 hedefi | Inline declaration yok, NEW/VALUE/COND yok, method chaining yok |
| T08 | H | 7.58 | Spec iki çelişkili yuvarlama kuralı içeriyor | stop; expected_gap: rounding |
| T09 | H | 7.58 | Spec bir alan eşlemesini vermiyor (kaynak alan belirsiz) | stop; expected_gap: field mapping |
| T10 | I | 7.58 | Seed sınıf büyük girdide TSV_TNEW_PAGE_ALLOC_FAILED dump'ı veriyor; dump bilgisi spec'te |
Kök neden: gereksiz tablo kopyası; düzeltme + regresyon testi |
| T11 | B+F | 7.50 | Nötr alan: seed'de log tablosu + referans tablosu + factory sınıfı. Görev: iki yönlü reader interface ve sınıfı (anahtardan kayda, kayıttan anahtara), factory'ye GET_READER ekle. Belge anahtarı REF TO data olarak gelir; iki eşleme dalı |
Join + en yeni satır (ORDER BY ... DESCENDING, UP TO 1 ROWS), cast hatası → anlamlı exception, factory'nin mevcut desenini okuyup taklit etme (F), method chaining yok, OSQL test double, $TMP smoke ile factory doğrulaması |
| T12 | H | 7.58 | T11'in varyantı: istenen exception text id'si için gereken attribute mevcut exception sınıfında yok | stop veya açık sapma raporu; expected_gap: exception attribute |
10. Harness akışı
1. setup paket oluştur, seed objelerini kur, seed verisini yükle
2. run modeli başlat: system prompt + spec + MCP tool'ları
bütçe: max_tool_calls, max_activations, zaman aşımı
3. collect paketteki tüm objelerin aktif kaynağını çek
4. gate G1 (aktif mi), G2 (imza eşleşmesi)
5. test gizli test sınıfını kur, ABAP Unit koştur
6. check ATC + abaplint + özel craft kontrolleri
7. own-tests modelin testlerini faulty_reference'a karşı koştur
8. score puanı hesapla, JSON olarak yaz
9. log tam yörüngeyi JSONL olarak sakla (SFT adayı)
10. teardown paketi sil
Harness dili: Python (eğitim ekosistemi aynı dilde). MCP istemcisi olarak EPOD ADT MCP server'ına bağlanır.
Model arayüzü: OpenAI-uyumlu chat API. Böylece Ollama/MLX ile yerel modeller ve uzak API'ler aynı harness'te koşar.
11. Baz model ölçümü
Faz 1 sonunda aynı 100 görev şu gruplarla koşar:
- Aday baz modeller (Apache 2.0, orta boy, agentic). Liste ölçüm öncesi güncel durumla seçilir.
- Referans üst sınır: Claude. Sadece ölçüm için; çıktıları eğitim verisine girmez.
Sonuç tablosu: kategori bazında puan. Baz model seçimi ve eğitim önceliği bu tablodan çıkar.
Hedef çizgi: Claude referansına tüm kategorilerde en fazla 10 puan geride kalmak. T11 ve T12 bu karşılaştırmanın ana görevleri.
11a. Adım 1.3 sonuçları (2026-10-01)
Konum: ~/projects/abap-llm/harness (MacBook)
| Modül | Görev |
|---|---|
harness/mcp_client.py |
MCP streamable-http istemcisi; 404'te oturumu yeniden açar |
harness/adt_client.py |
ADT deletion API (sadece teardown; kimlik bilgisi .env'den) |
harness/proxy.py |
Beyaz liste, bütçe, başka koşu öneklerini filtreleme, yazma hata serisi sayacı, yörünge logu |
harness/agents.py |
oracle (referans çözüm), null, llm (OpenAI-uyumlu, zaman bütçesi 30 dk) |
harness/runner.py |
setup → agent → collect → G1–G6 → gizli testler → kendi testleri → ATC → abaplint → puan → teardown |
harness/cli.py |
run, teardown, teardown-all, cleanup-list |
tasks/T01/ |
IBAN görevi: spec, seed interface, 12 gizli test, referans |
Koşular (T01):
| Koşu | Agent | Puan | Not |
|---|---|---|---|
| 002 | oracle | 85 | 12/12 gizli test, abaplint ve ATC temiz. Kendi testleri 0 (referansta test yok). |
| 003 | null | 0 | G1, G2, G3 düştü. |
| 004 | qwen3.8:27b-mlx | — (32 dk sonra elle durduruldu; erken) | 15 tool çağrısı, 11 yazmadan 10'u aktivasyon hatası. Interface metodunu niteleme, offset syntax'ı (lv_pos+1), find( ... ignore_case ) parametreleri. İki başarısızlıktan sonra durmadı. |
Oracle ve null, puan aralığının iki ucunu doğruluyor. Koşu 004, eval'in ölçmesi gereken zayıflığı tam gösteriyor: ABAP syntax bilgisi ve durma disiplini.
Eklenen kurallar:
- Yerel model kuralları: zaman limiti yok (sınırı tool çağrısı bütçesi koyar;
--max-minutesopsiyonel). İstekler tek tek gider: tek worker,parallel_tool_calls: false, tool çağrıları sırayla çalışır. - Disiplin: art arda 3 veya daha fazla başarısız yazma/aktivasyon → disiplin puanından −5.
Ölçüm süresi riski: Yerel 27B model, Ollama'da 262k bağlamla tur başına 2–3 dakika harcadı. 100 görev × 30 dakika ≈ 50 saat/model. Adım 1.6 öncesi: bağlam penceresini sınırlamak (ör. 32k), MLX server'ı denemek, ölçümü gece ve hafta sonu koşularına bölmek. Koşu 005 (sınırsız süre) ilk gerçek süre ölçümünü verecek.
MCP server eksiği (test include): Yeni sınıfta test include yok; ADT artık onu otomatik oluşturmuyor (butona basmak gerekiyor). MCP oluşturamıyor. Karar: server'a eklenecek. Geçiş döneminde model testleri global test sınıfına yazabilir; puanlama ikisini de sayıyor. Eklendikten sonra yeni bir probe sınıfıyla test edilir.
Teardown: Mac mini'de .env (A4H kimlik bilgisi) dolduruldu; teardown her koşu sonunda otomatik çalışır. Kilitli 1 obje ve MacBook'taki koşu 005'in objeleri (Z005001_) bekliyor; koşu 005 bitmeden silinmez.
11b. Mac mini kurulumu (2026-10-02)
| Konu | Durum |
|---|---|
| Konum | ~/projects/abap-llm/harness (kullanıcı erhankeseli) |
| Erişim | Bu Project'in sohbetleri Mac mini'deki Claude Desktop'tan; Desktop Commander Mac mini'de |
| MCP server | ADT (Eclipse) içinde, 127.0.0.1:3000. Sistem adı A4H, mod write |
| MCP token | ADT plugin ayarından (com.epod.adt.mcp.plugin.prefs) .env'e yazıldı; .env izni 600 |
| Python / Node | Python 3.9.6 (sistem), Node 26.8.2; abaplint 2.120.63 |
| Model | qwen3.8-27b-32k = qwen3.8:27b-mlx + num_ctx 32768 (Ollama Modelfile) |
| Bağlam takibi | Her model yanıtının usage değeri yörüngeye yazılıyor; 32k sınırına yaklaşma buradan görülür (Ollama sınırı aşınca sessizce keser) |
| Koşu numaraları | MacBook: 001–099, Mac mini: 101+. Önekler çakışmaz. |
Doğrulama: oracle (koşu 101) 85, null (koşu 102) 0. MacBook sonuçlarıyla aynı.
Koşu 103: qwen3.8-27b-32k, T01 — 41,7 / 100
| Bileşen | Puan | Neden |
|---|---|---|
| Doğruluk | 16,7 / 40 | 12 gizli testten 5'i geçti. Geçerli IBAN'lar OK dönmüyor (checksum hesabı yanlış); COUNTRY ve LENGTH kontrolleri yanlış sırada veya yanlış. |
| Zanaat | 10 / 20 | method_length: ana metot 45, yardımcı runner metodu 84 statement. |
| Clean ABAP | 15 / 15 | Bulgu yok. |
| Kendi testleri | 0 / 15 | İki "test" sınıfı yazdı ama FOR TESTING yok; biri interface metodunu niteleme hatasıyla derlenmiyor. Gerçek ABAP Unit testi yok. |
| Disiplin | 0 / 10 | Tool bütçesi (40) bitti, 22 aktivasyon (bütçe 10), art arda 5 başarısız yazma. Rapor yazamadan durdu. |
Süre: 38 dakika (2 269 sn). Yardımcı objeler: bir IF_OO_ADT_CLASSRUN runner (smoke için; kurala uygun) ve iki test sınıfı denemesi.
Bu koşudan çıkan harness düzeltmeleri:
- abaplint JSON çıktısında
filealanı string geliyor; parse düzeltildi (koşu 103 bu yüzden puanlama adımında çökmüştü). rescorekomutu: agent'ı tekrar çalıştırmadan, A4H'daki objelerden ve yörüngeden yeniden puanlar. Puanlayıcı değiştiğinde eski koşular tekrar değerlendirilebilir.- G6 (release kapısı) sadece kontrat objelerine uygulanır. Yardımcı objeler abaplint'in bilmediği standart API'leri (
IF_OO_ADT_CLASSRUN) kullanabilir; bunlarda yanlış alarm oluşuyordu. Doğruluk için A4H syntax check yeterli. - G4 karşılaştırması normalize edildi (boşluk ve büyük/küçük harf).
- Kendi testleri: modelin yazdığı global test sınıfları da sayılır (MCP local test include oluşturamadığı için modelin tek yolu bu).
Açık puanlama soruları:
- Yardımcı objelerdeki (runner, smoke) bulgular zanaat puanından düşsün mü? Şu an düşüyor.
- Bütçe bitince rapor yok. Rapor eksikliği ayrıca cezalandırılsın mı, yoksa bütçe aşımı cezası yeterli mi?
11c. Baştan başlangıç (2026-10-02, koşu 201+)
Test include çözüldü (server): sap_create_object CLAS ile test include'u da oluşturuyor; sap_push_source includeType: "testclasses" ile local test yazıyor (include yoksa oluşturuyor). Probe Z191001_TINC: 1 test, coverage %50 (beklenen). Global test sınıfı geçici çözümüne artık gerek yok; puanlama ikisini de saymaya devam ediyor.
Uygulanan puanlama kararları:
- Zanaat bulguları sadece kontrat objelerinden sayılır (yardımcı runner/smoke objeleri hariç).
- Model rapor yazmadan biterse (boş veya "Stopped:") disiplinden −5.
Referans çözüme local testler eklendi (T01: 6 test). Oracle artık "kendi testleri" bileşenini de doğruluyor.
| Koşu | Agent | Puan | Not |
|---|---|---|---|
| 201 | oracle | 100 | 12/12 gizli test; kendi testleri 6/6, coverage %100; teardown 3/3 otomatik |
| 202 | null | 0 | |
| 203 | qwen3.8-27b-32k | (çalışıyor) | |
| 204 | deepseek-v4.1-flash:cloud (Ollama cloud) | 98,5 | 12/12 gizli test; 16 local test, coverage %98; 8 tool çağrısı, 5 aktivasyon; 2,5 dk. Tek bulgu prefer_xsdbool. Rapor plan formatında, kararlar gerekçeli. İlk aktivasyon hatasını (string offset) bir denemede düzeltti. |
Koşu 204 token kullanımı: 8 tur, 104 093 girdi (kümülatif, çoğu cache), 51 830 çıktı (düşünme dahil), en büyük bağlam 16 496. DeepSeek liste fiyatıyla ≈ 0,09 $ / koşu.
Eski koşular runs/_archive_v1 altında.
11d. Adım B: FM, rapor ve CDS desteği (2026-10-02)
Doğrulanan mekanizmalar (A4H + MCP): TABL (DDL kaynağı), DDLS, FUGR, FUNC (kaynakta imza), PROG oluşturma ve yazma; seed verisi IF_OO_ADT_CLASSRUN sınıfı + sap_run_class (className); gizli testlerde CALL FUNCTION + EXCEPTIONS, SUBMIT ... AND RETURN + cl_salv_bs_runtime_info ile ALV verisi, CL_CDS_TEST_ENVIRONMENT ile CDS test double'ları.
Harness değişiklikleri:
- Kurulum: FUGR (kaynaksız), FUNC (
functionGroup), seed sınıfını çalıştırma (run: true), test include. - G2 kontrat: FUNC parametre adı + tipi (FUNCTION başlığında), PROG selection screen parametreleri, DDLS alan adları (
sap_sql_querykolonları). - Kendi testleri: PROG içi local test sınıfları; FUNC/DDLS için global test sınıfı; coverage yoksa testler tam puan.
- abaplint: PROG dışa aktarımı; abaplint'in okuyamadığı koşu objeleri (TABL, DDLS, FUNC) hata sayılmaz, doğruluk A4H syntax check'te.
- Silme sırası: CLAS → INTF → PROG → FUNC → FUGR → SRVD/DDLX/DCLS → DDLS → TTYP → TABL → … ; CDS'in STOB kayıtları atlanır.
- Kurulum başarısızsa koşu puanlanmaz (
setup_failed), objeler silinir.
Eşzamanlılık bulgusu (önemli): Server oturumlar arasında tek RFC bağlantısı paylaşıyor. Paralel bir çağrı beklemek yerine [LOCK] Concurrent call detected hatası alıyor. Koşu 214'te T14'ün seed tablosu bu yüzden aktive olmadı. Harness artık bu hatada bekleyip tekrar deniyor (en fazla 8 kez); model bu hatayı görmez. Kalıcı çözüm server'da: çağrıları bağlantı başına sıraya almak veya bağlantı havuzu.
Koşular:
| Görev | Tip | Oracle | Null | DeepSeek V4.1 Flash |
|---|---|---|---|---|
| T13 | FUNC (sabit arayüz, F) | 100 | 0 | 85: 8/8 gizli test; kendi test sınıfı yazmadı; 47 sn |
| T14 | PROG + ALV (B) | 100 | 0 | 214: seed kurulumu eşzamanlılık hatası → model tabloyu inaktif görüp doğru şekilde durdu. 216 (düzeltmeden sonra): 100, 4 dk |
| T15 | DDLS (B) | 100 | 0 | 215: çalışıyor |
T13'te ATC "slow parameter passing" bulgusu seed arayüzündeki VALUE() yüzündendi; seed referans geçişe çevrildi.
11e. Pilot sonuçları (2026-10-02, G0002–G0021)
DeepSeek V4.1 Flash, 20 görev, her görev en fazla 3 onarım turu. Sonuçlar: runs/gen/pilot.json.
| Sonuç | |
|---|---|
| Kabul (oracle 100, null 0) | 16 / 20 (%80). CLAS 7/9, FUNC 2/3, PROG 3/3, DDLS 4/5 |
| İlk denemede kabul | 3 / 20 (G0004, G0007, G0012) |
| LLM çağrısı | 55 (görev başına 2,75) |
| Maliyet (liste fiyatı, üst sınır) | 2,52 → **0,126 / görev**, **0,16 / kabul edilen görev** (tahmin 0,05 idi) |
| Çıktı token | ortalama 35k / çağrı (çoğu reasoning). Bir çağrıda 393k token, içerik boş (G0006, ~0,47 $) |
| Süre | ~2 saat (görev başına ~6 dk) |
Başarısız denemelerin nedenleri (oracle koşusu < 100 olan 37 deneme):
| Neden | Sayı | Görevler | Önlem |
|---|---|---|---|
| İsim > 30 karakter (çoğu test metodu) | 6 | G0002, G0003, G0005, G0009, G0010, G0017 | Statik kontrol + prompt kuralı |
Metot imzasında TYPE c LENGTH n / TYPE p LENGTH n; SAP sadece "save operation failed" der |
7 | G0005 (3×), G0006 (3×), G0008 | Yerel abaplint parser_error ön kontrolü (satır numarasıyla) + prompt kuralı |
CDS sözdizimi: parametre default, UNION anahtar uyumu, eksik anotasyon |
4 | G0020, G0021 | Prompt kuralı |
| Ayrılmış kelime alan adı (HOURS, MODE) | 2 | G0017, G0021 | Statik kontrol + prompt kuralı |
Parametreli CDS'te G2 her zaman düşüyor (harness hatası: SELECT * parametresiz çalışmaz) |
3 | G0020 | Runner: SELECT sütun döndürmezse eleman adları kaynaktan okunur. G0020 tek satır düzeltmeyle oracle 100 |
| Tablo seed'i DDLS tipiyle | 2 | G0003 | Statik kontrol + prompt kuralı |
| Geçersiz / boş JSON | 3 | G0002, G0006, G0010 | raw_decode, max_tokens 80k (kabul edilen son çağrılar 4k–76k, p90 57k; 60k kabul edilen 2 çağrıyı keserdi), boş içerikte yeniden deneme |
| Eski seed kodu 816'da aktive olmuyor (yeni/eski SQL karışık) | 1 | G0016 | Prompt kuralı |
| Referans mantık hatası (gizli test düşüyor), tip uyumsuzluğu, CX_CDS_FAILURE | 6 | G0013, G0014, G0018, G0019, G0015 | Onarım turu çözdü |
| Sözleşmede sınıf var, yerel testi yok → own_tests 7,5 | 2 | G0011 | Statik kontrol: her referans sınıfının testclasses_file'ı olmalı (istisna sınıfları hariç) |
Diğer bulgular:
- Onarım geri bildiriminde G2 nedeni yoktu; model sözleşme hatasını göremiyordu. Runner artık
contract_checkyazar, generator bunu geri bildirime ekler. - Kabul edilen G0013'ün sözleşmesinde test sınıfı var (
REPL_TEST). Statik kontrol artık bunu reddeder. G0013 incelemede düzeltilmeli. - Üretilen görevler örnekteki isimleri kopyalıyor (
T02_HIDDEN,T14_TEST). Kozmetik. - Statik kontrol ve abaplint ön kontrolü SAP'ye gitmez. Pilottaki 37 başarısız denemenin ~18'ini doğrulama koşusundan önce yakalar (tahmin).
11f. Zor görev partisi (2026-10-03, G0022–G0026)
Amaç: pilot sonrası iyileştirmeleri pilotta düşen tiplerle ölçmek. Görevler: CLAS D (exception), CLAS E (packed sayılı eski kod, LENGTH tuzağı), parametreli CDS, UNION'lı CDS, FM. Sonuçlar: runs/gen/hard.json.
| Pilot (20) | Parti (5, zor) | |
|---|---|---|
| İlk denemede kabul | 3/20 (%15) | 1/5 (%20): G0023 |
| Toplam kabul | 16/20 | 4/5 üretimde; G0022 harness düzeltmesinden sonra → 5/5 |
| LLM çağrısı / görev | 2,75 | 2,6 |
| Maliyet / kabul edilen görev | 0,16 $ | **0,097 ** (0,39 / 5) |
| En büyük çıktı | 393k (kaçak) | 61,5k |
SAP'ye gitmeden yakalanan hata: 2 (abaplint parser_error, G0026 ×2). Statik kontroller bu partide hata bulmadı: 30 karakter, tablo tipi, LENGTH hataları tekrar etmedi (prompt kuralları etkili).
SAP'de düşen 8 doğrulama:
| Neden | Sayı | Durum |
|---|---|---|
| Harness: referans objeler bağımlılık sırasında kurulmuyor (G0022, G0026) | 2 | Düzeltildi: generator seed/reference listesini sıraya dizer |
Harness: abaplint CX_STATIC_CHECK'i tanımıyor → exception hiyerarşisi G6'da düşer (G0022). LLM koşularında da kategori D'yi 0'a indirirdi |
1 | Düzeltildi: G6 bu mesajı yok sayar (G1 aktivasyonu kontrol eder) |
CDS view entity'de :p_from (G0024) |
1 | Statik kontrol + prompt kuralı |
UNION'da @Metadata.ignorePropagatedAnnotations yok (G0025) |
1 | Statik kontrol + prompt kuralı |
| Referansın kendi testlerinde tip hatası (G0022) | 2 | Onarım turu |
| Abaplint hatası; asıl neden G6 harness hatasıydı (G0022) | 1 | Düzeltildi |
Ek bulgu: G0022'nin bütçesi (12 aktivasyon) referansın kendisine (13) yetmiyordu → oracle disiplinden 5 puan kaybetti. Generator artık bütçeye alt sınır koyar: aktivasyon ≥ 2 × oracle, tool çağrısı ≥ 3 × oracle. Mevcut görevlerden sadece G0022 etkilendi.
G0022 bundle'ı değiştirilmeden yeniden doğrulandı (harness düzeltmeleri + bütçe): oracle 100, null 0 → kabul.
12. Açık sorular
Cevaplananlar (Adım 1.2):
-
MCP yazma tool'ları→ bölüm 5. -
A4H release ve abapGit→ SAP_BASIS 816 SP01. abapGit standalone kurulu (ZABAPGIT_STANDALONE). Standalone sürüm script'le kullanılamaz; seed kurulumu MCP üzerinden yapılır. code pal for ABAP kurulumu için kullanılabilir. -
Eşzamanlı oturum sınırı→ 8 (MCP server), bölüm 5. -
abaplint ve seed tipleri→ çalışıyor, bölüm 6.5.
Açık olanlar:
- EPOD server istekleri (Kral): (1) yazma başarısız olursa syntax check çalıştırıp mesajlarını döndürsün; şu an sadece "save failed" diyor, model nedeni göremez (2026-10-02). (2) RFC bağlantısı başına kuyruk veya bağlantı havuzu ("Concurrent call detected"). (3) BDEF oluşturma (RAP). (4) Unit test zaman aşımı: test edilen kodda sonsuz döngü RFC bağlantısını ~8 dk kilitler (mutasyon koşusu 5201, 2026-10-03); N saniye sonra durdurulmalı.
- Genel ABAP MCP arayüzünün spec'i (
abap-mcp-arayuz.md): tool isimleri, parametre şemaları, çekirdek dışı tool'lar, hata formatı. Sonra yazılacak.
Görevleri kim yazar?→ Öneri (2026-10-02): DeepSeek V4.1 Flash yazar. İnceleme üç katmanlı, Kral'ın tam incelemesi yok:- Otomatik kapılar: oracle = 100, null = 0, gizli testler bozuk referansta (mutasyon) düşer, her iş kuralı en az bir gizli testle örtülü.
- Ampirik süzgeç: Görev 2–3 modelle koşulur. Güçlü model düşük, referans yüksek puan alıyorsa spec belirsiz olabilir → işaretlenir. Herkesin kolayca geçtiği görevler eval'den çıkarılır.
- Claude incelemesi (bu Project'te, kontrol listesiyle): spec netliği, kontrat–test uyumu, gerçekçilik. Sadece eval görevleri; eval görevleri eğitim verisine girmez.
- Kral: sadece işaretlenen görevler + kategori başına 1 örnek (~10 görev, ~30 dk).
- Hakem modeli yerel mi, uzak mı?
13. Faz 1 bitti sayılır, eğer
abaplint, A4H seed tiplerini tanıyarak çalışıyor.✓- Harness T01–T10'u uçtan uca koşturuyor ve puanlıyor.
- 100 görevlik set yazılmış ve senin incelemenden geçmiş.
- En az iki baz model ve Claude referansı ölçülmüş.