ReferansAraçlarBüyüyorson güncelleme 2026.084 dk okuma
Referans · araçlar

Denetimler

Derlemenin yeşil olması, sayfaların iyi durumda olduğu anlamına gelmez. Bu araç zinciri her katmana bir denetim yerleştirir; her biri "derleme yeşil, sayfa bozuk" türünden bir sessiz hata sınıfını yakalar — içlerinden ikisi de sayfalara bir okurun baktığı gibi bakar: gerçek bir tarayıcıda.

beş denetim · üçü motordan, ikisi bu paketten · commit’ten önce hepsi yeşil

§1Beş kapı, beş katman

DenetimNereden gelirNeye bakarNe zaman çalıştırılır
check-contentmotor, scripts/check-content.mjsher md/mdx kaynak dosyasıiçerik deposunun CI’ında ya da yazdıktan sonra
check-wikilinksmotor, scripts/check-wikilinks.mjs[[wikilink]] grafıiçerik deposunun CI’ında ya da bir notu yeniden adlandırdıktan sonra
check-distmotor, scripts/check-dist.mjsastro build çıktısıher derlemeden sonra (postbuild)
ui_probebu paket, scripts/ui_probe.mjsgerçek tarayıcıda çizilmiş sayfalarstil/yerleşim değişikliklerinden sonra
contrast_probebu paket, scripts/contrast_probe.mjsher metin düğümünün kontrastı, iki temadaher token değişikliğinden sonra

§2check-content: kaynak katmanı

Sayfaya dönüşecek her md/mdx dosyasını sitenin kullandığı lehçenin birebir aynısıyla derler — sözdizimi hataları da sessiz bozulmalar da (eşleşemeyen vurgu imleri, MDX değerlendirmesinin yuttuğu süslü ayraçlar, satır kaydırmadan doğan liste imleri, tek satırlık $$, KaTeX’in çizemediği formüller — hepsi bir arada sayfasının sonundaki listenin aynısı) CI’ı kırmızıya çevirir.

Bu betiğin neden motordan gelmek zorunda olduğu: eklenti takımı sitenizkinden farklı bir denetçi, denetçisizlikten beterdir — matematik eklentisi eksik olan, formül ayraçlarını JSX ifadesi sanır; GFM’siz olan, tabloları elini kolunu sallayarak geçirir. Lehçe motorda bir kez yazılır; site çizimi, CMS kayıt doğrulaması ve bu betik hep aynı lehçeyi tüketir.

içerik deposunun kök dizini
node <engine>/scripts/check-content.mjs . --glob '**/index.{md,mdx}' --math

Derlemenin ötesinde, frontmatter’daki iki sessiz kayıp sınıfını da yakalar: bir değerin içindeki tırnaksız # (YAML onu yorum sayar ve gerisini sessizce keser) ve hiç ayrıştırılamayan YAML — ikisini de satır numarasıyla raporlar.

Ölü [[wikilink]]’ler derlemeyi bilerek düşürmez — bir bahçe, henüz büyütmediği notlara bağlantı verebilmelidir. Ama bağlantı çürümesinin yeri yine de CI’dır; motor bu yüzden her wikilink’i kitaplığın kendi ayrıştırıcısı ve çözüm kurallarıyla (takma ad, marka, başlık, yerel ayar aynaları) çözen ve eksikleri, belirsizleri, şüpheli çapaları raporlayan bir lint gönderir. --strict, ölü bağlantıları başarısız bir çıkışa çevirir — bu deponun CI’ı onu tam böyle çalıştırır:

bu bahçenin bağlantı denetimi, CI’ın çalıştırdığı hâliyle
node scripts/check-links.mjs

§4check-dist: çıktı katmanı

Derlenmiş dist/ içinde, okurun tıklayabileceği her iç referans gerçekten var olmalıdır. Yeşil derlemenin altındaki sessiz boşlukları yakalar:

  • var olmayan dosyaları gösteren iç bağlantılar/varlıklar (bir rota düzenlemesinden sonra düzinelerle beliren tür);
  • var olmayan id’leri gösteren sayfa içi çapalar;
  • yollarda yinelenen yerel ayar dilimleri (/en/en/ — i18n yedeklerinin, zaten önekli rotaların üstüne bir önek daha bindirmesinin klasik sonucu);
  • <a> içine yuvalanmış <a> (HTML ayrıştırıcısı dıştakini erken kapatır ve düğmeler kartlarının dışına dökülür);
  • KaTeX hata kalıntısı (derleme yeşil kalırken formül sayfada kırmızı metindir).

