Değişiklik günlüğü

GitHub

Her ö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.207.2] — 2026-08-16

Düzeltildi — yapay zekâ planları ve kariyer yönlendirme profilleri artık ham kod dökümü olarak görünmüyor.

Düzeltildi

  • Bazı modeller tüm yanıtı bir markdown … kod çitine sarar. Bu olduğunda gelişim planı ve yönlendirme profili, başlıklı ve listeli bir belge yerine tek aralıklı kod bloğu olarak görünüyordu. Saran çit artık kaldırılıyor — yalnızca tüm yanıtı sardığında ve dil açıkça markdown/md olduğunda, böylece gerçek bir python/js/dilsiz ``` kod yanıtı olduğu gibi kalır.

Notlar

  • Ortak LLM temizleme adımında (cleanLlmMarkdown) tek seferde ele alındı, böylece tüm yapay zekâ rotaları yararlanır ve sarılmış yanıtın içindeki kod blokları korunur. tests/llm-output.test.mjs (+3). Takım: 2621.

[1.207.1] — 2026-08-16

Düzeltildi — açılış sayfası küçük telefonlarda artık yana taşmıyor.

Düzeltildi

  • Dar bir telefonda hero bölümü — başlık, giriş satırı ve kurulum terminali — sağ kenardan kırpılabiliyordu; çünkü uzun bir kurulum komutu ve düzen sütunları ekrana göre küçülmüyordu. Artık her genişliğe sığıyorlar; kurulum komutu kendi terminal kutusunun içinde kayıyor.

Notlar

  • Ayrıca, bir kaynağın geçici 404’ü yüzünden başarısız olabilen kararsız bir E2E duman testi sağlamlaştırıldı: artık komşu testler gibi zararsız ağ gürültüsünü (favicon / bağlantı / başarısız kaynak) yok sayıyor, gerçek betik hatalarını yakalamayı sürdürüyor. Uygulama davranışı değişmedi. Takım: 2618.

[1.207.0] — 2026-08-15

Eklendi — bir başvurunun sonucunu doğrudan takip tablosundan kaydedin.

Eklendi

  • Her takip satırına bir Sonuç işlemi geldi: ne olduğunu seçin (reddedildi, teklif alındı, işe alındı, teklif reddedildi, yanıt yok, mülakata geçti), isteğe bağlı bir not ekleyin, ortaya çıkan durumu önizleyin ve kaydedin. Kaydetmek gönderilen CV ve ön yazı dosyalarını arşivler ve takip tablosunu kanonik duruma senkronlar — elle düzenleme yerine tek, belirlenimci bir işlem.

Notlar

  • Yeni POST /api/outcome, sonuç CLI’sini aktarır: dryRun:true salt-okunur bir önizlemedir (satırı eşler, ortaya çıkan durumu bildirir, hiçbir şey yazmaz); gerçek çağrı kaydeder. Yazma güvenliği: sonuç türü bilinen kümeyle sınırlanır ve her metin alanı çağrıdan önce kontrol karakteri içerirse reddedilir (dizi argümanları, spawn — kabuk yok). tests/outcome-route.test.mjs. Takım: 2618.

[1.206.0] — 2026-08-15

Belgeler — uygulama içi yardım kılavuzu artık en yeni beş özelliği 17 dilin tamamında kapsıyor.

Eklendi

  • Yerleşik yardım kılavuzu — ve ona dayanarak yanıt veren «Yardıma sor» asistanı — artık yakın zamanda eklenen beş özelliği belgeliyor: Kurulum doktoru (Ayarlar — CV ve profilinizi eksikler ve kalan örnek veriler için denetler), ATS panolarını keşfet (Portallar — bir şirketin kariyer panosunu otomatik bulur), «hâlâ açık mı?» denetimi (Takip — ilanın hâlâ açık olup olmadığı), «önceki CV’yi yeniden kullan?» ipucu (CV Stüdyo — daha önce uyarlanmış bir CV yeni ilana uyduğunda bildirir) ve Beceri günlüğü (Analitik — öz değerlendirme puanlarını kaydet). Beş yeni alt bölüm, 17 dilin tamamına çevrildi.

Notlar

  • Kılavuz yapısı 31 H2 / 118 H3’e büyür, her dilde parite güvence altında. Başvuru belgeleri güncellendi: docs/architecture/API.md bu özelliklerin beş rotasını belgeliyor ve CLAUDE.md ile docs/sdd/CONVENTIONS.md içindeki rota/sürüm sayaçları güncel (36 rota modülü). Takım: 2610.

[1.205.0] — 2026-08-15

Eklendi — sınav/değerlendirme sonuçlarını kaydeden bir Beceri günlüğü.

Eklendi

  • Yeni bir Beceri günlüğü (Analitik → Beceri günlüğü) bir öz değerlendirmeyi kaydetmenizi sağlar — şirket, platform, beceri, puan % ve isteğe bağlı bir not — data/assessments.tsv’ye eklenir; geçmiş kayıtlar (en yeni önce) listelenir. Sıfır token, belirlenimci; dosya biçimini üst projenin CLI’si yönetir.

Notlar

  • Yeni GET /api/assessments (assessment-log.mjs’nin varsayılan JSON listesini aktarır; yumuşak başarısızlık {available:false}) + POST /api/assessments (açık yazma: alanlar assessment-log.mjs add’e dizi argümanları olarak geçirilir). Yazma güvenliği: kontrol karakteri içeren her metin alanı reddedilir (TAB bir sütunu bozar, yeni satır bir satır enjekte eder) → yazmadan önce 400; puan/eşik 0–100 ile sınırlı, uzunluklar sınırlı. tests/assessments-route.test.mjs. Takım: 2610.

[1.204.0] — 2026-08-15

Eklendi — Ayarlar’da eksik ya da örnek veri kalıntılı CV/profili işaretleyen bir “Kurulum doktoru” paneli.

Eklendi

  • Ayarlar → Kurulum doktoru artık cv.md ve config/profile.yml dosyanızı sıfır token ile denetler ve engelleyici sorunları (eksik dosya/alan) ve uyarıları (kalan örnek/yer tutucu veriler, sabit kodlanmış metrikler) listeler — böylece eksik bir kurulumu, taramalarınızı ve uyarlamalarınızı zayıflatmadan yakalarsınız. Salt okunur; tek tıkla yeniden çalıştırılır.

Notlar

  • Yeni salt okunur GET /api/cv-sync-check, üst projenin cv-sync-check.mjs’sini aktarır; bu betik metin + bir çıkış kodu yazar (--json yok); rota, kararlı ERROR: / WARN: satırlarını hafifçe {ok, errors[], warnings[]} olarak ayrıştırır — başarıyı çıkış kodu değil, başlık belirler. Bağımsız kurulumlarda {available:false} ile yumuşak başarısızlık. tests/cv-sync-check-route.test.mjs. Takım: 2602.

[1.203.0] — 2026-08-15

Eklendi — CV Studio’da “önceki bir CV’yi yeniden kullan?” ipucu.

Eklendi

  • CV Studio’da kayıtlı bir ilanı açtığınızda, uygulama artık onu diğer kayıtlı ilanlarınızla karşılaştırır (belirlenimci sözcük örtüşmesi, sıfır token) ve en yakınının o uyarlanmış CV’yi yeniden kullanmaya, düzeltmelerle yeniden kullanmaya yetip yetmediğini ya da yeni bir tane uyarlamanız gerektiğini söyler — böylece zaten hedeflediğiniz bir rol için sıfırdan başlamazsınız.

Notlar

  • Yeni salt okunur GET /api/jds/:name/reuse, üst projenin jd-similarity.mjs’sini (Jaccard örtüşmesi + kıdem koruması; JSON {decision, score, reason}) her önceki ilan için bir kez aktarır (fan-out 25 ile sınırlı, en iyisi kazanır); betik veya önceki ilanlar yoksa {available:false} ile yumuşak başarısızlık. tests/jd-similarity-reuse-route.test.mjs. Takım: 2594.

[1.202.0] — 2026-08-15

Eklendi — bir şirketin ATS iş panosunu #/portals’tan keşfedin ve izlemeye başlayın.

Eklendi

  • #/portals’ta bir şirket adı yazın; uygulama Greenhouse, Ashby ve Lever’i genel panosu için yoklar — sıfır LLM, tarayıcı yok — ve mevcut olup şu anda ≥1 ilan listeleyen panoları gösterir. Tek tık, seçilen panoyu tarayıcınızın izlediği şirketlere ekler. Yoklama salt okunurdur; portals.yml’ye yazma yalnızca Ekle’ye tıklayınca olur.

Notlar

  • Yeni server/lib/discover-ats.mjs (sabit ana makine, karakter kümesi doğrulanmış slug’ı DNS sabitli safeGet ile yoklar, istek başına ≤12 yoklama) + POST /api/portals/discover (salt okunur) ve POST /api/portals/track (açık yazma: withFileLock + metin ekleme + yeniden ayrıştırma koruması + atomik yeniden adlandırma; yalnızca bilinen ATS ana makineleri, idempotent). Tarayıcının adaptör kaydını yeniden kullanır. i18n ×17. tests/discover-ats-resolver.test.mjs + tests/discover-ats-route.test.mjs. Takım: 2588.

[1.201.0] — 2026-08-15

Düzeltildi — yerelleştirilmiş veya değişken sütun başlıkları olan bir izleyici artık boş görünmüyor.

Düzeltildi

  • data/applications.md dosyanız İngilizce olmayan veya değişken başlıklar kullanıyorsa — İspanyolca empresa / puesto / estado / fecha / enlace ya da position / stage / link — izleyici bunları yanlış anahtarlarla okuyup Şirket / Rol / Durum / Tarih / Bağlantı sütunlarını boş gösteriyordu. Artık bu başlıklar kanonik alan adlarına katlanıyor ve izleyici doğru görünüyor. Tamamen İngilizce bir izleyici eskisi gibi işlenir.

Notlar

  • parseApplications (server/lib/parsers.mjs) içinde yeni HEADER_ALIASES tablosu + bir normalleştirme katlaması; bilinmeyen veya zaten kanonik başlıklar değişmeden geçer. tests/tracker-header-aliases.test.mjs. Takım: 2563.

[1.200.0] — 2026-08-15

Eklendi — takip listenizde ATS barındırmalı ilanlar için tek tıkla “hâlâ açık mı?” kontrolü.

Eklendi

  • #/tracker üzerinde, URL’si Greenhouse / Lever / Ashby / Workday / SmartRecruiters ilanı olan bir başvuru artık “Hâlâ açık mı?” düğmesi gösteriyor. Tek tık, ATS’nin kendi genel JSON’unu sorgular — sıfır token, tarayıcı yok — ve Açık / Süresi dolmuş / Bilinmiyor gösterir; böylece her birini açmadan ölü ilanları fark edersiniz. Tasarımı gereği ihtiyatlı: yalnızca kesin 404/410 Süresi dolmuş sayılır; belirsiz olan Bilinmiyor kalır (asla yanlış Süresi dolmuş).

Notlar

  • Yeni server/lib/liveness-core.mjs + liveness-api.mjs ve salt okunur GET /api/liveness?url= (yazma yok, LLM yok). SSRF güvenli: URL isValidJobUrl’den geçer, ardından ATS API’sine yalnızca DNS sabitli safeGet ile sabit host ve karakter kümesi doğrulanmış yol parçalarıyla erişilir. tests/liveness-core.test.mjs + tests/liveness-route.test.mjs. Takım: 2557.

[1.199.0] — 2026-08-15

Düzeltildi — geniş tablolar artık kırpılmak yerine yatay kayıyor.

Düzeltildi

  • Scan sayfasında (ve diğer tüm tablolarda — İzleyici, İstatistikler, Kullanım, Panel) pencereden geniş bir tablo kaydırma çubuğu olmadan kırpılıyor ve en sağdaki sütunlara erişilemiyordu. Geniş tablolar artık gerektiğinde yatay kaydırma çubuğu gösteriyor, böylece her sütun her genişlikte erişilebilir kalıyor.

Notlar

  • public/css/components.css içindeki .table-wrap, overflow: hidden yerine overflow-x: auto oldu (mevcut .reports-scroll kabıyla aynı); yuvarlatılmış kenarlık korunur. tests/table-wrap-scroll.test.mjs. Takım: 2540.

[1.198.0] — 2026-08-15

Eklendi — tarama yeniden denemeleri artık üstel geri çekilme, jitter kullanıyor ve hız sınırlayıcının Retry-After başlığına uyuyor.

Eklendi

  • Bir iş ilanı panosu tarama sırasında kısa süreliğine hız sınırladığında veya hata verdiğinde (HTTP 429 / 5xx), yeniden deneme artık sabit kısa bir gecikme yerine üstel geri çekilme + jitter ile bekliyor — meşgul bir pano aynı tempoda tekrar tekrar dövülmüyor ve eşzamanlı yeniden denemeler yeniden aynı anda çarpışmıyor. Panonun gönderdiği Retry-After dikkate alınıyor (ancak sınırlandırılmış, böylece düşmanca bir Retry-After: 86400 tüm taramayı durduramıyor). Kalıcı hatalar (404, reddedilen yönlendirmeler) hâlâ hemen başarısız oluyor — değişiklik yok.

Notlar

  • server/lib/http-json.mjs içinde yeni parseRetryAfterMs() ve saf computeRetryDelayMs(); fetchJson artık ok olmayan bir yanıtta .retryAfter yakalıyor ve fetchJsonWithRetry isteğe bağlı bir maxDelayMs (varsayılan 8000) alıyor. tests/http-json.test.mjs (+9). Takım: 2536.

[1.197.0] — 2026-08-14

Eklendi — bir Getro VC iş ilan panosunu yalnızca careers_url ile takip edin; koleksiyon id’si kendiliğinden çözülür.

Eklendi

  • Takip edilen bir Getro panosu (b2venture, Earlybird, Point Nine, …) artık elle bulunan sayısal bir getro_collection gerektirmiyor. Panonun kendi careers_url değerini verin; id, ilk taramada o sayfadan kendiliğinden çözülür — SSRF’ye karşı güvenli tek bir GET, sayısal network.id değerini sayfanın gömülü verisinden doğrudan okur. Açık bir getro_collection yine önceliklidir ve getirmeyi tümüyle atlar.

Notlar

  • server/lib/sources/getro.mjs içinde yeni httpsCareersUrl(), extractCollectionId() ve asenkron resolveCollectionId(); pano sayfası DNS’e sabitlenmiş, boyutu sınırlı safeGet ile getirilir ve çözülen id, assertGetroUrl tarafından hâlâ api.getro.com ana bilgisayarına sabitlenir. Adaptör artık id olmadan bile https careers_url taşıyan bir provider: getro girdisiyle eşleşir. tests/sources-getro.test.mjs (+8). Takım: 2527.

[1.196.0] — 2026-08-14

Düzeltildi (güvenlik) — Workday adaptörü bir api uç noktasını alt dize değil, ana bilgisayar adıyla doğrular.

Düzeltildi

  • portals.yml’deki bir Workday api: değeri artık yalnızca ana bilgisayar adı myworkdayjobs.com (veya .myworkdayjobs.com alt alan adı) olduğunda kabul edilir. Eski kontrol bir alt dize eşleşmesiydi, bu yüzden dizeyi yalnızca içeren herhangi bir URL — örn. https://example.com/?x=myworkdayjobs.com — geçiyor ve uç nokta olarak kullanılabiliyordu. Gerçek Workday uç noktaları etkilenmez. (CodeQL tarafından bildirildi, #443.)

Notlar

  • Yeni isWorkdayApi() URL’yi ayrıştırır ve ana bilgisayarı kontrol eder (server/lib/portals/adapters/workday.mjs). tests/workday-adapter-endpoint.test.mjs (+1). Takım: 2522.

[1.195.0] — 2026-08-14

Performans (tarayıcı) — yeniden yayın tespiti büyük tarama geçmişlerinde hızlı kalıyor.

Performans

  • Yinelenen ilan tespiti büyük bir scan-history.tsv’de artık O(N²)’ye düşmüyor. Şirket bazında başlık gruplaması, her çift için tam bir roleFuzzyMatch ödeyen iç içe bir döngüydü; artık bir ters dizin — satırları tek geçişte tam başlığa göre kovalara ayır, sonra yalnızca ayırt edici (temel olmayan) bir belirteci paylaşan FARKLI kovalar arasında bulanık eşleştirme yap. Çıktı aynı — aynı yeniden yayın kümeleri — eski algoritmaya karşı 200+ rastgele geçmişte diferansiyel testle kanıtlandı.

Notlar

  • server/lib/detect-reposts.mjs içinde groupRowsByTitle (diferansiyel test için dışa aktarıldı). tests/detect-reposts-grouping.test.mjs (+2). Takım: 2521.

[1.194.0] — 2026-08-14

Düzeltildi (tarayıcı) — tek segmentli URL’ye sahip Workday kariyer sayfaları artık doğru taranıyor.

Düzeltildi

  • Workday adaptörü artık yolu tek segment olan kariyer URL’lerini ayrıştırıyor — örn. https://parsons.wd5.myworkdayjobs.com/Search, .../KBR_Careers, .../Careers. Önceden site External’e düşüyor, adaptör yanlış CXS uç noktasına gidiyor ve bir sonda sağlıklı görünüp hiçbir şey döndürmeyebiliyordu. Artık yolun ilk boş olmayan segmentini site olarak alıyor (en-US gibi bir dil önekini atarak); belgelenen /en-US/External durumu değişmedi. (#255’te bildirildi.)

Notlar

  • server/lib/portals/adapters/workday.mjs içinde yapısal yol ayrıştırma. tests/workday-adapter-endpoint.test.mjs (+7). Takım: 2519.

[1.193.0] — 2026-08-14

Eklendi (istatistikler) — hatırlatmaya değer mülakatları öne çıkaran bir “Mülakat sonrası sessizlik” sekmesi.

Eklendi

  • #/stats içinde bir Mülakat sonrası sessizlik sekmesi: bir nezaket penceresini (varsayılan 30 gün) aşarak sessizleşen mülakatlar, aktif mülakatlarını ve takip panonu birleştirir — her birinin ne kadar süredir sessiz olduğu, son mülakat tarihi ve nedeniyle. Nazik bir hatırlatma/kapatma listesi; yalnızca öneri, asla bir ret iddiası değil. Token yok.

Notlar

  • Yeni GET /api/stats/rejection-latency rotası (fail-soft {available:false}). tests/stats-rejection-latency-route.test.mjs (+2). +10 i18n anahtarı ×17; #/stats help-hint 7→8 sekme. Takım: 2510.

[1.192.0] — 2026-08-14

Eklendi (cv-studio) — hiç sahip olmadığın sayıları yakalayan bir “CV’nizin gerçeklerini denetleyin” kapısı.

Eklendi

  • #/cv-studio içinde bir CV’nizin gerçeklerini denetleyin kartı: uyarlanmış bir CV veya ön yazı yapıştırın ve öne sürülen her metriği ve olguyu gerçek CV, profil ve two-pager’ınızla karşılaştırın. pass / warn / block kararının yanı sıra tam olarak uydurma metrikleri, desteksiz olguları ve yasak / uyarı ifadelerini alırsınız. LLM yok; hiçbir şey yazılmaz.

Notlar

  • Yeni POST /api/cv-studio/verify-facts rotası: metni tek kullanımlık geçici bir dosyaya yazar ve verify-cv-facts.mjs’yi çalıştırır; betik block’ta 1 ile çıksa bile JSON kararına güvenir. tests/cv-studio-verify-facts-route.test.mjs (+4). +15 i18n anahtarı ×17. Takım: 2508.

[1.191.0] — 2026-08-14

Eklendi (istatistikler) — önce öğrenilecek becerileri sıralayan bir “Sırada ne öğrenmeli” sekmesi.

Eklendi

  • #/stats içinde bir Sırada ne öğrenmeli sekmesi: tüm takip panosu genelinde beceri boşluğu özeti — düşük uyumu en sık batıran eksik beceriler, ağırlıklı (her raporda 5−uyum puanı) ve Critical / High / Medium kademeli — ayrıca CV/profilinin zaten kapsadıkları. Salt okunur, yalnızca öneri, token yok.

Notlar

  • Yeni GET /api/stats/upskill rotası (veri azken { error } alanı; betik yokken {available:false}). tests/stats-upskill-route.test.mjs (+3). +15 i18n anahtarı ×17. Takım: 2504.

[1.190.0] — 2026-08-14

Eklendi (takip panosu) — hangi şirketlerin sana gerçekten yanıt verdiğini gösteren bir “Şirket geçmişi” paneli.

Eklendi

  • #/tracker üzerinde bir Şirket geçmişi kartı: bir şirket seç ve salt okunur kanıt al — sana ne kadar yanıt verdiği (sana karşı sessiz / karışık / daha önce yanıt verdi) ve aynı ilanın tekrar tekrar yayınlanıp yayınlanmadığı — takip panonu, takip mesajlarını ve tarama geçmişini birleştirerek. Token yok; tarayıcı hiç çağrılmaz.

Notlar

  • Yeni GET /api/stats/company-history[?company=] rotası (fail-soft {available:false}). tests/stats-company-history-route.test.mjs (+3). +18 i18n anahtarı ×17. Takım: 2501.

[1.189.0] — 2026-08-14

Düzeltildi (tarayıcı) — Roma rakamıyla yazılan kıdem seviyeleri artık Latin olmayan başlıklarda da sayılıyor.

Düzeltildi

  • skip_tiers arkasındaki kademe sınıflandırıcısı artık herhangi bir yazı sisteminde rol kelimesinden sonra gelen Roma rakamı seviye ekini (I / II / III / IV / V) okuyor — “Инженер III”, “エンジニア I”, “Ingénieur IV” — yalnızca ASCII kelimelerden sonra değil. Önceden Latin olmayan bir kelimeden sonraki seviye rakamı yok sayılıyor ve ilan mid’e düşüyordu, bu yüzden skip_tiers: [senior] veya [entry] onları atlıyordu.

Notlar

  • server/lib/classify-tier.mjs içinde yazı sisteminden bağımsız lookbehind; ölü yinelenen Sr. eşleştiricisi kaldırıldı. tests/classify-tier.test.mjs (+1). Takım: 2498.

[1.188.0] — 2026-08-14

Düzeltildi (UI) — birincil eylem düğmeleri artık sayfa alt başlığına yapışık durmuyor.

Düzeltildi

  • Haftalık mülakat özeti, Yatırım alan şirketler, Portallar, Kariyer planı ve Kariyer yönlendirmesi sayfalarındaki birincil eylem/kontrol satırı artık uygun bir üst kenar boşluğuna sahip; böylece düğme alt başlığa yaslanmak yerine altında nefes alıyor.

Notlar

  • Regresyon koruması tests/lead-row-top-margin.test.mjs (+5). Takım: 2497.

[1.187.0] — 2026-08-14

Düzeltildi (tarayıcı) — skip_tiers ayarı yeniden çalışıyor: kıdeme göre atlamak istediğiniz ilanlar eleniyor.

Düzeltildi

  • portals.yml’deki bir skip_tiers: listesi (ör. skip_tiers: [intern, entry]) artık taramada dikkate alınıyor. Her ilanın başlığı bir kıdem düzeyine (intern / entry / mid / senior) sınıflandırılır ve düzeyi listenizdeyse elenir. Önceden tarama başlık / konum / içerik / güven filtrelerini çalıştırıyor ama düzey filtresi yoktu, bu yüzden skip_tiers sessizce yok sayılıyordu. Düzey sözcüğü olmayan başlıklar mid’e düşer (böylece skip_tiers: [mid] sıradan ilanların çoğunu da eler) ve sınıflandırıcı EN SOLDAKİ düzey sözcüğünü okur.

Notlar

  • Yeni saf modül server/lib/classify-tier.mjs (classifyTier + buildTierFilter), EN ve RU tarayıcılarının filtre zincirlerine bağlandı. tests/classify-tier.test.mjs (+7). Takım: 2492.

[1.186.0] — 2026-08-14

Eklendi (CV Studio) — bir “Beceri açığı” paneli: bir işin gerekli becerilerinden hangilerini CV’niz adlandırıyor, ima ediyor veya eksik.

Eklendi

  • CV Studio’da yeni bir Beceri açığı paneli. Kayıtlı bir iş tanımı seçin; her gerekli beceriyi CV’nizde adlandırılan, CV’nizde ima edilen veya eksik olarak ayırır — LLM’siz kelime karşılaştırması, hiçbir şey yazılmaz. İlanda net bir gereksinim bölümü yoksa düşük güven notu görünür.

Notlar

  • Yeni GET /api/jds/:name/skill-gap (iş adı, argüman olmadan önce yol-temizlemesinden geçirilir ve jds/ altında doğrulanır; betik yoksa {available:false}’e yumuşak geri dönüş). +13 i18n anahtarı ×17. Testler: tests/jds-skill-gap-route.test.mjs (+4, yol geçişi reddi dahil). Takım: 2485.

[1.185.0] — 2026-08-14

Eklendi (istatistik) — “Huni ve hız” sekmesi: huniniz piyasayla nasıl kıyaslanıyor ve aşamalar arasında ne kadar hızlı ilerliyorsunuz.

Eklendi

  • İstatistik’teki yeni Huni ve hız sekmesi, piyasa kıyaslama aralıklarının yanında yanıt ve mülakat oranlarınızı (küçük örneklem ve seçim yanlılığı uyarılarıyla), tipik ilk yanıt penceresini aşan süregelen başvuruların bir bekleme listesini ve aşama başına medyan günü (Başvuruldu → Yanıtlandı → Mülakat → Teklif) gösterir — yavaş satırlar medyanları saptırmasın diye sağdan sansürlenir. Salt okunur ve sıfır token; yalnızca kendi takipçinizi okur.

Notlar

  • Yeni GET /api/stats/funnel (betik yoksa {available:false}’e yumuşak geri dönüş). +18 i18n anahtarı ×17. Testler: tests/stats-funnel-route.test.mjs (+2). Takım: 2481.

[1.184.0] — 2026-08-14

Düzeltildi (arayüz) — Panodaki hızlı işlem kutucukları artık düzgün bir ızgarada hizalanıyor.

Düzeltildi

  • Panoda (Komuta Merkezi) 3 kutucukluk bir grup 4 kutucukluktan daha geniş görünüyor, bu da bölümlerin sağ kenarını düzensiz bırakıyordu. Artık her grup eşit genişlikte sütunlar kullanıyor (geniş ekranda 4, pencere daraldıkça 3 / 2 / 1’e iniyor), böylece tüm kutucuklar aynı boyutta ve sağ kenarları hizalı.

Notlar

  • Yalnızca CSS (.qa-grid: auto-fill yerine sabit repeat(N, minmax(0,1fr))). tests/dashboard-grid-align.test.mjs ile korunuyor (+2). Takım: 2479.

[1.183.0] — 2026-08-14

Eklendi (tarayıcı) — daha akıllı yinelenen tespiti: takip bağlantısıyla yeniden yayımlanan aynı ilan artık iki kez görünmüyor.

Eklendi

  • Tarayıcı artık bir ilanı kanonik URL anahtarıyla tanıyor; böylece takip parametresiyle (?utm_…, gclid, …), http yerine https, ya da sondaki eğik çizgi / #parça ile yeniden yayımlanan aynı ilan, olduğu tek ilan olarak ele alınır — tarama sonuçlarında veya pipeline’da yinelenen satır yok ve zaten gördüğünüz bir ilana boşa değerlendirme yok. Gerçekten farklı ilanlar (gh_jid gibi korunan işlevsel bir id) hâlâ ayrı sayılır.

Notlar

  • Yeni server/lib/url-key.mjs, her iki tarayıcının dedup’ına ve pipeline yazıcısına bağlandı. Bilerek az normalleştirir — iki farklı ilanı asla birleştirmez. Testler: tests/url-key.test.mjs (+5), tests/parsers.test.mjs (+1). Takım: 2477 (+6).

[1.182.0] — 2026-08-14

Düzeltildi (tarayıcı) — maaş aralıkları artık her dilde aynı görünüyor.

Düzeltildi

  • Tarama ve takipçi satırlarındaki maaş rakamları, İngilizce olmayan arayüzlere çevrilmeden sızan İngilizce “from” / “up to” sözcükleri yerine yerelden bağımsız ≥ ve ≤ sembollerini kullanıyor (ör. ≥ 120000 EUR, ≤ 90000). Tek yönlü aralık bildiren tüm panolara uygulanır (Getro, Remotli, Manfred, Agentic Jobs, JustJoin, Jobicy); çift yönlü aralıklar (100000–150000 USD) zaten nötrdü.

Notlar

  • Yalnızca görüntüleme — istemci maaş filtresi ön eke bakmadan sayıları ayrıştırır, filtreleme değişmez. Takım: 2471.

[1.181.0] — 2026-08-14

Eklendi (tarayıcı) — Getro iş panoları artık maaş, tüm konumları ve uzaktan ilanları gösteriyor.

Eklendi

  • Getro tarayıcısı (fonların yetenek ağı panoları) artık her ilanda bir maaş (yıllık aralık + para birimi) gösteriyor, yalnızca ilkini değil tüm konumları listeliyor ve uzaktan ilanları etiketliyor. Taramanızdaki ve takipçinizdeki bir Getro ilanı artık diğer panolarla aynı maaş + konum ayrıntısını taşıyor.

Notlar

  • Yalnızca tarayıcı; yeni bağımlılık yok, rota / CSP / SSRF değişikliği yok. Testler: tests/sources-getro.test.mjs (+5). Takım: 2470 (+5).

[1.180.0] — 2026-08-14

Düzeltildi (ORTA, raporlar) — #/reports listesi artık bir tablo ve bir Machine Summary yer tutucusunun gizlediği gerçek bir puan geri kazanıldı.

Düzeltildi

  • #/reports listesi 4 kartlık bir ızgara değil, bir tablodur (Rapor · Tarih · Meşruiyet · Puan). Uzun bir “Puan algılanmadı” çipi başlık sütununu neredeyse sıfıra sıkıştırıyor, ardından kart başlığındaki overflow-wrap: anywhere rapor adını harf harf bölüyordu. Artık her alanın kendi sütunu var, ad hücresi sözcüklerden bölünür ve dar ekranda tablo yatay kayar (yeni .reports-scroll konteyneri). Yeni i18n anahtarı rep.colReport ×17.
  • Gövdedeki gerçek bir puan (**Итоговый балл:** 1.8 / 5) artık bir Machine Summary yer tutucusu (score: —) tarafından gizlenmiyor. ## Machine Summary bloğu sayısal olmayan veya aralık dışı bir puan taşıdığında, ayrıştırılmış puan yuvasını dolduruyor ve kalın değer-biçimi yedeğini engelliyordu; böylece gövdede gerçek bir X / 5 olmasına rağmen rapor “Puan algılanmadı” gösteriyordu. parseReportHeader artık kullanılabilir bir sayı kalmadığında gövdenin değer-biçimini geri kazanır (adım 4.5).

Notlar

  • Yalnızca istemci + ayrıştırıcı; rota / CSP / SSRF / üst yazma değişikliği yok. Testler: tests/reports-table.test.mjs (+5), tests/report-header-locale.test.mjs (+2). Takım: 2465 (+7).

[1.179.0] — 2026-08-13

Değiştirildi (LOW, tarayıcı) — 20 yinelenen HTML varlık çözücüsü ortak modülde birleştirildi (parite devamı, worklist’i kapatır).

Değiştirildi

  • 20 kazıma tarama kaynağının her biri kendi decodeEntities/decodeXmlEntities’ini (+ bir fromCodePoint yardımcısı) taşıyordu — sürüklenmiş kopyalar (üçü RangeError fırlatabiliyordu, v1.172.0’de düzeltildi; diğerleri NUL/C0’a izin veriyor veya &#1a2;’yi yanlış ayrıştırıyordu). Artık hepsi tek server/lib/html-entities.mjs’ten (XML 1.0 Char güvenli çözücü) geçiyor ve ~237 satır yineleme kaldırıldı. 8 RSS tarzı kaynak   çözümü kazandı (önceden yalnızca 5 varlık); cryptocurrencyjobs’un kasıtlı çift çözümü bir takma adla korundu. hh kendi çözücüsünü tutuyor (—/–’yi işler, ortak 6’nın dışında). Yeni bir nöbetçi test, herhangi bir kaynak yerel çözücü yeniden oluşturursa başarısız olur.

Notlar

  • Davranışı koruyan yeniden düzenleme; rota / CSP / SSRF / üst yazma değişikliği yok. Testler: tests/decoder-consolidation.test.mjs (+2). Takım: 2458 (+2).

[1.178.0] — 2026-08-13

Düzeltildi (LOW, üst parite) — iki eski sabit üst projeye uyacak şekilde güncellendi (PARENT-SYNC GAP #4 + #5).

Düzeltildi

  • Tarayıcı User-Agent (GAP #4) — BROWSER_LIKE_USER_AGENT (workable/workday/oraclecloud/a16z/eightfold tarafından WAF/bot geçitlerini aşmak için gönderilir) Chrome 131’den 151’e yükseltildi, üst projenin user-agent.mjs’iyle uyumlu; eski bir sürüm daha sık engellenir. Bir Chrome major ≥ 151 testiyle korunuyor.
  • Tracker durumları FALLBACK (GAP #5) — states.mjs’deki son çare FALLBACK (yalnızca canlı templates/states.yml okunamadığında kullanılır — taze klon / CI izole kök) üst projenin Türkçe durum takma adlarını (#2615) kazandı: değerlendirildi, başvuruldu, yanıt verildi, mülakat, teklif, reddedildi, iptal edildi, uygun değil, kabul edildi/işe alındı. Üretimde canlı dosya bunları zaten sağlıyordu.

Notlar

  • Yalnızca iki sabit; rota / CSP / SSRF / üst yazma değişikliği yok. Testler: tests/http-json.test.mjs (+1) + tests/states.test.mjs (+1). Takım: 2456 (+2).

[1.177.0] — 2026-08-13

Düzeltildi (MEDIUM, tarayıcı) — arama API’sini oturum çerezleriyle koruyan kiracılarda csod (Cornerstone) 0 iş döndürüyordu (parent #2769, PARENT-SYNC GAP #1).

Düzeltildi

  • Bazı Cornerstone kiracıları kariyer sitesi açılış sayfasında oturum çerezleri ayarlar ve bu çerezler anonim bearer belirteciyle birlikte geri gelmezse arama API’sine 401 CSOD Unauthorized yanıtı verir. sources/csod.mjs artık açılışı yeni bir fetchResponse yardımcısıyla okur, Set-Cookie değerlerinden bir Cookie başlığı kurar (cookieHeaderFrom — yalnızca ad=değer, jar semantiği) ve arama POST’unda yeniden gönderir. Yalnızca aynı köken (host sabitlenmiş + redirect:'error'), böylece oturum çerezleri asla üçüncü tarafa ulaşamaz; çerez ayarlamayan bir kiracı eskisi gibi davranır.

Notlar

  • Yeni server/lib/http-json.mjs::fetchResponse (eklemeli; mevcut kaynaklar etkilenmez). Rota / CSP / SSRF / üst yazma değişikliği yok. Testler: tests/sources-parity-v1118a.test.mjs (+1). Takım: 2454 (+1).

[1.176.0] — 2026-08-13

Düzeltildi (MEDIUM, raporlar) — RU tablosunun listelemediği kalın bir etiket altındaki puan hâlâ “Score not detected” gösteriyordu (FIND-5).

Düzeltildi

  • İki RU raporu puanı **Итоговый балл:** 1.8 / 5 / **Скор:** 1.8 / 5 olarak yazıyordu — REPORT_LABELS.ru’nun saymadığı kalın etiketler (yalnızca “Оценка”/“Балл” bilir), bu yüzden puan ayrıştırılmadan kalıyordu. Eş anlamlı listesini büyütmek yerine, parseReportHeader artık değer biçimine düşüyor: herhangi bir kalın etiket altında /5 ölçütüne göre bir kesir. Dilden bağımsızdır, bir başlığa bağışıktır (** yok, /5 değeri yok) ve 5/5/2026 gibi bir tarihi reddeder (paydaya negatif ileri bakış).

Notlar

  • Yalnızca sunucu ayrıştırıcı; rota / CSP / SSRF / üst yazma değişikliği yok. Testler: tests/report-header-locale.test.mjs (+2). Takım: 2453 (+2).

[1.175.0] — 2026-08-13

Düzeltildi (LOW, sağlamlaştırma) — FIND-3 SEO açıklaması için bir regresyon nöbetçisi + null’a dayanıklı meşruiyet temizliği (AI-review takibi).

Düzeltildi

  • SEO açıklaması parite nöbetçisi — her dilin meta.desc alanındaki sabit kodlu “~55”i kayıt defterinden türetilen {adapters} yer tutucusuyla değiştiren v1.174.0 düzeltmesinin testi yoktu, bu yüzden bir sonraki dil düzenlemesinde sessizce geri dönebiliyordu. Yeni, CI’dan yalıtılmış tests/site-meta-desc-parity.test.mjs, 17 site/src/i18n/*.json dosyasından biri yer tutucuyu kaybederse veya bir sayıyı yeniden sabit kodlarsa ya da Landing.astro onu üç açıklama meta’sına yerleştirmeyi bırakırsa başarısız olur.
  • Null’a dayanıklı meşruiyet temizliği — stripEmphasis boş girdi için “undefined” dizesi yerine '' döndürür (alanlar dize olarak başlatılır, yani derinlemesine savunma).

Notlar

  • Test + ayrıştırıcıda tek satırlık bir nöbetçi; rota / CSP / SSRF / üst yazma değişikliği yok. Testler: tests/site-meta-desc-parity.test.mjs (+3). Takım: 2451 (+3).

[1.174.0] — 2026-08-13

Düzeltildi (HIGH, raporlar) — yerelleştirilmiş raporlar “Score not detected” gösteriyordu; SEO açıklaması eskimişti.

Düzeltildi

  • Puan ayrıştırma (FIND-1) — H1’i puan etiketi sözcüğünü içeren İngilizce olmayan bir rapor (# Оценка вакансии: <başlık>) artık o başlığı puan sanmıyor. parseReportHeader şimdi yerelleştirilmiş kalın etikete (**Оценка:** 1.5 / 5) sabitleniyor, başlık satırlarını atlıyor ve etiketin iki noktaya bitişik olmasını istiyor — böylece “Score not detected” gösteren RU raporları gerçek puanını gösteriyor.
  • Meşruiyet rozeti (FIND-2) — değerden Markdown vurgusu temizleniyor, rozet “** High Confidence” yerine “High Confidence” gösteriyor.
  • Puan taşması — sonuna durum metni eklenmiş bir puan satırı (“1.8, Status: Evaluated, …”) yalnızca puana sıkıştırılıyor; .score-pill bir kaydırma-yok/taşma sınırı kazanıyor ve başlık sütunu daralabiliyor, böylece renkli rozet kart kenarından hiç taşmıyor.
  • SEO açıklaması (FIND-3) — cvstart.org’un meta / OG / Twitter açıklamaları (17 dilin tümü) “Scan ~55 job boards” değerini sabit kodluyordu, oysa gövde gerçek kayıt defterini sayıyordu (“~75”). Açıklama artık kayıt defterinden türetilen sayıyı yerleştiriyor, böylece bir daha kaymıyor.

Notlar

  • Sunucu ayrıştırıcı + istemci render/CSS + site i18n; rota / CSP / SSRF / üst yazma değişikliği yok. Testler: tests/report-header-locale.test.mjs (+4). Takım: 2448 (+4).

[1.173.0] — 2026-08-13

Eklendi (LOW, yapılandırma) — Hermes, algılanan yapay zeka CLI listesine katıldı (career-ops paritesi).

Eklendi

  • #/config → “Yapay Zeka CLI Araçları” sekmesi artık üst projenin yeni desteklediği aracı çalışma zamanı Hermes’i (Nous Research, ikili hermes) algılıyor. server/lib/routes/cli-detect.mjs içindeki sabit izin listesi 10’dan 11 araca çıkıyor; algılama salt okunur bir PATH taraması olarak kalıyor (hiçbir ikili asla çalıştırılmaz).

Notlar

  • i18n / rota / CSP / SSRF / üst yazma değişikliği yok; liste sabittir, asla girdi değildir. Takım: 2444 (cli-detect kanaryası 10 → 11 güncellendi).

[1.172.0] — 2026-08-13

Düzeltildi (MEDIUM, tarayıcı) — bozuk bir HTML varlığı bir tarama kaynağını çökertebiliyordu (career-ops #2150 paritesi).

Düzeltildi

  • oraclecloud, gem ve dassault kaynakları, sayısal HTML varlıklarını String.fromCodePoint öncesinde yalnızca zayıf bir Number.isFinite denetimiyle çözüyordu — 0x10FFFF üzerindeki bir başvuru (ör. bozuk veya kötü niyetli bir akıştan &#99999999;) yakalanmayan bir RangeError fırlatıp o kaynağın tüm ayrıştırmasını iptal ediyordu. Ortak bir modül server/lib/html-entities.mjs (üst projenin _html-entities.mjs dosyasını yansıtır) artık sayısal başvuruları XML 1.0 §2.2 Char kümesiyle sınırlar; böylece String.fromCodePoint asla fırlatamaz ve onaltılık ile ondalığı ayrı eşleştirdiği için &#1a2; artık yanlış ayrıştırılmaz. Üç kaynak bunu içe aktarır.

Notlar

  • Geçerli akışlar için davranış değişmez; JS / i18n / rota / CSP / SSRF / üst yazma değişikliği yok. Kaynaklardaki kalan ~20 çözücü kopyasının birleştirilmesi qa/PARENT-SYNC-WORKLIST-v1.26.0.md içinde izleniyor.
  • Testler: tests/html-entities.test.mjs (+7). Takım: 2444 (+7).

[1.171.0] — 2026-08-13

Değiştirildi (DÜŞÜK, tasarım sistemi) — yazı ölçeği + z-index katman belirteçleri (D-4, ilk adım). Boyutlar ve katmanlama bileşen başına düz değerdi.

Değiştirildi

  • z-index katmanları — --z-* belirteçleri (--z-topbar … --z-skiplink) eklendi ve her z-index düz değeri taşındı. Değerler korundu, katmanlama aynı; yeni bir kanarya yeni sihirli sayıları yasaklıyor.
  • Yazı ölçeği — --font-size-* rampası (xs 11 … 2xl 28, taban = Inter 15px); bileşenlerin zaten kullandığı çekirdek boyutlar taşındı (görsel değişiklik yok). Rampa dışı değerler kademeli taşınır (docs/UX-ROADMAP.md).

Notlar

  • Yalnızca CSS belirteci; davranış/JS/i18n/rota/CSP/SSRF/yazma değişikliği yok. Piksel değişikliği yok. tests/design-tokens-scale.test.mjs (+3). Takım: 2437 (+3).

[1.170.0] — 2026-08-13

Eklendi (DÜŞÜK) — uzun yapay zekâ oluşturmalarında dürüst ETA ipuçları (P4-ETA). Ağır oluşturmalar (kariyer planı ~40 sn, yönlendirme / pazar / networking ~30 sn, two-pager ~20 sn) süre hissi olmadan yalnızca “Oluşturuluyor…” gösteriyordu.

Eklendi

  • Her uzun oluşturma düğmesinin yanında artık sönük bir ⏱ ~Nsn ipucu var (#/auto ETA’sı gibi). Paylaşılan .eta-hint stili + iki genel anahtar (common.eta ~{n}s, common.etaTitle).

Notlar

  • Yalnızca istemci; rota/CSP/SSRF/yazma değişikliği yok. +2 i18n anahtarı ×17 (anlık görüntü 1219 → 1221). tests/generation-eta-hint.test.mjs (+2). Takım: 2434 (+2).

[1.169.0] — 2026-08-13

Eklendi (DÜŞÜK) — satır içi PDF önizleme (D-5). GET /api/output/pdfs/:name, Content-Disposition: attachment dayatıyordu; bu yüzden #/cv’deki “Aç” bağlantısı bile göstermek yerine indiriyordu.

Eklendi

  • ?inline=1, AYNI temizlenmiş dosyayı Content-Disposition: inline ile sunar; tarayıcı yeni sekmede 👁 Önizleme olarak işler. Varsayılan (parametresiz) hâlâ indirmedir. Yeni rota yok; aynı ad korumaları.
  • #/cv PDF listesindeki ilk düğme artık 👁 Önizleme (İndir’in yanında). cv.openPdf “Aç” → “Önizleme” ×17.

Notlar

  • CSP/SSRF değişikliği yok — aynı sanitizePathName. Mevcut bir i18n anahtarı ×17 yeniden yazıldı (anlık görüntü 1219). tests/output-pdfs.test.mjs (+3). Takım: 2432 (+3).

[1.168.0] — 2026-08-13

Düzeltildi (DÜŞÜK, a11y) — onay kutusu satırları artık WCAG 2.5.8’in 24×24 minimumunu karşılıyor (D-2). #/scan, #/config, #/evaluate ve #/cv-studio üzerindeki onay kutusu/radyo etiketleri ~22 px’lik bir bantta duruyordu.

Düzeltildi

  • Kapsamı sınırlı label:has(> input[type="checkbox"/"radio"]) { min-height: 24px } kuralı ≥24 px’lik bir bant garanti eder. Yalnızca min-height — etiketler zaten flex, hiçbir şey kaymaz; .apply-checklist (32 px) zaten uyumluydu.

Notlar

  • Yalnızca CSS; davranış/JS/i18n/rota/CSP/SSRF/yazma değişikliği yok. tests/checkbox-target-size.test.mjs (+1). Takım: 2429 (+1).

[1.167.0] — 2026-08-13

Düzeltildi (DÜŞÜK, tasarım sistemi) — yükseltilmiş yüzeyler artık ince çizgilerden ayrışıyor (D-3). --panel-2 / --surface-elev1 tokenları, ince çizgiler --line / --border ile aynı --slate değerine çözümleniyordu, görsel ayrım yoktu.

Düzeltildi

  • Temaya duyarlı özel bir token --elev (açık #eef1f6 / koyu #1e232e, her iki temada --slate’ten farklı) artık yükseltilmiş yüzeyleri destekliyor; ince çizgiler --slate’te kalıyor. Kalan bulgular (D-2, D-4, D-5, P4-ETA) docs/UX-ROADMAP.md’de backlog.

Notlar

  • Yalnızca CSS token; davranış/JS/i18n/rota/CSP/SSRF/yazma değişikliği yok. tests/elevation-token.test.mjs (+2). Takım: 2428 (+2).

[1.166.0] — 2026-08-13

Düzeltildi (DÜŞÜK) — rubrik terminolojisi artık kanonik belgeleri yansıtıyor. career-ops.org/docs “beş boyut artı bütünsel bir genel puan” diye tanımlıyor, ancak web-ui, cvstart.org ve wiki hepsi “altı boyutlu rubrik” diyordu (5 + 1 = 6, ama sözcükler uyuşmuyordu).

Düzeltildi

  • Belgelerin ifadesi — “beş boyut artı bütünsel bir genel puan” — README ×17, cvstart.org sitesi ×17, yardım kılavuzu ×17, docs/career-ops-canonical.md ve wiki (Home ×17 + Features) genelinde tutarlı biçimde benimsendi.

Notlar

  • Yalnızca belge/pazarlama; kod/i18n anahtarı/rota/CSP/SSRF/yazma değişikliği yok. tests/rubric-terminology.test.mjs (+2). Takım: 2426 (+2).

[1.165.0] — 2026-08-13

Düzeltildi (DÜŞÜK) — “Two-pager” terimi artık her dil içinde tutarlı. Arapçada kenar çubuğu Latin “Two-pager” gösterirken <h1> tamamen yerelleştirilmişti — aksi halde aynalanmış RTL gezinmesindeki tek Latin dizesi.

Düzeltildi

  • Karar uygulandı: dil başına nav.twoPager ve twoPager.title terimde uyuşur (ikisi de Latin ya da ikisi de yerelleştirilmiş). Yalnızca Arapça ayrıktı; gezinme etiketi artık yerelleştirildi (“الصفحتان”). Yeni bir kanarya, bir dil onları tekrar ayırırsa başarısız olur.

Notlar

  • Yalnızca metin; rota/CSP/SSRF/yazma değişikliği yok. Bir i18n değeri değişti (ar); yeni anahtar yok (anlık görüntü 1219). tests/two-pager-term-consistency.test.mjs (+2). Takım: 2424 (+2).

[1.164.0] — 2026-08-13

Düzeltildi (DÜŞÜK) — üst çubuk arama yer tutucusu artık hiçbir dilde taşmıyor. “Find a company, role or URL…” arama çubuğu küçüldüğünde kırpılıyordu; “…or URL” yarısı asla görünmüyordu.

Düzeltildi

  • top.search (×17) artık kısa “Ara veya URL yapıştır” (her dilde ≤24 karakter), dar bir çubukta bile sığar ve URL ipucunu korur. index.html yedeği eşleşir; aria-label tam ayrıntıyı korur.

Notlar

  • Yalnızca metin; rota/CSP/SSRF/yazma değişikliği yok. Mevcut bir i18n anahtarı ×17 yeniden yazıldı (yeni yok; anlık görüntü 1219). tests/search-placeholder-fit.test.mjs (+2). Takım: 2422 (+2).

[1.163.0] — 2026-08-13

Düzeltildi (DÜŞÜK) — uygulama içi “Belgelere sor” asistanı artık bir raporu PDF olarak dışa aktarmayı kapsıyor. #/reports/:slug’da çalışan bir 📄 Generate PDF düğmesi olmasına rağmen kılavuzun bunu kapsamadığını söylüyordu.

Düzeltildi

  • 17 yardım paketinin tamamında §10 Raporlar altına “Bir raporu PDF olarak dışa aktarma” H3’ü eklendi (düğme nerede, dosya output/*.pdf’e yazılır, Playwright gerekir, göndermeden önce gözden geçir). Asistan getirimi artık Raporlar bölümünü gösteriyor.

Notlar

  • Yalnızca belge/yardım; kod/rota/CSP/SSRF/yazma değişikliği yok. Yardım eşiği 112 → 113 H3 (31 H2 değişmedi). tests/help-reports-pdf-section.test.mjs (+2). Takım: 2420 (+2).

[1.162.0] — 2026-08-13

Düzeltildi (ORTA) — yardım “?” artık ≥24×24 işaretçi hedefi (WCAG 2.5.8). .help-hint her başlıkta padding:0 ile 18×18 px, minimumun altındaydı.

Düzeltildi

  • .help-hint kutusu artık 24×24 (ölçülebilir hedef), görünen halka 18px kalıyor — ortalanmış bir ::before ile çizilir, böylece glif ve <h1> taban çizgisi değişmez. Hover/etkin/odak durumları halkayı izler; kenar boşluğu 6→3px ile boşluk korunur.

Notlar

  • Yalnızca CSS; JS/i18n/rota/CSP/SSRF/yazma değişikliği yok. tests/help-hint-target-size.test.mjs (+2). Takım: 2418 (+2).

[1.161.0] — 2026-08-13

Düzeltildi (ORTA) — #/reports boşluk yerine “Puan algılanmadı” çipi gösteriyor. v1.159.0 dil-duyarlı ayrıştırıcıdan sonra bile puanı ayrıştırılamayan bir rapor boş alan gösteriyordu — başarısızlıktan ayırt edilemez.

Düzeltildi

  • Puan hücresi artık dallanıyor: puan varsa → ton hapı; yoksa → sönük .score-muted çipi (“Puan algılanmadı”, ×17) ve “Raporu aç…” ipucu. Kart klavyeyle kullanılabilir role="link" olarak kalır ve tarih gösterilir.
  • Mevcut nötr belirteci yeniden kullanır; yeni renk yok.

Notlar

  • Yalnızca istemci; rota/CSP/SSRF/yazma değişikliği yok. +2 i18n anahtarı ×17 (anlık görüntü 1217 → 1219). Takım: 2416 (+3).

[1.160.0] — 2026-08-13

Düzeltildi (YÜKSEK) — sağlayıcı metni artık 7 sağlayıcı vaadiyle çelişmiyor. #/config, canlı değerlendirmenin “Anthropic veya Gemini anahtarını kullandığını” ve OpenAI anahtarının “web arayüzü tarafından kullanılmadığını” söylüyordu; panoda “Anthropic-first scoring” yazıyordu — 7 sağlayıcı zincirinden (v1.157.0) beri yanlış.

Düzeltildi

  • config.providerModelNote (×17): artık ⚡ canlı değerlendirmenin yedi anahtarından (Anthropic · Gemini · OpenAI · Qwen · OpenRouter · GitHub Models · Hermes) herhangi biriyle başsız çalıştığını, otomatik sıralı ve yedekli olduğunu belirtiyor. Yanlış OpenAI cümlesi kaldırıldı.
  • dash.quick.evaluateSub (×17): sağlayıcıdan bağımsız (“0–5 uygunluk puanı”). Keys: N / 5 → N / 7.

Notlar

  • Yalnızca metin; rota/CSP/SSRF/yazma değişikliği yok. Yeni i18n anahtarı yok (anlık görüntü 1217). Takım: 2413 (+3).

[1.159.0] — 2026-08-13

Düzeltildi (YÜKSEK) — rapor meta verileri artık dile bağlı değil. İngilizce dışında bir dilde üretilen raporlar #/reports üzerinde boş bir meta veri şeridi gösteriyordu, çünkü parseReportHeader yalnızca İngilizce kalın etiketleri tanıyordu.

Düzeltildi

  • parseReportHeader artık dilden bağımsız ## Machine Summary YAML bloğunu ayrıştırıyor (score: / legitimacy: / date: — auto-pipeline’ın zaten okuduğu kaynak): İngilizce etiketler → Machine Summary → yerelleştirilmiş etiketler (REPORT_LABELS, 17 dil). İngilizce raporlar bayt bayt aynı kalır.
  • Toleranslı sayı ayrıştırma (1.5/5, 1,5/5, 1.5 из 5, 4.5 out of 5); gövdede tarih yoksa dosya mtime’ına düşer.

Notlar

  • Yalnızca okuma/ayrıştırma; rota, CSP, SSRF veya üst yazma değişikliği yok. Yeni i18n anahtarı yok. Takım: 2410 (+8).

[1.158.0] — 2026-08-12

Düzeltildi — iki kozmetik görüntüleme hatası (sekme başlığına sızan bir «?» ve açılış sayfasında yanlış sağlayıcı sayısı). Yalnızca görüntüleme; davranış, güvenlik veya veri akışı değişikliği yok.

Düzeltildi

  • HelpHint’in «?» işareti artık document.title’a sızmıyor. Yönlendirici sekme başlığını ham h1.textContent’ten türetiyordu, bu yüzden sekme «Vacancy search» yerine «Vacancy search?» gösteriyordu. router.js::focusNewView artık başlığı klonluyor, .help-hint’i kaldırıyor ve sonra metni okuyor; görünen «?» dokunulmadan kalıyor.
  • cvstart.org «7» yerine «17 AI providers» gösteriyordu. Features.astro’daki sub() yardımcısı, kart bazlı değiştirmeden önce tüm {n} değerlerini dil sayısıyla (17) yeniden yazıyordu; artık {n} kart bazında çözülüyor (sağlayıcılar → 7, diller → 17).

Notlar

  • Sunucu, rota, CSP, SSRF veya i18n anahtarı değişikliği yok; facts.json biçimi değişmedi. Takım: 2402 test (+1).

[1.157.0] — 2026-08-12

Düzeltildi — canlı değerlendirmeler artık yalnızca Anthropic/Gemini değil, YAPILANDIRILMIŞ herhangi bir sağlayıcıyla çalışıyor. Yalnızca OPENROUTER_API_KEY ayarlı bir kullanıcı yanlışlıkla manuel moda zorlanıyordu.

Düzeltildi

  • Kök neden: anahtarsız bir LLM_PROVIDER sabiti (ör. init’ten gelen LLM_PROVIDER=claude) çıkmaza giriyordu; artık yapılandırılmış sağlayıcılar arasında auto sırasına geri düşüyor (selectActiveProvider + her iki dağıtım kaskadında).
  • İstemci kapılaması (#/deep + mode-page görünümleri) artık eski Anthropic/Gemini yoklaması yerine window.ProviderStatus (/api/status/providers, yedisi) kullanıyor; yeniden yazılmış metinler (deep/eval × 17) + panodaki «Canlı değerlendirmeler» rozeti + config.llmProviderHint.

Notlar

  • Güvenlik değişikliği yok. Takım: 2401 test (+5).

[1.156.0] — 2026-08-12

Refactor — scan.js’i boyut sınırının altına bölmek (P-16) + bir CodeQL düzeltmesi. scan.js 906 satırdı; davranışı koruyan iki fabrika çıkarılarak 648’e indirildi. P-15/P-16 görünüm-bölme çiftini tamamlar.

Değiştirildi

  • Yeni scan/runner.js (tarama yürütme motoru) ve scan/filters.js (filtre durum makinesi) ctx/refs torbalarıyla; scan.js ikisini bağlar.

Düzeltildi

  • CodeQL js/useless-assignment-to-local (#428) config/tab-controller.js: let n = i; → let n;.

Notlar

  • Saf refactor, davranış değişikliği yok; kaynağı okuyan 4 test yeniden yönlendirildi. İki büyük görünüm de artık 800’ün altında (P-15/P-16 tamam). Takım: 2396 test.

[1.155.0] — 2026-08-12

Refactor — config.js’i boyut sınırının altına bölmek (P-15). config.js 1030 satırdı (800 sınırının üstünde); davranışı koruyan iki modül çıkarılarak 783’e indirildi.

Değiştirildi

  • Yeni config/field-specs.js (alan verisi + model listeleri) ve config/tab-controller.js (sekme çubuğu fabrikası); config.js bunlara başvurur, render mantığı değişmez.

Notlar

  • Saf refactor, davranış değişikliği yok; kaynağı okuyan 6 test yeniden yönlendirildi. scan.js (906) olduğu gibi bırakıldı (zaten kısmen bölünmüş; çekirdek temiz bir mekanik bölme için fazla bağlı). Takım: 2396 test.

[1.154.0] — 2026-08-12

Yeni kılavuz — “Tüm yığını bulutta çalıştır.” career-ops’un kendine ait bir bulut/sunucu anlatısı yok, biz de ekledik: üst career-ops hattını, bu career-ops-ui görüntüleyiciyi ve yapay zekâ motorunu (Claude Code üzerinden Claude aboneliği, yerel Hermes, veya API anahtarları) küçük ve her zaman açık bir sunucuya koymak için adım adım tarif. 17 dilde Yardım §31, bir README bölümü ve bir wiki sayfası olarak gelir.

Eklendi

  • Yardım §31 “Tüm yığını bulutta çalıştır” (× 17) — üç parça, hazırlama + kurulum, motor seçimi, güvenli yayınlama (HTTPS ters proxy + kimlik doğrulama + CSP/SSRF/XSS/sır-yok değişmezleri). Yardım paketi 31 H2 / 112 H3’e büyür.
  • README — “Tüm yığını bulutta çalıştır” bölümü (× 17) + wiki’de Cloud-Deployment sayfası.

Notlar

  • Yalnız docs — rota, sunucu veya istemci değişikliği yok; yeni i18n anahtarı yok. 4 yardım testi 31 H2 / 112 H3 sözleşmesine geçer. Takım: 2396 test (değişmedi).

[1.153.0] — 2026-08-12

Jobvite tarayıcısı herkese açık XML akışına taşındı (ebeveyn senkronu). Ebeveyn, Jobvite JSON API’sini emekliye ayırdı (artık sıfır iş döndürüyor); web-ui’nin source’u aynı ölü uç noktayı kullanıyordu, bu yüzden izlenen her Jobvite şirketi sessizce boş taranıyordu. Ebeveyn düzeltmesini (#2623) taşır: source artık companyEId ile anahtarlanan herkese açık kiracı-başına XML akışını okur.

Düzeltildi

  • Source, emekli JSON API’sini çağırıp sıfır iş döndürüyordu; artık https://app.jobvite.com/CompanyJobs/Xml.aspx?c={companyEId} çağırıp XML <result><job>… ayrıştırıyor (CDATA + varlıklar, detail-url, apply-url’den önce).

Değiştirildi

  • companyEId çözümü: (1) portaldaki company_eid:, (2) açık bir api:’nin c= parametresi, (3) pano sayfası keşfi. fetchText (http-json.mjs) non-ok hatasına .location/.retryAfter ekler (salt okunur, geriye dönük uyumlu).

Notlar

  • Güvenlik — iki host (jobs.jobvite.com, app.jobvite.com) her istekten önce assertJobviteUrl ile sabitlenir: yalnız https, katı izin listesi, hiçbir yönlendirme izlenmez. companyEId yalnızca bir ?c= değeridir; source sayısı değişmez.
  • Takım: 2396 test (+4).

[1.152.0] — 2026-08-12

Hermes sağlayıcısı — kablolama tamamlandı + doküman güncellemesi. v1.151.0 Hermes entegrasyonunun kod incelemesi iki gerçek boşluk ve dört tamlık maddesi buldu; hepsi burada düzeltildi ve uygulamanın tüm LLM sağlayıcı listesi tüm doküman yüzeylerinde ve 17 dilde tam yediye çıkarıldı.

Düzeltildi

  • #/config Hermes’i zorlayamıyordu — LLM_PROVIDER açılır listesi yalnızca altı sağlayıcı listeliyordu, bu yüzden HERMES_API_KEY ayarlanabiliyor ama Hermes UI’dan zorlanamıyordu. Artık hermes 8. seçenek ve yeni bir eşlik testi açılır listenin LLM_PROVIDERS’tan tekrar sapmasını engelliyor.
  • Kısa kendi barındırılan anahtarlar sessizce reddediliyordu — isUsableKey’in 20 karakter tabanı bulut anahtarlarına göreydi; hasHermesKey artık gevşetilmiş 8 karakter tabanı kullanıyor (Hermes dokümanının örneği 19 karakter).

Değiştirildi

  • Sağlayıcı listesi README (× 17), uygulama içi yardım (× 17), config.llmProviderHint sözlüğü (× 17) ve docs/sdd’de tam yediye normalleştirildi; hermesChatUrl yolsuz bir ana bilgisayarı tamamlıyor; manuel yedek metni Hermes’i anıyor.

Notlar

  • Güvenlik değişmedi — yeni rota veya SSRF/CSP değişikliği yok; health/doctor bir HERMES_API_KEY satırı kazanıyor.
  • Takım: 2392 test (+2).

[1.151.0] — 2026-08-12

Hermes artık bağlı bir LLM sağlayıcısı (Phase 5) — Phase 5 kapsam çalışması, Nous Research’ün Hermes’inin OpenAI uyumlu bir API Server (hermes gateway → POST /v1/chat/completions) içerdiğini doğruladı; böylece career-ops-ui canlı değerlendirmeleri artık tıpkı OpenAI/Qwen gibi yerel bir Hermes üzerinden çalıştırıyor. Uygulama ayarları’nda HERMES_API_KEY ayarlayın; auto sırasına katılır (en son). Yol haritasının son açık maddesini kapatır — Phase 5, Shape A.

Eklendi

  • Hermes LLM sağlayıcısı (Shape A) — paylaşılan runOpenAICompatible istemcisi üzerinde runHermes (server/lib/openai.mjs), her iki kaskatta (llm-dispatch.mjs + routes/llm.mjs), auto sırasının sonunda + LLM_PROVIDER=hermes sabiti, /api/status/providers ve llm-pricing.mjs. Yapılandırılabilir yerel bir base URL’ye (varsayılan http://127.0.0.1:8642/v1) Bearer kimlik doğrulamasıyla ulaşır — bu, kullanıcı tarafından verilen bir iş URL’si değil, YAPILANDIRILMIŞ bir sağlayıcı uç noktasıdır (OpenRouter/Qwen gibi), dolayısıyla SSRF korumasına dokunmaz.
  • #/config alanları — HERMES_API_KEY (gizli) + HERMES_BASE_URL + HERMES_MODEL (varsayılan hermes-agent), 6 yeni i18n anahtarı × 17 dil (anlık görüntü 1208 → 1214).

Değişti

  • Kapsam çalışması çözüldü: docs/integrations/HERMES.md, uygulama içi yardım §30 (× 17), README tanıtımı (× 14), hermes-bridge skill’i ve yol haritası “planlandı / henüz bağlanmadı”dan bağlandı (Shape A)’ya geçiyor. Shape B (özel bir ajan çalışma zamanı relay’i) gerekmedi.

Notlar

  • Güvenlik: sağlayıcı fetch’i yapılandırılmış bir uç noktadır, diğer OpenAI uyumlu sağlayıcılarla aynı kategoride — yeni SSRF yüzeyi yok, CSP/sanitizer değişikliği yok. HERMES_API_KEY bir SECRET_KEY’dir (asla gösterilmez).
  • Testler (CI-izole, sahte taşıma): tests/hermes-provider.test.mjs (+5); v1.146.0’ın “Hermes dalı yok” kanaryası, BAĞLI olduğunu doğrulamak için tersine çevrildi; sağlayıcı yüzey testleri 7 sağlayıcı sırasına güncellendi.
  • Takım: 2390 test (+5).

[1.150.0] — 2026-08-12

Tutarlı boş durumlar (Phase 4 rötuşu) — her “henüz bir şey yok” paneli artık bazı görünümlerin görünümü sihirli bir 40px ile satır içi yeniden tanımlaması yerine, tek bir paylaşılan .empty stiliyle çiziliyor. Küçük bir görsel tutarlılık düzeltmesi; #/activity, #/cv-studio, #/stats ve #/usage boş durumları artık diğerlerinin tümüyle eşleşiyor (belirteçlenmiş 48px dolgu + kesikli kenarlık).

Değişti

  • #/activity, #/cv-studio, #/stats, #/usage boş panellerdeki satır içi style: { padding: '40px', textAlign: 'center', color: 'var(--foggy)' } ifadesini kaldırdı — üç özellik de zaten paylaşılan .empty sınıfı tarafından sağlanıyor (--space-7 = 48px, ortalanmış, soluk, kesikli kenarlık). Böylece bu dördü diğer ~25 .empty paneliyle birebir aynı çiziliyor.
  • Görünüme özgü meşru geçersiz kılmalar (#/dashboard width:100%, #/pipeline border:none) el değmeden kaldı — yalnızca tamamen gereksiz yeniden tanımlamalar çıkarıldı.

Notlar

  • Yalnızca istemci CSS kullanımı temizliği — rota, sunucu, i18n anahtarı veya CSS kuralı değişikliği yok (.empty sınıfının kendisi değişmedi); sözlük anlık görüntüsü 1208. Tarayıcıda doğrulandı (#/usage boş paneli 48px dolgu + kesikli kenarlık hesaplıyor, 0 konsol hatası).
  • Yeni kanarya testi tests/empty-state-consistency.test.mjs, .empty’yi tek doğruluk kaynağı olarak korur. Phase 5 (Hermes sağlayıcısı) engelli kalmaya devam ediyor.
  • Takım: 2385 test (+2: tests/empty-state-consistency.test.mjs).

[1.149.0] — 2026-08-12

Portallar Ayarlara taşındı (Phase 4) — #/portals artık Sourcing altında değil, Uygulama ayarları yanındaki Setup gezinme grubunda. v1.144.0’dan beri bu bir ayar yüzeyi (takip edilen şirketleri aç/kapat + bir ATS sağlık yoklaması), bir sourcing eylemi değil — dolayısıyla ait olduğu yer burası. Yalnızca gezinme değişikliği; sayfa ve rotası değişmedi.

Değişti

  • #/portals gezinme öğesi → Setup grubu (public/index.html içinde), Uygulama ayarları’nın hemen ardına yerleştirildi. Sourcing grubundan çıkarıldı (grup Scan / Pipeline / Auto-pipeline / Finanse edilen şirketleri korur). #/portals rotası, görünümü ve nav.portals etiketi değişmedi — yalnızca kenar çubuğundaki konum değişti.

Notlar

  • Yalnızca gezinme biçimlendirmesi — rota, görünüm, i18n anahtarı veya sunucu değişikliği yok. Tarayıcıda doğrulandı (0 konsol hatası); tests/portals-nav-placement.test.mjs ile korunuyor.
  • Takım: 2383 test (+2: tests/portals-nav-placement.test.mjs).

[1.148.0] — 2026-08-12

Daha derli toplu tarama filtreleri (Phase 4) — filtre paneli artık düzenli bir ızgara — #/scan filtre paneli, değişken genişlikte katı kutulardan oluşan dağınık bir flex-wrap’ten duyarlı bir ızgaraya geçti ve Uygula / Sıfırla eylemleri artık kendi ayrı, sağa hizalı satırında yer alıyor. Aynı filtreler, aynı davranış — sadece daha okunaklı. Bir tasarım rötuşu (parent-sync yok).

Değişti

  • #/scan filtre paneli → duyarlı ızgara — .scan-filters artık repeat(auto-fill, minmax(180px, 1fr)) sütunları ve eşit boşluklarla display: grid, böylece 11 etiketli filtre her genişlikte dağınık bir satıra sarmak yerine düzenli sütunlara hizalanır.
  • Uygula / Sıfırla eylemleri kendi satırında tüm ızgarayı kaplar, ince bir çizgiyle ayrılır ve sağa hizalanır. scan.js’deki eski gizli etiket hilesi + iç flex sarmalayıcı kaldırıldı.

Notlar

  • Yalnızca CSS + küçük bir DOM temizliği — her filtre id’si (#scan-filter-*, #scan-apply) ve SR.render() bağlantısı değişmedi, dolayısıyla Playwright akışı el değmeden kaldı. Yeni i18n anahtarı yok.
  • Tarayıcıda doğrulandı (0 konsol hatası); tests/scan-filters-grid.test.mjs ile korunuyor.
  • Takım: 2381 test (+3: tests/scan-filters-grid.test.mjs).

[1.147.0] — 2026-08-12

Hermes & Telegram — uygulama içi yardım bölümü + cvstart.org yüzeyi (Phase 5b, bölüm 2) — Hermes belge çalışmasının ikinci ve son parçası: nasıl yapılır artık uygulamanın kendi yardım kılavuzunun içinde, 17 dilin tümünde yaşıyor ve uygulama içi belge asistanı Hermes sorularını buradan yanıtlıyor. Hâlâ yalnızca belge — Hermes LLM sağlayıcı yolu planlandı / henüz bağlanmadı durumunda kalıyor (Phase 5).

Eklendi

  • Uygulama içi yardım §30 “Hermes & Telegram” × 17 dil — yeni bir kılavuz bölümü (Hermes nedir + iki entegrasyon biçimi; bir bulut sunucusunda çalıştırma; Hermes üzerinden Telegram + “NEYİN açığa çıkarılmaması gerektiği” kuralı), #/help üzerinden erişilebilir. docs-assistant / DocsFab grounding’i bunu otomatik alır çünkü ikisi de docs/help/<lang>.md okur.
  • cvstart.org — Hermes kılavuzuna bir bağlantı, GitHub’daki belgeye yönlendirir.

Değişti

  • Yardım paketi eşiği 29 → 30 H2 / 105 → 108 H3 yükseltildi (canonical-docs-coverage, help-ui, help-ru-config-section); §30 üç H3 ekler.

Notlar

  • Hâlâ hiçbir şey Hermes’i çağırmıyor. Yeni kanarya testi tests/help-hermes-section.test.mjs, her dilin §30’u dilden bağımsız çıpalarıyla (docs/integrations/HERMES.md, hermes-bridge, #/help, 127.0.0.1, Telegram) içerdiğini doğrular. Sağlayıcı, Phase 5 API sözleşmesine kadar engelli kalır.
  • Bu, Phase 5b’nin belge + skill çıktısını kapatır; sağlayıcı entegrasyonu (Phase 5) ayrı, engellenmiş bir madde olarak kalır.
  • Takım: 2378 test (+2: tests/help-hermes-section.test.mjs).

[1.146.0] — 2026-08-12

Hermes ajanı + Telegram — entegrasyon kılavuzu + bir skill (Phase 5b, bölüm 1) — career-ops-ui’yi bir bulut sunucusunda çalıştırabilir ve olaylarını (tamamlanmış bir tarama, yeni bir rapor, acil bir takip) Nous Research’ün Hermes ajanı üzerinden Telegram’a bağlayabilirsiniz. Bu sürüm tasarım + dağıtım belgelerini ve bir hermes-bridge skill’ini sunar; Hermes LLM sağlayıcı yolu hâlâ planlanan / henüz bağlanmamış durumda (Phase 5 API sözleşmesi spike’ına tıkanmış). Belgeler kasıtlı olarak koddan önde.

Eklendi

  • docs/integrations/HERMES.md — derinlemesine inceleme: iki entegrasyon biçimi (OpenAI uyumlu endpoint vs. ajan çalışma zamanı), bulut sunucusuna dağıtım (reverse proxy + HTTPS + systemd, başsız bir makinede salt okunur parent sözleşmesi), Hermes üzerinden Telegram ve bir tehdit modeli «NEYİN açığa çıkarılmaması gerektiği» listesi (kanal’a CV / maaş / rapor içeriği / anahtar sızdırılmaz).
  • README’deki ## Hermes agent + Telegram tanıtımı — İngilizce README’de kısa bir yönlendirme + bağlantı, her dilin tam çevrilmiş README’sinde de yansıtılır.
  • Kılavuzu işlevsel kılan bir hermes-bridge skill’i (.claude/skills/hermes-bridge/) — ön koşul + kapsam denetimleri (Node ≥ 18, anahtarların varlığı, SSRF’ye karşı güvenli yol üzerinden endpoint erişilebilirliği), sırları asla diske/loglara yazmaz ve bir Hermes endpoint’i icat etmeyi veya sağlayıcının bağlı olduğunu iddia etmeyi reddeder.
  • docs/architecture/OVERVIEW.md’deki bir Integrations bölümü kılavuza bağlanır.

Notlar

  • Şu an hiçbir şey Hermes’i çağırmıyor. Bir kanarya testi (tests/hermes-docs.test.mjs) «planlanan / henüz bağlanmamış» dürüstlük işaretlerini ve llm-dispatch.mjs’de hiçbir Hermes/Nous dalı olmadığını doğrular — yani sağlayıcının ileride bağlanması, belgeleri + yol haritasını aynı değişiklikte güncellemek zorundadır.
  • v1.147.0’a ertelendi (Phase 5b, bölüm 2): uygulama içi yardımdaki «Hermes & Telegram» H2 bölümü × 17 dil ve cvstart.org pazarlama yüzeyi.
  • Takım: 2376 test (+4: tests/hermes-docs.test.mjs).

[1.145.0] — 2026-08-12

Anlayışlı istatistikler (devam): yeniden oluşturulabilir grafik — #/stats’teki “Hedef rol eğilimi” sekmesinde artık bir Grafik oluştur aracı var: bir metrik × boyut seçin, canlı olarak yeniden çizilsin. Kullanıcı bildirimli bir UX isteği (parent-sync yok).

Eklendi

  • Yeniden oluşturulabilir metrik × boyut grafiği — bir metrik (İlanlar / Medyan maaş / Ortalama maaş) ve bir boyut (Ülkeye göre / Role göre) seçin, çubuk grafik anında yeniden çizilir. Maaş metrikleri para birimi + yıllık ⇄ aylık anahtarına uyar; ilanlar basit bir sayımdır.
  • 8 yeni i18n anahtarı × 17 dil; anlık görüntü 1200 → 1208.

Notlar

  • Tarayıcıda doğrulandı (0 konsol hatası). Takım: 2372 test (+2).

[1.144.0] — 2026-08-12

Ayarlar ve filtreler (Aşama 4, bölüm 1): izlenen portalları etkinleştir/devre dışı bırak — artık izlenen bir şirketi #/portals’tan açıp kapatabilirsiniz ve tarayıcı buna uyar. Kullanıcı bildirimli bir UX isteği (parent-sync yok).

Eklendi

  • #/portals’ta şirket başına Etkinleştir/Devre dışı bırak düğmesi — tek tıkla bir portalı kapatır (EN tarayıcı zaten enabled: false şirketleri atlar, böylece devre dışı portal sonraki tüm taramalardan düşer) veya yeniden açar, iyimser bir bildirimle.
  • POST /api/portals/toggle — portals.yml’deki bir şirketin enabled bayrağını cerrahi biçimde ve ayrıştırma doğrulamasıyla değiştiren açık bir kullanıcı yazımı (yorumlar, sıra ve diğer alanlar korunur). 5 yeni i18n anahtarı × 17 dil; anlık görüntü 1195 → 1200.

Notlar

  • Tarayıcı değişikliği sıfır oldu — en-scanner.mjs zaten enabled !== false ile filtreliyor. Takım: 2370 test (+3).

[1.143.0] — 2026-08-12

Anlaşılır (devam): ana iş akışı görünümlerinde ? ipuçları — yardım ?’i artık tüm dillerde dokuz ana eylem sayfasını kapsıyor. Kullanıcı bildirimli bir UX düzeltmesi (parent-sync yok).

Eklendi

  • 9 görünüm başlığına daha ? yardım ipucu — #/scan, #/evaluate, #/cv-studio, #/tracker, #/config, #/deep, #/batch, #/auto, #/apply satır içi bir ? alır (HelpHint.title ile) ve yerelleştirilmiş bir «ne yapar / nasıl kullanılır / ne beklenir» açılır kutusu açar — v1.139.0’daki aynı CSP-güvenli bileşen.
  • 9 yeni i18n anahtarı × 17 dil (help.hint.scan/…/apply); anlık görüntü 1186 → 1195.

Notlar

  • Tarayıcıda doğrulandı (0 konsol hatası). Takım: 2365 test (+1).

[1.142.0] — 2026-08-12

Düzeltme: artık “Unknown” kariyer arketipi yok — #/orientation artık bazen “Unknown” yanıtlayıp ona “daha çok yüklenmenizi” önermek yerine, her zaman sekiz adlandırılmış kariyer vektöründen sıralama yapıyor. Kullanıcı bildirimli bir düzeltme (parent-sync yok).

Düzeltildi

  • #/orientation — AI istemi artık küme dışı bir arketipi yasaklıyor. Model, ilk üçü tam olarak sekiz adlandırılmış vektörden sıralamak ZORUNDA ve asla “Unknown”/“N/A”/“yetersiz veri” yanıtlayamaz veya yeni etiket uyduramaz. Özgeçmiş zayıfsa yine de en yakın üçünü daha düşük güvenle adlandırır ve hangi kanıtın eksik olduğunu söyler.

Notlar

  • Yalnızca sunucu istemi değişikliği (buildOrientationPrompt); i18n/şema değişikliği yok. Takım: 2364 test (+1).

[1.141.0] — 2026-08-12

Anlayışlı istatistikler (devam): finansman alan şirketlerin zenginleştirilmesi — #/funded artık daha görsel: şirket logoları, finansman tutarına göre bir grafik ve tur / tutar / keşif puanı / önerilen eylem içeren kartlar. Kullanıcı bildirimli bir UX düzeltmesi (parent-sync yok).

Değişti

  • #/funded — düz tablo → kart ızgarası. Yakın zamanda finansman alan her şirket artık bir kart: logo (CompanyLogo ile addan türetilir, başarısızsa harf avatarı), tur + tutar çipleri, üst projenin keşif puanı ve önerilen eylemi, ayrıca finansman haberi bağlantısı ve tarihi.
  • Finansman tutarı görselleştirmesi — açıklanan tutara göre en büyük şirketlerin yatay çubuk grafiği; “$120M”/“€1.5B” gibi serbest metin tutarlar yeni bir parseAmount ile büyüklüğe ayrıştırılır. 3 yeni i18n anahtarı × 17 dil.

Notlar

  • Hâlâ GET /api/company-funded üzerinde salt okunur; açıklama ve maaş aralığı finansman kaynağında yok. Takım: 2363 test (+2).

[1.140.0] — 2026-08-12

Anlayışlı istatistikler: daha zengin maaş rakamları — #/stats’teki “Pipeline’ım” maaş dökümü artık (yalnız medyan değil) ortalamayı, bir yıllık ⇄ aylık anahtarını ve ülke başına min · ort · medyan · maks tablosunu gösteriyor. Faz 3’ün ilk dilimi. Kullanıcı bildirimli bir UX düzeltmesi (parent-sync yok).

Eklendi

  • Ortalama maaş — RoleStats.salaryStats artık minUsd/medianUsd/maxUsd yanında avgUsd döndürüyor. Medyan aykırı değerlere dayanıklıdır, ortalama çarpıklığı gösterir — birlikte bir dağılım olarak okunur.
  • Maaş bölümünde yıllık ⇄ aylık anahtarı ve ülke başına min · ort · medyan · maks tablosu (para birimi ve dönem seçicilerine bağlı). 8 yeni i18n anahtarı × 17 dil.

Notlar

  • Rakamlar hâlâ yalnızca okunabilir maaşlı ilanlardan türetilir ve USD’ye normalize edilir (gösterge niteliğinde). Takım: 2361 test (+1).

[1.139.0] — 2026-08-12

Anlaşılır: ? yardım ipuçları — tıklayınca «ne yapar / nasıl çalışır / ne beklenir» sorularını dilinizde açıklayan, yeniden kullanılabilir ve CSP-güvenli bir ? düğmesi. Kullanıcı bildirimli bir UX düzeltmesi (parent-sync yok).

Eklendi

  • ? yardım ipucu açılır kutusu (window.HelpHint) — bir başlığın yanındaki yuvarlak ?, temaya uyumlu ve RTL’de yansıtılan hafif bir açılır kutu açar ve UI.md() ile yerelleştirilmiş bir açıklama gösterir; erişilebilir (role="tooltip", aria-expanded, Escape/dışa tıklama ile kapanma, odak geri yükleme) ve CSP-güvenli.
  • #/stats’in 5 sekmesine ve 8 AI/analitik görünüm başlığına (career-plan, yönlendirme, two-pager, networking, deneme mülakatı, bellek, funded, haftalık özet) ? eklendi — 14 yeni i18n anahtarı × 17 dil.

Notlar

  • Tüm görünümlerde zaten tek satırlık bir alt başlık vardı; ?, istendiğinde daha derin açıklamayı ekler ve boş durumları kendini açıklar hale getirir. Takım: 2360 test (+4).

[1.138.0] — 2026-08-12

Arayüz dilinde üretim — her AI üretimi artık arayüzde seçtiğin dilde yanıt veriyor; ayrıca incelemeden doğan test sağlamlaştırmaları. Kullanıcı bildirimli bir UX düzeltmesi (parent-sync yok).

Değişti

  • AI üretimleri artık arayüz dilini gözetiyor. Arayüz Rusça, İspanyolca, Japonca … olduğunda üretilen metin her zaman İngilizce yerine o dilde dönüyor. Çıktı-dili yönergesi tüm üretim uç noktalarına iletiliyor — kariyer planı, yönlendirme, pazar raporu, deneme mülakatı, networking planı, «belgeye sor», bellek notu önerisi ve two-pager taslağı. Kod ve tanımlayıcılar İngilizce kalır (ör. two-pager YAML anahtarları); yalnızca düzyazı, başlıklar ve maddeler yerelleştirilir.

Düzeltildi

  • CSS renk-rolü koruması (tests/css-role-tokens.test.mjs) — v1.137.0 karanlık mod takma-ad token’larının rolü asla ters çevirmediğini doğrulayan statik bir kanarya: metin-rolü token’ları (--fg/--danger/--ok/…) asla background olarak, yüzey token’ları (--card/--panel/--line/…) asla metin color’ı olarak kullanılmaz; tüm CSS ve SPA satır-içi stillerinde.
  • UI.md() XSS yükleyici öz-sondası — api.js’ten md()’i yükleyen test artık çıkarımın hemen ardından md('<script>…')’i yokluyor ve escape eksikse hata fırlatıyor; böylece gelecekteki hatalı bir dilimleme, güvenlik takımını kırpılmış bir fonksiyon üzerinde yeşile boyamak yerine yüksek sesle başarısız oluyor.
  • #/career-plan kaydırma koruması — üretim sonrası scrollIntoView yalnızca önizleme hâlâ belgeye bağlıysa çalışır.

Notlar

  • docs/UX-ROADMAP.md güncellendi: ? yardım ipuçları + sayfa açıklamaları + boş durumlar artık v1.139.0; bir Nous Research / Hermes sağlayıcısı — bulut sunucu + Telegram dağıtım kılavuzu ve bir Hermes becerisi ile — Aşama 5 / 5b olarak izleniyor.
  • Takım: 2356 test (+5).

[1.137.0] — 2026-08-11

Okunabilirlik ve render düzeltmeleri — karanlık mod kontrastı, grafik etiketleri ve kariyer planı. Kullanıcı tarafından bildirilen bir UX geçişi (üst proje senkronizasyonu yok).

Düzeltildi

  • Birçok ekranda karanlık modda beyaz-üzerine-beyaz / siyah-üzerine-siyah — birkaç görünümün referans verdiği on beş CSS özel özelliği (--fg, --panel, --panel-2, --ok, --danger, --card, …) hiçbir zaman tanımlanmamıştı, bu yüzden sabit kodlanmış açık/siyah değerlere geri dönüyorlardı: açık modda sorun yoktu, karanlık modda okunamazdı (#/pipeline genel bakış çipleri, #/stats etkin sekme, #/config “Etkin / Anahtarlar” + “✓ ayarlandı”, #/two-pager bölümleri, #/mock-interview soru balonu, hata metni). Artık gerçek temaya duyarlı belirteçlere takma adlandırılmış durumdalar, böylece temayı otomatik olarak takip ediyorlar — otomatik bir denetleyiciyle doğrulanmış, 29 görünümün tümünde 0 WCAG-AA kontrast hatası; #/config etkin sekmesi okunabilir, tonlanmış bir stile taşındı. Bir regresyon koruyucusu (tests/dark-theme-tokens.test.mjs) onları takma adlı tutuyor.
  • #/stats grafik etiketleri kelimenin ortasından kesiliyordu (“Senior Backend Engineer” → “…Enginee”) — artık üç nokta ile kısaltılıyor ve tam etiket bir üzerine gelme araç ipucu olarak korunuyor.
  • #/career-plan oluşturulan planı ham Markdown olarak gösteriyordu — artık biçimlendirilmiş, okunabilir metin olarak otomatik render ediliyor (düzenlenebilir Markdown metin kutusunda kalıyor; Önizleme onu değiştiriyor).

Notlar

  • #/career-plan, #/two-pager, #/stats ve haftalık mülakat özeti bozuk değil — bir plan oluşturana / veriniz olana kadar boş durumlar gösteriyorlar. Daha açık sayfa içi rehberlik ve ? yardım ipuçları bir sonraki adım olarak planlanıyor (docs/UX-ROADMAP.md).

[1.136.0] — 2026-08-11

Üst proje career-ops v1.26.x paritesi (v1.26.0 sonrası ana hat) — bir yeni sıfır-kimlik-doğrulama kaynak artı web-ui yansılarına yönelik bir kalite ve sağlamlık düzeltmeleri dalgası. Kayıt defteri artık 79 kaynak = 74 İngilizce + 5 Rusça (ALL_ADAPTERS 74).

Eklendi

  • eightfold (Eightfold AI, #2684) — sıfır-kimlik-doğrulama https://<tenant>.eightfold.ai/api/apply/v2/jobs API’si üzerinden yetenek-kazanımı panoları, *.eightfold.ai’a ana bilgisayar-sabitli (markalı careers.<company>.com CNAME’i kasıtlı olarak reddediliyor); bir güvenlik üst sınırıyla sayfalanmış, ölü-pano-fırlatma, url-çiftleme. Kaynak + adaptör + CI-izole paket; #/scan Kaynak filtresinde ve açılış sayfasında görünüyor.

Düzeltildi

  • Unicode-duyarlı çiftleme ve rol anahtarları (#2569 / #2587 / #2667) — yeni bir paylaşılan normalizeTextKey (NFKC, herhangi bir yazı sisteminin harflerini/işaretlerini/rakamlarını koruyor) yalnızca-ASCII anahtarların yerini alıyor: detect-reposts artık genişlik/noktalama şirket varyantlarını kümeliyor (“Acme, Inc.” ≡ “Acme Inc”) ve farklı Latin-olmayan işverenleri asla çökertmiyor, role-matcher ise tam-genişlikli unvanları katlıyor ve Latin-olmayan rol belirteçlerini silmek yerine koruyor.
  • fetchJsonWithRetry artık reddedilen bir yönlendirmeyi yeniden denemiyor (#2657) — bir 3xx ile karşılaşan redirect:'error' koruyucusu determinist olduğundan, artık yeniden-denenemez olarak işaretleniyor ve yeniden deneme bütçesini tüketmek yerine hızlıca başarısız oluyor.
  • title_filter.positive VE-grupları (#2552) — pozitif bir girdi içindeki boşlukla ayrılmış bir + artık her terimin, herhangi bir sırada, başlıkta görünmesini gerektiriyor.
  • oraclecloud, numaralandırılmış kiracı apekslerini kabul ediyor oraclecloud1.com … oraclecloud99.com (#2683) — sınırlı bir aile (baştaki sıfır yok, ≤ 2 hane), asla bir joker aleksi değil.
  • workable sağlamlaştırıldı (#2675) — Cloudflare-önlü ana bilgisayara karşı yeniden deneme, tarayıcı-benzeri başlıklar ve istek serileştirmesi.
  • personio, XML beslemesi devre dışıyken hiçbir şey döndürmek yerine bir HTML kazımasına düşüyor.
  • states FALLBACK takma adları üst projeyle yeniden eşzamanlandı (#2615).

Notlar

  • Taşınmadı (web-ui tarafından yansılanmıyor veya yalnızca-CLI): reply-matcher (#2672), jd-similarity (#2661), jd-skill-gap (#2686), tarama ortam-yolu (#2568) / --flag=value (#2589) ayrıştırması, ve kapak mektubu / CV-şablonu / doctor / ollama / generate-pdf değişiklikleri. Web js-yaml/nanoid YÜKSEK önerileri web-ui v1.135.0’da zaten yamalanmıştı.

[1.135.0] — 2026-08-11

Üst proje career-ops v1.26.0 paritesi — beş yeni sıfır-kimlik-doğrulama tarama kaynağı artı web-ui’nin zaten taşıdığı dört panoya doğruluk düzeltmeleri. Kayıt defteri artık 78 kaynak = 73 İngilizce + 5 Rusça (ALL_ADAPTERS 73).

Eklendi

  • Beş yeni tarama kaynağı (her biri bir kaynak + adaptör + CI-izole bir paket; #/scan Kaynak filtresinde ve cvstart.org açılış sayfasında görünüyorlar):
    • join (JOIN) — bir şirketin JOIN panosu, join.com/companies/<slug> içindeki Next.js __NEXT_DATA__’sından (ana bilgisayara sabitli, sayfa sınırlı).
    • getro (Getro) — VC “yetenek ağı” portföy panoları, herkese açık api.getro.com POST API’si üzerinden, en yeniden-eskiye sayfalanmış; her iş fona değil portföy işverenine atfediliyor.
    • consider (Consider) — getconsider.com VC portföy panoları, aynı-kökenli bir POST üzerinden; yapılandırma-güdümlü ana bilgisayar yapısal bir SSRF koruyucusuyla sabitleniyor (yalnızca herkese açık HTTPS ana bilgisayarı).
    • joinup (JOINUP) — İsviçre panosu joinup.ch, SSR edilmiş en yeni sayfayı okuyor; bir kazıyıcı kırılmasında hata-kapalı davranıyor.
    • remotli (Remotli) — remotli.ch, İsviçreli şirketlerdeki uzaktan roller (CHF maaşları); işverenin kendi ATS başvuru URL’sini yayınlıyor, böylece çapraz-listelemeler çiftlemeden ayıklanıyor.

Düzeltildi

  • a16z Speedrun artık geçici bir aksaklıkta tüm panoyu iptal etmiyor — sayfa getirmeleri artık paylaşılan bir fetchJsonWithRetry üzerinden geçiyor (yalnızca geçici 429/5xx/zaman aşımında sınırlı yeniden denemeler, asla kalıcı bir 4xx’te), ve sayfa bütçesi 50 işlik sayfa için yeniden boyutlandırıldı.
  • arbeitsagentur v6 Jobsuche API’sine (/pc/v6/jobs) taşındı — eski v4 uç noktası 404 veriyor; yanıt şekli yeniden adlandırıldı ve uzaktan filtreleme artık sunucu tarafında daralıyor.
  • thehub v2 jobsandfeatured API’sine taşındı; satırlar yayın tarihi taşımıyor ve yaş filtresinden muaf.
  • hackernews, Algolia aramasını serbest metin sorgusu yerine author_whoishiring hesap etiketine filtreleyerek aylık “Kim işe alıyor?” konusunu güvenilir şekilde buluyor.

Notlar

  • Taşınmadı (web-ui zaten güvenli, aktarım-tarafından-emilmiş veya yalnızca-CLI): Unicode rol-çiftleme / şirket-eşleştirme anahtarları (web-ui’nin tekrar-ilan gruplaması zaten şirketi düz küçük harfle anahtarlıyor, bu yüzden farklı Latin-olmayan işverenler asla çökmüyor); takip reddi-gecikme sinyali + finanse edilen şirket rötuşları (salt-okunur, hataya-toleranslı olarak aktarılıyor); tarama ortam-değiştirilebilir yolları ve --flag=value ayrıştırması (web-ui tarayıcıları işlem içinde çalıştırıyor); User-Agent birleştirme yeniden düzenlemesi (web-ui zaten bunu merkezileştiriyor); ve yalnızca-CLI öğeleri (güvenilmeyen-içerik listesi, oferta/offer-prep, doctor, kapak/CV şablon değişiklikleri).

[1.134.1] — 2026-08-05

Doğrulama sağlamlaştırması — kapsamlı bir proje denetimiyle ortaya çıkan düzeltmeler.

Düzeltildi

  • successfactors artık tarama-ortası bir hatada kazınan işleri atmıyor (v1.134.0’daki ölü-pano-fırlatma aktarımında bir regresyon) — sayfalama döngüsünde try/catch yoktu, bu yüzden 2. sayfa ve sonrasında (1. sayfa başarılı olduktan sonra) bir hata fırlatılıyor ve o ana kadar toplanan her şeyi düşürüyordu; ve bu hata bir 404 ise (aralık dışı bir startrow), en-scanner canlı bir kiracıyı günlerce ölü olarak karantinaya alıyordu. Şimdi phenom/radancy ile aynı: 0. sayfadaki bir hata hâlâ fırlatılıyor (ölü pano), ancak daha sonraki bir sayfadaki hata kısmi sonuçları koruyor.
  • #/scan filtre çipleri artık klavyeyle çalıştırılabiliyor (WCAG 2.1.1) — faset çipleri (ve “temizle” çipi) bir tıklama işleyicisine sahip ama tabindex/rolü olmayan span’lerdi, bu yüzden klavye ve ekran okuyucu kullanıcıları onlara erişemiyor veya değiştiremiyordu. Şimdi role="button", tabindex="0", aria-pressed taşıyorlar ve Enter/Boşluk ile etkinleştiriliyorlar.
  • Üç sabit kodlanmış İngilizce dize artık yerelleştirildi — #/scan güven-rozeti araç ipucu, #/scan yer değiştirme sütun başlığı ve #/dashboard puan başlığı, i18n parite kapısının göremediği çıplak literallerdi (hiçbir zaman anahtar olmamışlardı), bu yüzden İngilizce olmayan her yerelleştirmede İngilizce kalıyorlardı. Şimdi scan.trustTip + scan.col.reloc (2 yeni anahtar) ve mevcut track.col.score’un yeniden kullanımı var, kaynak-statik bir koruyucuyla (tests/scan-chip-a11y.test.mjs) sabitlenmiş.
  • +3 test → paket 2187.

[1.134.0] — 2026-08-05

Üst proje career-ops v1.25.0 paritesi.

Eklendi

  • Yeni tarama kaynağı: getManfred (manfred) — yayınlanmış maaşlarla İspanyol/AB teknoloji rollerinin pano-geneli bir beslemesi, www.getmanfred.com/api/v2/public/offers’tan (sıfır-kimlik doğrulama, ana bilgisayara sabitlenmiş + yalnızca-HTTPS, tek istekli tam katalog). Kaynak + adaptör + CI-izole bir paket (tests/sources-manfred.test.mjs); kayıt defteri artık 73 kaynak = 68 İngilizce + 5 Rusça (ALL_ADAPTERS 68). #/scan Kaynak filtresinde ve cvstart.org açılış sayfasında görünür.

Düzeltildi

  • a16z Speedrun beslemesi sessizce 50 işe kısaltılıyordu (#2404) — besleme bir sayfayı 50 ile sınırlıyor ancak kaynak PER_PAGE = 100 istiyordu, bu yüzden sayfalama 1. sayfadan sonra duruyordu. 50’ye düzeltildi.
  • Ölü panolar artık “canlı ama boş” olarak okunmak yerine hata fırlatıyor (#2379) — cryptocurrencyjobs, phenom, radancy, successfactors: hiçbir isteğin hiç çözümlenmediği bir getirme hatası artık hata fırlatıyor (böylece #/portals sağlığı ve tarama gerçek bir hatayı kaydediyor), onu boş bir listeye yutmak yerine; en az bir başarıdan sonraki bir tarama-ortası hata kısmi sonuçları koruyor.
  • workable artık genel widget API’sini kullanıyor (#5ab8425) — büyük bir hesabın tam ilan listesini tek bir istekte döndüren apply.workable.com/api/v1/widget/accounts/<slug>’a geçildi, böylece büyük hesaplar artık kısaltılmıyor.

Notlar

  • Taşınmadı (yalnızca CLI veya web-ui tarafından yansıtılmıyor): detect-reposts #2389 başlık-gruplama performans yeniden yazımı; Unicode şirket-anahtarı düzeltmeleri (web-ui’nin kendi takipçi çiftlemesi zaten Latin-olmayan-güvenli); scan --since; cv-facts; CV şablonu / PDF denetim geçişi; doctor; modes güvenilmeyen-içerik direktifi.

[1.133.1] — 2026-08-02

Düzeltildi

  • #/funded (Finanse edilen şirketler) artık sonuçları gösteriyor — üst projenin company-funded.mjs’i eksiksiz bir liste döndürdüğünde bile tablonun her zaman “finanse edilmiş şirket yok” göstermesine neden olan iki hata vardı. (1) Görünüm sonuçları res.candidates altında okuyordu, ancak üst proje bunları companies altında yayınlıyor (her biri { company, amount, round, funding: { sources: [{ source, url, observed_date }] } }); istemci artık doğru anahtarı okuyor ve gerçek kanıt şeklini eşliyor. (2) Sonuç tablosu hücrelerini UI.el('tr', {}, …)’a değişken sayıda bağımsız değişken (varargs) olarak geçiriyordu, ancak UI.el(tag, attrs, children) children’ı tek bir düğüm veya dizi olarak alıyor, bu yüzden yalnızca ilk sütun (Şirket) render ediliyordu — hücreler artık bir dizi olarak geçiriliyor. Gerçek bir tarayıcıda doğrulandı: dört besleme genelinde 11 şirket, Şirket / Finansman sinyali / Kaynak / Tarih sütunlarıyla ve çalışan kanıt bağlantılarıyla render ediliyor, sıfır konsol hatası. Boş bir tarama artık kaynak başına tanılamaları da gösteriyor, böylece sessiz bir haber günü engellenmiş bir beslemeden ayırt edilebiliyor.
  • tests/parity-routes-v1133.test.mjs içinde regresyon korumaları: sahte üst proje betiği artık gerçek companies çıktı şeklini yayınlıyor (orijinal test sabiti yanlış candidates şeklini yansıtıyordu — hatanın yeşil geçerek yayınlanmasının tam nedeni buydu), ayrıca funded.js’in res.companies’i okuduğunu (asla res.candidates’i değil) ve tablo satırlarını dizi children ile oluşturduğunu doğrulayan kaynak-statik kanaryalar eklendi (+1 → 2144).

[1.133.0] — 2026-08-01

Eklendi

  • Finanse edilen şirket keşfi (#/funded, üst proje paritesi #2117) — üst proje career-ops’un company-funded.mjs’ini GET /api/company-funded üzerinden aktaran yeni bir salt-okunur görünüm: herkese açık, ana bilgisayara sabitlenmiş finansman beslemelerinden (TechCrunch, PR Newswire, The Guardian, Hacker News) keşfedilen, yakın zamanda finanse edilmiş şirketlerin inceleme-öncelikli bir listesi. Aktarım, betiği --json --dry-run ile çalıştırır (stdout’a JSON, dosya yazması yok), kullanıcı girdisini asla --sources’a aktarmaz, hız sınırlaması taşır ve kullanıcı tarafından tetiklenir (bir Keşfet düğmesi, asla bağlanma sırasında değil). Yeni rota modülü server/lib/routes/funded.mjs + public/js/views/funded.js, Kaynak bulma altında.
  • Haftalık mülakat özeti (#/interview-digest, üst proje paritesi #2129/#2130) — üst projenin sıfır-LLM weekly-digest.mjs’ini GET /api/interview/weekly-digest üzerinden aktaran yeni bir salt-okunur görünüm: mülakat oturumu notlarının mekanik bir toplu özeti — bu hafta hangi şirketlerle ve hangi turlarda mülakat yaptığınız, tekrar eden yetkinlikler ve elden geldiğince tespit edilen açık boşluklar. İsteğe bağlı ?from=&to= aralığı yalnızca İKİSİ de geçerli YYYY-MM-DD olduğunda aktarılır; boş bir aralık geçerli bir available:true özetidir. server/lib/routes/interview.mjs + public/js/views/interview-digest.js’e eklendi, Analitik altında.
  • Her iki aktarım da üst proje betiği yokken (CI, bağımsız kurulumlar) yerleşik hataya karşı toleranslı available:false sözleşmesini izler. 26 yeni i18n anahtarı ×17 yerelleştirme; CI-izole paket tests/parity-routes-v1133.test.mjs (+5 → 2143).

Notlar

  • Üst proje career-ops, Next.js web/ uygulamasının Takip İzleyicisi sayfası (#1422) ve arka uç PDF render’ı (#2182) ile v1.24.0’ın ötesine geçti — taşınmadı: web-ui’nin zaten kendi takip aktarımı ve PDF çalıştırıcıları var ve alttaki followup-cadence.mjs sağlamlaştırması kabuk-açma aktarımı üzerinden bedavaya geliyor. set-status.mjs / tracker-utils.mjs değişiklikleri CLI-dahilidir ve yansıtılmıyor.

[1.132.0] — 2026-07-31

Değiştirildi

  • #/scan sonuç-render alt sistemi public/js/lib/scan-results.js’e çıkarıldı (dosya-boyutu-sözleşmesi borcu — public/js/views/scan.js ~1254 satıra kadar büyümüştü). Alt sistem (renderResults, buildChipRow, getRows, satır/faset oluşturucuları, seçenek boyacıları ve FALLBACK_SOURCES kayıt defteri aynası) görünümün sağladığı bir bağlam nesnesini kapsayan bir window.ScanResults.create(ctx) fabrikasına taşındı. Davranış değişikliği yok — fonksiyonlar birebir taşındı, kapatma değişkenleri ctx.*’e yeniden bağlandı; scan.js artık ~906 satır (800 satırlık hedefe doğru ikinci bir çıkarma geçişi planlanıyor).
  • Kaynak-statik testler her iki dosyayı tests/helpers/scan-src.mjs::loadScanSrc() üzerinden okuyor; tests/scan-fallback-sources.test.mjs artık kayıt defteri aynasını scan-results.js’ten okuyor.
  • Yeni tarayıcı-içi regresyon kapısı — tests/playwright-scan-filters.mjs hazır bir data/last-scan.json tohumluyor ve her #/scan filtresini çalıştırarak tam satır sayılarını doğruluyor (npm run test:e2e:browser); bunun için kararlı filtre kimlikleri (#scan-filter-*, #scan-apply) eklendi.
  • README “En son sürüm” afişi tek satırlık bir özet + tam changelog’a bir bağlantıya indirildi (uzun çok-sürümlü anlatı duvarı kaldırıldı). Tüm 17 yerelleştirmede uygulandı.

career-ops-ui v1.267.1 · page 4/10 · mirror of the project changelog for cvstart.org