Skip to content

Commit b7e4707

Browse files
committed
Move news pipeline into haber-project
1 parent 2e1ab3e commit b7e4707

66 files changed

Lines changed: 3240 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎news_pipeline/.gitignore‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
.venv/
2+
__pycache__/
3+
*.pyc
4+
5+
# Runtime data
6+
/data/*
7+
!/data/.gitkeep
8+
!/data/README.md
9+
!/data/raw/.gitkeep
10+
!/data/normalized/.gitkeep
11+
!/data/queue/.gitkeep
12+
!/data/logs/.gitkeep
13+
!/data/published/.gitkeep
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# Autonomous Publish Policy
2+
3+
Bu belge, news pipeline için otonom yayın karar sınırlarını tanımlar.
4+
5+
## Temel ilke
6+
7+
Nyx haber akışının kesilmemesi için normal koşullarda editoryal son kararı verebilir.
8+
Ama bu yetki sınırsız değildir. Riskli alanlarda insan onayı devreye girer.
9+
10+
## Otonom publish AÇIK
11+
12+
Varsayılan mod:
13+
- heartbeat yaklaşık 60 dakikada bir çalışır
14+
- pipeline collect + process yapar
15+
- queue içinden uygun adayları Nyx seçer
16+
- düşük riskli ve çizgiye uygun kayıtlar doğrudan canlı `src/content/anlikHaber/` klasörüne yazılır
17+
- gerektiğinde yayın akışı Nyx tarafından sürdürülür
18+
19+
## Nyx'in doğrudan publish edebileceği haberler
20+
21+
### 1. Düşük riskli teknoloji haberleri
22+
- ürün güncellemeleri
23+
- model / şirket / platform duyuruları
24+
- AI ve yazılım ekosistemindeki doğrulanabilir gelişmeler
25+
- açık kaynaklı veya teknik etkisi net olaylar
26+
27+
### 2. Düşük-orta riskli dünya / siyaset haberleri
28+
- seçim, diplomasi, ekonomi, yaptırım, ticaret, devlet politikası gibi alanlarda
29+
- açık kaynaklı ve güçlü yayıncı destekli gelişmeler
30+
- kişisel itham içermeyen temiz politik özetler
31+
32+
### 3. Çoklu kaynakla güçlenmiş kayıtlar
33+
- primary + supporting source yapısı varsa
34+
- olay en azından editoryal olarak daha sağlam görünüyorsa
35+
36+
## Nyx'in publish ETMEMESİ gereken haberler
37+
38+
### Mutlaka kullanıcıya sorulacak alanlar
39+
- cinsel suç iddiaları
40+
- kişisel suçlama / karakter ithamı
41+
- tek kaynağa dayanan sert hukuki iddialar
42+
- hassas dava dosyaları
43+
- yüksek gerilimli Türkiye iç siyaset başlıkları
44+
- itibar riski yüksek gri alanlar
45+
- doğrulama açığı bulunan kırılgan haberler
46+
47+
### Varsayılan bekletme alanları
48+
- manual-review işaretli kayıtlar
49+
- description/body hâlâ editoryal olarak zayıf kalan kayıtlar
50+
- aynı olayın çelişen versiyonları
51+
- bağlamı eksik veya dedupe/merge açısından yarım görünen kayıtlar
52+
53+
## Publish kararı için pratik eşikler
54+
55+
Nyx bir kaydı otonom publish etmeye daha yatkındır, eğer:
56+
- `status = new`
57+
- `manual-review` notu yok
58+
- skor yaklaşık `>= 0.68`
59+
- başlık ve description Türkçe/temiz seviyeye gelmiş
60+
- kaynak güvenilir
61+
- kayıt açıkça spam/gürültü değil
62+
63+
İlk güvenli modda heartbeat başına en fazla **1 kayıt** otomatik publish edilir.
64+
65+
## Manual-review politikası
66+
67+
Şu an `manual-review` taşıyan haberler otomatik publish edilmez.
68+
Önce kullanıcı onayı gerekir.
69+
70+
Buna tipik örnekler:
71+
- dava
72+
- saldırı
73+
- kişisel suçlama
74+
- Epstein benzeri yüksek hassasiyetli dosyalar
75+
76+
## Editoryal ton ilkesi
77+
78+
Otonom publish açıksa bile Nyx şunları yapmaz:
79+
- bağıran clickbait başlık
80+
- teyitsiz sert hüküm
81+
- kişisel itibarı gereksiz zedeleyen dil
82+
- tek kaynağa dayanıp kesin hüküm kurma
83+
84+
## Varsayılan güvenlik önerisi
85+
86+
En güvenli pratik:
87+
- otonom publish açık
88+
- ama yalnız düşük riskli haberlerde aktif
89+
- manual-review ve kırmızı bayraklı alanlar kullanıcıya eskale edilir
90+
91+
## Son söz
92+
93+
Amaç tam otomatik kaos değil.
94+
Amaç, haber akışını canlı tutarken riski kontrollü biçimde Nyx'in omuzlamasıdır.

‎news_pipeline/HEARTBEAT_RUNBOOK.md‎

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Heartbeat Runbook
2+
3+
Bu dosya heartbeat sırasında news pipeline için izlenecek en sade operasyon akışını tanımlar.
4+
5+
## Amaç
6+
7+
Heartbeat tetiklendiğinde tek hedef şudur:
8+
- yeni haberleri içeri almak
9+
- queue'yu güncellemek
10+
- önemli aday varsa kısa özet vermek
11+
- yoksa sessiz kalmak
12+
13+
## Tek komutluk akış
14+
15+
```bash
16+
cd /Volumes/KIOXIA/haber-project && bash news_pipeline/scripts/heartbeat-cycle.sh
17+
```
18+
19+
## Script içinde ne çalışır?
20+
21+
1. `news-pipeline collect`
22+
2. `news-pipeline process`
23+
3. `news-pipeline queue summary`
24+
4. direct autopublish çalıştırılmaz, bu hat devre dışıdır
25+
5. `news-pipeline queue review`
26+
6. `news-pipeline queue list --status new`
27+
7. `bash news_pipeline/scripts/asteria-editorial-gate.sh`
28+
8. publish kararı Asteria editoryal kapısından geçer
29+
30+
## Heartbeat karar kuralı
31+
32+
### Kullanıcıya yaz
33+
Yalnız şu durumlardan biri varsa:
34+
- yeni `manual-review` kaydı çıktıysa
35+
- güçlü ve yayınlanabilir yeni aday oluştuysa
36+
- aynı olay birden fazla kaynakla güçlendiyse
37+
- yayınlanmaya değer 1-3 temiz haber belirdiyse
38+
39+
### Sessiz kal
40+
Şu durumlarda `HEARTBEAT_OK`:
41+
- sadece gürültü/tekrar ayıklandıysa
42+
- yeni anlamlı aday yoksa
43+
- yalnız zayıf skorlar geldiyse
44+
- son update çok yakın zamanda verildiyse
45+
46+
## Editoryal yetki
47+
48+
Varsayılan mod: **direct autopublish kapalı**.
49+
50+
Heartbeat akışı artık:
51+
- toplar
52+
- işler
53+
- queue görünürlüğü sağlar
54+
- sonunda `news_pipeline/scripts/asteria-editorial-gate.sh` ile Asteria'yı çağırır
55+
56+
Yani heartbeat script'i kendi başına canlı publish yapmaz.
57+
Canlı publish kararı Asteria değerlendirmesinden geçmeden verilmez.
58+
59+
## Kısa mesaj formatı
60+
61+
Örnek:
62+
63+
- `2 güçlü aday çıktı, 1'i manual-review istiyor.`
64+
- `Yeni yayın adayı: ...`
65+
- `Manual-review kuyruğunda 1 hassas kayıt var.`
66+
67+
Uzun rapor dökme.
68+
69+
## Not
70+
71+
Bu runbook'ta direct autopublish devre dışıdır.
72+
Heartbeat script'i artık canlı `src/content/anlikHaber/` klasörüne kendi başına otomatik yazmaz ve otomatik git commit + push yapmaz.
73+
Bunun yerine heartbeat sonunda Asteria editoryal kapısı çağrılır.
74+
Amaç, veri motorunu çalışır tutarken canlı publish düğmesini kontrollü bir editoryal katmana taşımaktır.

‎news_pipeline/OPERATIONS.md‎

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# News Pipeline Operations
2+
3+
Bu dosya günlük kullanım ve ileride cron entegrasyonu için pratik operasyon rehberidir.
4+
5+
## Amaç
6+
7+
Pipeline'ı güvenli ve öngörülebilir biçimde çalıştırmak.
8+
9+
## Önerilen manuel akış
10+
11+
### 1. Topla
12+
```bash
13+
source news_pipeline/.venv/bin/activate
14+
news-pipeline collect
15+
```
16+
17+
### 2. İşle
18+
```bash
19+
news-pipeline process
20+
```
21+
22+
### 3. Önce hassas kuyruğa bak
23+
```bash
24+
news-pipeline queue review
25+
```
26+
27+
### 4. Önce queue temizliğini çalıştır
28+
```bash
29+
news-pipeline queue cleanup
30+
```
31+
32+
Bu komut yalnız aktif queue'yi değil, arşiv retention'ını da uygular:
33+
- rejected archive: 24 saat
34+
- published archive: 72 saat
35+
36+
### 5. Sonra genel yeni kayıtları tara
37+
```bash
38+
news-pipeline queue list --status new
39+
```
40+
41+
### 6. Gerekli kaydı aç
42+
```bash
43+
news-pipeline queue inspect <QUEUE_ID>
44+
```
45+
46+
### 7. Onayla
47+
```bash
48+
news-pipeline queue approve <QUEUE_ID>
49+
```
50+
51+
### 8. Canlı markdown üret
52+
```bash
53+
news-pipeline publish <QUEUE_ID>
54+
```
55+
56+
### 9. Son edit
57+
- `src/content/anlikHaber/` altındaki üretilen markdown dosyasını gözden geçir
58+
- başlığı keskinleştir
59+
- description'ı rafine et
60+
- gerekiyorsa ikinci/üçüncü kaynak ekle
61+
62+
---
63+
64+
## Heartbeat için önerilen yaklaşım
65+
66+
Bu pipeline artık haber-project içinde yaşar; ilk tercih cron değil, heartbeat akışıdır.
67+
68+
Neden?
69+
- haber akışı tam saat bağımlı değil
70+
- queue kontrolü daha doğal yapılır
71+
- boş turda sessiz kalmak kolaydır
72+
- editoryal karar akışı daha insani kalır
73+
74+
Önerilen heartbeat script'i:
75+
76+
```bash
77+
cd /Volumes/KIOXIA/haber-project && bash news_pipeline/scripts/heartbeat-cycle.sh
78+
```
79+
80+
Script şu adımları çalıştırır:
81+
82+
```bash
83+
news-pipeline collect
84+
news-pipeline process
85+
news-pipeline queue summary
86+
news-pipeline queue review
87+
news-pipeline queue list --status new
88+
# varsayılan: extra Asteria gate çağrısı kapalı
89+
# gerekirse RUN_ASTERIA_GATE=1 ile manuel açılır
90+
bash news_pipeline/scripts/heartbeat-cycle.sh
91+
```
92+
93+
Önemli not:
94+
- `heartbeat-cycle.sh` içinde ekstra `asteria-editorial-gate.sh` çağrısı artık varsayılan olarak kapalıdır.
95+
- Sebep, aynı heartbeat içinde Asteria'ya ikinci bir görev mesajı gidip günlük turn/message limitini gereksiz tüketebilmesidir.
96+
- İkinci gate koşusu gerçekten isteniyorsa açıkça `RUN_ASTERIA_GATE=1` verilmelidir.
97+
98+
Detaylı çalışma notları için:
99+
100+
- `news_pipeline/HEARTBEAT_RUNBOOK.md`
101+
102+
## Neden?
103+
104+
Çünkü:
105+
- düşük kaliteli veya hassas haberler ayıklanmalı
106+
- hukuki risk taşıyan içeriklerde son karar kontrollü editoryal kapıdan geçmeli
107+
- direct autopublish şu aşamada fazla cesur kalıyor
108+
- heartbeat boş turda sessiz kalabilir
109+
110+
---
111+
112+
## Otonom publish modu
113+
114+
Varsayılan mod artık **direct autopublish kapalı** çizgisidir.
115+
116+
Bu ne demek?
117+
- pipeline toplamaya ve işlemeye devam eder
118+
- queue görünürlüğü sürer
119+
- `news-pipeline autopublish` tabanlı doğrudan canlı yayın hattı kullanılmaz
120+
- canlı publish kararı `news_pipeline/scripts/asteria-editorial-gate.sh` üzerinden Asteria editoryal kapısına taşınır
121+
122+
Detaylı sınırlar için:
123+
124+
- `news_pipeline/AUTONOMOUS_PUBLISH_POLICY.md`
125+
126+
## Manual-review politikası
127+
128+
Şu tip içerikler ayrı dikkat ister:
129+
130+
- dava
131+
- saldırı
132+
- cinsel suç iddiası
133+
- kişisel suçlama
134+
- Epstein benzeri yüksek riskli politik/sosyal dosyalar
135+
136+
Bu içerikleri önce:
137+
138+
```bash
139+
news-pipeline queue review
140+
```
141+
142+
ile aç.
143+
144+
---
145+
146+
## Sağlık kontrolü
147+
148+
Kod değişikliğinden sonra hızlı doğrulama:
149+
150+
```bash
151+
python3 -m compileall news_pipeline/news_pipeline
152+
```
153+
154+
---
155+
156+
## Pratik not
157+
158+
Queue kalabalıklaşırsa önce bunlara bak:
159+
160+
```bash
161+
news-pipeline queue review
162+
news-pipeline queue list --status new
163+
```
164+
165+
Reject etmekten çekinme. Gürültü biriktiren queue, işe yarayan queue değildir.

0 commit comments

Comments
 (0)