Modül 3 · Domain 2 — Tool & MCP (%20-25, EN AĞIR) · ⏱ 14 dakika

Retry → rollback → escalation zinciri (Domain 2 imza)

Retry → rollback → escalation chain (Domain 2 signature)

Bu derste neler öğreneceksin

  • Doğru sıralamayı ezberlemek: error handling → retry → rollback → escalation → traceability
  • Idempotency'nin retry için neden ön koşul olduğunu kavramak
  • Partial state senaryosunda rollback'in nasıl uygulandığını görmek
  • Escalation path'in 'sessiz fail değil, net bağlamlı insan' davranışını öğrenmek

Domain 2.4 — sınavın her turunda tekrar eden zincir. Sıralama ezberlenmeli; her halkanın ne yaptığını ve hangi durumda atlanacağını bilmek gerekir.

Zincir (sırayla ezbere)

Error

[1] Error handling — error'u yakala, sınıflandır

[2] Retry — idempotent ise tekrar dene (backoff ile)

[3] Rollback — partial state varsa bilinen iyi state'e dön

[4] Escalation — insana net bağlam ile bildir

[5] Traceability — her adım kalıcı iz bırakır

Bu zincir Domain 2.4’ün 5 bullet’ının birebir sıralı uygulamasıdır.

[1] Error handling — sınıflandırma

Error geldiğinde önce sınıflandır:

SınıfÖrnekYaklaşım
TransientHTTP 503, rate limit, network timeoutRetry uygun
Authentication401, expired tokenToken rotate, retry
Authorization403, missing scopeEscalation (insan izin değişikliği gerek)
Validation400, bad inputPlan revize, retry değil
Server500 internal errorRetry dene, çözmezse escalation
Resource404 not foundPlan revize veya escalation
Idempotency conflict409 conflictRollback + retry

Sınıf belirsizse default: retry sınırlı + rollback + escalation.

[2] Retry — idempotency ön koşulu

Idempotent ne demek?

Bir operasyonun birden çok kez çağrılmasının aynı sonucu üretmesi. Aynı state’i ürettiği sürece güvenle retry edilebilir.

İşlemIdempotent?Notu
HTTP GET✅ Default idempotentVeri okuma side-effect’siz
HTTP PUT✅ Idempotent”Bu kaynağı şu state yap”
HTTP DELETE✅ Idempotent”Bu kaynağı sil” — yoksa zaten yok
HTTP POST❌ Default non-idempotent”Yeni kaynak yarat” — iki POST = iki kaynak
Credit card charge❌ Non-idempotentÇift charge tehlikesi
git push⚠️ ConditionalForce push idempotent değil
Idempotency-Key header’lı POST✅ IdempotentSunucu key ile duplicate’i engeller

Non-idempotent operasyonu retry etme — duplicate üretirsin. Bunun yerine rollback + plan revize + retry edilebilir hale getirme.

Retry stratejisi — exponential backoff

# Pseudo-code
delays = [1, 2, 4, 8, 16]  # saniye, exponential
for attempt, delay in enumerate(delays):
    try:
        result = call_tool()
        break
    except TransientError:
        sleep(delay)
        continue
else:
    # tüm retry'ler tükendi → rollback aşamasına
    rollback()

Lineer retry (her 5 saniye) anti-pattern — DDOS gibi davranır. Sınav backoff’lu retry bekler.

[3] Rollback — bilinen iyi state’e dön

Retry çözmezse veya partial state varsa, rollback devreye girer.

GitHub native rollback yöntemleri

SenaryoRollback
Bozuk commitgit revert <sha> (yeni commit oluşturur, geçmişi korur)
Bozuk PRPR close (merge yapılmadıysa) veya merged PR için revert PR
Bozuk deploymentÖnceki tag’i environment’a re-deploy
Bozuk veri (DB)Backup’tan restore (HITL onayı genelde)

Anti-pattern: git push --force

Geçmişi yeniden yazar, audit kaybı, başkasının çalışmasını ezer. Sınavda “rollback yöntemi” sorusunda asla doğru cevap değil.

Partial state pattern

Multi-step iş yarıda kaldı:

  • Step 1 ✓ (DB’ye user yarattı)
  • Step 2 ✓ (Stripe’a subscription yarattı)
  • Step 3 ✗ (Email gönderme fail)

Doğru rollback:

  1. Step 2’yi geri al (Stripe subscription cancel)
  2. Step 1’i geri al (DB’den user sil)
  3. Sonra retry kararı (network düzeldi mi? plan revize gerekli mi?)

Sınavın “agent partial state bırakarak fail oldu” sorusunda cevap önce rollback — direkt retry değil (state inconsistent), direkt escalation değil (henüz çözüm denenmedi).

[4] Escalation path — sessiz fail yok

Retry + rollback çözmediğinde insana bildirim. Net bağlam şart:

Escalation mesajı içeriği

  • Ne yapmak istendi (orijinal görev)
  • Ne denendi (retry sayısı, rollback sonucu)
  • Hangi hata + hangi sınıf
  • Şu anki state ne (rollback sonrası)
  • Önerilen sıradaki adım (varsa)
  • Bağlantılar: PR, Actions run, issue

GitHub native escalation

- name: Escalate on failure
  if: failure()
  uses: actions/github-script@v7
  with:
    script: |
      await github.rest.issues.create({
        owner: context.repo.owner,
        repo: context.repo.repo,
        title: `🚨 Agent escalation: ${context.workflow}`,
        body: `Agent failed after retry + rollback.\n\n` +
              `**Workflow:** ${context.workflow}\n` +
              `**Run:** ${context.runId}\n` +
              `**Error:** see logs`,
        labels: ['agent-escalation', 'priority/high'],
        assignees: ['oncall-handle']
      });

Anti-pattern: sessiz kapatma

Agent fail oldu → log yaz → bitir. ❌ Sınavda traceability ihlali.

[5] Traceability — her adımda

Zincir’in her adımı log/artifact bırakır:

AdımNerede izi var
Error sınıflandırmaActions run logs
Retry attemptsActions run logs + step summary
RollbackYeni commit/PR + audit log
EscalationIssue + Slack notification + audit log
Final statePR description + Actions artifact

Sınav “6 ay sonra ‘agent ne yapmıştı’ sorusu için bakılacak yer?” sorusunun cevabı GitHub audit log + Actions + PR/issue geçmişi.

Sınav favorisi senaryolar

Senaryo 1: “Agent multi-step REST API task’ının 3. adımında bozuldu, partial state yazılı. İlk doğru aksiyon?” Doğru: Rollback (önceki adımları geri al) → sonra retry/escalation kararı. Yanlış: “Yeniden başlat” (partial state üzerine yazar).

Senaryo 2: “Agent 5 kez retry edip aynı hata. Sıradaki?” Doğru: Escalation (insana net bağlam). Yanlış: 6. retry, sessiz kapatma.

Senaryo 3: “503 transient error. İlk aksiyon?” Doğru: Exponential backoff ile retry. Yanlış: Direkt rollback veya escalation.

Mini quiz — Retry/rollback/escalation (3 soru)

Bir agent multi-step REST API task'ının 3. adımında bozuldu, partial state yazılı. Doğru ilk aksiyon nedir?

Retry HANGİ tip aksiyonda uygulanmamalı?

GitHub native rollback yöntemi hangisidir?

Sırada ne var?

Bir sonraki ve Domain 2’nin son dersi — lab: bir remote MCP server + allow list + Actions trigger + escalation zincirini tek bir test repo’da kuracağız.