Değişiklik günlüğü
GitHubHer önemli değişiklik, sürüm sürüm. Aynı dosya depoda yer alır ve 19 dilin tümüne çevrilmiştir.
[1.254.0] — 2026-10-24
Maksimum model inceleme turundan bir sağlamlaştırma sürümü: tarayıcı anlık görüntüsü artık satır kaybetmiyor, LLM katmanının on bir invariat ihlali düzeltildi, yirmi üç SPA must-fix’i indi ve Paylocity ATS tarayıcıya katılıyor — kayıt defteri artık 115 adaptörle 121 kaynak (115 EN + 5 RU) sunuyor.
Eklendi
- Paylocity ATS (üst #5687): kiracı başına
recruiting.paylocity.companoları, ölü pano 302 → JobNotFound 404’e eşleniyor ki karantina girişi emekli etsin, kesme bayraklımax_jobssınırı. Kayıt: 121 kaynak = 116 EN + 5 RU · 116 adaptör; sayaç kapıları yeniden üretildi.
Düzeltildi
- Tarayıcı anlık görüntü güvenliği (R-12): hiçbir şey denemeyen bir tarama artık anlık görüntüyü KORUYOR (
nothing scanned); tam değiştirme, başarısız kaynakların eski satırlarını — girişe damgalı — MEVCUT filtrelerden yeniden geçirerek yalnızcafiltered’e indiriyor. - LLM katmanının on bir invariat ihlali: dil yönergesi deep/mode istemlerini açar VE kapatır; Gemini alt süreci
--langiletiyor, sıfır olmayan çıkış → 502, stderr’i istemciye sızdırmıyor, 300 s’ye uyuyor ve usage kaydediyor; manuel fallback iş ilanının URL’sini taşıyor;/api/mode’da truncation ve paket uyarıları görünüyor; harcama katmanı artık istemci tarafından geçersiz kılınamıyor; istemci kopması uçuştaki sağlayıcı çağrısını iptal ediyor (sinyal on dört sağlayıcı üzerinden); tekrarlayan-başlık kesici artık geçerli raporları yok etmiyor; score/legitimacy çıkarıcıları doğrulayıcıyla uyumlu; Ukrayna dizisi ve Arapça و yanlış-kabulleri sıkılaştırıldı. - Düzeltmelerin KENDİSİNE bir Opus 5-5 inceleme turu (8 zorunlu): kesicinin çoklu-harf kaydı, daha geniş başlık sonlandırıcıları, Gemini alt sürecinin abort kablolaması, girişe damgalı taşıma atıfı, taşınan satırların mevcut filtrelerden yeniden geçmesi, farklı harf sayısına göre referans düzeyi.
- Yirmi üç SPA must-fix’u: sourcing görünümlerinde (tek sayfalık pager eki, pipeline satır klavyesi, saved-search filtre geri yükleme, source select sıfırlamaları, config varsayılan-geri dönüşü, dinleyici sızıntıları, terminalde SSE kapanışı, tarama koşucusu teardown, çıplak fetch, boş görünen başarısız yüklemeler, global çakışma, odak korunumu) ve assist görünümlerinde (ölü help derin-bağlantısı, help dinleyici sızıntıları, two-pager boş-üzerine-yazma yeniden-silahlanması, batch/deep/mode ücretli çalıştırmalarında tek-uçuş, sessiz akış uçları, sonsuz dönen hata yolları, başarısız filtre hayalet satırları, docs-fab kopyaları + dil).
Notlar
- Tüm tur Opus 5-5 tarafından maksimum titizlikle incelendi — merge öncesi portlar (21 bulgu, 13 düzeltildi) ve fixlerin kendisi sonradan (8 zorunlu, hepsi burada kırmızı→yeşil testlerle).
- Test tabanı: 5262 → 5634 (kaynaklar, tarayıcılar, LLM katmanı ve SPA genelinde 372 yeni spec).
[1.253.1] — 2026-10-24
Maksimum model incelemesindeki iki HIGH güvenlik bulgusu düzeltildi: IPv6 literal URL’leri artık tarayıcının SSRF korumasını atlamıyor ve CV markdown kaçış regex’i de artık ikinci dereceden geri izleme yapmıyor.
Düzeltildi
- IPv6 literalleri SSRF korumasını atlıyordu (
http-json.mjs): köşeli parantezli bir IPv6 literalidns.lookup’u fırlatıyordu ve koruma açık kalarak başarısız oluyordu. Artık parantezler sökülüyor ve literalisIPile sınıflandırılıyor — DNS’siz, fail-open’sız. - CV markdown kaçışında ReDoS (
security.mjs): desen ikinci dereceden geri izliyordu —<+ ~100k boşluk ~16 s sürüyordu; şimdi düz sınırlı bir sınıfla ~1 ms. Önce kaçış yapılan her şey hâlâ yapılıyor.
Notlar
- Her iki düzeltme kırmızı→yeşil regresyon testleri taşıyor (3 yeni IPv6 vakası + zaman sınırlı ReDoS; toplam 5511 test, +7).
- Tarayıcı kaynak dosyaları etkilenmiyor — koruma, her iki tarayıcının da kullandığı paylaşılan taşımada yaşıyor.
[1.253.0] — 2026-10-24
On yeni iş kaynağı tarayıcıya katılıyor — Atlassian, BWI, Computrabajo, Dover, Google, Kalibrr, Magneto365, Platsbanken, Tech in Asia ve Zoho Recruit — kayıt defteri artık 115 adaptörle 120 kaynak (115 EN + 5 RU) sunuyor ve rol eşleştirici yalnızca kısa bir büyük harf koduyla farklılaşan unvanları artık aynı ilan olarak eşlemiyor.
Eklendi
- 10 kaynak parent 1.38.0’den portlandı, her biri kendi fetch-walk adaptörü ve CI-izole suitiyle (sahte fetchImpl, sıfır ağ): Atlassian (tek auth’suz JSON akışı, iCIMS URL’leri, https+icims.com allowlist), BWI (JSON-LD ItemList, JSON.parse önce), Computrabajo (LATAM, varlık çözme, İspanyolca «remoto»=remote), Dover (tenant başına DRF sayfalama,
Remote (International)gösterimi, UUID doğrulanmış panolar), Google Careers (fazla başına ilk sayfa, kart işvereni kazanır, sorgular arası dedup), Kalibrr (SEA toplayıcısı, feed id satır id’si olarak), Magneto365 (LATAM, sabit sayfalar-arası tempo), Platsbanken (İsveç JobTech API’si, anahtar kelime başına pencereler), Tech in Asia (Algolia anahtarları site build’inden keşfediliyor), Zoho Recruit (hidden-input pano, sınırlı detail zenginleştirme, para birimi yalnız ISO-4217). - Kayıt sayacı: 120 kaynak = 115 EN + 5 RU · 115 adaptör; beş sayaç kapısı canlı kayıt defterinden yeniden üretildi;
#/scandropdown fallback’u, cvstart.org kaynak bağlantıları ve help §17 ×18 takip ediyor.
Düzeltildi
- rol eşleştirici (#5688 portu): yalnızca kısa bir büyük harf koduyla farklılaşan unvanlar («HR BP» vs «HR GP», «AWS» vs «GCP», karma alfabeler dahil) artık fuzzy eşleşmeyle aynı ilan sayılmıyor; kodlar ham unvandan gürültü-kelime hariç okunuyor, koruma Jaccard oranının hemen önünde duruyor.
- Portlar maksimum titizlikteki bir Opus 5-5 incelemesini atlattı (21 bulgu): işaretleme kaymasında sessizce-boş panolarda throw (google/bwi), önceden iptal edilen tarama
[]döndürmek yerine throw, LATAM scraper’larında decode-then-strip sırası (strip-then-decode XSS biçimi), atlassian satır URL’lerinde https+allowlist, portları reddeden anahtar doğrulamalar, sonraki sayfa parse’ının try içinde olması (kısmiler hayatta kalıyor) ve test dürüstlüğü (bütçeler tam sayıldı, zorlama sözleşmeler dürüstçe sabitlendi). 13 bulgu düzeltildi; [spec] kuyruğu ayrı takip ediliyor.
Notlar
- Beş RU web-ui-only kalıyor (upstream adaptörü yok — bilinçli); her EN kaynağın bir adaptörü var.
- Kapsam tırmığı: en büyük altı port ≥95 % branch’e çıkarıldı (27 yeni vaka); kalan savunma ölü kodu dosya başına belgelendi.
- Yeni kaynaklar portals.yml’de
provider: <slug>ile seçilir — mevcut yapılandırmalar için hiçbir şey değişmez.
[1.252.1] — 2026-10-17
Wiki sürüm banneri artık manuel tarama yerine bir betikle doğrulanıyor — v1.252.0 gerilemesi onu yalnızca elle yakaladı — ve yerel ayar yönergesi profilin language.output’ını ve iş ilanının dilini açıkça geçersiz kılıyor.
Eklendi
scripts/wiki-banner-check.mjs— gerilemenin istediği kapı: wiki klonundaki herHome*.md’yi okur ve banneripackage.jsonile ve kayıt defterinin CANLI sayaçlarıyla (portal kaydındaki scanner adapters — banner’daki eski 109 değil 105;server/lib/routes/’daki route modules; CHANGELOG kümesindeki UI locales) karşılaştırır. Banner regex’i dile göre değil BİÇİME göre dilden bağımsızdır: yerelleştirilmiş Home sayfaları etiketi ve sayaçları çevirir («Текущий релиз», «Aktuel udgivelse», «адаптеров сканера», «enhedstests») ve sayıları EN sayfasından (5245) daha fazla sapmıştı (5177).--tests Nyeni koşulantest:ci’nin bastığı sayıyı alır;--check-onlyçevrimdışı kullanım için örtük klonlamayı yasaklar. Çevrimdışı fixture testitests/wiki-banner-check.test.mjs.
Düzeltildi
- Wiki Home ×18 banneri yeniden senkrona alınıyor (bu sürümle gidiyor): v1.252.0 taraması badge’leri ve bağlantıları değiştiriyor ama asla banner satırını değiştirmiyordu ve bunu mekanik olarak işaretleyen bir şey yoktu. Yukarıdaki kapı bunu sürümü durduran bir denetime dönüştürüyor.
- Locale yönergesi dil önceliğini netleştiriyor (
buildLocaleDirective): «This UI locale overrides the profile’slanguage.outputsetting and the job posting’s own language». Üst’ün kendi kural 6’sılanguage.outputile yazmayı emrediyor — öncelik cümlesi olmadan model iki çelişkili talimatı locale’e göre tutarsız çözüyordu; v1.252.0’daki dil sütununun dağınıklığı buydu.tests/locale-directive-language-output.test.mjsyönerge metni üzerinde sabitliyor (17 EN olmayan locale + boş EN).
Notlar
- ta evaluate BİÇİM gözlemi (§3, izle): v1.252.0’nin ilk canlı koşusu 48 336 karakterlik, Block G’siz ve SCORE_SUMMARY’siz bir evaluate üretti — döngü biçimli, dil biçimli değil (CAR-70 dil). Sonraki sürümde tekrarlarsa CAR-70’ten ayrı kendi Linear kaydını alacak.
- FIX-PROMPT’e göre: üst read-only kalıyor; geçersiz kılma tamamen UI yönergesinde yaşıyor.
[1.252.0] — 2026-10-17
Üst fork career-ops-hq/career-ops ile senkronize edildi — 256 upstream commit’i, üst 1.36.0 → 1.37.0 — fork’un her iki sapması savunuldu ve dağıtım, çalışan üstü bu tabana yeniden sabitliyor.
Eklendi
- Vietnamca (vi) pazar modu upstream’den (
modes/vi/,tuyen-dung/ung-tuyen): BHXH/BHYT/BHTN, thử việc, lương tháng 13, trợ cấp thôi việc — üst’ün mod tablosunda 21. pazar. - Tech in Asia panosu sağlayıcısı (upstream): techinasia.com iş UI’sinin kendisinin sorguladığı genel Algolia
job_postingsindeksini okur — SEA startup panosu, örneklemede ~300 canlı ilan, 273’si Endonezyalı. Anahtarlar her koşuda sitenin build’inden yeniden keşfedilir, işverenin kendi başvuru bağlantısı pano sayfasını yener ve maaş bilinçli olarak eklenmez (indeksin maaş alanları para değil bayraktır). - Sekiz yeni Block G ilan meşruiyet sinyali belgesi (
modes/oferta-signals/08–17): yan haklar terminolojisinde ülke, üçüncü taraf platform konum etiketi, ajans lisanslama, göç gereksinimlerinde aşırılık, yargı bölgesi yasaklı içerik, pay-transparency aralık genişliği, asgari ücret avukat sorusu, AI eleme ifşası, süreli sözleşme ifşası, relocation satın alma gücü.
Değişti
- Tabanla gelen üst tarafı sağlamlaştırmalar: story-provenance kontrolü birim ve cümle bazında çalışır ve
user-cannot-confirmrakamlarını müzakere, ATS ve mülakat çıktısının dışında tutar; CV fact-gate her renderer’da çalışır ve yeniden ifade edilen ve yapılandırılmış iddiaları okur; LaTeX yazmadan önce süresi geçmiş çıkarılmış slotları reddeder; follow-ups kapalıyken launchd taraması atlanır; update-system yerel düzenleme taramasını argv sınırı içinde tutar. - Fork’un sapmaları birleşmeyi atlattı:
providers/telegram.mjs(yalnızca fork’ta bulunan ayrıştırıcı, ADR-0001) vetelegram-channel.mjsiçindeki Unicode lookaroundLOCATIONISH_RE(ADR-0002). Pano belgesi artık upstream’in geliştirilmiştelegram-channelsatırını, yalnızca fork’ta bulunantelegramsatırını, Tech in Asia’yı ve 20 → 100’e yükseltilen Tencent varsayılanmax_pages’ini listeliyor.
Notlar
- Bu sürümde SPA davranış değişikliği yok: bu bir doküman treni plus üst yeniden sabitlemedir. Dağıtım artık üst 1.37.0 üzerinde çalışıyor; kanonik durum tablosu üst deltasundan etkilenmiyor — izleyici durumları eskisi gibi görüntüleniyor.
- Upstream birleştirmesinde iki çatışma çözüldü:
docs/SUPPORTED_JOB_BOARDS.md(her iki telegram satırı korundu) vetest-all.mjs(upstream’in walkTree tabanlıcopyDirSync’i fork’un.gitiç içe checkout manuel korumasını kapsıyor; içe aktarma listesi birleşimdir).
[1.251.1] — 2026-10-12
Uzmanlık filtresi artık yalnızca rolün AYIRT EDİCİ kelimelerini eşliyor — kıdem ve genel iş isimleri artık tek başına bir ilanı eşlemiyor — ve remote-qa şekli dilden ayırıyor, böylece bir kayma A–G’yi asla kırmızı işaretlemiyor.
Düzeltildi
- Uzmanlık filtresi, kıdem ve genel iş isimlerini eşleştiriciden çıkarır: «Senior PHP Developer», paylaşılan Senior/Developer yüzünden «Senior Java Developer» ile eşleşiyordu. Eşleştirici yalnızca ayırt edici token’ları tutar (PHP, Go, Platform, SRE, Backend…); ayırt edici token’ı kalmayan bir rol («Software Engineer») tüm tümce eşlemesine düşer. Kelime sınırları korunur: «Go» asla «Golang» veya «Google» ile eşleşmez.
- remote-qa şekli dilden ayırır: A–G bayrağı yalnızca blok/SCORE_SUMMARY/looping kodlarıyla değerlendirilir; bir
report not in <locale>kayması kendi bayrağına ve warnings sütununa gider (tablo eksik 4. sütunu kazandı; kodlar satır başına saklanır). - Harita araç çubuğu 390px’de gerçek 50/50 (58/42 bölünmesi aramayı 124px’te bırakmış ve yer tutucusunu kesmişti), ölü
.job-map-job-selectCSS kuralı kaldırıldı. - CodeQL 552 — design-qa testindeki kullanılmayan
OVERLAYSdeğişkeni kaldırıldı.
Notlar
- Mil hâlâ sahip tarafından erteleniyor. ta dil kayması hermes backend’inin BELGELENMİŞ sınırlaması olarak kalıyor (çalışmalar arası düzyazı %2–26; A–G tutuyor): remote-qa bunu beklenen bulgu olarak raporluyor. Genel token listesi bilinçli olarak minimal — genişletmek dil başına bir satır.
[1.251.0] — 2026-10-12
Harita select’i artık ayarlardaki UZMANLIĞA göre filtreliyor (config/profile.yml → target_roles.primary): «Product Manager» veya «Backend Engineer (Go / PHP)» seçin, harita başlığı o rolün kelimelerini taşıyan ilanları tutar. V1.250.0’daki iş listesi konumlandırıcısı kaldırıldı — yanlış araçtı (sahip düzeltmesi).
Eklendi
- Uzmanlık filtresi: select, ayarlardaki uzmanlıkları (target_roles.primary) listeler; birini seçmek, başlığında o rolün ayırt edici token’larından birini taşıyan ilanları tutar (kelime sınırları, büyük/küçük harfsiz — «Go» asla «Google»’u match etmez); Reset hepsini geri getirir.
- V1.250.0’daki iş listesi konumlandırıcısı kaldırıldı — yerine: uzmanlık filtresi, iş listesi değil (sahip düzeltmesi).
Değişti
- Two mobile-map height specs: the floor moves 600 -> 540 px (the toolbar takes ~90 px of the viewport).
Notlar
- Mil hâlâ sahip tarafından erteleniyor. Eşleştirme bilinçli olarak SADECE başlık, ayarlardaki kelimelerle: şirketler veya açıklamalar ilgisiz ilanları uzmanlığa çekerdi. Yapılandırılmış tüm rollerin dışındaki bir ilan «All» altında görünür kalır.
[1.250.0] — 2026-10-12
Harita sayfası kullanılabilir hale geliyor: haritanın üstündeki iş konumlandırıcısı görünen herhangi bir işe uçar ve önizlemesini açar (masaüstü dahil), metin araması haritayı şirket veya unvana göre daraltır — ikisi de yenilemeden sonra kalıcıdır.
Eklendi
- İş konumlandırıcı: haritanın üstündeki select, görünen işleri şirket+ünvan sırasına göre listeler; seçmek daireye uçar ve önizlemeyi açar — masaüstünde de.
- Metin arama: haritayı şirket+ünvana göre daraltır, map-prefs’te kalıcıdır, Reset temizler.
- FAB artık
#/map’te atıfı kapsamıyor (tüm genişlikler).
Düzeltildi
- İki mobil harita yükseklik spec’i: alt sınır 540 px (araç çubuğu görünümün ~90 px’ini alır).
Notlar
- Mil bir sonraki sürüme ertelendi. 4 yeni i18n anahtarı 18 sözlüğe giriyor ve birleştirilen anlık görüntü yeniden üretiliyor. Konumlandırıcı her zaman önizlemeyi açar (gezinmek amacını boşa düşürür); daire __job geri referansıyla bulunur — L.Circle’in zaten sahip olduğu _point değil.
[1.249.0] — 2026-10-11
İş haritası artık uygunluğu öne çıkarıyor: sakin turkuazdan griye ölçek en iyi işleri vurguluyor, puan ve yol süresi filtreleri saklanıyor, mobilde tam yükseklikte harita ve dokunarak önizleme sunuluyor; tracker da yol süresi filtresi ile sıralamasını paylaşıyor.
[1.248.8] — 2026-10-11
Ebeveyn paritesi: fork ve web-ui upstream’ın 115 commit’lik deltasıyla senkronize oluyor — yeni bir PageUp kaynağı, izleyici URL hücreleri markdown bağlantısı olarak ayrıştırılıyor, Assessment durumu — artı ta/ja dil çalışması: döngüye giren raporlar kesilip adlandırılıyor, başlık iskeleti A–G’yi sabit tutuyor ve betik payı yalnızca düzyazıyı okuyor.
Eklendi
Düzeltildi
- Yeni PageUp kaynağı (105 EN adaptörü / 110 kaynak); izleyici URL hücreleri markdown bağlantısı olarak ayrıştırılır (href, tekilleştirme anahtarıdır); Assessment durumu states.yml üzerinden gelir.
- Döngüdeki rapor kesilir ve adlandırılır (
report looping (block B repeated)), İngilizce olmayanlar için başlık iskeleti## A) … ## G). - Betik payı yalnızca düzyazıyı okur (tablolar, SCORE_SUMMARY, kod ve URL hariç) — Latince tablolu bir Japonca rapor artık dalgalanmıyor.
- /api/evaluate
report not in <locale>uyarısı ekler ve remote-qa kodları bir sütun olarak yazdırır.
-
[1.248.7] — 2026-10-11
Rapor başlığındaki rol artık ebeveynin gerçek kuralını okuyor — # <Rol> — <Şirket> varsayımı yerine # Evaluation: {Şirket} — {Rol} — böylece izleyici artık «Evaluation: <Şirket>» öğesini rol olarak taşımıyor; yanlış dilde bir rapor sessizce kaydedilmek yerine uyarıyor; ve H1 öncesindeki model gevezeliği kaydedilen raporlardan kesiliyor.
Düzeltildi
- Yerelleştirilmiş etiket önce sökülür (
Evaluation:,Оценка вакансии:ve 16 varyant daha); etiketten sonraCompany — Role→ rol sağ taraftır; etiketsizRole — Company→ sol taraf; şirketi adlandıran kısım karar verir; rol asla şirket ya da etiket kelimesi değildir — yedek temizlenmiş gönderi satırıdır. - cleanup-plan satırların N’ini toplar (
— N dirty-URL line(s)), dosya saymaz — 5 kirli URL’li bir dosya 1 değil 5 verirdi. - Yanlış dilde bir rapor uyarır: istem zorunlu dil talimatıyla açılır VE kapanır (tüm rapor, tablolar dâhil), hat kaydedilen raporun dilini doğrular — sürüklenme
report not in <locale>uyarısı olarak ortaya çıkar. - H1 öncesi model gevezeliği yok — rapor kendi başlık satırında başlar.
Notlar
- Taınmadı ve dokunulmadı (v1.248.6 regresyonunda doğrulandı): embed-fetch, gönderinin satır yapısı («Компания : X»), «## Rejected» tekilleştirme, fetch’ten önce alan adı kökü reddi, recon/link-check dürüstlüğü ve cleanup modları. Dil doğrulaması bir uyarıdır — (içeriği A–G + puan olarak doğrulanmış) rapor kaydedilir; operatör sürüklenmeyi görür ve değerlendirmeyi tekrarlayabilir.
[1.248.6] — 2026-10-10
Regresyon sonrası Telegram zinciri cilası: gerçek bir gönderi satır yapısını korur («Компания : X» etiketi ve rol satırı gerçekten bulundukları yerde bulunur), izleyici rolü ham gönderi satırı yerine rapor başlığından gelir ve operasyonel yüzeyler (recon, cleanup-plan, link-check) iddia ettiklerini raporlar.
Düzeltildi
- Bir t.me gönderisi artık tek satıra yapışmıyor: etiketler sökülmeden önce
<br>satır sonu olur ve sayısal HTML varlıkları çözülür; şirket etiket deseni iki nokta üst üste öncesi boşluklu biçimi de kabul eder. - İzleyici rolü rapor başlığından gelir (H1
# <Rol> — <Şirket>); yedek satır temizlenir — hashtag yok, emoji yok, ≤80 karakter. ## Rejectedartık çoğalmıyor: bölüm bir kez oluşturulur; her ret kendi satırını içine ekler.- Alan adı kökü istekten önce reddedilir — çöp bir URL artık hiçbir şeye mal olmaz.
- Recon sözleşme sinyalini hesaplar, iddia etmez (
honours rejected:dağıtılan koddakimarkPipelineRejected’ı doğrular); işaret sayacı0’ı iki kez yazdırmıyor. - cleanup-plan kategori başına sayı raporlar (taşınacak t-role, dirty-URL satırları, test-row satırları) — kendi başarı satırını sayan tek
grep -cyerine. - link-check github.com 5xx’i doğrulanmamış sayar — bot duvarının arkasında, bozuk bağlantı olarak değil.
Notlar
- Taınmadı ve dokunulmadı (v1.248.5 regresyonunda doğrulandı): embed-fetch’in kendisi, pipeline atlama sözleşmesi, _setLookup çevrimdışı testleri, uk sıra sayılarının kabulü, rol filtresinde kelime sınırları ve cleanup-apply modu. cleanup-plan’ın kategori bazlı sayımı temizlik betiğinin kendi çıktı etiketlerini okur — onları yeniden adlandırmak sayaçları sessizce kırar.
[1.248.5] — 2026-10-10
Regresyon sonrası sağlamlaştırma: t.me tek gönderi girdileri artık gönderi metninin kendisini getiriyor (embed formu), reddedilen bir girdi sunucu tarafında değerlendirme zamanlayıcısının havuzundan çıkıyor ve Ukraynaca bir raporun yerel blok numaralandırması kabul ediliyor — ayrıca gizlice canlı ağı kullanan bir test sonsuza dek çevrimdışı kalıyor.
Düzeltildi
- t.me girdileri sonunda değerlendiriliyor: tek gönderi sayfası düz HTML’de yalnızca kanal başlığını sunuyor (~0,2 KB — «View in Telegram» ve başka hiçbir şey), model boş bir açıklama alıyordu ve her Telegram girdisi değerlendirmede ölüyordu. Getirme artık
t.me/<kanal>/<id>(vet.me/s/…akış formunu) embed formuna (?embed=1&mode=tme) yeniden yazıyor — aynı ana bilgisayar, SSRF doğrulaması değişmedi — ve gönderiyi.tgme_widget_message_text’ten okuyor (yedek:og:description). Widget metni yok → herhangi bir LLM token’ı harcanmadan getirme adımında red (telegram post has no text,rejected: true). - Değerlendirme zamanlayıcısı reddedilen girdiler için tekrar ödemeyi bırakıyor (sunucu tarafı sözleşme): reddedilen bir girdi artık
data/pipeline.mdiçinde işaretleniyor — satırı URL çitinden çıkıp kısa bir gerekçeyle## Rejectedbölümüne yerleşiyor (idempotent, asla kopyalanmaz). Zamanlayıcı çitten çıplak URL’leri alıyor, bu yüzden işaretli bir girdi doğal olarak atlanıyor — zamanlayıcı betiğinin iç kısmına bağımlılık olmadan. Recon, betiği incelemek yerinepipeline rejected marks: N+honours rejected: yes (server-side)yazdırıyor. - Ukraynaca raporlar A–G doğrulamasını yeniden geçiyor: bir uk modeli blokları kendi alfabesinin sırasına göre numaralandırıyor (А Б В Г Д Є Ж), ve benzer görünüm geçişi yalnızca А/В/Е’yi sayıyordu — tam olarak C, D, F, G blokları üretimde eksikti (2/2 yeniden üretim). Doğrulayıcı artık başlıklar sırayla göründüğünde Ukraynaca sıralı diziyi kabul ediyor (ar için abjad ve hi için Devanagari ile aynı disiplin) ve her yerel ayar için değerlendirme istemi artık açıkça Latin
A–Ggerektiriyor. - Rol anahtar kelime kapısı alt dize değil kelime üzerinde tetikleniyor:
linkedin.com/vex.com/kökleri,lead/itsayfanın alakasız arayüz metninde yaşadığı için kapıdan geçiyordu. Anahtar kelimeler artık Unicode kelime sınırlarında eşleşiyor ve alan adı kökü (yolu olmayan URL) LLM çağrısından önce reddediliyor. - Bir birim test artık canlı ağa ihtiyaç duymuyor: no-hints testi (
tests/auto-pipeline-jd-gate.test.mjs) HTTP taşımını değiştirdi ama yine de gerçek bir DNS araması yapıyordu — CI’da yalnızca koşucunun bağlantısı olduğu için yeşildi. safe-fetch bir_setLookup()kancası kazandı (çözümleyicinin kendisi testlerde değiştirilebilir; üretim kodu onu asla geçersiz kılmaz) ve test çevrimdışı çözüyor.
Eklendi
- deploy.yml’de
cleanup-plan/cleanup-applyiş akışı modları: üretimdeki QA çöp temizliği (post-qa-cleanup), dizüstü bilgisayardan SSH olmadan sunucu tarafında çalışıyor. Günlük yalnızca sayılar içeriyor — dosya adı veya satır önizlemesi yok, çünkü günlük herkese açık ve dosya adları şirket adları içeriyor. Temizlik modları için Verify adımı atlanıyor.
Notlar
- Taınmadı: ebeveynin kelime sınırı konum derleyicisi ve USPS eyalet tablosu (v1.248.1’den beri belgelenmiş). Reddedilen girdileri atlama sözleşmesi sunucu tarafında yaşıyor (data/pipeline.md içinde işaretleme), zamanlayıcı betiğinde değil — o depo dışında ve bilinçli olarak değiştirilmiyor.
[1.248.4] — 2026-10-10
Regresyon turunun devamı: Telegram girdilerinin rol-çözümleme zinciri — gerçek bir ilan içeren Kiril gönderisi artık reddedilen bir unknown-role dosyası yerine adlandırılmış bir rapor üretiyor — ve LLM çağrısı yalnızca değerlemeye değer girdiler için tetikleniyor.
Düzeltildi
- Rol zinciri Kiril gönderilerde çalışıyor: anahtar kelime listesine разработчик/программист/инженер/аналитик/менеджер/руководитель/тимлид/лид/дизайнер/тестировщик/QA/архитектор/специалист/директор/DevOps/SRE eklendi (eskisi yalnızca EN idi: 40 gerçek gönderiden 0’ı rol alıyordu), rapor başlığına başvuruluyor (
parseReportHeader— model rolü H1’e yazıyor), ve gönderinin ilk anlamlı satırı son çare. - Kimlik kapısı LLM çağrısından ÖNE taşındı: ne şirket ne rol izi taşıyan bir girdi fetch adımında başarısız olur (
rejected: true) — zaten reddedilecek bir değerlendirme için token harcanmaz. t.me/s/<kanal>/<id>artık şirketi 「S」 olarak adlandırmıyor — önizleme segmenti atlanıyor; her iki bağlantı biçimi de kanala çözülüyor.- Telegram gönderilerindeki 「Компания: X」 öz-etiketleri onurlandırılıyor (mesajlaşma hostlarının cümle içi 「…в компании X」 de).
Eklendi
- auto-pipeline başarısızlıkları SSE hatasında
rejected: truetaşıyor — sunucu tarafındaki değerlendirme zamanlayıcısı bu bayrakla pipeline girdisini atlıyor, 2 saatte bir yeniden denemek yerine.
Notlar
- Bu sefer portlanmadı: ebeveynin word-boundary konum anahtar kelime derleyicisi ve USPS tablosu (v1.248.1’den beri belgeli).
- README 「Translations」 bloğu artık tek bir kanonik listeden üretiliyor, CI’da parite testi var (dosya başına 17 bağlantı, kendisi asla bağlanmıyor) — ar/pl/uk bloğu kazandı;
|/·ayraç kayması giderildi.
[1.248.3] — 2026-10-10
Regresyon turunun devamı: değerlendirme zamanlayıcısı hiçbir koşulda adsız Telegram çöpünü rapor olarak arşivleyemiyor, QA temizliği gerçek Telegram ilanlarını silemiyor, harita atıfı yeniden görünüyor ve pano çipleri ≥ 4.5:1 okunuyor.
Düzeltildi
- auto-pipeline kaydetmeden ÖNCE doğruluyor: 0–5 puanı olmayan veya A–G blokları eksik bir rapor evaluate adımında koşuyu bitirir (SSE yükünde
rejected: true) — rapor dosyası yok, tracker satırı yok. v1.248.2 uzunluk kapısını geçen t.me girdileri o sürümden sonra iki çöp daha üretti; artık adsız girdilercompany/role not identifiableile reddediliyor. guessCompanyRolemesajlaşma hostlarından şirket uydurmuyor —t.me,telegram.me,vk.com,linkedin.comve arkadaşları EMPTY_DOMAINS içinde: bir Telegram gönderisi kanal adına düşer, adsız girdiunknown-roleolarak arşivlenmek yerine reddedilir.post-qa-cleanupönce başlık puanını okur: auto-pipeline kaydetmeden önce SCORE_SUMMARY bloğunu keser, böylece eski yalnız-summary kontrol kaydedilen her Telegram ilanını çöp sayıyordu — prod’da 41’nin 8’i başlıkta puana sahip ve--applyonları silecekti. Başlık puanı (parseReportHeaderüzerinden) artık birincil sinyal; blok yedek. Dry-run dosya başına nedeni basıyor.- #/map’te Leaflet atfı görünüyor — docs FAB örtüyordu (OSM lisans ihlali); köşe 96px kaldırıldı.
- Pano çipleri ≥ 4.5:1 —
dash-chipetiketleri ve--manualvaryantı--foggy-stronga geçti (önce 4.31:1).
Eklendi
- auto-pipeline başarısızlıkları SSE hatasında
rejected: truetaşıyor — sunucu tarafı eval zamanlayıcısı bu bayrakla pipeline girdisini atlıyor, 2 saatte bir yeniden denemek yerine.
Notlar
- ar/ja kayması yeniden koşuda tekrarlanmadı (bkz. v1.248.2).
- Prod temizliği hâlâ kullanıcının açık 「evet」ini bekliyor (CAR-61c); bu düzeltmeyle temizlik gerçek Telegram ilanlarını silemez oldu.
[1.248.2] — 2026-10-10
Regresyon turu: değerlendirme zamanlayıcısı pipeline çöpünü artık 「Last evaluation」e dönüştürmüyor, SCORE ayrıştırma gerçek biçimleri toluyor ve tracker sonunda dilinizi konuşuyor.
Düzeltildi
- Boş-JD raporları artık yazılmıyor. Auto-pipeline’ın JD kapısı LLM çağrısından önce 50 → 200 karaktere çıktı — yer tutucu sayfalar (
example.com/qa-v167-…)…-t-role-<ts>.mdraporu yerine SSE hatası + konsol uyarısıyla bitiyor; panonun 「Last evaluation」 olarak gösterdiği (prod’da 42 dosya) tam olarak buydu. - SCORE_SUMMARY ayrıştırma gerçek biçimleri tolüyor: 「4,2/5」「4.2 / 5」「4.2」「SCORE :」 hepsi geçerli; 1–2 haneli virgül ondalık, 3 haneli binliktir (eski kod 「4,200」ü 4.2 okuyup 0–5 kapısından geçiyordu). Başarısızlık yalnızca
SCORE:satırını loglar — rapor içeriğini asla (CI logları herkese açık).
Eklendi
scripts/post-qa-cleanup.mjs: varsayılan dry-run,--applyotomatik yedeklerle (*.bak-<ts>, raporlarqa/cleanup-backup-<ts>/e taşınır): tracker’daki ZZ-QA-TEST satırları, geçerli SCORE’suz*-t-role-*raporları, pipeline’dakiexample.comgirdileri.
Notlar
- Regresyon turunun ar/ja kayması yeniden koşuda tekrarlanmadı (ikisi de lang ✓ + A–G ✓) — language-check’taki ta girdisi ve sağlamlaştırılmış SCORE ayrıştırıcı defense-in-depth olarak çıkıyor.
- Prod temizliği kullanıcının açık 「evet」ini bekliyor: önce dry-run planı, sonra
--apply.
[1.248.1] — 2026-10-09
location_filter, ebeveynin always_allow ve block_hard katmanlarını kazandı (CAR-60) — çok ülkeli bir konum dizisi kardeş-engel listesini atlatır ve açık bir sert blok artık kurtarılamaz.
Düzeltildi
always_allow,blockü yener:block: [romania, poland, croatia]vealways_allow: [united kingdom]iken workable’ın birleştirilmiş hücresi „London, United Kingdom · Romania · Poland · Croatia“ geçer — ana bölge bir seçenektir (workable #4806’nın tüketici vakası, artık ebeveyn biçiminde).block_hard,always_allowü yener: dizinin başka bir yerindeki always_allow isabetiyle asla kurtarılmaması gereken ülke düzeyi terimler.strict: trueartıkblock_hardu kısıtlayıcı katman sayar; docs/help’teki location_filter bölümü her iki katmanı ×18 belgeledi.
Notlar
- Bu sefer bilinçli olarak portlanmadı: ebeveynin kelime-sınırlı konum anahtar kelime derleyicisi ve USPS eyalet tablosu (web-ui substring eşleşmesini korur; tablo ABD merkezli yapılandırmalar içindir — gerekirse CAR-60 altına arşivleyin). workable tüketici testinin geçici allow-list biçimi, yeni ebeveyn biçiminin yanında ikinci bir yargı olarak kalır.
[1.248.0] — 2026-10-09
Ebeveyn-parite: beş yukarı sağlayıcı/liveness düzeltmesi portlandı — API’sini taşıyan panolar çalışmaya devam ediyor ve kendi satırındaki bir kapanış bannerı artık gözden kaçmıyor.
Düzeltildi
- Gupy API’yi
portal.gupy.io’ya takip eder ve API’nin gerçekten okuduğu filtre adlarını gönderir (workplaceType/type) — eski çoğul adlar sessizce yok sayılıyordu;countryartık gönderilmiyor (yapılandırılmış ülke, gönderim yerine giriş adıyla uyarı çizer). Gizli işverenler tam etiket eşleşmesinde düşer («Confidencial Seguros» hayatta kalır),max_pages100 ile sınırlıdır — API offset 10.000 sonrasında 400 döner ve kesilme uyarısı artık sınırı yükseltmek yerine anahtar kelimeleri daraltmayı önerir. - Workable, çok ülkeli bir ilanın tüm ülkelerini korur: aynı iş URL’si altındaki kardeşler tek satıra katlanır („London, United Kingdom · Romania · Poland · Croatia“) — ilk ülke kazanmaz.
- Liveness: kendi satırındaki bir banner, üstteki satırın parçası değildir — ilanın altındaki „Sign in if you want to apply“ / „Get notified when this position is filled“, olduğu gibi kapanış cümlesi olarak okunur; satırlara yayılan gerçek „until filled“ hâlâ aktif okunur.
- Radancy, eski kart işaretlemesinde kardeş
job-locationöğesini okur (Barclays ailesi düzenleri konumu</a>’dan sonra koyar) — kendi konumu olmayan satırlar boş kalır, komşusunu ödünç almaz. - SmartRecruiters yedek iş bağlantıları yapılandırılmış slug’ı korur — güvenilmeyen/eksik
ref’li bir ilan, genel URL’sini görünen addan asla değil, kiracı slug’ından sentezler.
Eklendi
- No-port’lar belgelendi: yukarı
_httpproxyfetchImpldüzeltmesi (web-ui’de proxy dalı yok — port etmek DNS-rebinding korumasının kimlik denetimini etkisiz kılar ve deponun bilinçli olarak kaçındığı bir undici bağımlılığı ekler); yukarıverify-ats(+226 satır) vecv-facts(web-ui kendi ATS puanlamasını ve CV ayrıştırmayı uygular); ebeveyn panosu Go TUI ve CLI betikleri; Teamtailor import sıralaması (kozmetik).
Notlar
- Bilinen eksik takip olarak: ebeveyn konum filtresinin
always_allowkatmanı (workable tüketici testi sayesinde UK bloğundan kurtulur) web-ui’de yok; port aynı tüketici yargısını allow-list testiyle ifade etti. Ayrı bir değişiklik olarak kaydedildi.
[1.247.0] — 2026-10-09
CAR-49…58 tasarım-taramasının kuyruğu tamamlandı — kalan tüm minor/polish bulguları ve önceki sürümün bilinçli olarak ertelediği koyu harita.
Düzeltildi
- Harita gerçek bir koyu tema render ediyor. Yakınlaştırma/katmanlar/atıf v1.246.0’da koyulaşmıştı; şimdi döşemeler de izliyor: koyu mod, CSS tersine çevirme ile OSM katmanını çizer (satıcı anahtarı yok) ve anahtarlı Carto-dark ön ayarı
MAP_TILE_DARK_URLüzerinden kullanılabilir (ana makinesi CSPimg-srciçinde izinli). Tema değişiminde katman canlı yeniden takılır. - Sarı callout’ların koyu biçimleri var (
config,batch, hero uyarısı) — v1.246.0 belirteç mekaniğiyle; yolda bir gerileme de yakalandı:.callout a.btn-primaryü eziyordu; artık:not(.btn)kapsamında. - Apply bilgi kartındaki URL artık kelime ortasından kırılmıyor.
- CV başlık düğmeleri tek ikon sistemi (metin; 📁/📄/💾 karışımı gitti).
- Tracker durum sekmeleri tek yazım kalıbında — cümle düzeni, yerel uyarlamalarla (CJK/ar/hi/ta’da cins formu yok).
- Üst çubuk ikonları tek stroke-SVG seti — 🔔/🌙/🩺 karışımı gitti; tema düğmesi güneş/ay’ı CSS ile çizer.
- Panodaki Pipeline kartu pembe vurgusunu kaybetti (halka yalnız hover/focus).
- Kayıtlı arama silme gerçekten yıkıcı görünür (
.btn-danger, nötr ghost değil). - Pipeline önizlemesinin gerçek boş durumu var (başlık + ipucu + CTA, tracker kalıbı).
- Süre/maliyet meta’sı tek kalıp:
UI.pageMeta⏱ + maliyeti görünüm başlığının altında tek satırda çizer (evaluate/deep/auto/mode-page/orientation). - Auto-pipeline ✨’sini kaybetti — uygulamanın tek süslü h1’i ortak sol kenara döndü.
- Batch docs URL’si satır içi bağlantı.
- interview-digest / orientation tasarlanmış boş durumlara sahip (başlık + ipucu + CTA).
- Plan yokken career-plan Export devre dışı, eylemler tek satırda.
- stats: Yinelenen «Market report» başlığı kaldırıldı ve bölge yer tutucusu sığıyor (×18 kısaltıldı, sabit genişlik).
- Config artık mutlak dosya yolu sızdırmıyor — sunucu tarafı
displayPath()~/…ya da çıplak dosya adını gösterir. - LLM_PROVIDER yardımcısı üç kısa satır (×18 +
pre-line), 150 karakterlik mono duvar değil. - Profil EMAIL kartı adresi tek satırda tutar (üç nokta; yalnız ≤480px’de kırılır).
- Health metni artık kelime kırıyor değil («Run buttons» bütün; overflow-wrap anywhere).
- Help satır içi kodu RTL’de hayatta kalır (LTR izolasyonu, nowrap, kaydırılabilir).
- Hero’daki «Live evals» hapı ru/ar’da artık çarpışmıyor (flex-wrap, büzülmeyen ikonlar).
Eklendi
- Koyu döşeme ön ayarı (
MAP_TILE_DARK_URL+ atıf) kod içinde belgelendi; CSPimg-srcgenişlemesi onun Carto ana makinesini kapsıyor.
Notlar
- Koyu döşemenin varsayılanı OSM’in CSS ters çevirmesidir — anahtarsız Carto baz haritalarını API anahtarı ardına kapattı (istekle doğrulandı); anahtarlı ön ayar bir opt-in’dir, varsayılan değil.
[1.246.0] — 2026-10-09
CAR-48 kıdemli-tasarım taramasının ilk 10 bulgusunun tamamı düzeltildi — engelleyici ve yedi major dahil.
Düzeltildi
- Apply koyu: bilgi kartındaki bağlantı yeniden görünür. Kart koyu modda açık yüzeyini koruyordu; «Need Playwright? See …» bağlantısı ≈1.0:1’deydi. Tema duyarlı
.callout--info(surface/border/text/link belirteçleri) koyu bağlantıyı ≈7.3:1’e çıkarır. - RTL artık sayısal bileşimleri ters çevirmiyor. Skor hapları («1.5 / 5»), rapot bantları («≥ 4.5», «< 3.5») ve panodaki «/ 5.0» yön izolasyonu alıyor (LTR span); ar sözlüğü düzyazının daha iyi olduğu aralıkları sözcüklerle yeniden yazıyor.
- CV markdown’ı LTR kalır. Arapçada textarea ve önizleme
dir="ltr"ile çizilir; çevresindeki çerçeve RTL kalır. - Raporların DATE sütunu bir ISO tarihini daha asla bölmez (nowrap + tabular rakamlar).
- Kenar çubuğu USAGE HUD’unun üstünde biter (kaydırma portu rezervi + geçiş) — son gezinme ögesi artık panelin altına kaymıyor; RTL için aynalandı.
- Mobil tarama @390: «Save search» tam görünür — kontrol satırı sarılıp sıkışır, kenardan kırpılmaz.
- Harita kontrolleri koyu temayı izler (yakınlaştırma, katmanlar, atıf). Döşemeler bilinçli olarak değişmedi: kökenleri sunucu tarafındaki CSP
img-srcile sabit. - Sohbet FAB’ı artık etkileşimli içeriği kapatmıyor — sayfa kaydırma dolgusu onu temizler (Portals’ın Disable düğmeleri, Reports skor hapi, two-pager girişi, Leaflet atfı).
- Etkinlik günlüğü arayüz dilini konuşur: 22 eylem slagu ×18 yerelde çevrildi (bilinmeyenler için ham id fallback’ı), filtre çipleri çevrildi; TARGET sütunu kalır — auto-pipeline doldurur.
- Assessments formlarına gerçek etiketler geldi (cümle büyük-küçük harf,
htmlFor/idbağı) — yalnız-placeholder’dan ileri.
Notlar
- Bu sürümde yok: haritanın koyu döşemeleri (CSP
img-srcgenişletmesi gerekir — sunucu tarafı değişiklik, bilinçli olarak istemcide yapılmadı); sarı callout’ların koyu biçimleri (config,batch) — belirteç mekaniği sonraki adım için hazır.
[1.245.0] — 2026-10-09
Tamilce (தமிழ்), 18. arayüz dili olarak katılıyor — 17 dil dalgasından sonra ilk yeni dil, tam anahtar paritesiyle.
Eklendi
- Tamilce (
ta): 1449/1449 anahtar —enile tam parite, kayıp yer tutucu yok, hi tarzı Hint-teciz conventionaları (sağlayıcılar, model adları, yollar ve komutlar Latin harflerinde kalır).detect()artıkta,ta-IN,ta-LKkabul ediyor; Tamilce LTR’dir (testle sabitlenmiştir). - Eksiksiz docs/help/ta.md (33 H2 / 125 H3, kaynak sayaçları canlı kayıt defteriyle doğrulandı, Hermes canary çapaları, harfiyen YAML) — ayrıca README.ta.md ve CHANGELOG.ta.md aynaları.
- Sayım kapıları 17 → 18: LANGS, detect sondaları, i18n denetimi, changelog paritesi, RTL koruması, CI
langs— bir dıkışta CI listesinde daha önce eksik olanhide eklenmiş oldu.
Notlar
- cvstart.org açılış sayfası şimdilik 17 dilde kalıyor — çevirisi ayrı bir görev; site içerik senkronizasyonu zaten docs/help/ta.md ve ta changelog’unu dağıtıyor.
report-header.jsiçindeki REPORT_LABELS 17’de kalıyor — Tamilce rapor ayrıştırma, ana depodaki Tamilce rapor üretimiyle gelecek.
[1.244.2] — 2026-10-08
Tarama sayfası parlatması: başlatıcı, durum çubuğu, repost paneli ve filtreler tek bir tutarlı krom olarak yeniden tasarlandı — ve sonuç tablosu artık board verileriyle gerilemiyor.
Düzeltildi
- Maaş hücreleri yalnızca parasal aralığı gösterir. Bazı board’lar yanıt alanına tüm yan metni koyar — görünür hücre artık yalnızca parasal kısmı gösterir ve metni tooltip’e taşır (önce: her satırı uzatan 6 satırlık hücre).
- Boş başlıklı satırlar şirketi gösterir (sonra nötr tire) dev boş hücre yerine.
- Kıdem rozeti sabit genişlikli sütununda asla kırılmaz.
- Puanı olmayan satırlar soluk bir «◎ —» gösterir, tooltip two-pager karşılaştırmasında eşleşen anahtar kelime bulunmadığını açıklar (önce: puanlı satırların yanında bozuk görünüyordu).
Eklendi
- Krom yeniden tasarımı: başlatıcı kartı (hizalı kontrol satırı, baskın birincil düğme), durum noktalı terminal durum çubuğu (boşta/çalışıyor/bitti/hata) reduced-motion’u destekler, repost paneli sticky başlıklı yükseklik sınırına sahiptir (1,560 küme, 155,000 px’lik bir panel oluşturuyordu) ve filtre bloğu düzgün responsive ızgara ve hizalanmış altbilgi olarak.
Notlar
- #/scan’in geri kalanı v1.244.1 ile özdeş — yalnızca krom parlatması ve yukarıdaki dört düzeltme değişti. Testler 5045 → 5068 unit.
[1.244.1] — 2026-10-08
Düzeltildi
- Scan icons announce real values. The boost/fit/score icons’ accessible names leaked the raw dict templates (“Fit: {band}”, “Boosted by {by}”) —
{band}/{by}/{score}are now substituted (band word, booster keyword, numeric score). [HIGH a11y, caught live in the v1.244.0 regression round] - Title pipes split correctly. A 4-segment title like «C++ | Rust | Go Developer | Onsite» no longer lifts “Go Developer” out as a “country” — the split demands the segment resolves to a real country (conservative
Countries.detectCountry). - Meta dates render for every row.
daysSinceaccepted date-only ISO, but the API serves full timestamps for ~83% of dated rows — those rows showed no date segment.
Notlar
- #/scan’in geri kalanı v1.244.0 ile özdeş — yalnızca yukarıdaki üç düzeltme değişti.
- Bilinçli olarak yapılmadı: URL hash filtre durumu, klavye satır navigasyonu ve
5 lakhs INRayrıştırma (mevcut takipler).
[1.244.0] — 2026-10-08
Tarama sonuçları bir duvar gibi değil, liste gibi okunuyor: bir ilan = iki satır, sinyaller simge biçiminde ve 700 satırlık bir tarama, ~37,000 px’lik bir sayfa yerine sayfalı bir tablo.
Düzeltildi
- Satır anatomisi. Her ilan, sınırlanmış iki satırlık bir kayıt satırı olarak çiziliyor: 1. satır başlık, 2. satır
company · location · source · date · work-type. Artırma rozeti, başlık-uyum bandı ve uyum puanı, yerelleştirilmiş erişilebilir adları ve araç ipuçları olan simgelere dönüştü (ekran okuyucular bir sözcük duvarı değil, «Соответствие: сильное» / “Fit: strong” okuyor); güven ve taşınma rozetleri aynı şeride katlandı. Kıdem ve maaş, yalnızca masaüstünde görünen yardımcı sütunlar olarak kalıyor. - Başlık hijyeni. Sondaki
| Germany | Remotesegmenti başlıktan ayrılıp meta satırına taşınıyor — Unicode duyarlı: yalnızca kuyruk gerçek bir çalışma türü işareti ve orta segment bir yer adı biçiminde olduğunda (“C++ | Rust | Go Developer” gibi meşru dikey çizgiler asla bölünmez). - Yatay yayılma bitti. Sabit tablo düzeni,
min-width: 0, tam metni araç ipucunda taşıyan üç noktayla kısaltılmış tek satırlık başlık/meta: 1440 px’te de 390 px’te de sıfır sayfa taşması ve sıfır iç tablo kaydırması (eski sayfa telefon genişliğinde 675 px’lik bir taşma yapıyordu). - Sayfalama. Sonuçlar sayfa başına 50 olarak çiziliyor (25/50/100/200 seçilebilir) — 700 satırlık bir tarama artık ~37,000 px yerine ~4,600 px yüksekliğinde ve DOM, 5,500+ yerine ~1,000 düğüm tutuyor.
Eklendi
- Yerleşim sözleşmesi testleri: iki satırlık kayıt satırı, simgelerin erişilebilir adları (en + ru), sayfalama düğüm bütçesi ve başlık-uyum sayı/sıra koruması tarayıcı paketinde çalışıyor — yeniden tasarım sessizce gerileyemez.
Notlar
- Testler 5036 → 5045 birim (tarayıcı paketi yerleşim sözleşmelerini kazandı), kapsam ortalaması 98.14 % satır / 89.34 % dal (alt sınır 96/86).
- Tarayıcının buldukları, puanlama formülleri ve
last-scan.jsondokunulmadan kalıyor — başlık-uyumu bir ek açıklama olmaya devam ediyor. - Bu sürümde yok: URL-hash filtre durumu ve klavyeyle satır gezinmesi (takip);
5 lakhs INRayrıştırması (önceden var olan).
[1.243.2] — 2026-10-08
Düzeltildi
- Dağıtılabilir sürüm v1.243.2 olarak kesildi. v1.243.1 git etiketi yayınlandıktan sonra yeniden işaretlendi ve sunucunun
git fetch --tagskomutu mevcut bir etiketi geçersiz kılmayı doğru şekilde reddediyor — bu yüzden v1.243.1 hiçbir zaman dağıtılabilir değildi. Bu etiket özdeş ağacı (v1.243.0 tabanlı modal window-dinleyici düzeltmesi) ve bu sürüm yükseltmesini taşıyor. Başka hiçbir şey değişmedi; yayınlanan npm 1.243.1 tarball’ı düzeltmeyi çoktan içeriyordu.
Notlar
- Uygulama kodu v1.243.1 ile aynı — yalnızca dağıtılabilir etiket yenidir (sunucunun
git fetch --tagskomutu yeniden işaretlenen v1.243.1’i reddetti). - Bilinçli olarak yapılmadı: sunucu tarafındaki etiketi zorla güncellemek (yayımlanmış etiketler asla taşınmaz).
[1.243.1] — 2026-10-08
Düzeltildi
- «Sonucu kaydet» kalıcısı artık gezinmede gerçekten kapanıyor. v1.243.0 bekçisi
hashchange’idocumentüzerinde dinliyordu; bu olay orada hiç ateşlenmez — düzeltme ölü geldi ve kalıcı bir sonraki görünümü engellemeye devam etti (v1.243.1 gerileme turunda canlı üretimde yakalandı). Bekçi artıkwindowüzerinde dinliyor; test de oraya dispatch ediyor ve bozuk koda karşı kırmızı doğrulandı.
[1.243.0] — 2026-10-08
Tarayıcı katmanı işinizi güvende tutuyor ve dilinizi konuşuyor: kaydedilmemiş düzenleme kaybı yok, sessiz başarısızlık yok, yerelleştirilmiş bir arayüzde sessiz İngilizce yok, her yerde AA kontrastı.
Düzeltildi
- Kaydedilmemiş düzenlemeler yeniden çizimlerde kaybolmuyor. CV düzenleyici kirli bir tampon tutuyor ve her çizimde onu geri yüklüyor — İptal, bir dil değişimi ya da CV Studio’ya geçiş artık düzenlemeleri atmak yerine soruyor; kariyer planı da ürettiği metni aynı şekilde koruyor. Config/CV Studio/career-plan/memory/two-pager içindeki yükleme hataları, dosyayı boşluklarla sessizce üzerine yazmak yerine bir hata gösteriyor ve Kaydet’i devre dışı bırakıyor.
- “Sonuç kaydet” penceresi artık gezinmeden hayatta kalmıyor.
#/trackerüzerinde açıp başka bir görünüme tıklamak, tüm sayfayı bloke eden bir pencere bırakıyordu (v1.242.1 two-stand regresyonunda yakalandı) — artık rota değişiminde kapanıyor; tarama görünümündeki kardeşleri de gezinmede SSE akışlarını durduruyor ve dinleyicilerini ayırıyor. - Maaş ve anahtar kelime ayrıştırma her yazı sistemini okuyor. Anahtar kelime çipleri Unicode sözcük sınırları kullanıyor (Kiril,
c++,.netdoğru filtreleniyor, sıfır satıra düşürmüyor); ortak tek bir maaş ayrıştırıcısı$182.9K - $240K,от 100 000 руб,100 тыс. руб.,50 000 Kč(önceden 50M USD okunuyordu) ve aralık semantiğini ($100-150K) düzeltiyor; zorunlu “Germany or Netherlands” artık hem eşleşmiş hem ihlal edilmiş sayılmıyor. - Akışlar tam olarak bir kez sonuçlanıyor. Kopan bir SSE bağlantısı hatayı iki kez iletiyor ve Generate düğmesini sonsuza dek devre dışı bırakabiliyordu; her son durum (done/error/close/throw, öldürülmüş bir alt süreç dahil) tek yoldan sonuçlanıyor ve düğmeyi yeniden etkinleştiriyor. Otomatik pipeline, son arabelleklenmiş karesini bırakmak yerine boşaltıyor.
- Küçük yollarda gizlilik ve doğruluk. Hata raporu gövdesi artık değerlendirilen iş URL’sini ya da rapor slug’larını taşımıyor; CV gizliliği çıplak
linkedin.com/in/…bağlantılarını ve tamamı büyük harf olan adları maskeliyor, AB tarihlerini bozmayı da bırakıyor; ülke çözümlemesi en uzun eşleşmeyi alıyor ve iki ülke adı geçtiğinde tahmin etmeyi reddediyor (“Cambridge, MA” artık Birleşik Krallık’a eşlenmiyor); dosya adıyla indirilenler Kiril adlarını koruyor. - Router ve a11y. Atlama bağlantısı artık
ontentiçine 404 etmiyor; etkin gezinti öğesiaria-current="page"taşıyor; tek<main>/tek<nav>; Escape mobil çekmeceyi kapatıyor (kapalıyken artık gerçekten sekme sırasının dışında);scroll-padding-top, yapışkan çubukların ötesinde odağı görünür tutuyor; yapışkan banner artık üst çubuğu örtmüyor. - Kontrast her iki temada da AA — koyu temadaki toast’lar beyaz-üstüne-beyazdı (1.10:1): toast’lar, düğmeler, banner’lar ve
--rauschüzerindeki bağlantılar artık tema-değişmez belirteçler üzerinden çözülüyor; bunu hesaplanan WCAG sözleşme testleri (≥ 4.5:1) koruyor. - Bu turdan geri kalan her şey: evaluate kesilme uyarısını çiziyor; memory/config/two-pager başarısız bir yüklemin üzerine Kaydet’i reddediyor; scan SSE’sini yetim bırakmayı bırakıyor; tarama sonuçları API destekli panoları, sürüklenmiş bir regex yerine sunucu kayıt defterinden sınıflandırıyor; takipçinin “Proceed with Caution”u bir uyarı, kırmızı rozet değil; istatistikler yerelleştirilmiş durumları hesaba katıyor; çubuk grafikler RTL’de doğru okunuyor; docs FAB telefonlarda içeriği örtmüyor;
GET /app.jsdizin kabuğu yerine 404 dönüyor;GET /api/runnerseylemlerini listeliyor.
Eklendi
- Danca otomatik algılamaya katılıyor — bir
da-DKtarayıcı artık Danca arayüzü alıyor (sözlük tamdı, algılama onu kaçırıyordu);zh-Hant*Geleneksel Çinceye eşleniyor.cv-diagnostics— özgeçmiş kontrol listesi — tamamen yerelleştirildi (28diag.*anahtarı × 17). 26 alan-şartnamesi etiketi eklendi; 31 ölü anahtar kaldırıldı; sağlayıcı listeleri artık Hermes’in “otomatik sıralamada en sonda” olduğunu iddia etmiyor; docs-fab/menu aria etiketleri yerelleştirildi.
Notlar
- Testler 4812 → 5036 birim, tarayıcı 118 + yeni gezinti/kontrast sözleşmeleri. Kapsam ortalaması 98.15 % satır / 89.34 % dal (alt sınır 96/86).
- Bu sürümde yok:
#/scanyeniden tasarımı (Phase 4 — v1.244.0, şartname taslağı hazır); kendine ait birexport.docxFailedsözlük anahtarı (hata,common.error’ı yeniden kullanıyor);5 lakhs INRhâlâ 5 olarak ayrıştırılıyor (önceden var olan).
[1.242.1] — 2026-10-08
Düzeltildi
- Sürüm arşivi artık
node_modulessembolik bağlantıları içermiyor. v1.242.0 git etiketi kökte birnode_modulessembolik bağlantısı vesite/node_modulestaşıyordu (genel kapsamlı birgit add -Abunları sondaki eğik çizgili ignore desenlerinin önünden geçirdi), bu da sunucu dağıtımının tar açmasını bozdu — dağıtım güvenle geri alındı ve üretim 1.241.1’de kaldı. Her iki sembolik bağlantı izlemeden çıkarıldı ve ignore desenleri genişletildi; npm tarball’ı hiç etkilenmedi (paketlerken npmnode_moduleshariç tutar).
Notlar
- Uygulama kodu v1.242.0 ile aynı — yalnızca paketleme. Kaynak doğruluğu içeriği bu dağıtımla üretime gidiyor (v1.242.0 üretime hiç ulaşmadı: sunucu dağıtımı tar hatası sonrası geri alındı).
- Bilinçli olarak yapılmadı: v1.242.0’ı yeniden etiketlemek (npm 1.242.0’ı zaten yayımladı; kayıt defteri tarball’ı temiz — paketlerken npm
node_moduleshariç tutar).
[1.242.0] — 2026-10-07
Tarayıcının veri katmanı yeniden güvenilir: ölü kaynaklar canlandı, hatalı biçimli bir yanıt artık boş pano kılığına giremiyor ve kötü niyetli bir pano URL’si artık bir taramayı yönlendiremiyor.
Düzeltildi
- Ölü kaynaklar yeniden canlı. justjoin (API zarfı
{data, meta.next.cursor}biçimine değişti) yeni maaş alanlarıyla birlikte tam kataloğunu bir imleç turuyla okuyor; nofluffjobssalaryCurrencyolmadan 400 dönüyor — üst projenin zorunlu kıldığı sorgu gönderiliyor ve sonuçlar sayfalanıyor (pageTo). himalayas ve jobicy 100 binin üzerindeki ilandan yalnızca en yeni ~20 tanesini görüyordu — ikisi de artık tam kataloglarını geziyor (sayfa üst sınırlı offset / imleç sayfalaması). - Yanlış biçimli bir 200 yanıtı 1. sayfada hata fırlatıyor. ~40 kaynak, hatalı biçimli ya da challenge yanıtlarını “0 ilan” olarak okuyor ve tarama sessizce “başarılı” oluyordu. Yeni
server/lib/sources/_shape.mjskorumaları (requireArray/requireContainer/requireObject) bu hatayı her kaynak ailesinde görünür kılıyor; sonraki bir sayfada gelen hata, o ana kadar toplanmış sayfaları korur; sayfalama filtrelenmiş sayıya değil ham sayfa uzunluğuna göre durur. - SSRF: alt dize temelli satıcı denetimleri, ayrıştırılmış tam ana bilgisayar sabitlemeleriyle değiştirildi. lever (
clever.comiçindelever.cogeçiyor), greenhouse (5 ana bilgisayar + eskiboards[.eu].greenhouse.ioyol-slug ana bilgisayarları), ashby, smartrecruiters, workable, gem REST, ibm, arbeitsagentur, hecklerkoch (yalnızca www), workingnomads (http://169.254.169.254DNS korumasını aşarak erişilebilir durumdaydı), remoteok, remotive, rss, successfactors. Her yerderedirect:'error'; iş URL’leri sabitlenmiş ana bilgisayar üzerindehttps:olmak zorunda (javascript:/data:/ ana bilgisayar dışı olanlar atılır). - Yanlış yapılandırılmış tek bir portals girdisi artık taramanın tamamını iptal edemiyor.
resolveAdapterbağdaştırıcı fırlatmalarını yakalar,detectApişirket başına sarmalanır, hata fırlatan bağdaştırıcılarnulldöndürür; comeet fetch hataları günlüklere ya da karantina kayıtlarına ulaşmadan önce?token=değerini maskeler. - Sayfalama ve güncellik. workday, 100 ilanı aşan kiracıları geziyor (offset sayfaları,
MAX_PAGES); telegram EN YENİ gönderileri tutuyor ve sessizce en eskileri tutmak yerine?before=ile sayfalıyor; tencentCounteksikken gezmeye devam ediyor; taleo Fransızca başlık tablolarını ayrıştırıyor; avature ham sayfa uzunluğunda duruyor; UTC tarih damgaları (amazon’un UTC’nin doğusundaki bir günlük kayması, torre, workingnomads, trudvsem); HTML varlıkları çözülüyor (geekjob, getmatch, hh); mycareersfuture 12 alanlı tam iş biçimini üretiyor. - Uzak algılama sıkılaştırıldı. arbeitsagentur, vdab, rippling, teamtailor: sözleşme yüzdesi (“Verpleegkundige (100%)”,
bundesweit) ve “distributed” sözcüğü (“Distributed Systems Engineer”) artık ofis tabanlı rolleri Remote olarak etiketlemiyor.
Eklendi
tests/adapters-pin-coverage.test.mjs, ana bilgisayar sabitlemelerinin getirdiği dal kapsamını tamamlıyor.
Notlar
- Testler 4419 → 4812, tarayıcı 118. Kapsam ortalaması 98.15 % satır / 89.36 % dal (kapı alt sınırı 96 / 86).
- Bu sürümde yok: aynı inceleme turunun istemci tarafı bulguları (Phase 3 — görünümler, kütüphaneler, CSS/a11y, i18n);
sources/habr.mjshâlâ kendine ait bir test dosyasından yoksun (ratchet muafiyeti).
[1.241.1] — 2026-10-07
Canlı değerlendirmeler her dilde uçtan uca çalışıyor, iş haritası birden çok konumlu uzun ilanları yerleştiriyor ve bir dağıtım artık çalışan bir taramayı öldürmüyor.
Düzeltildi
- Değerlendirmeler yöntemin tamamını görüyor. Bağlam bütçesi (144 KB), CV ve profil satır içine alındıktan sonra hâlâ
modes/oferta.mddosyasının sonunu kesiyordu; bu yüzden her canlı değerlendirme son bloklarını kaçırıyordu. Bütçe artık 192 KB, istem yumuşak üst sınırı 256 KB ve ikisi dellm-dispatch.mjsiçinde tek yerde tanımlı. - Raporlar seçilen dilde. Dil yönergesi artık istemi hem açıyor hem kapatıyor; sıradan sözcükler (rol, ekip, tasarım…) raporun diliyle yazılıyor; yalnızca adlar, teknolojiler ve kelimesi kelimesine alıntılar İngilizce kalıyor. Çoğunlukla İngilizce olan Hintçe ve Japonca raporları düzeltir.
- Yavaş değerlendirmeler artık HTTP 502 ile bitmiyor. Değerlendirme zaman aşımı 300 sn (önceden sağlayıcı varsayılanı olan 180 sn idi).
- Hintçe blok harfleri. A–G harflerini Devanagari ile yazan bir rapor (
## ए),## बी)…## जी)) tanınır;SCORE:yerel rakamları (३.८,٣٫٨,3.8) ve ondalık virgülü kabul eder. - İş haritası: uzun konumlar. “Berlin Office · Berlin · Germany · Bosnia · …” gibi bir hücre (300+ karakter) HTTP 400 ile reddediliyor ve ilanın işareti olmuyordu. Artık ilk gerçek yer kullanılıyor (
·,;,|,/, satır sonları; “Remote …” parçaları, “(HQ)” ve “Office” atlanır); yalnızca 2000 karakteri aşan sorgu reddedilir. - Dağıtım ve saatlik tarama. Dağıtım, tarama ve otomatik değerlendirme zamanlayıcılarını durdurur, çalışan birinin bitmesini bekler (en fazla 15 dk), yeniden başlatır ve zamanlayıcıları her zaman yeniden devreye alır; geri alma dahil.
Eklendi
- cvstart.org üzerinde iş haritası 17 dilin tamamında, ayrıca İngilizce ve Rusça README’lerde.
- Her dilde harita ekran görüntüleri — dil başına bir tane (
scripts/capture-map-screenshots.mjs), 17 README’nin tamamında, cvstart.org’da ve yeni bir yardım alt bölümünde: “Haritayı kullanma” (§33, ×17).
Notlar
- Testler 4404 → 4419, tarayıcı 118. Uzak QA (tüm rotalar, site, bağlantılar ve 17 dilde canlı LLM) üretimde yeşil.
- Bu sürümde yok: akışlı değerlendirmeler — 300 sn zaman aşımı kesin sınır olarak kalıyor (yavaş bir yerel model yine de ona takılabilir) ve Hermes köprüsü akışsız çağrısını sürdürüyor.
[1.241.0] — 2026-10-07
28 ajanlı bir kod incelemesinden (~190 doğrulanmış bulgu) sertleştirme sürümü: güvenlik, süreç çökmesi ve veri kaybı sınıfları kapatıldı; ayrıca @bullitt186 katkısı olan bir iş haritası.
Eklendi
- İş haritası (
#/map) — pipeline’daki, son taramadaki ve takipçideki ilanlar bir OpenStreetMap haritasında; Nominatim üzerinden coğrafi kodlama, tanımlayıcı bir User-Agent, saniyede 1 istek kuyruğu, geri çekilme ve diskte önbellek ile. Leaflet bu sunucudan sunulur (CDN yok); CSP yalnızcaimg-srciçine kutucuk kaynağını ekler. @bullitt186 katkısı (#381). - İstek koruması — sunucu, sunmadığı bir
Hostdeğerini (DNS rebinding), siteler arası yazmaları ve yan etkili GET’leri (/api/stream/*,/api/run/*,/api/geocode) reddeder. Genel bir adı ileten bir ters proxy bunuALLOWED_HOSTSiçine yazar; dağıtım iş akışı bu systemd drop-in’ini genel URL’den yazar. - Kapsam kapısı —
npm run test:coverage:gate(scripts/coverage-report.mjs) dosya başına satır/dal kapsamını yazdırır ve yükselen bir taban çizginin altında başarısız olur.
Düzeltildi
- Hatalı biçimli bir istek artık sunucuyu durdurmuyor. Express 4 reddedilen asenkron işleyicileri yok sayıyordu; bu yüzden
/api/deep,/api/auto-pipeline,/api/career-plan,/api/trackeriçindeki yanlış türde bir alan ya da/api/statsiçindeki bir NUL baytı süreci sonlandırıyordu; artık JSON 400 dönüyor ve diğer her ret 500’e dönüşüyor. - İptal edilen ya da başarısız olan bir tarama artık son sonuçları silmiyor. Bir tarama durdurulduğunda ya da her kaynak başarısız olduğunda
last-scan.jsonkorunur ve tek şirketlik bir tarama değiştirmek yerine birleştirir. Yanlış yapılandırılmış tek birportals.ymlgirdisi artık taramanın tamamını iptal etmiyor. - Değerlendirmeler yöntemin tamamını görüyor. Mod dosyaları 16 KB’ta kesiliyordu; bu yüzden
oferta.md(92 KB) C–G bloklarını kaybediyordu; dosya başına üst sınırlar artık modlar için 128 KB, CV için 64 KB ve kesinti raporlanıyor. Boş ya da kesik yanıtlar boş bir rapor yazmak yerine başarısız olur. - SSRF: yönlendirme adımları özel hedefler için yeniden denetlenir, her DNS yanıtı denetlenir, tarama zaman aşımı gövdeyi de kapsar,
*_BASE_URLanahtarları yalnızca satıcının ana bilgisayarına gider (Hermes/Ollama: loopback ya da LAN), pandoc--sandboxile çalışır. - Olay döngüsü takılmaları: iki ikinci dereceden regex (HTML ayıklama, markdown temizleme) doğrusal tarayıcılarla değiştirildi.
- Veri kaybı: bir pipeline satırını silmek diğer satırların ücretini koruyordu; bir URL içindeki
$&pipeline.mddosyasını bozuyordu; mülakat provası, networking ve derin araştırma kayıtları önceki dosyaların üzerine yazıyordu; mülakat geçmişi son 40 tur yerine ilk 40 turu tutuyordu. - LLM katmanı: otomatik pipeline ve derin araştırma
LLM_PROVIDERdeğerine ve ortak dağıtım üzerinden her sağlayıcıya uyar, kullanımı kaydeder ve kesintiyi bildirir; Gemini evaluate/test artık rapor kaydetmez; OpenAImax_completion_tokenskullanır ve yalnızca Codex’e ait birOPENAI_MODELgpt-5olarak gönderilir; iş ilanı güvenilmeyen veri olarak çitlenir. - Rapor, derin ve satır içi PDF’ler
--skip-fact-checkgeçirir (CV olgu denetimi sayı içeren her raporu engelliyordu); profilin sayfa biçimi artık geçersiz kılınmıyor. - Tarayıcılar: karantina URL’ye göre anahtarlanır (bir URL’yi düzeltmek yeniden denemeyi sağlar), çalıştırma içi tekilleştirme kanonik URL’ye göre yapılır, boş liste girdileri artık her şeyle eşleşmiyor, yazmalar atomiktir,
skipped_*geçmiş satırları “görüldü” sayılmaz. - Süreç denetimi: SIGKILL’e yükseltme hiç çalışmıyordu; toplu çalıştırmalar bağlantı kesildiğinde tüm süreç gruplarını sonlandırır.
- CI ve sürüm: CI artık changelog-parity, workflow ve i18n kapılarını çalıştırıyor; en az ayrıcalıklı workflow izinleri; üretim sırları yalnızca
productionortamında; npm paketi artıkdocs/help/dizinini içeriyor. - Testler: hiçbir test artık ağa ya da gerçek üst projeye dokunmuyor (açık bir
CAREER_OPS_ROOTher zaman dikkate alınır); kopyalanmış algoritmalar üretim koduyla değiştirildi.
Notlar
- Testler 4056 → 4404, tarayıcı 118. Sunucu kapsam taban çizgisi: satır %96,7, dal %86,3 (
scripts/coverage-baseline.json). - Belirtimler artık tek bir klasörde,
docs/sdd/specs/; program planıdocs/sdd/PLAN.md, değişmez→kapı matrisidocs/sdd/TRACEABILITY.md. - Operatör notu: bir ters proxy arkasında
ALLOWED_HOSTS=<genel ana bilgisayar>ayarlayın; genel bir ana bilgisayardaki Ollama/Hermes taban URL’si artık reddediliyor.
[1.240.0] — 2026-10-06
Üst proje eşleşmesi — career-ops main @ 62905981 (VERSION 1.35.0, b39931e’den bu yana 177 üst proje commit’i). Altı yeni kaynak — 103 → 109 (104 EN + 5 RU) —, mevcut sekiz sağlayıcıya yansıtılan düzeltmeler ve @bullitt186 katkısı olan checklist pipeline biçimi.
Eklendi
- Altı yeni kaynak — 103 → 109 (104 EN + 5 RU), 98 → 104 EN bağdaştırıcı.
- ADP Workforce Now (
cid+ccIdileworkforcenow.adp.com) — gerçekten dönen satır sayısına göre$skipsayfalaması; nejobRequisitionsne demetaiçeren bir yanıt boş pano gibi okunmak yerine hata fırlatır; isteğe bağlı ayrıntı zenginleştirme (adpWorkforcenow.fetchDetails, varsayılan 25, üst sınır 100). - Gupy (
employability-portal.gupy.io) — panoyu kapsayan anahtar kelime taraması, en yeni önce vesince_daysüzerinde erken durma;workplaceTypetekil pt-BR dizesi olarak okunur, böylece hibrit ilanlar kaybolmaz; gizli kariyer sayfaları dışarıda bırakılır. - JazzHR (
*.applytojob.com) — kısmi bir yeniden tasarım yine de ilan verebilsin diye çıplak bağlantı yedekli kart ayrıştırıcı; hiç kart ayrıştırılamayan ilan bağlantıları hata fırlatır, gerçekten boş bir pano[]döndürür. - Startup Jobs (
startup.jobs/feeds/jobs) — RSS, tek istek; hatalı biçimli, HTML ya da kesik bir gövde[]döndürmek yerine hata fırlatır (üst projenin birleştirme sonrası inceleme düzeltmesi,08fe5d06); öğe eşlemesinden önce CDATA ve yorumlar maskelenir. - Taleo (
<tenant>.taleo.net,tre.taleo.netreddedilir) — kabuk GET’i, ardındansearchjobsPOST’u; portal kimliği olmayan bir kabuk özel pano olarak hata fırlatır; sütunlar başlığa göre eşlenir. - UKG Pro / UltiPro (
recruiting[N].ultipro.{com,ca}) —Top=50+Skip,totalCountasla durma koşulu olarak güvenilmez, sayfa üst sınırı 100 (1500’e sabitlenir), isteğe bağlı ayrıntı sayfaları dizeyi tanıyan bir süslü parantez taramasıyla ayrıştırılır.
- ADP Workforce Now (
Düzeltildi
- Üst projenin checklist biçiminde pipeline — üst career-ops
data/pipeline.mddosyasını- [ ] url | …satırlarından oluşan## Pending/## Processedbölümleri olarak yazar; UI bunu 0 bekleyen olarak okuyordu ve yazarken dosyanın sonuna, üst projenin hiç bakmadığı yere bir kod bloğu ekliyordu.parsePipeline,addPipelineUrlveremovePipelineUrlartık bu biçimi okuyor ve yazıyor (işlenmiş satırlara karşı da tekilleştirme; ücret bilgisi etiketli birnote: comp …parçası olarak); kod bloğu içeren biçim değişmedi. @bullitt186 katkısı (#380). - Ülke konuma katıldı — Ashby (birincil
address.postalAddress), Breezy (country.name) ve Recruitee (düzlocation), ad ülkeyi zaten tam sözcük olarak taşımıyorsa ülkeyi ekler; böylece Birleşik Krallık birincil, ABD ikincil bir uzaktan rol artık konum filtresi tarafından dışarıda bırakılmaz. - MokaHR —
hire-r1.mokahr.combölgesel ana bilgisayarı kabul edilir (izin listesi tam olarakapp.mokahr.com+hire-r1.mokahr.com), API POST’u ve ilan bağlantıları panonun kendi ana bilgisayarını kullanır ve bant içisuccess:falseartık boş pano gibi okunmak yerine hata fırlatır. - Avature —
article--jobskartları ayrıştırılır (başlık üstbilgi bağlantısından, konumicon-addressspan’inden). - SAP SuccessFactors —
/go/<Category>/<id>[/<offset>]/biçimli kayıtlı arama URL’si kiracı köküne çözülür; eskiden sıfır kutucukla 200 yanıtı veren…/tile-search-results/adresine gidiyordu. - Deutsche Bahn — db.jobs, işleyemediği bir ilan içeren her sonuç sayfasını boşaltıyor; tarama artık
pubExternalDate_tdtile sıralıyor, sayfa başına 1000 (en fazla 5 sayfa) alıyor, ham isabet bağlantısı sayısında duruyor ve eksik sonuç başlığında ya da ayrıştırılamayan ilan bağlantılarında kısa bir pano döndürmek yerine hata fırlatıyor. - HigherEdJobs — HTTP 200 ile yanıtlanan bir Incapsula doğrulama sayfası sıfır öğe olarak ayrıştırılıp boş pano gibi okunuyordu; artık hata fırlatıyor.
- Bir test, geliştirici makinesinde gerçek üst projeyi okuyordu —
tests/reports-list-cache.test.mjs,CAREER_OPS_ROOTdeğerinicv.md/portals.ymliçermeyen geçici bir dizine ayarlıyordu;paths.mjsbunu yok sayar, bu yüzden yerelde üst projenin raporlarını sayıyordu (3 yerine 6), yanında üst proje olmayan CI ise geçiyordu.
Notlar
- Testler 3782 → 4056. Yeni paketler:
sources-adp-workforcenow,sources-gupy,sources-jazzhr,sources-startup-jobs,sources-taleo,sources-ultipro,sources-location-country-fold,sources-deutschebahn-blanked-page,sources-higheredjobs-challenge-page, ayrıca #380’denparsers-pipeline-checklist. - Üst proje: fork, upstream
main’e getirildi (144 → 0 commit geride) ve dört ADR-0002 sapmasının sağlam kaldığı doğrulandı; üst projenin KirilLOCATIONISH_REgeri alması buraya gelmedi. - v1.239.0’da zaten yayımlandı, tekrarlanmadı: AppliTrack, NEOGOV, Red Rover, SchoolSpring, OCC Mundial, Greenhouse gömülü panoları, Workday
myworkdaysite.com. - Taşınmadı, gerekçeleriyle: güvenilir vekil çıkışı (
CAREER_OPS_TRUST_PROXY_EGRESS,_http.mjs/_ip-guard.mjs/_dns-cache.mjs) — web-ui taramaları kendihttp-json.mjstaşıma katmanı üzerinden yapar;scan-history.tsvsütun kaydı ve dil duyarlı requisition tekilleştirmesi — web-ui 1–12. konumları okur, bunlar kaymadı ve URL’ye göre tekilleştirir; SmartRecruitersrequisitionId/language— web-ui’nin ilan şeklinde tüketicisi yok; GemisoCountry→ ülke adı — üst projenin 249 girişlik alpha-3 tablosunu gerektirir, ertelendi; yalnızca CLI’ye ait değişiklikler (modlar, güncelleyici, doctor, PDF/ATS yükü, takip betikleri, Go panosu, Singapur modu).
[1.239.4] — 2026-09-29
v1.239.3 canlı regresyonundan çıkan yama.
Düzeltildi
- Korece ve Geleneksel Çince değerlendirmeler puan özetinin eksik olduğunu bildiriyordu. Bu raporlar 10–11 bin karaktere ulaşıyor ve özet en sonda geldiği için 8192 çıktı token sınırının ötesine düşüyordu. Değerlendirmeler (ve otomatik hat) artık 16384 tokene izin veriyor; bir sağlayıcı yanıtı yine de keserse ilk uyarı eksik blokları sıralamak yerine bunu söylüyor.
- Canlı denetim kısa bir Almanca yanıtı Almanca değil sayıyordu (3 Almanca durak sözcük, hiç İngilizce yok). Liste biçimli bir yanıtta az olabilir; hiç İngilizce yoksa artık üçü yeterli.
- Testler 3778 → 3782.
Notlar
- Derin araştırma ve mod rotaları 8192 token sınırını koruyor: canlı çalıştırmalarda yanıtları bu sınıra ulaşmıyor.
[1.239.3] — 2026-09-29
v1.239.2 canlı regresyonundan çıkan yama.
Düzeltildi
- v1.239.2 Japonca ve Hintçeyi düzelttikten sonra da Arapça değerlendirmeler A–G denetiminden geçemiyordu. Maskelenmiş bir başlık iskeleti (günlükte rapor metni yok) nedenini gösterdi: Arapça rapor, istem ne derse desin blok harfini ebced sırasıyla Arapça yazıyor. Denetim artık أ ب ج د هـ و ز harflerini, bir başlığın başında tek başına durduklarında A–G olarak kabul ediyor; Kiril benzerlerini zaten kabul ettiği gibi. Arapça bir sözcüğün içindeki aynı harfler sayılmıyor.
- Canlı denetim, A–G denetimi başarısız olduğunda bu maskelenmiş iskeleti yazdırıyor; böylece sonraki durum günlükten teşhis edilebiliyor.
- Testler 3776 → 3778.
Notlar
- v1.239.2 notu denetimin gevşetilmeyeceğini söylüyordu; Arapça için artık gevşetildi, çünkü üç canlı çalıştırma yalnızca istemin Latin harfini tutamadığını gösterdi.
[1.239.2] — 2026-09-29
v1.239.1 canlı regresyonundan çıkan yama.
Düzeltildi
- Arapça bir değerlendirme blok harflerini çevirdi, Japonca bir değerlendirme puan özetini atladı. v1.239.1 istemin son satırında yalnızca dili yineliyordu. Bu satır artık her başlıktaki Latin A–G harfinin ve
---SCORE_SUMMARY---bloğunun (işaretler ve anahtarlar İngilizce) çevrilmemesi gerektiğini de söylüyor ve dilin kendi yazısını istiyor. - Testler 3775 → 3776.
Notlar
- Rapor denetimi çevrilmiş harfleri veya işaretleri kabul edecek şekilde gevşetilmedi: biçimi istem kararlı tutuyor.
[1.239.1] — 2026-09-29
v1.239.0 canlı regresyonundan çıkan yama.
Düzeltildi
- Japonca ve Ukraynaca değerlendirmeler neredeyse tamamen İngilizce geliyordu. Dil talimatı istemin başındaydı; ardından onlarca kilobaytlık İngilizce proje dosyası ve iş ilanı geliyordu. İstem artık dili son satırında yeniden belirtiyor.
- Sunucu zaten bir tarama yürütürken canlı denetim taramayı başarısız sayıyordu (dağıtımdan hemen sonra yeniden denenen saatlik tarama). Sunucunun ikinci taramayı reddetmesi doğru davranıştır; denetim artık 30 dakikaya kadar bekleyip yeniden deniyor.
- Testler 3774 → 3775.
Notlar
- Sunucunun tek tarama sınırı gevşetilmedi: ikinci tarama hâlâ
SCAN_BUSYile reddediliyor. Yalnızca denetim değişti.
[1.239.0] — 2026-09-29
career-ops @ b39931e ile eşitlik: beş yeni kaynak ve taşınan üç düzeltme.
Eklendi
- Beş yeni kaynak (98 → 103; İngilizce bağdaştırıcılar 93 → 98): okul ve kamu sektörü alımları için AppliTrack (
applitrack.com/<bölge>), NEOGOV (SchoolJobs / GovernmentJobs), Red Rover (jobs.redroverk12.com/org/<id>) ve SchoolSpring (<bölge>.schoolspring.com), ayrıca Meksika’nın en büyük iş ilanı sitesi OCC Mundial (arama sorgularıyla açıkprovider: occ). Her biri kendi ana makinesine sabitlenmiştir, yalnızca HTTPS kullanır ve yönlendirmeleri reddeder. - Testler 3500 → 3774.
Düzeltildi
- Gömülü Greenhouse panoları (
job-boards.greenhouse.io/embed/job_board?for=<pano>) “embed” adlı bir panoya gidip başarısız oluyordu; pano artık?for=değerinden alınıyor, yalnızca gerçek bir Greenhouse ana makinesinde. myworkdaysite.comüzerindeki Workday panoları (/recruiting/<tenant>/<site>) tanınmıyordu; artık taranıyor ve ilan bağlantıları aynı ana makineye gidiyor.- Parantez içeren bir rapor dosya adı (
042-acme-(berlin)-….md) izleyicide ilk)karakterinde kesiliyordu; artık adın tamamı korunuyor.
Notlar
- Üst projenin yalnızca CLI’ye ait değişiklikleri taşınmadı — PDF ve CV şablonları, scaffolder, toplu çalıştırıcı, career-profile içe aktarma, ATS anahtar kelime kapsamı, mülakat modu çevirileri,
piCLI ana makinesi: web-ui bunları çalıştırmaz. - Böyle bir raporu izleyiciden açmak için rapor rotasının dosya adındaki parantezleri kabul etmesi gerekiyor; bu rota bu sürümde değiştirilmedi.
[1.238.3] — 2026-09-27
Tarama sırasında sayfalar yanıt vermeye devam ediyor ve uzak QA günlükleri artık üretim sunucusunun adresini sızdırmıyor.
Düzeltildi
- Pano ve raporların yüklenmesi saniyeler sürüyor, tarama sırasında zaman aşımına uğruyordu.
/api/reportsve/api/dashboardher istekte tüm raporları okuyup ayrıştırıyordu — üretim sunucusunda yaklaşık 3,7 sn, bu sırada diğer tüm istekler bekliyordu; tarama sürerken sayfa yüklemeleri 30 saniyelik zaman aşımına takılıyordu. Ayrıştırılmış rapor başlıkları artık dosya başına önbelleğe alınıyor ve dosya değişince yenileniyor; böylece listeleme rapor başına tek bir dosya denetimine mal oluyor (500 rapor: yerelde 430 ms → 3 ms). - Bir uzak QA bulgusu, üretim sunucusu adının bir kısmını herkese açık bir günlüğe yazabiliyordu. GitHub bir sırrı yalnızca tam hâliyle göründüğünde maskeler; 180 karaktere kesilen bir hata mesajı adın ortasında bitiyordu. Bulgular ve raporların tamamı artık kesilmeden önce maskeleniyor.
- Her yapay zekâ değerlendirmesi hatalı biçimli olarak işaretleniyordu. İstem, rapor denetiminin gerektirdiği
---SCORE_SUMMARY---bloğunu hiç istemiyordu (üst projenin değerlendirme betikleri istiyor) ve çevrilmiş bir rapor “Block” kelimesini de çeviriyordu; bu yüzden denetim bölümleri bulamıyordu. İstem artık özeti ve her başlıkta blok harfini istiyor, denetim harften önceki çevrilmiş kelimeyi kabul ediyor ve özet bloğu, rapor sayfada gösterilmeden ya da kaydedilmeden önce kaldırılıyor.
Eklendi
- Testler 3488 → 3500.
Notlar
- Tarayıcı hâlâ sunucu sürecinin içinde çalışıyor; bu sürüm diğer büyük darboğazı kaldırıyor ama taramayı bir worker’a taşımıyor.
[1.238.2] — 2026-09-27
Üretim sunucusunun saatlik tarama sırasında hâlâ verdiği 502’lerin düzeltmesi.
Düzeltildi
- Tarama sırasında sayfalar ve dosyalar 502 dönüyordu. Node boşta kalan keep-alive bağlantısını 5 sn sonra kapatır; Caddy boşta kalan bağlantıları 2 dakikaya kadar yeniden kullanır. Süreç içi tarama sunucuyu meşgul ederken Node, Caddy’nin az önce istek gönderdiği soketleri kapattı ve Caddy 502 connection reset by peer döndü (bir taramada 62 kez; sunucunun kendisi sağlıklıydı). Sunucu artık boşta kalan bağlantıları 125 sn — vekilden uzun — tutuyor, böylece her zaman önce vekil kapatıyor.
Eklendi
deploy.yml→verify, vekilin neden 502 döndüğünü (hata türleri, adresler maskeli), son yeniden başlatmadan beri dakika başına 502 sayısını ve saatlik taramanın sonucunu gösterir.release.ymlelle başlatıldığında eksik etiketi oluşturabilir; böylece etiket gönderilemeyen yerlerde de sürüm çıkarılabilir.- Testler 3486 → 3488.
Notlar
- Tarama hâlâ sunucu sürecinin içinde çalışıyor ve sunucuyu saniyelerce meşgul edebilir; onu bir worker’a taşımak bu yamanın parçası değil.
[1.238.1] — 2026-09-27
Üretim sunucusunun ilk canlı regresyonundan sonra kararlılık yaması: aynı anda tek tarama ve site düzeltmeleri.
Düzeltildi
- Aynı anda iki tarama sunucuyu çökertiyordu. Her
GET /api/stream/scan, tam tarayıcıyı hiçbir koruma olmadan sunucu sürecinin içinde çalıştırıyordu; arayüzden başlatılan bir tarama saatlik zamanlayıcıyla çakıştı ve süreç JavaScript heap out of memory hatasıyla öldü (iki kez, arada 502 hataları). Artık aynı anda tek tarama çalışıyor: ikinci istekSCAN_BUSYkodlu bir SSEerroralıyor ve hiçbir şey başlamıyor. Dağıtım iş akışı ayrıca sunucunun bellek sınırını yükseltiyor (heap_mb, varsayılan 448 MB). - cvstart.org’da
/helpve/changelogtelefonda yana kayıyordu (ja/zh/changelogmasaüstünde de): uzun kod ve içindekiler artık satır kırıyor. - Hintçe, site haritasının dil alternatiflerinde yoktu; sitenin i18n denetimi artık site haritasını dil kaydıyla karşılaştırıyor.
- Yardım §19, anahtarın “8 dil dosyasının tümüne” eklenmesini söylüyordu — 17 dosya var.
Eklendi
- Uzaktan regresyon (
.github/workflows/remote-qa.yml): dağıtılmış uygulamanın her rotası × her dili (salt okunur), cvstart.org’un her sayfası × dili × telefon/masaüstü, README’lerdeki ve wiki’deki her bağlantı ve istenirse her dilde gerçek bir tarama ile canlı yapay zekâ çağrıları. - Sunucu dağıtım iş akışı (
.github/workflows/deploy.yml):recon,deploy(bayt düzeyinde geri alma ile) veverify(duman testi ve kararlılık raporu). - Testler 3481 → 3486.
Notlar
- Tarayıcının kendi bellek kullanımı bu sürümde azaltılmadı: koruma aynı anda iki taramayı engelliyor, drop-in ise tavanı yükseltiyor. 98 kaynaklı gerçek bir taramanın profili ancak üretim ağında çıkarılabilir.
- Saatlik
career-ops-scanzamanlayıcısı değiştirilmedi;reconartık hangi komutları çalıştırdığını gösteriyor.
[1.238.0] — 2026-09-27
Üst proje eşleşmesi — career-ops main @ 993085ce (VERSION 1.34.0, de2224a9’dan bu yana 182 commit). Dört yeni kaynak, on yansıtılmış sağlayıcı düzeltmesi, tarayıcı genelinde kapatılan bir SSRF açığı ve tarama sonuçlarında ücretsiz bir başlık-uygunluk ipucu.
Eklendi
- Dört yeni kaynak — 94 → 98 (93 EN + 5 RU), 89 → 93 EN bağdaştırıcı.
- Eploy (
provider: eploy) — herhangi bir markalı ana bilgisayarda kiracının/live-jobs.xmlsite haritasını okur (yalnızca HTTPS; IP değişmezleri,localhost,*.local,*.internalve tek etiketli ana bilgisayarlar reddedilir). Site haritası olmayan bir yanıt (bir giriş sayfası) sıfır iş ilanı olarak geçmek yerine hata fırlatır. Ayrıntı sayfaları isteğe bağlıdır (eploy: { fetchDetails, detailLimit }). - HiringRoom (
*.hiringroom.com) — önce JSON-LD/portal/jobs, yedek olarak eski/jobskartları; yüktekihttp://ilan URL’leri HTTPS’e yeniden kurulur. - PeopleSoft Candidate Gateway — herhangi bir markalı ana bilgisayarda
/psc/{site}/EMPLOYEE/HRMS/c/HRS_HRAM_FL.HRS_CG_SEARCH_FL.GBLyoluyla tespit edilir. PeopleSoft’un aynı kökenli oturum yönlendirmelerini kendisi takip eder (en fazla 10 sıçrama, her sıçrama kiracı köküne yeniden sabitlenir ve özel adreslere karşı kontrol edilir), “daha fazla yükle” formunu yeniden oynatır ve bunu tam olarak bildirmek yerine kısmi bir taramayı (peoplesoftIncomplete) işaretler. - PrevueAPS (
*.prevueaps.ca) — site kimliğini iş ilanları sayfasından çözer, ardından JSON API’sini okur.
- Eploy (
#/scansatırlarında başlık-uygunluk ipucu. Her sonuç, ilan başlığınıconfig/profile.ymliçindeki hedef rollerle (target_roles.primary+ arketip adları) karşılaştıran kaba bir strong / related / weak fit rozeti taşır. Bu ücretsiz bir anahtar kelime tahminidir: asla filtrelemez, yeniden sıralamaz veya sayıları değiştirmez, ve araç ipucu bunu belirtir. Sonuçlar sunulduğunda hesaplanır, böylece bir profil düzenlemesi bir sonraki yenilemede görünür. ×17 çevrildi. Üst projenin #3261 numaralı değişikliğini yansıtır.
Düzeltildi
- Güvenlik — DNS-rebinding koruması gerçek bir taramada hiç çalışmadı.
http-json.mjs, yalnızca çıplak globalfetchkendisine verildiğinde çözülen adresleri kontrol ediyordu, ama her iki tarayıcı damakeTimeoutFetch()enjekte ediyor, bu yüzden her tarama bunu atlıyordu.10.xveya127.0.0.1’e çözülen bir ana bilgisayar adına işaret eden bir kaynak getiriliyordu. Koruma artıkmakeTimeoutFetch’in kendi içinde çalışıyor ve tarama zaman aşımına karşı yarıştırılıyor, böylece takılı kalan bir çözümleyici bir taramayı asamaz. Bu sürümün incelemesinde bulundu. - Güvenlik — bir IPv4 adresini gömen IPv6 adresleri özel olarak işlenmiyordu.
http://[::ffff:127.0.0.1]/(URL ayrıştırıcının[::ffff:7f00:1]olarak yeniden yazdığı)isValidJobUrl’den geçiyordu.::ffff:a.b.c.d/::a.b.c.d’nin hem noktalı hem de onaltılık biçimleri artık gömülü adrese göre sınıflandırılıyor. Üst projenin_ip-guard.mjsdosyası. - Rippling v2 board API’sine taşındı (
ats.rippling.com/api/v2/board/<slug>/jobs), sayfalama (varsayılan 10 sayfa, en fazla 50), iş bağlantılarında bir ana bilgisayar kilidi ve slug doğrulaması ile birlikte. Yapıştırılan bir API URL’si artıkapiyerine gerçek slug’ını veriyor. - Recruitee — çok konumlu teklifler artık her yeri listeler (
A · B),(Sample)demo ilanları ve başlıksız satırlar düşürülür, ve iki URL’sinden biri geçerliyse bir teklif korunur. - Pinpoint — ekilmiş demo ilanları (ikiye katlanmış demo videosu) düşürülür.
- Telegram kanalları — birden çok
|içeren bir ilk satır artıkTitle | Companyolarak okunmuyor, ve daha fazla rol sözcüğü tanınıyor. Fork’un Kiril-farkındaLOCATIONISH_REdeseni dokunulmadan kalıyor (ADR-0002). - Workday — ilk sayfa 422/401/403 bir kez sorgulanır; Workday’in bakım sayfası veya kesinti yönlendirmesi panoyu ölü olarak işaretler (katı modda karantinaya alınır). CXS ve ayrıntı istekleri artık yönlendirmeleri reddediyor.
- BambooHR — yönlendirilmiş bir
/careers/list, herkese açık gömme beslemesi üzerinden değerlendirilir: boşsa açık pozisyonu olmayan canlı bir pano demektir, başka bir şeyse ölü bir panodur. - Heckler & Koch / Rheinmetall — çıplak bir
heckler-koch.com/rheinmetall.com, yönlendirmesiz taşıma katmanının yine de ulaşabilmesi içinwww.olarak yeniden yazılır. Ashby yönlendirmeleri reddeder. beesite, iptal edilebilirdelay()ile sayfaları hızlandırır. - Başlık filtreleri her iki tarafta da aksanları katlar (EN ve RU tarayıcıları), böylece
Développeur, birdeveloppeurolumsuzuyla yakalanır. - Cooldown şirket eşleştirmesi Latin olmayan adları ve şirket biçimlerini anlıyor (CJK/Korece işaretleri, Türkçe noktalı İ). CJK adları eskiden boş bir anahtara düşüyor ve hiç eşleşmiyordu.
location_filter.strict: true, bir izin veya engelleme listesi ayarlandığında boş bir konumda kapalı şekilde başarısız olur.- Liveness — Greenhouse gömmeleri (
gh_jid), Arbeitsagentur ve We Work Remotely için yeni genel API kontrolleri; SmartRecruiters artık ilanınactivebayrağına göre karar veriyor. - PeopleSoft — göreli bir “daha fazla yükle” form eylemi, kök dizinde değil arama sayfasının yanında çözülür.
Notlar
- Testler 3210 → 3481. Yeni test paketleri:
sources-eploy,sources-hiringroom,sources-peoplesoft,sources-prevueaps,title-fit,fetch-timeout-dns-guard,cooldown-company-match-unicode,liveness-api-more-rungs,ru-scanner-title-accent-fold. - Taşınmadı, gerekçeleriyle: location-filter Unicode kelime sınırları (web-ui’nin filtresi alt dize tabanlı, bu yüzden düzeltilecek bir sınır yok — üst projenin location filter’ının bilinçli tam bir portu gelecekteki bir iştir); aynı başlıklı requisition tekilleştirmesi (web-ui yalnızca URL’ye göre tekilleştiriyor); toplayıcı yeniden gönderim uyarıları, kara liste alan adı kapsamı, doğrulanmamış-sıfır makbuzlar ve
scan-runs.tsvgeçişi (web-ui’de bu yüzeylerin hiçbiri yok); Workday facet-split ve kırpma etiketleri (web-ui her pano için bir sayfa getiriyor); BambooHRenrichDate(tarih zenginleştirme kancası yok); üst projenin ~20 sağlayıcı genelindeki_http.mjssleep yeniden düzenlemesi (web-ui zaten paylaşılan iptal edilebilir birdelaykullanıyor); updater, doctor, PDF, tracker/merge-tracker,validate-profile,discover-new-companies,web/Next.js uygulaması, GitHub botları — yalnızca CLI’ya özgü veya aktarılmış. - Üst projeden bilinçli olarak farklı tutulan: Heckler & Koch / Rheinmetall yalnızca HTTPS kalıyor (
http→httpsyükseltmesi yok); normal bir taramada ölü bir Workday panosu, taramayı başarısız kılmak yerine hâlâ[]döndürüyor.
[1.237.1] — 2026-09-22
v1.237.0 üzerinde harici bir QA geçişinden yama. Jobstreet düzeltmesi ilk kez dışarıdan doğrulandı: AU, NZ, HK ve MY ana bilgisayarlarında eski /id/job/<id> biçimi temiz bir 404 döndürüyor ve yeni /job/<id> gerçek, Cloudflare korumalı bir rotaya ulaşıyor; id.jobstreet.com üzerinde ise tersi geçerli. Kaybolan bağlantılar gerçekti. v1.237.0’ın kendisinin eklediği şeyde iki kusur bulundu.
Düzeltildi
- Kitap bağlantısının etiketi yerelleştirilmişti, ama hedefi değil. 17 SPA yerel ayarının ve 17 cvstart.org yerel ayarının tamamı, Agentic Coding Design Patterns footer bağlantısını İngilizce baskıya yönlendiriyordu; oysa çevrilmiş tek etiket — Rusça, «Паттерны агентного кодинга» — bir Rusça kitap vadediyordu. Yeni bir
data-i18n-hrefuygulayıcısı (data-i18n-titleile aynı biçimde, mutlakhttps://değerleriyle sınırlı) ve birfooter.patternsUrlanahtarı,ru’yu Rusça baskıya, diğer her yerel ayarı İngilizce baskıya gönderiyor. Regresyon testi bu değişmezi iki yönde de doğruluyor: çevrilmiş bir başlık, yerelleştirilmiş bir URL’yi ima eder. - SEEK ana bilgisayarlarını taşıyor, ve taşıma katmanı yönlendirmeleri reddediyor.
www.seek.com.au→au.seek.comvewww.seek.co.nz→nz.seek.com: detay sayfaları zaten 301 veriyor, ve her iki ana bilgisayar çifti de bugün v5 arama API’sini 200 ile sunuyor.http-json.mjs,redirect:'error'ayarladığından (korunmaya değer bir SSRF savunması), API yolunun yönlendirmeye başladığı gün eski ana bilgisayardaki bir AU/NZ girdisi başarısız olurdu — ve yalnızcawww.ana bilgisayarları izin listesindeyken kimse taşınamazdı.au.seek.comvenz.seek.comartıkALLOWED_JOBSTREET_HOSTSiçinde; eski ana bilgisayarlar kalıyor, bu yüzden mevcut yapılandırma ve zaten oluşturulmuş bağlantılar çalışmaya devam ediyor. Taklitler (au.seek.com.evil.com,au-seek.com) hâlâ reddediliyor. - Wiki: Home belgeleme haritasındaki Agentic Practices satırı, on iki satırdan
[[…|…]]içindeki|’yi kaçırmayan tek satırdı, bu yüzden GitHub hücreyi kesti — ölü bağlantı, açıklama gizlendi. Tek bir karakter.
Notlar
- Sayılar 94 kaynakta (89 EN + 5 RU), 89 bağdaştırıcıda değişmedi. Testler 3201 → 3210 (+5 footer bağlantısı yerel ayarı, +4 SEEK ana bilgisayarı).
- Dışarıdan kapatılamayan, iddia edilmek yerine kayda geçirilen: Oracle Cloud (Akamai her iki REST sondasını da engelledi), Personio sabitlemesi ve
appendWorkType(birportals.ymlgirdisi gerekiyor, ve arayüzde birini silme seçeneği yok), ve liveness dize durumları (kontrol edilebilir bir sayfa yok; 40 canlı sonda 12 canlı, 28 belirsiz, 0 yanlış süre dolumu verdi). - Yardım ×17 artık
AU-MainveNZ-Mainiçin her iki ana bilgisayar biçimini de listeliyor. Başlık yapısı 32 H2 / 122 H3’te değişmedi.
[1.237.0] — 2026-09-21
Üst proje eşdeğerliği — career-ops main @ 93c4302b (VERSION 1.33.0, career-ops-hq/main’den çekilen 75 commit). Bu sefer yeni kaynak yok: dört yansıtılmış düzeltme, bunlardan ikisi burada ilanları sessizce kaybediyordu.
Düzeltildi
Jobstreet / SEEK — her Avustralya, Yeni Zelanda, Singapur, Malezya ve Hong Kong ilanı ölü bir sayfaya bağlanıyordu. parseJobstreetItem, detay URL’sini koşulsuz olarak ${baseUrl}/id/job/${id} biçiminde kuruyordu. /id/ bölümü bir yol değildir — bu bir Endonezya yerel önekidir ve yalnızca Endonezya ana bilgisayarlarında bulunur. Diğer her SEEK platformu ana bilgisayarı /id/job/<id> üzerinde 404 yanıtı verir. web-ui www.seek.com.au, www.seek.co.nz, sg.jobstreet.com, my.jobstreet.com ve hk.jobsdb.com’u zaten ALLOWED_JOBSTREET_HOSTS’a eklemişti, bu yüzden tarama bu ilanları seve seve döndürüyordu — her biri bir 404’e işaret ederek. Yol artık ana bilgisayara göre anahtarlanıyor: ID_LOCALE_HOSTS (id.jobstreet.com, www.jobstreet.co.id, jobstreet.co.id) /id/job/’u korur, geri kalan her şey /job/ alır ve ayrıştırılamayan bir orijin, fırlatmak yerine ortak yola düşer. Kendi testlerimizden ikisi hatayı kodlamıştı — hk.jobsdb.com/id/job/… ve www.jobstreet.com/id/job/… şeklinde doğrulama yapıyorlardı — ve düzeltildiler.
Oracle Cloud — liste ortasındaki kısa bir sayfa gezintiyi bitiriyor ve panonun kuyruğunu düşürüyordu. Durdurma koşulu listLen === 0 || listLen < PAGE_SIZE idi, ama ORC bazı satırlar sunucu tarafında filtrelendiği için sınırdan daha az satırı listenin ortasında sunar. Üst projede American Express üzerinde ölçüldü: TotalJobsCount 454, sayfalar 200 / 199 / 54 — 199 son olarak okundu ve son 54 ilan, panonun %12’si, hiç alınmadı. Artık boş bir sayfa gezintiyi her zaman bitirir; kiracı bir toplam bildirdiğinde, sayfalama offset + PAGE_SIZE >= total olana kadar devam eder; yalnızca karşılaştıracak toplamı olmayan bir kiracı kısa bir sayfada biter. Bu, bir API’nin “koleksiyonun sonunda olmasa bile … istenen sayıdan daha az sonuç döndürebileceği” (Google AIP-158) daha geniş kuralına uyar. hasMore kasıtlı olarak yok sayılmaya devam ediyor — bazı kiracılar 7000 işlik bir panonun her sayfasında hasMore:false döndürüyor. Kısa sayfalar artık gezintiyi bitirmediğinden, MAX_PAGES artık bir kiracının sahte bir toplam bildirmesine karşı tek yedek, bu yüzden kendi testiyle kapsanıyor.
Liveness — “This role is closed” tanınmıyordu ve yanlış bir süre dolumu kalıcıdır. Kalıp /this job (listing )?is closed/i idi; bu, eşit derecede yaygın olan role ve position ifadelerini kaçırıyordu — üst projede bir panoda 111 belirsiz ilandan 111’i “role” kullanıyordu. /this (?:job|role|position)(?: listing)? is closed\b(?!-)/i olarak genişletildi. Sondaki \b(?!-), bileşik sıfat koruyucusudur: \b tek başına closedown’ı reddeder ama yine de “This role is closed-loop control of the platform” gibi gerçek bir düzyazıyla eşleşir — bunu durduran şey ileriye bakan (lookahead) kısımdır.
Liveness — job expired artık görünür bir Apply düğmesini geçemeyen yumuşak bir katmanda yer alıyor. HARD_EXPIRED_PATTERNS, apply denetimi testinden önce denetleniyor, bu yüzden oraya yerleştirilen her şey canlı bir ilana karşı kazanıyor. /\bjob expired\b/i, dört gerçek canlı sayfa biçiminde yanlış tetikleniyor — bir “Similar jobs” karuselindeki bir girdi, bir “Hide job expired” filtre etiketi, bir alt bilgi SSS’si ve yukarıdaki closed-loop düzyazısı — çünkü sınıflandırıcı sayfanın tüm metnini alıyor. Artık SOFT_EXPIRED_PATTERNS içinde yaşıyor, apply denetiminden sonra ve liste-sayfası sezgiselinden önce denetleniyor ve expired_body_soft döndürüyor; apply denetimi olmayan çıplak bir “JOB EXPIRED” afişi hâlâ süresi dolmuş sayılıyor. Bu yön önemlidir çünkü yanlış bir expired, tarama geçmişine skipped_expired olarak yazılır ve ardından scan_history.recheck_after_days ayarlanmadıkça gerçek bir işi sonraki her taramadan süresiz biçimde dedup-filtreler.
Eklendi
Personio — açık bir personio: <slug> kiracıyı sabitler. Birçok şirket Personio panosunu markalı bir kariyer sayfasında iframe olarak gömer, bu yüzden careers_url şirketin kendi alan adını gösterirken akış <slug>.jobs.personio.de adresinde yaşar; bir sabitleme olmadan bu panolar hiçbir şeye çözümlenmez. Slug, çıpalı bir izin listesiyle (/^[a-z0-9][a-z0-9-]{0,62}$/i) karakter kümesi bakımından sınırlandırılır ve ortaya çıkan URL yine de mevcut new URL() ayrıştırması, HTTPS denetimi ve PERSONIO_HOST_RE ana bilgisayar kapısından geçirilir — sabitleme hiçbir zaman başka bir ana bilgisayara ulaşmanın bir yolu değildir. ., /, @, :, .., boşluk, başta bir - taşıyan veya 63 karakterlik DNS etiket sınırını aşan bir slug, bugünkü api/careers_url davranışına düşer. Üst projeden farklı olarak web-ui’nin ana bilgisayar regex’i büyük/küçük harfe duyarlıdır, bu yüzden sabitleme new URL() üzerinden normalize edilir — AcmeGroup, kendi izin listesinin ardından reddedeceği bir ana bilgisayar kurmak yerine acmegroup.jobs.personio.de’ye çözümlenir.
Jobstreet — isteğe bağlı appendWorkType başlığın sonuna ilanın çalışma türlerini ekler, örn. Strategy Consultant [Part time], böylece başlık filtreleri ve triyaj tarama anında istihdam türünü görebilir. Varsayılan olarak kapalıdır; eksik veya boş bir workTypes hiçbir şey yapmaz.
Notlar
Kaynak ve bağdaştırıcı sayıları değişmedi: 94 kaynak (89 EN + 5 RU), 89 EN bağdaştırıcı. Bu sürüm yalnızca test sayısını taşıyor, 3164 → 3201 (+13 jobstreet, +7 Oracle Cloud, +9 liveness, +8 Personio).
Üst proje providers/telegram.mjs’i sildi, telegram-channel’da birleşti. web-ui ikisini de kullanıcıya görünen kaynaklar olarak kaydediyor, bu yüzden silme işlemi takip edilmiyor: bu, kayıt defterini 94’ten 93’e düşürür ve telegram yapılandırmış herkesi sessizce bozar. Yalnızca kasıtlı, duyurulmuş bir kaldırma olarak yeniden ele alınmalı.
jd-skill-gap.mjs, kısaltılmamış bir “what we are looking for” başlık biçimi ve bir kalın işaretleyici (bold-marker) ayıklaması kazandı. web-ui bu betiği yansıtmak yerine aktarıyor (relay), bu yüzden düzeltme dağıtılan üst projeyle birlikte gelir ve burada hiçbir değişiklik gerektirmez.
Taşınmayanlar, gerekçesiyle birlikte: lib/latex-escape.mjs, browser-extract.mjs, openai-eval.mjs, update-system.mjs ve scaffolder (web-ui bunları ne yansıtıyor ne de shell ile bağlanıyor); Go dashboard TUI ve web/ yapılandırma formu (ayrı yüzeyler); doctor.mjs ve analyze-patterns.mjs (fail-soft’u değişikliği emen salt okunur aktarımlar).
Fork’un providers/telegram-channel.mjs içindeki Kiril \p{L} ayrışması üst proje birleştirmesinden bozulmadan çıktı ve birleştirme öncesi bir kopyaya karşı bayt bayt doğrulandı.
career-ops-ui v1.267.1 · page 2/10 · mirror of the project changelog for cvstart.org