Bu demo onu postbuild’e bağlar: yeşil bir npm run build, çıktı denetiminin de geçtiği anlamına gelir.

site kökünde, derlemeden sonra (site bir alt yolda yayındaysa --base geçin)
node vendor/astro-inkbrush/scripts/check-dist.mjs dist --base ${DEMO_BASE:-/}

§5Görüntüleme katmanı sondası

Kaynak da çıktı da doğruyken sayfa yine bozuk olabilir — klasik örnek, hiçbir stil kuralının eşleşmediği açılış kartlarının tek satır çıplak metne yığılmasıdır: bağlantı ve çapa denetimleri yeşil kalır, çünkü çizilmiş bir sayfaya hiç bakmazlar. ui_probe, dist içindeki her sayfayı dört görüntü genişliğinde (1440/1024/768/430) gerçek bir tarayıcıyla dolaşır ve ölçer: sayfanın yatay taşması, kaydırma kutusu olmadan kabından geniş duran ögeler, bir SVG’nin kendi kutusunun dışına çizdiği yazılar, bir FlowDiagram’da ne telde ne lejantta yer alan tel etiketleri, bir kutunun, başlığın ya da birbirinin üstüne düşen etiketler ve numaralar, bağlamadıkları bir kutunun ya da bir başlığın içinden geçen teller, hiçbir stil kuralının giydirmediği sınıflar, atlanmış başlık düzeyleri, yinelenen id’ler, alt özniteliksiz görseller, boşluğu gösteren sayfa içi çapalar ve aria-controls değerleri. Yalnızca bir makinenin kanıtlayabildiğini raporlar — estetik yargı yürütmez.

yerel bir Chrome/Chromium gerektirir
npm run build
node ../scripts/ui_probe.mjs dist   # dist’i kendisi servis eder; canlı bir sunucuyu yoklamak için baseUrl geçin

Belgenin tamamını inceler — chrome, kenar çubuğu ve diyaloglar dahil. Yeşil demek, raporun son satırının SAMPLES WITH FINDINGS: 0 demesidir (bir örneklem, bir rotanın bir genişlikteki hâlidir).

§6Kontrast sondası

Token’lar AA iddiasındadır; iddia da lafla değil ölçümle sınanır. contrast_probe, dist içindeki her sayfayı gerçek bir tarayıcıda yükler — açık ve koyu tema, masaüstü ve telefon genişliği — ve varsayılan durumda çizilen her metin parçasını ölçer: HTML metni, SVG metni ve ::before / ::after üretilmiş metinleri; her <dialog data-probe-open> katmanı temsilî bir sayfada açılarak yoklanır (orada bulunan bir arama kutusuna sorgu da yazılır) — bu im, sitenin "diyalog yazıldığı hâliyle tamamdır" beyanıdır. Zemin bir stil sayfasından okunmaz: sayfa, bütün glifler saydamlaştırılarak çizilir, ekran görüntüsü alınır ve her parçanın altındaki piksel onun zeminidir — gradyanlar, color-mix() tonları, yarı saydam katmanlar ve gece paleti, çizildikleri hâlleriyle ölçülür. Bir parçanın ön rengi, ögesinin ve atalarının birikmiş opacity değerini taşır; soluklaştırılmış metin, okurun gerçekten gördüğü güçte ölçülür. Üzerine gelme ve odak durumları yoklanmaz, gözle gözden geçirilir. Küçük metin 4.5:1’e, büyük metin (24px, ya da 18.66px kalın) 3:1’e tutulur; rengi ayrıştırılamayan ya da zemini örneklenemeyen bir parça bulgu sayılır. Rapor, çıtanın altında kalan her parça için sayfayı, temayı, genişliği, seçiciyi, iki rengi ve oranı adıyla verir:

derlemeden sonra, iki temada
node ../scripts/contrast_probe.mjs dist   # PROBE_THEMES / PROBE_WIDTHS matrisi daraltır

Stil değişikliği rutini
Paketin stil sayfalarına ya da bileşenlerine dokunan her değişiklik önce bu demonun derlemesinden, sonra çıktının üzerinde ui_probe ile contrast_probe denetimlerinden geçer — commit’ten önce hepsi yeşil. Demo aynı zamanda paketin deneme alanıdır.

Başlıklarda, bölümlerde ve metnin içinde, bu dilde arar.
    ↑↓ · Enter · Escastro-inkstone