Modül 4 · Domain 3 — Memory & state (%10-15) · ⏱ 12 dakika

Drift detection, stale context, multi-tool continuity

Drift detection, stale context, multi-tool continuity

Bu derste neler öğreneceksin

  • Drift'i operasyonel sinyallerle tespit etmeyi öğrenmek
  • Stale context'in en sık nedeni olan cache invalidation eksikliğini görmek
  • Multi-tool ortamda state paylaşımının pattern'lerini bilmek
  • Conflicting context durumlarında nasıl çözüm yapılır anlamak

Domain 3’ün son dersi — uzun yürütme, multi-tool, multi-environment ortamlarda agent state’inin tutarlılığını koruma.

Drift detection — operasyonel sinyaller

Drift = agent uzun yürütmede önceki kararlarından / başarı kriterinden sessizce sapar. Tespit etmek zor; spesifik sinyaller var:

Drift sinyalleri (✓ olarak işaretle)

  • Aynı görev tekrar edildiğinde sonucun belirgin değişmesi
  • Önceki kararlarla çelişen çıktı
  • Başarı kriterini görmezden gelen output
  • Plan’da yokken yeni step icat etme
  • Daha önce kabul edilen constraint’i sessizce esnetme
  • Tool kullanım sıklığında ani değişim (örn. her zaman X tool kullanıyordu, şimdi Y)

Drift sinyali DEĞİL (trap!)

  • CPU kullanımı artışı (performance metric)
  • Yanıt süresi (latency)
  • Token kullanımı (cost metric)
  • Memory size (resource metric)

Bunlar performance/cost sinyalleri; drift bir tutarlılık sorunu.

Drift düzeltme zinciri

Drift tespit edildiğinde:

Drift tespit

[1] Rollback — bilinen iyi state'e dön (PR revert, state dosyası restore)

[2] Context refresh — agent'a güncel system of record yeniden yükle

[3] Plan revalidation — mevcut plan hala geçerli mi, yeni risk var mı?

[4] Resume veya escalation

Eski karar değişmesi gerekiyorsa (örn. dış koşul değişti), explicit override ile decision history’e yaz — sessiz değişme.

Stale context — en sık neden: cache invalidation eksikliği

Stale context = agent eski state üzerinden karar veriyor; güncel gerçeklikle uyumsuz.

En sık kaynak: cache + invalidation yokluğu

# Anti-pattern
class AgentCache:
    def __init__(self):
        self._cache = {}

    def get_repo_status(self, repo):
        if repo not in self._cache:
            self._cache[repo] = fetch_status(repo)  # cache miss
        return self._cache[repo]  # cache hit — eski state olabilir

Cache 3 saat eski state veriyor, agent bunu güncel sanıyor → drift.

Doğru pattern: TTL veya event-based invalidation

# TTL-based
class AgentCache:
    def __init__(self, ttl_seconds=60):
        self._cache = {}  # {key: (value, expires_at)}

    def get_repo_status(self, repo):
        cached = self._cache.get(repo)
        if cached and cached[1] > time.now():
            return cached[0]
        value = fetch_status(repo)
        self._cache[repo] = (value, time.now() + self.ttl_seconds)
        return value
# Event-based (daha doğru)
# Webhook ile cache invalidate:
# repo.pushed → cache.invalidate(repo)

Sınavda “stale context’in en sık nedeni” sorusunun cevabı cache + invalidation eksikliği.

Multi-tool continuity — state paylaşımı

Aynı agent farklı tool’lar kullanıyor, veya birden çok agent aynı state’i okuyor. Üç bullet:

1. Share agent state

Pattern: ortak system of record + read/write disiplini.

Tool A ──┐
         ├──> system of record (repo file / issue / PR description)
Tool B ──┤

Tool C ──┘

Her tool okur ve yazar; system of record tek doğruluk.

2. Prevent conflicting context

İki tool aynı entity için farklı bilgi tutarsa → conflict. Önleme:

  • Tek doğruluk kaynağı
  • Tool’lar arası sync mekanizması (event veya periyodik)
  • Conflict detection + alert

3. Prevent stale context

Cache invalidation pattern’i (yukarıda) + agent başlangıcında context yeniden yükleme.

Conflicting context çözüm yolu

İki tool farklı bilgi tuttu, conflict tespit edildi:

1. Tespit (otomatik)
   └── system of record vs tool state diff
2. Kaynak seç
   └── system of record kazanır (her zaman)
3. Tool state'i resync
   └── tool'lar system of record'tan okur
4. Sebep loglama
   └── conflict neden olduğunu RCA için kaydet
5. Tekrarlama riski yüksekse HITL
   └── insan kararı: tool kaldır mı, sync mekanizması güçlendir mi

Sınavda “self-healing kendiliğinden olur” cevabı anti-pattern — bağımsız state çelişki kaynağıdır.

Pattern: time-windowed memory

Agent’ın memory’sine “geçerlilik süresi” eklemek:

# Long-term memory entry
- key: "team_pref_typescript_strict_mode"
  value: true
  set_at: "2026-01-15"
  ttl_days: 365            # 1 yıl sonra re-validate
  source: "TEAM_DECISION.md"

TTL bittiğinde:

  • Memory entry “stale” işaretlenir
  • Agent re-validate eder (kaynak hâlâ geçerli mi?)
  • Re-validate fail ise expire

Bu pattern uzun-vadede drift’i otomatik temizler.

Mini quiz — Drift & continuity (3 soru)

Drift sinyali OLMAYAN hangisidir?

Stale context'in en sık nedeni hangisidir?

İki tool aynı entity için farklı bilgi tutuyor. Sınavın YANLIŞ saydığı çözüm hangisi?

Sırada ne var?

Domain 4 — Eval & tuning modülüne geçiyoruz. RCA üçlüsü, otomatik tarama, hedefli tuning kararları.