diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index 9034972..a955903 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -2386,3 +2386,7 @@ Doğrulama: yeni istemci testi dahil `npm test` 302/302 ve `npm run build` başa ### 2026-09-06 · Coolify sağlık kontrolünün etkinleştirilmesi Coolify uygulamasındaki sağlık kontrolü `/api/ready` ve port 80 olarak etkinleştirildi. İlk kontrollü rollout, imajda `curl`/`wget` bulunmadığını ortaya çıkardığı için başarısız oldu; Dockerfile üretim imajına `curl` eklendi. Düzeltme sonrası `lwjqvurn3yluodawgg5kdip3` deployment'ı `finished` oldu, container healthcheck `healthy` ve uygulama durumu `running:healthy` olarak doğrulandı. Canlı `/api/ready` ve beşli ihale probe'u da başarılıdır. + +### 2026-09-06 · Canlı probe doküman tarayıcısı doğrulaması + +`qa:live` drift probe'una `/api/documents/config` kontrolü eklendi. Böylece üretimde EKAP dokümanları için gereken yerleşik Playwright/Chromium yeteneği `tarayiciVar:true` ile canlı ve salt okunur doğrulanıyor; kontrol başarısızsa servis sağlıklı görünse bile belge fallback'i kabul edilmiyor. 6 Eylül 2026 canlı çalıştırmasında home, health, readiness, güvenlik başlıkları ve doküman tarayıcısı kontrolleri geçti. diff --git a/tests/live-runtime-probe.mjs b/tests/live-runtime-probe.mjs index f7e4215..ea77d96 100644 --- a/tests/live-runtime-probe.mjs +++ b/tests/live-runtime-probe.mjs @@ -42,13 +42,17 @@ checks.health = await probe('/api/health', 'ok'); // /api/health and /api/ready use the same { ok: true } probe contract. The // readiness payload also includes a separate `ready` diagnostic field. checks.ready = await probe('/api/ready', 'ok'); -const missingHeaders = requiredHeaders.filter(name => [checks.home, checks.health, checks.ready].some(check => check?.headers?.[name] == null)); +// The EKAP document fallback depends on the bundled browser being available; +// check its public capability endpoint without opening a document or mutating +// any account data. +checks.documents = await probe('/api/documents/config', 'tarayiciVar'); +const missingHeaders = requiredHeaders.filter(name => [checks.home, checks.health, checks.ready, checks.documents].some(check => check?.headers?.[name] == null)); const report = { base, readOnly: true, checkedAt: new Date().toISOString(), checks, - pass: checks.home?.status === 200 && checks.health?.status === 200 && checks.health.apiSuccess === true && checks.ready?.status === 200 && checks.ready.apiSuccess === true && missingHeaders.length === 0, + pass: checks.home?.status === 200 && checks.health?.status === 200 && checks.health.apiSuccess === true && checks.ready?.status === 200 && checks.ready.apiSuccess === true && checks.documents?.status === 200 && checks.documents.apiSuccess === true && missingHeaders.length === 0, missingHeaders, };