Tam katalog kapsama: 4-faz prefetch stratejisi (derinlik+skip-completed+per-source+env) #146

Merged
root merged 4 commits from dev into main 2026-06-22 11:30:48 +03:00

4 Commits

Author SHA1 Message Date
d119b1eb2c feat(prefetch/faz4): PREFETCH_* env'i api compose bloğuna wire et (Coolify-tunable)
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
Memory gotcha: Coolify env yalnız compose service `environment:` bloğu ${VAR}
referans ederse container'a ulaşır. Prefetch worker api container'ında in-process
→ 13 anahtar api bloğuna eklendi (CATALOG_BACKFILL_ENABLED + PREFETCH_CONCURRENCY/
RATE_MAX/MAX_DEPTH/RATE_PL24/RATE_EMEX/RATE_PCAT/PCAT_DELAY_MS/PL24_START/PL24_END/
NORESULT_MAX/NORESULT_TTL_DAYS/COMPLETE_TTL_DAYS). Hepsi `:-` boş→kod-default
(davranış değişmez); artık rate/concurrency Coolify UI'dan deploy'suz ramp edilebilir.
PL24 rate yükseltme rotating proxy + izleme ile (Faz 5).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:27:19 +03:00
5200d5a61d feat(prefetch/faz3): per-source paralel rate limit (PL24/EMEX/pcat bağımsız)
Tek global 20/dk limiter tüm kaynakları paylaştırıyordu → yavaş pcat PL24/emex'i
açlığa düşürüyordu. Artık her kaynak Redis fixed-window ile BAĞIMSIZ kısılıyor
(SOURCE_RATE_MAX: pl24=20, emex=20, pcat=8; env PREFETCH_RATE_PL24/_EMEX/_PCAT).
Global WORKER_RATE_MAX güvenlik tavanı (20→60). RateLimitError yeni cause
"source-rate" → process() per-job defer eder (emex/pcat PL24'ü beklemez); cooldown
hâlâ tüm worker'ı duraklatır. PL24 default'u 20'de KALDI (ban riski; yüksek-rate
Faz 4 rotating proxy ile). +spec: under/over ceiling + unknown-source unlimited.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:25:41 +03:00
7c715af0c5 feat(prefetch/faz2): tamamlanan araçları işaretle + Phase-2 rescan'de atla
Chain parça ile tamamlanınca prefetch:complete:<id> set edilir (TTL 21g,
env PREFETCH_COMPLETE_TTL_DAYS). tryPick bu işaretliyi atlar → Phase-2 bitmiş
ağaçları her dalga yeniden gezmez (eski "sonsuz churn" durur). Başarısız job
isFinished'e ulaştırmaz → kısmi ağaç asla complete işaretlenmez, gap-fill korunur.
TTL periyodik re-validasyon sağlar. +spec: complete-marker'lı araç Phase-2'de atlanır.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:22:02 +03:00
61436db48f feat(prefetch/faz1): tam-derinlik (MAX_DEPTH 2→12) + no-op children job üretimini durdur
Hedef = decode edilmiş tüm araçların TAM kategori+parça ağacı DB'de. Cap artık
hedef değil güvenlik tavanı (gerçek ağaçlar ~5-7 derin; doğal yaprak tespiti
durduruyor). queueCategoryJob non-leaf dalı `depth < MAX_DEPTH` ile kapılandı:
processChildren'ın early-return'ünü aynalar → kuyruğun ~%85'ini oluşturan
boş depth-job'ları (rate-limit slotu harcayan no-op) hiç üretilmez.
+spec: depth>=cap'te children enqueue YOK, cap altında VAR.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:17:36 +03:00