· kaynak dev.to (home feed)
Kairos 1.0, 'ay sonundan 3 iş günü önce' ifadesini tek bir ifadeye indiren bir schedule DSL'i ile geliyor
Kairos 1.0, cron, Quartz ve RRULE'un ifade edemediği iş takvimi kurallarını birleştiren küçük bir DSL'i dondurdu ve yaklaşan ile kaçırılan zamanlama noktalarını listeleyen TypeScript referans bir CLI ile geliyor.

Kairos'un geliştiricisi, dilin 1.0 sürümünü etiketledi: "ay sonundan 3 iş günü önce" gibi kuralların ya da ayın 25'ine denk geldiğinde hafta sonuna veya tatile kaydırılan maaş gününün, cron girdilerinin etrafına sarılmış scriptler değil tek ifadeler olarak yazılabildiği küçük bir DSL. dev.to'daki duyuruya göre 1.0, dilin semantiğini, operatör ailesini, EBNF dil bilgisini ve sözlüğünü donduruyor; böylece bugün parse edilen tanımlar anlamını koruyor.
Birleştirilebilir akışlar, daha fazla özellik değil
Yazarın teşhisi, mevcut zamanlayıcıların özellik değil birleştirilebilirlik ekseneği sahip olduğudur. Cron ayın 25'ini söyleyebilir ama onu iş günlerine kaydıramaz; Quartz L ve LW token'larını sunar ama bunlar birleşmez ve tatillerden habersizdir; RRULE bir ifade dili değil, bir değişim formatı olarak tasarlanmıştır. Kairos closure üzerine kuruludur: her ifade bir an (instant) akışını başka bir an akışına eşler, böylece türetilmiş akışlar — kutlanan tatiller, mali dönemler, ay-güneş ayları — başka tanımları besler.
Takvimler kullanıcı tanımlıdır. Duyuru, Gregoryen takviminin kendisinin Kairos ile yazılmış bir stdlib tanımı olduğunu; 4-4-5 mali takvimlerin, ticaret takvimlerinin ve Japon ay-güneş takviminin yerleşik özellikler değil sıradan tanımlar olduğunu belirtiyor. Japonya'nın vekil tatil yasası gibi türetme kuralları, önceden genişletilmiş tablolar yerine tanımın içinde yaşar: 4 Temmuz 2026 cumartesiye denk geldiği için, ifade kutlanan 3 Temmuz'u, kutlama tarihlerine bakmadan türetir.
Beş crontab girdisi, çevrilmiş halde
dev.to'daki eşlik eden göç yazısı uygunluk konusunda net: düz sabit saatli tekrarlar cron'da kalmalı. Dil, "ay sonu" veya "iş günü" ifadelere sığmadığında, bir sunucu taşınmasından sonra iş bir saat kaydığında ya da bir kesinti sırasında neyin atlandığını kimse yeniden kuramadığında değer kazanıyor. 2026 ABD federal tatilleri bildirilen önkabulünden yola çıkarak beş yaygın girdiyi çeviriyor:
- Hafta içleri 9'da ifadesi
bizDay |> at(T09:00)olur — timezone tanımda yaşar ve Labor Day atlanır. - Ay sonu 23:55 ifadesi
monthEnd |> at(T23:55)olur; cron'un 28'inden 31'ine kadar uyandırıp bir script'e yarının ayın 1'i olup olmadığını sordurma geçici çözeminin yerini alır. - İş günlerine kaydırılan ayın 25'i maaş günü,
everyDay |> within(month) |> nth(25) |> roll(Preceding, on: bizDay)olur. 2026'da 25 Ekim pazar günü olduğundan ifade 23'ünü verir; 25 Aralık Noel olduğundan 24'ünü verir. - Ayın son iş günü
bizDay |> within(month) |> lastifadesidir. - Ay sonundan üç iş günü önce şu ifadedir:
monthEnd |> roll(Preceding, on: bizDay) |> shift(-3, unit: bizDay)
Kasım 2026'da sayım Şükran Günü'nü atlar ve 24'üne denk gelir. Yazı, bir nokta hedef eksenin dışındaysa yalnızca o zaman etki eden koşullu bir hareket olan roll ile, bir eksen boyunca sayan shifti birbirinden ayırır.
CLI, ne zaman sorusunda duruyor
Kairos bilinçli olarak yalnızca "ne zaman" sorusunu yanıtlar; tetikleme, yeniden deneme ve günlükleme runner'da kalır ve bu ayrım spesifikasyonun parçasıdır. CLI, cron'un yanıtlayamayacağı soruları kapsar: kairos next yaklaşan noktaları listeler ve kairos list --from … --to … yarı açık bir pencereyi sayar; böylece 20–31 Ekim arasında kapalı kalan bir makine, kaçırılan 23 Ekim maaş çalıştırmasını düz bir liste olarak bildirir. İki bağlantı önerisi sunulur: bir noktanın bugüne denk gelip gelmediğini kontrol eden ve gelirse işi çalıştıran tek bir crontab satırı tutmak, ya da sonraki noktayı JSON olarak alıp systemd-run, at(1) veya Windows schtasks'a teslim etmek ve işin her bir sonraki noktayı yeniden kaydetmesine izin vermek.
Değerlendirme, bir an kümesi üzerinde saf bir fonksiyondur; bu da kaçırılan tetiklemeleri sayılabilir ve denetimleri yeniden üretilebilir kılar. Duyuru, semantiğin bağımsız bir uygulama tarafından bir yaz boyunca üretimde kullanıldığını, tahminlerin 10 hostname ve yerelden VPS'e bir göç boyunca kararlı kaldığını söylüyor. Takvim verisi tükendiğinde sonuçlar sessizce başarısız olmak yerine makine tarafından okunabilir kapsam ve tazelik ek açıklamaları taşır; sivil gün ve geçen saat genişliklerini karıştırmak ya da bir timezone'u bildirmemek gibi hatalar, düzeltme yönergeli statik hatalar olarak yüzeye çıkar.
Durum ve uyarılar
Referans uygulama bir prototip olarak tanımlanıyor: TypeScript, sıfır runtime bağımlılığı, doctest'ler dahil 638 test ve her dokümantasyon örneği CI'da çalıştırılıyor. Dokümantasyon Japonca olarak kanonik; spesifikasyonun, operatör referansının ve stdlib rehberlerinin tam bir İngilizce aynası mevcut; değerlendirici hata mesajları şu anda Japonca, CLI'nin -- çıktısı ise dilden bağımsız. Proje Apache-2.0 lisanslı ve npm (kairos-lang) ile kuruluyor; tamamen istemci tarafında çalışan bir tarayıcı playground'u var.
Neden önemli
İş takvimi mantığı, zamanlamanın standart araç setinden kaçtığı yerdir ve genellikle cron'a cıvatalanmış sarıcı scriptler ve tatil tabloları olarak son bulur — onları yazan kişiye okunur, başkasına değil. Dondurulmuş, birleştirilebilir bir spesifikasyon bu kuralları, yeniden üretilebilir değerlendirmeye sahip, gözden geçirilebilir ifadelere dönüştürür; maaş ödemesi, mutabakat ve toplu iş hatlarının, biri neyin çalıştığını, neyin kaçtığını ve nedenini sorduğunda ihtiyaç duyduğu şey budur. Kapsamlandırmak dürüst — cron saat olarak kalır, Kairos yalnızca karar verir — ve uyarılar (prototip bir uygulama, Japonca öncelikli dokümantasyon, genç bir ekosistem) açıkça belirtilmiş. Crontab'larında takvim hileleri birikmiş ekipler için bu, denemek için düşük riskli bir şey yapıyor.
- #scheduling
- #dsl
- #cron
- #open-source
- #typescript
İlgili yazılar
- MCPbouncer, MCP araçlarına bağlı yapay zeka ajanları için yerel bir aksiyon firewall'u açık kaynak yaptı
- RevenueOS açık kaynak gelir ajanı olarak ücretsiz çalışıyor, yalnızca onaylanmış ölçülmüş sonuçlar için ücret alıyor
- Benchmark: oxlint, Vue core üzerinde ESLint'i 18 kat, type-aware kurallarla 13 kat geçiyor