İran'ın ABD şirketlerine saldırısı başladı! Batelco'nun genel merkezi vuruldu

Ortadoğu’daki gerilim dijital altyapıya sıçradı. İran füzeleri Bahreyn’in Hamala bölgesinde bulunan ve Amazon Web Services’e ev sahipliği yapan ülkenin en büyük telekomünikasyon şirketi Batelco’nun genel merkezini vurdu. Saldırılar nedeniyle bölgede kesintiler yaşandı. Bankacılık ve havacılık sistemleri etkilenirken, İran’ın ABD’li teknoloji devlerini hedef alacağını duyurması küresel çapta bulut altyapısına yönelik riskleri yeniden gündeme taşıdı.

iPhone 13 5G destekliyor mu? iPhone 13 5G uyumlu mu?

Türkiye’de mobil iletişimde yeni bir dönemin kapıları aralanıyor. 1 Nisan itibarıyla 5G teknolojisine geçiş sürecinin başlamasıyla birlikte, akıllı telefon kullanıcıları cihazlarının bu yüksek hızlı altyapıya uyum sağlayıp sağlayamayacağını merak ediyor. Özellikle iPhone 13 sahipleri, cihazlarının 5G performansını destekleyip desteklemediğini ve yeni nesil bağlantı hızlarından faydalanıp faydalanamayacağını araştırıyor. Peki, iPhone 13 5G destekliyor mu? iPhone 13 5G uyumlu mu? Detaylar…

iPhone 18 serisi ne zaman çıkacak? iPhone (18, 18 Pro, 18 Pro Max, 18E) Türkiye' ye ne zaman gelecek?

Apple, akıllı telefon pazarında yıllardır süregelen Eylül lansman geleneğini yeniden şekillendirmeye hazırlanıyor. Önümüzdeki iPhone 18 serisiyle birlikte şirketin, ürünlerini yıl içine yayacak iki aşamalı bir tanıtım stratejisi izleyeceği sızıntılarla ortaya çıktı. Peki, iPhone 18 serisi ne zaman çıkacak? iPhone 18, 18 Pro Türkiye’ ye ne zaman gelecek? Detaylar haberimizde.

DNA robots could deliver drugs and hunt viruses inside your body

DNA robots are emerging as tiny programmable machines that could one day deliver drugs, hunt viruses, and build molecular-scale devices. By borrowing ideas from traditional robotics and combining them with DNA folding techniques, scientists are creating structures that can move and act with precision. These robots can be guided using chemical reactions or external signals like light and magnetic fields.

OpenAI, 122 milyar dolar yatırım aldı

OpenAI, yapay zekanın gelişiminde bir sonraki aşamayı hızlandırmak amacıyla 122 milyar dolarlık yeni bir yatırım turunu tamamladığını duyurdu. Şirketin paylaştığı bilgilere göre bu yatırım, hem mevcut…

How We Finally Solved Test Discovery

How We Finally Solved Test Discovery

Yesterday I wrote about why test file discovery is still unsolved. Three approaches (stem matching, content grepping, hybrid), each failing differently. The hybrid worked best but had a broken ranking function – flat scoring that gave src/ the same weight as src/pages/checkout/. Today it’s solved.

The Problem With Flat Scoring

The March 30 post ended with this bug: +30 points for any shared parent directory. One shared path component got the same bonus as three. With 3 synthetic inputs, other factors dominated. With 29 real file paths, unrelated test files ranked above relevant ones.

The fix wasn’t tweaking the constant. It was replacing the scoring model entirely.

Five Tiers, Not Points

Instead of adding up weighted scores, we rank by structural relationship. Higher tiers always win over lower ones, regardless of path depth or name similarity.

Tier 1 – Colocated tests. Same directory, same stem with a test suffix. Button.tsx and Button.test.tsx side by side. This is the strongest signal possible.

Tier 2 – Same-directory content match. A test file in the same directory whose source code imports the implementation file.

Tier 3 – Path-based match. The test file’s path contains the implementation stem. tests/test_client.py for services/client.py. The classic mirror-tree convention.

Tier 4 – Content grep match. A test file anywhere in the repo references the implementation file in its source code.

Tier 5 – Parent directory content match. A test file in a parent directory that references the impl. Weakest signal, but still a real connection.

The key insight: tiers are ordinal, not additive. A Tier 1 match always outranks a Tier 3 match. No combination of bonus points can promote a distant test above a colocated one.

Content-Aware Matching

Path matching alone can’t handle barrel re-exports. When a test imports from '@/pages/checkout' and that resolves to index.tsx, the string “index” never appears in the import statement. Path matching sees nothing.

Content-aware matching reads the test file and greps for references to the implementation. If a test file contains import { CheckoutPage } from './index' or require('./checkout'), the content grep catches it. Tiers 2, 4, and 5 are the content tiers that fill gaps path-only matching leaves open.

Single-Source Patterns

Every language has its own test naming convention:

  • .test.ts, .test.tsx – JavaScript/TypeScript (Jest, Vitest)
  • .spec.ts, .spec.tsx – Angular, Cypress, Playwright
  • test_*.py – Python (pytest)
  • *_test.go – Go
  • *Test.java, *Test.kt – Java/Kotlin (JUnit)
  • *_spec.rb – Ruby (RSpec)
  • *.spec.js – JavaScript (Mocha, Jasmine)

All of these are defined once and imported everywhere. Before this change, three different functions each maintained their own pattern list – slightly different, each missing cases the others caught.

The Takeaway

Test file discovery looks like a string matching problem. It’s actually a ranking problem with structural priors. Flat scoring collapses structure into numbers and loses information. Tiered ranking preserves the structural relationship and makes the algorithm’s priorities explicit and debuggable. And the only way to validate ranking is against real data at real scale – not 3 curated inputs that any algorithm can pass.