Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
731 commits
Select commit Hold shift + click to select a range
da5d057
dictionary: learned_words güncellendi (p115)
ononoki-dp[bot] Sep 7, 2026
1aef681
dictionary: learned_words güncellendi (p125)
ononoki-dp[bot] Sep 7, 2026
01b1e9b
dictionary: learned_words güncellendi (p145)
ononoki-dp[bot] Sep 7, 2026
6f5a95f
dictionary: learned_words güncellendi (p150)
ononoki-dp[bot] Sep 7, 2026
eb83117
review: 19/35
ononoki-dp[bot] Sep 7, 2026
756e335
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
0366e1b
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
1bca73f
dictionary: learned_words güncellendi (p25)
ononoki-dp[bot] Sep 7, 2026
65addfb
dictionary: learned_words güncellendi (p40)
ononoki-dp[bot] Sep 7, 2026
445445a
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
d60886d
dictionary: learned_words güncellendi (p55)
ononoki-dp[bot] Sep 7, 2026
7d80484
dictionary: learned_words güncellendi (p65)
ononoki-dp[bot] Sep 7, 2026
9fffc2e
dictionary: learned_words güncellendi (p75)
ononoki-dp[bot] Sep 7, 2026
b43326a
review: 20/35
ononoki-dp[bot] Sep 7, 2026
1dbb76b
dictionary: learned_words güncellendi (p5)
ononoki-dp[bot] Sep 7, 2026
6b19a3f
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
d7944bd
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
069ec63
dictionary: learned_words güncellendi (p25)
ononoki-dp[bot] Sep 7, 2026
e912e4a
dictionary: learned_words güncellendi (p35)
ononoki-dp[bot] Sep 7, 2026
74da478
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
515317c
dictionary: learned_words güncellendi (p50)
ononoki-dp[bot] Sep 7, 2026
d21cf62
dictionary: learned_words güncellendi (p60)
ononoki-dp[bot] Sep 7, 2026
454be98
dictionary: learned_words güncellendi (p65)
ononoki-dp[bot] Sep 7, 2026
c6f8daf
dictionary: learned_words güncellendi (p75)
ononoki-dp[bot] Sep 7, 2026
4d1d5f8
dictionary: learned_words güncellendi (p80)
ononoki-dp[bot] Sep 7, 2026
51ccc87
dictionary: learned_words güncellendi (p85)
ononoki-dp[bot] Sep 7, 2026
1f25e6f
dictionary: learned_words güncellendi (p90)
ononoki-dp[bot] Sep 7, 2026
c9ab309
dictionary: learned_words güncellendi (p95)
ononoki-dp[bot] Sep 7, 2026
2125b5e
dictionary: learned_words güncellendi (p100)
ononoki-dp[bot] Sep 7, 2026
1513b83
dictionary: learned_words güncellendi (p110)
ononoki-dp[bot] Sep 7, 2026
1cfd076
dictionary: learned_words güncellendi (p125)
ononoki-dp[bot] Sep 7, 2026
6e62bbd
dictionary: learned_words güncellendi (p130)
ononoki-dp[bot] Sep 7, 2026
b16eb85
dictionary: learned_words güncellendi (p135)
ononoki-dp[bot] Sep 7, 2026
7b8cc56
review: 21/35
ononoki-dp[bot] Sep 7, 2026
c30fc3e
dictionary: learned_words güncellendi (p5)
ononoki-dp[bot] Sep 7, 2026
ab09ffa
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
7a9adfc
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
9805c15
dictionary: learned_words güncellendi (p20)
ononoki-dp[bot] Sep 7, 2026
ac9a78b
dictionary: learned_words güncellendi (p30)
ononoki-dp[bot] Sep 7, 2026
6b13e0a
review: 22/35
ononoki-dp[bot] Sep 7, 2026
c9d7c4b
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
cdbb7bc
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
0f92f99
dictionary: learned_words güncellendi (p25)
ononoki-dp[bot] Sep 7, 2026
ed254cf
dictionary: learned_words güncellendi (p30)
ononoki-dp[bot] Sep 7, 2026
e123736
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
34e19a5
dictionary: learned_words güncellendi (p50)
ononoki-dp[bot] Sep 7, 2026
9aa3271
dictionary: learned_words güncellendi (p55)
ononoki-dp[bot] Sep 7, 2026
61b6a34
dictionary: learned_words güncellendi (p65)
ononoki-dp[bot] Sep 7, 2026
92feaea
dictionary: learned_words güncellendi (p75)
ononoki-dp[bot] Sep 7, 2026
89ef629
dictionary: learned_words güncellendi (p85)
ononoki-dp[bot] Sep 7, 2026
a760afb
dictionary: learned_words güncellendi (p90)
ononoki-dp[bot] Sep 7, 2026
58073f2
dictionary: learned_words güncellendi (p95)
ononoki-dp[bot] Sep 7, 2026
1eb361a
dictionary: learned_words güncellendi (p105)
ononoki-dp[bot] Sep 7, 2026
10e0d5d
review: 23/35
ononoki-dp[bot] Sep 7, 2026
07340f6
dictionary: learned_words güncellendi (p5)
ononoki-dp[bot] Sep 7, 2026
0f04caa
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
f1bcdf0
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
48bf339
dictionary: learned_words güncellendi (p20)
ononoki-dp[bot] Sep 7, 2026
ec0abd1
dictionary: learned_words güncellendi (p30)
ononoki-dp[bot] Sep 7, 2026
b93ba2c
dictionary: learned_words güncellendi (p35)
ononoki-dp[bot] Sep 7, 2026
706ee6b
dictionary: learned_words güncellendi (p40)
ononoki-dp[bot] Sep 7, 2026
a5aa4d6
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
e45dd5d
dictionary: learned_words güncellendi (p50)
ononoki-dp[bot] Sep 7, 2026
bbb491c
dictionary: learned_words güncellendi (p55)
ononoki-dp[bot] Sep 7, 2026
30347a6
dictionary: learned_words güncellendi (p65)
ononoki-dp[bot] Sep 7, 2026
6796927
dictionary: learned_words güncellendi (p70)
ononoki-dp[bot] Sep 7, 2026
91c97bc
dictionary: learned_words güncellendi (p75)
ononoki-dp[bot] Sep 7, 2026
4f3cc69
dictionary: learned_words güncellendi (p90)
ononoki-dp[bot] Sep 7, 2026
6eb7b21
dictionary: learned_words güncellendi (p95)
ononoki-dp[bot] Sep 7, 2026
bc7084d
dictionary: learned_words güncellendi (p100)
ononoki-dp[bot] Sep 7, 2026
0b1839d
dictionary: learned_words güncellendi (p105)
ononoki-dp[bot] Sep 7, 2026
25ec536
dictionary: learned_words güncellendi (p110)
ononoki-dp[bot] Sep 7, 2026
5d7ac81
dictionary: learned_words güncellendi (p115)
ononoki-dp[bot] Sep 7, 2026
71aade7
dictionary: learned_words güncellendi (p120)
ononoki-dp[bot] Sep 7, 2026
b10290d
dictionary: learned_words güncellendi (p125)
ononoki-dp[bot] Sep 7, 2026
b5f45de
dictionary: learned_words güncellendi (p130)
ononoki-dp[bot] Sep 7, 2026
c8b31fe
dictionary: learned_words güncellendi (p135)
ononoki-dp[bot] Sep 7, 2026
e2847af
dictionary: learned_words güncellendi (p140)
ononoki-dp[bot] Sep 7, 2026
518dd66
dictionary: learned_words güncellendi (p145)
ononoki-dp[bot] Sep 7, 2026
e4462d2
dictionary: learned_words güncellendi (p150)
ononoki-dp[bot] Sep 7, 2026
ab8759b
dictionary: learned_words güncellendi (p160)
ononoki-dp[bot] Sep 7, 2026
390495c
review: 24/35
ononoki-dp[bot] Sep 7, 2026
120f46e
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
3f08753
dictionary: learned_words güncellendi (p20)
ononoki-dp[bot] Sep 7, 2026
9d634db
dictionary: learned_words güncellendi (p25)
ononoki-dp[bot] Sep 7, 2026
6b07720
dictionary: learned_words güncellendi (p40)
ononoki-dp[bot] Sep 7, 2026
0af8687
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
d77f95b
dictionary: learned_words güncellendi (p50)
ononoki-dp[bot] Sep 7, 2026
2a1baf2
dictionary: learned_words güncellendi (p55)
ononoki-dp[bot] Sep 7, 2026
1c9004e
dictionary: learned_words güncellendi (p60)
ononoki-dp[bot] Sep 7, 2026
711421b
dictionary: learned_words güncellendi (p65)
ononoki-dp[bot] Sep 7, 2026
ff011a1
dictionary: learned_words güncellendi (p70)
ononoki-dp[bot] Sep 7, 2026
e60a6c0
dictionary: learned_words güncellendi (p75)
ononoki-dp[bot] Sep 7, 2026
24597d0
dictionary: learned_words güncellendi (p80)
ononoki-dp[bot] Sep 7, 2026
5ee2bff
dictionary: learned_words güncellendi (p95)
ononoki-dp[bot] Sep 7, 2026
acc160f
dictionary: learned_words güncellendi (p100)
ononoki-dp[bot] Sep 7, 2026
2c40881
dictionary: learned_words güncellendi (p105)
ononoki-dp[bot] Sep 7, 2026
3be0ed7
dictionary: learned_words güncellendi (p115)
ononoki-dp[bot] Sep 7, 2026
5e132c2
review: 25/35
ononoki-dp[bot] Sep 7, 2026
7a84168
dictionary: learned_words güncellendi (p0)
ononoki-dp[bot] Sep 7, 2026
edbd5fb
dictionary: learned_words güncellendi (p5)
ononoki-dp[bot] Sep 7, 2026
01e45da
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
9ae8afd
dictionary: learned_words güncellendi (p20)
ononoki-dp[bot] Sep 7, 2026
20a627b
dictionary: learned_words güncellendi (p25)
ononoki-dp[bot] Sep 7, 2026
dc73171
dictionary: learned_words güncellendi (p30)
ononoki-dp[bot] Sep 7, 2026
4984723
dictionary: learned_words güncellendi (p35)
ononoki-dp[bot] Sep 7, 2026
051246f
dictionary: learned_words güncellendi (p40)
ononoki-dp[bot] Sep 7, 2026
654707c
dictionary: learned_words güncellendi (p50)
ononoki-dp[bot] Sep 7, 2026
64302c5
dictionary: learned_words güncellendi (p60)
ononoki-dp[bot] Sep 7, 2026
05bb30a
review: 26/35
ononoki-dp[bot] Sep 7, 2026
0b6f09c
dictionary: learned_words güncellendi (p5)
ononoki-dp[bot] Sep 7, 2026
44d3150
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
76d50f7
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
8158cb2
dictionary: learned_words güncellendi (p20)
ononoki-dp[bot] Sep 7, 2026
31b2d59
dictionary: learned_words güncellendi (p25)
ononoki-dp[bot] Sep 7, 2026
547b53b
dictionary: learned_words güncellendi (p30)
ononoki-dp[bot] Sep 7, 2026
9970d11
dictionary: learned_words güncellendi (p40)
ononoki-dp[bot] Sep 7, 2026
8159b4c
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
d9e021a
dictionary: learned_words güncellendi (p50)
ononoki-dp[bot] Sep 7, 2026
3884ebe
dictionary: learned_words güncellendi (p60)
ononoki-dp[bot] Sep 7, 2026
9017beb
dictionary: learned_words güncellendi (p80)
ononoki-dp[bot] Sep 7, 2026
fa2398a
dictionary: learned_words güncellendi (p120)
ononoki-dp[bot] Sep 7, 2026
caa5350
review: 27/35
ononoki-dp[bot] Sep 7, 2026
f533a93
dictionary: learned_words güncellendi (p0)
ononoki-dp[bot] Sep 7, 2026
bd8e480
dictionary: learned_words güncellendi (p5)
ononoki-dp[bot] Sep 7, 2026
0ce1a30
dictionary: learned_words güncellendi (p30)
ononoki-dp[bot] Sep 7, 2026
abed444
dictionary: learned_words güncellendi (p40)
ononoki-dp[bot] Sep 7, 2026
5065924
dictionary: learned_words güncellendi (p55)
ononoki-dp[bot] Sep 7, 2026
bcdf991
dictionary: learned_words güncellendi (p65)
ononoki-dp[bot] Sep 7, 2026
eff2886
dictionary: learned_words güncellendi (p70)
ononoki-dp[bot] Sep 7, 2026
2819e29
dictionary: learned_words güncellendi (p75)
ononoki-dp[bot] Sep 7, 2026
bfa416d
dictionary: learned_words güncellendi (p80)
ononoki-dp[bot] Sep 7, 2026
f6d22f3
dictionary: learned_words güncellendi (p100)
ononoki-dp[bot] Sep 7, 2026
8d5a04a
dictionary: learned_words güncellendi (p105)
ononoki-dp[bot] Sep 7, 2026
4cd45a3
review: 28/35
ononoki-dp[bot] Sep 7, 2026
1726f6a
dictionary: learned_words güncellendi (p5)
ononoki-dp[bot] Sep 7, 2026
2f0be15
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
f44bec6
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
59a511c
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
9732c5e
dictionary: learned_words güncellendi (p50)
ononoki-dp[bot] Sep 7, 2026
8a97e24
review: 29/35
ononoki-dp[bot] Sep 7, 2026
d09d0f0
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
3336f2c
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
efeb41d
dictionary: learned_words güncellendi (p30)
ononoki-dp[bot] Sep 7, 2026
064846d
dictionary: learned_words güncellendi (p35)
ononoki-dp[bot] Sep 7, 2026
715e332
dictionary: learned_words güncellendi (p40)
ononoki-dp[bot] Sep 7, 2026
115a927
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
c06dc43
dictionary: learned_words güncellendi (p50)
ononoki-dp[bot] Sep 7, 2026
5ab8c79
dictionary: learned_words güncellendi (p55)
ononoki-dp[bot] Sep 7, 2026
5cefbc2
dictionary: learned_words güncellendi (p60)
ononoki-dp[bot] Sep 7, 2026
9fd0377
dictionary: learned_words güncellendi (p65)
ononoki-dp[bot] Sep 7, 2026
2eae23c
review: 30/35
ononoki-dp[bot] Sep 7, 2026
c7e70db
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
08fed32
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
524d69e
dictionary: learned_words güncellendi (p20)
ononoki-dp[bot] Sep 7, 2026
ae03ac4
dictionary: learned_words güncellendi (p25)
ononoki-dp[bot] Sep 7, 2026
f8b1918
dictionary: learned_words güncellendi (p30)
ononoki-dp[bot] Sep 7, 2026
930f69c
dictionary: learned_words güncellendi (p40)
ononoki-dp[bot] Sep 7, 2026
a31e105
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
9cff2d3
dictionary: learned_words güncellendi (p50)
ononoki-dp[bot] Sep 7, 2026
94a5f48
dictionary: learned_words güncellendi (p55)
ononoki-dp[bot] Sep 7, 2026
3bd8322
dictionary: learned_words güncellendi (p60)
ononoki-dp[bot] Sep 7, 2026
650fddb
dictionary: learned_words güncellendi (p65)
ononoki-dp[bot] Sep 7, 2026
67e6b14
dictionary: learned_words güncellendi (p70)
ononoki-dp[bot] Sep 7, 2026
d87b804
dictionary: learned_words güncellendi (p75)
ononoki-dp[bot] Sep 7, 2026
132e539
dictionary: learned_words güncellendi (p80)
ononoki-dp[bot] Sep 7, 2026
6d61afe
dictionary: learned_words güncellendi (p85)
ononoki-dp[bot] Sep 7, 2026
f599e70
review: 31/35
ononoki-dp[bot] Sep 7, 2026
692084c
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
a434e1b
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
446fbaa
dictionary: learned_words güncellendi (p20)
ononoki-dp[bot] Sep 7, 2026
2d32585
dictionary: learned_words güncellendi (p25)
ononoki-dp[bot] Sep 7, 2026
a4688cf
dictionary: learned_words güncellendi (p30)
ononoki-dp[bot] Sep 7, 2026
a26b055
dictionary: learned_words güncellendi (p35)
ononoki-dp[bot] Sep 7, 2026
3a89b7a
dictionary: learned_words güncellendi (p40)
ononoki-dp[bot] Sep 7, 2026
89e5ef7
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
4b29778
dictionary: learned_words güncellendi (p50)
ononoki-dp[bot] Sep 7, 2026
56c00b0
dictionary: learned_words güncellendi (p55)
ononoki-dp[bot] Sep 7, 2026
c0e43ee
dictionary: learned_words güncellendi (p60)
ononoki-dp[bot] Sep 7, 2026
b00ed16
dictionary: learned_words güncellendi (p65)
ononoki-dp[bot] Sep 7, 2026
adf1c17
dictionary: learned_words güncellendi (p70)
ononoki-dp[bot] Sep 7, 2026
301eadc
review: 32/35
ononoki-dp[bot] Sep 7, 2026
ba4311a
dictionary: learned_words güncellendi (p5)
ononoki-dp[bot] Sep 7, 2026
11bf7ea
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
8e96fbe
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
9066daa
dictionary: learned_words güncellendi (p20)
ononoki-dp[bot] Sep 7, 2026
2c1ef27
dictionary: learned_words güncellendi (p30)
ononoki-dp[bot] Sep 7, 2026
9a7f2a5
dictionary: learned_words güncellendi (p35)
ononoki-dp[bot] Sep 7, 2026
a6fd19a
dictionary: learned_words güncellendi (p40)
ononoki-dp[bot] Sep 7, 2026
71681c3
dictionary: learned_words güncellendi (p45)
ononoki-dp[bot] Sep 7, 2026
e073631
dictionary: learned_words güncellendi (p65)
ononoki-dp[bot] Sep 7, 2026
98f9b5e
dictionary: learned_words güncellendi (p70)
ononoki-dp[bot] Sep 7, 2026
524ee37
dictionary: learned_words güncellendi (p90)
ononoki-dp[bot] Sep 7, 2026
0568619
dictionary: learned_words güncellendi (p110)
ononoki-dp[bot] Sep 7, 2026
374bb86
dictionary: learned_words güncellendi (p120)
ononoki-dp[bot] Sep 7, 2026
98bee94
dictionary: learned_words güncellendi (p125)
ononoki-dp[bot] Sep 7, 2026
61abda5
dictionary: learned_words güncellendi (p135)
ononoki-dp[bot] Sep 7, 2026
e7ba638
dictionary: learned_words güncellendi (p140)
ononoki-dp[bot] Sep 7, 2026
b4da6ba
review: 33/35
ononoki-dp[bot] Sep 7, 2026
9392a6a
dictionary: learned_words güncellendi (p5)
ononoki-dp[bot] Sep 7, 2026
7fd532e
dictionary: learned_words güncellendi (p10)
ononoki-dp[bot] Sep 7, 2026
6e60fc7
dictionary: learned_words güncellendi (p15)
ononoki-dp[bot] Sep 7, 2026
4902054
dictionary: learned_words güncellendi (p20)
ononoki-dp[bot] Sep 7, 2026
2a39a04
review: 34/35
ononoki-dp[bot] Sep 7, 2026
71aa3ef
dictionary: learned_words güncellendi (p14)
ononoki-dp[bot] Sep 7, 2026
8f04ec1
review: 35/35
ononoki-dp[bot] Sep 7, 2026
c94a5ce
review: completed
ononoki-dp[bot] Sep 7, 2026
9521710
convert: running
ononoki-dp[bot] Sep 7, 2026
4bb57da
convert: completed
ononoki-dp[bot] Sep 7, 2026
11007b8
qa: knh-12 denetim raporu + seri önerisi
ononoki-dp[bot] Sep 8, 2026
e0148d1
qa: knh-12 denetim raporu + seri önerisi
ononoki-dp[bot] Sep 9, 2026
d7c31a5
qa: knh-12 denetim raporu + seri önerisi
ononoki-dp[bot] Sep 10, 2026
1286116
Add files via upload
dpentx Sep 11, 2026
b34a6a5
qa: knh-12 denetim raporu + seri önerisi
ononoki-dp[bot] Sep 11, 2026
9c61478
Add files via upload
dpentx Sep 11, 2026
1a3aa4e
Add files via upload
dpentx Sep 11, 2026
3625bf0
Revise README for translation tool updates
dpentx Sep 11, 2026
dc04932
Add files via upload
dpentx Sep 11, 2026
e5c1f2c
Delete scripts/review_fix.py
dpentx Sep 11, 2026
c29cdab
Delete output/knh-12/qa_report.md
dpentx Sep 11, 2026
a965ac4
qa: knh-12 denetim raporu + seri önerisi
ononoki-dp[bot] Sep 11, 2026
d191c36
Add files via upload
dpentx Sep 13, 2026
d171152
Add files via upload
dpentx Sep 13, 2026
c5ee66b
qa: başladı
ononoki-dp[bot] Sep 13, 2026
3e311b2
qa: knh-12 denetim raporu + seri önerisi
ononoki-dp[bot] Sep 13, 2026
d631a5f
qa: tamamlandı
ononoki-dp[bot] Sep 13, 2026
130c462
qa: başladı
ononoki-dp[bot] Sep 13, 2026
2f47c4b
qa: tamamlandı
ononoki-dp[bot] Sep 13, 2026
40bb53a
qa: knh-12 denetim raporu + seri önerisi
ononoki-dp[bot] Sep 13, 2026
94c9657
Add files via upload
dpentx Sep 13, 2026
9b0aded
qa: başladı
ononoki-dp[bot] Sep 13, 2026
d2ecfa4
qa: tamamlandı
ononoki-dp[bot] Sep 13, 2026
bc5a784
Add files via upload
dpentx Sep 14, 2026
52c28a3
Add files via upload
dpentx Sep 14, 2026
ae1c1df
qa: başladı
ononoki-dp[bot] Sep 14, 2026
3c1fa3f
qa: knh-12 denetim raporu + seri önerisi
ononoki-dp[bot] Sep 14, 2026
c060e1e
qa: kısmi, devam edecek
ononoki-dp[bot] Sep 14, 2026
3d7cbc6
Add files via upload
dpentx Sep 14, 2026
33e5f8f
qa: başladı
ononoki-dp[bot] Sep 14, 2026
eee9bee
qa: kısmi, devam edecek
ononoki-dp[bot] Sep 14, 2026
8ff8df5
qa: başladı
ononoki-dp[bot] Sep 14, 2026
df6134f
qa: knh-12 denetim raporu + seri önerisi
ononoki-dp[bot] Sep 14, 2026
3577b20
qa: kısmi, devam edecek
ononoki-dp[bot] Sep 14, 2026
061aac7
Add files via upload
dpentx Sep 15, 2026
3fbaa6a
Add files via upload
dpentx Sep 16, 2026
4df6186
Add files via upload
dpentx Sep 16, 2026
218d723
Fix regex for translator's notes in boilerplate.py
dpentx Sep 17, 2026
fa75c87
Clear convert_status and epub_output fields
dpentx Sep 17, 2026
16c186b
convert: running
ononoki-dp[bot] Sep 17, 2026
458f144
convert: completed
ononoki-dp[bot] Sep 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 86 additions & 6 deletions .github/workflows/qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,21 @@ on:
type: boolean
default: false

# NOT: Bu, ana çeviri hattından (translate.yml/queue-worker.yml/review.yml)
# BİLEREK ayrı ve sadece elle (workflow_dispatch) tetiklenen bir araç —
# Gemini'nin ücretsiz katmanı Groq'a göre çok daha kısıtlı (RPM/RPD), bu
# yüzden otomatik/periyodik bir güvenlik ağına bağlanmıyor. Ne QA raporu
# ne de seri önerisi hiçbir çeviri dosyasını OTOMATİK değiştirmez — bkz.
# qa_audit.py ve series_suggest.py docstring'leri.
# NOT (Eylül 2026): Eskiden bu workflow ana çeviri hattından (translate.yml/
# queue-worker.yml/review.yml) BİLEREK ayrı tutulur, sadece elle
# (workflow_dispatch) tetiklenirdi — gerekçe: Gemini'nin ücretsiz katmanı
# Groq'a göre çok daha kısıtlı (RPM/RPD), otomatik bir güvenlik ağına
# bağlamanın kotayı gereksiz yere hızla tüketeceği düşünülmüştü.
# Artık review.yml bitince BU workflow'u kendisi tetikliyor (bkz.
# review.py) VE translate.yml'in periyodik güvenlik ağı da status.json'daki
# qa_status alanına bakıp "review bitti ama QA bitmedi" durumunu görünce
# bunu dürtüyor — bu ikinci kısım tam olarak istenen şeyi çözüyor: Gemini
# günlük kotası tükenip iş yarım kalırsa (qa_audit.py zaten checkpoint'li,
# .qa_progress.json ile kaldığı yerden devam ediyor), bir sonraki periyodik
# tetiklemede (kota sıfırlandıktan sonra) otomatik devam eder — elle
# tekrar tetiklemeye gerek kalmaz. Gemini kotası ENDİŞESİ hâlâ geçerli
# ama artık checkpoint'li devam ettiği için tekrar denemeler ucuz (zaten
# denetlenmiş bölümleri yeniden taramıyor).
jobs:
qa-audit:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -72,6 +81,23 @@ jobs:
git config user.name "${{ steps.app-token.outputs.app-slug }}[bot]"
git config user.email "${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com"

# Periyodik güvenlik ağının (translate.py:_scan_and_nudge_active_books)
# "QA bitmedi mi, o zaman dürt" diye tekrar tekrar boşu boşuna
# tetiklememesi için, bu işin BAŞLADIĞINI hemen işaretliyoruz. is_stale
# kontrolü (diğer *_status alanlarıyla aynı desen) güvenlik ağının,
# gerçekten çakılmış bir run'ı normal çalışan bir run'dan ayırt
# etmesini sağlıyor.
- name: Mark QA running
run: |
python3 -c "
import json, os, sys
sys.path.insert(0, 'scripts')
from lib.git_utils import write_status
status = json.load(open('status.json', encoding='utf-8')) if os.path.exists('status.json') else {}
status['qa_status'] = 'running'
write_status(status, 'qa: başladı')
"

# series/<slug>.json genelde main'de yaşıyor (bkz. lib/series.py) —
# bu dal onu içermiyorsa, öneri script'inin "zaten var olan" bağlamı
# görebilmesi için main'den bir kopyasını çekmeyi dene. Yoksa (henüz
Expand Down Expand Up @@ -141,6 +167,30 @@ jobs:
PYTHONUNBUFFERED: "1"
run: python scripts/apply_qa_fixes.py "${{ inputs.slug }}"

# NOT (Eylül 2026, gerçek üretim hatası): Bu kontrol eskiden
# .qa_progress.json checkpoint dosyasının yokluğuna bakıyordu VE
# "Apply QA fixes"ten ÖNCE çalışıyordu. Bu ikisi bir araya gelince
# şu hataya yol açtı: skip_audit=true ile (Gemini'yi hiç çalıştırmadan)
# tetiklenen bir run'da checkpoint zaten (önceki TAM taramadan)
# yoktu — kontrol bunu yanlışlıkla "tamamlandı" sandı ve qa_report.md
# hâlâ 15 çözülmemiş madde içerirken convert.yml'i tetikledi.
# Artık "qa_report.md'nin kendisi hâlâ var mı" diye bakıyoruz (o da
# apply_qa_fixes.py tarafından SADECE gerçekten 0 madde kalınca
# siliniyor) VE bunu düzeltmelerden SONRA kontrol ediyoruz — bu,
# skip_audit kullanılsa da kullanılmasa da, kalan gerçek durumu
# doğru yansıtan tek sinyal.
- name: Check QA completion
id: qacheck
if: always()
run: |
if [ -f "output/${{ inputs.slug }}/qa_report.md" ]; then
echo "complete=false" >> "$GITHUB_OUTPUT"
echo "qa_report.md hâlâ duruyor — çözülmemiş madde(ler) var."
else
echo "complete=true" >> "$GITHUB_OUTPUT"
echo "qa_report.md yok — ya hiç sorun bulunmadı ya da hepsi çözüldü."
fi

- name: Run series suggestion
if: inputs.run_series_suggest == true
env:
Expand Down Expand Up @@ -171,3 +221,33 @@ jobs:
git diff --cached --quiet && echo "Değişiklik yok." && exit 0
git commit -m "qa: ${{ inputs.slug }} denetim raporu + seri önerisi"
git push origin HEAD:${{ inputs.branch }}

# NOT (Eylül 2026): qa_status'u burada, HER durumda (always()) ama
# Check QA completion adımının sonucuna göre FARKLI değerle
# işaretliyoruz:
# - complete=true -> "completed" + convert.yml tetiklenir (epub artık
# QA düzeltmeleri UYGULANMIŞ haliyle ciltlenir)
# - complete=false -> "partial" (ASLA "completed" değil) — böylece
# translate.py'nin periyodik güvenlik ağı bunu "hâlâ bitmedi" diye
# görüp bir sonraki taramasında qa.yml'i TEKRAR tetikler; kaldığı
# yerden (checkpoint sayesinde) devam eder. Gemini günlük kotası
# doluysa, bu doğal olarak "ertesi gün otomatik devam etme" etkisini
# verir — periyodik tarama zaten saatlik/günlük aralıklarla çalışıyor.
- name: Mark QA status & trigger next step
if: always()
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: |
python3 -c "
import json, os, sys
sys.path.insert(0, 'scripts')
from lib.git_utils import write_status
status = json.load(open('status.json', encoding='utf-8')) if os.path.exists('status.json') else {}
status['qa_status'] = '${{ steps.qacheck.outputs.complete == 'true' && 'completed' || 'partial' }}'
write_status(status, 'qa: ${{ steps.qacheck.outputs.complete == 'true' && 'tamamlandı' || 'kısmi, devam edecek' }}')
"
if [ "${{ steps.qacheck.outputs.complete }}" = "true" ]; then
gh workflow run convert.yml -f branch="${{ inputs.branch }}"
else
echo "QA kısmi kaldı — convert tetiklenmedi. Periyodik güvenlik ağı bir sonraki taramada qa.yml'i tekrar tetikleyecek."
fi
173 changes: 144 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,97 @@
# eptran

İngilizce epub dosyalarını Türkçeye çeviren, Groq llama-3.3-70b destekli araç.
İngilizce epub/pdf dosyalarını Türkçeye çeviren, çok modelli (Groq + Gemini)
bir GitHub Actions + Vercel aracı.

## Nasıl Çalışır?

1. epub'u web arayüzünden yüklersin
2. Dosya repona commit edilir, GitHub Actions tetiklenir
3. Actions her bölümü Groq llama-3.3-70b ile çevirir
4. Çeviri tamamlanınca bölümler epub olarak paketlenir
5. Arayüzden ilerlemeyi takip edebilir, tamamlanınca indirebilirsin
1. Kitabı web arayüzünden yüklersin.
2. Sunucu, `main`'e hiç dokunmadan `main`'in ucundan `queue/<kitap-adı>`
adında yeni bir dal açar ve dosyayı oraya commit'ler.
3. Bu dal, kitaba özel bir dal olan `book/<kitap-adı>`'na dönüşür; tüm
çeviri süreci SADECE bu dalda ilerler, `main` süreç boyunca hiç
etkilenmez.
4. Groq (qwen3.8-27b) her bölümü çevirir, ardından ikinci bir geçişle
gözden geçirir (İngilizce kalıntı/tutarsız terim kontrolü).
5. Kitap tamamlanınca Gemini tüm kitabı tarayıp bir kalite kontrol
raporu (`qa_report.md`) çıkarır; Groq bu rapordaki maddeleri otomatik
düzeltmeye çalışır.
6. Bölümler epub olarak ciltlenir ve `book/<kitap-adı>` dalından `main`'e
**tek bir pull request** açılır — sen onaylayıp merge edene kadar
`main` değişmez.
7. Arayüzden ilerlemeyi takip edebilir, tamamlanınca indirebilirsin.

## Mimari Notlar

- **`main` hiçbir zaman otomasyon tarafından doğrudan değiştirilmez.**
İstersen `main` için branch protection/ruleset kurabilirsin (PR
zorunluluğu, zorunlu status check vb.) — otomasyon akışı buna göre
tasarlandı, hiçbir adımı bundan etkilenmez.
- Yükleme, tarayıcıya kalıcı bir GitHub kimlik bilgisi vermez. Sunucu
(Vercel fonksiyonu) kitap başına, sadece bu repoya ve sadece
Contents+Actions iznine sahip, ~1 saat sonra kendiliğinden geçersiz
olan bir GitHub App kurulum token'ı üretir; dosyanın kendisi
tarayıcıdan doğrudan GitHub'a bu token'la yüklenir (Vercel'in
fonksiyon başına istek boyutu sınırına takılmamak için).
- Aynı anda yalnızca bir kitap işlenir — `book/*` ya da `queue/*` önekli
bir dal var olduğu sürece yeni yükleme reddedilir.
- `main`'e giden PR, `pr_check.py` (İngilizce kalıntı taraması + Gemini
raporu özeti) tarafından kontrol edilir; bunu zorunlu bir status
check olarak ayarlamak istersen workflow adı **"Kitap Bütünlük
Kontrolü"**.

## Dosya Yapısı

```
eptran/
├── index.html # Web arayüzü (yükleme + ilerleme takibi)
├── api/
│ ├── upload.js # Yükleme: queue/<kitap> dalı açar, geçici
│ │ # App token üretir, workflow'u tetikler
│ └── status.js # Arayüzün ilerleme durumunu okuduğu endpoint
├── scripts/
│ ├── translate.py # Ana çeviri döngüsü (bölüm bölüm)
│ ├── queue_worker.py # Bir sonraki parçayı işleyip kendini tetikler
│ ├── review.py # İkinci geçiş: İngilizce kalıntı/tutarlılık
│ ├── qa_audit.py # Gemini ile tüm kitabı tarayıp qa_report.md üretir
│ ├── apply_qa_fixes.py # qa_report.md'deki maddeleri Groq'la düzeltir
│ ├── series_suggest.py # Karakter/terim sözlüğü için otomatik öneri
│ ├── pr_check.py # main'e giden PR'ı kontrol eder ("Kitap
│ │ # Bütünlük Kontrolü" — zorunlu status check)
│ ├── convert.py # Bölümleri epub'a ciltler, PR açar
│ └── lib/
│ ├── groq_client.py # Groq API istemcisi (key rotasyonu, retry)
│ ├── gemini_client.py # Gemini API istemcisi
│ ├── git_utils.py # Dal açma/yeniden adlandırma, status.json, push
│ ├── review_fix.py # review.py'nin whitelist + düzeltme mantığı
│ ├── english_detector.py # Sözlük destekli İngilizce kalıntı tespiti
│ ├── series.py # Kitaba özel karakter/terim sözlüğü (series/*.json)
│ ├── memory.py # Çeviri sırasında öğrenilen isim/terim hafızası
│ ├── dictionary.py # Öğrenilen kelimeler (dictionary/learned_words.json)
│ ├── ner.py # Bölüm başına isim/terim çıkarımı
│ ├── boilerplate.py # Tekrar eden şablon metinleri tanıma
│ ├── unicode_cleaner.py # Model çıktısındaki bozuk karakterleri temizleme
│ ├── sliding_window.py # Uzun bölümleri parçalara ayırma
│ └── pitfalls.py # common_pitfalls.json'ı sistem prompt'una ekler
├── .github/workflows/
│ ├── translate.yml # Yükleme sonrası ana çeviri workflow'u
│ ├── queue-worker.yml # Bölüm/parça bazlı devam workflow'u
│ ├── review.yml # İkinci geçiş workflow'u
│ ├── qa.yml # Gemini denetimi + Qwen düzeltme workflow'u
│ ├── pr-check.yml # "Kitap Bütünlük Kontrolü"
│ └── convert.yml # Ciltleme + PR açma workflow'u
├── series/
│ └── <seri-adı>.json # Kitaba/seriye özel karakter+terim sözlüğü
├── dictionary/
│ └── learned_words.json # Kitaplar arası öğrenilen kelime hafızası
├── common_pitfalls.json # Kitap bağımsız, tekrar eden çeviri hataları
├── known_proper_nouns.json # Kitap bağımsız, İngilizce kalması gereken gerçek isimler
├── status.json # main'deki son tamamlanan kitabın durumu
├── requirements.txt
└── vercel.json
```


## Kurulum

### 1. Repoyu Fork'la

Expand All @@ -20,44 +101,78 @@ Sağ üstten **Fork** butonuna bas.

Fork'ladıktan sonra **Actions** sekmesine gidip etkinleştir.

### 3. GitHub PAT Oluştur
### 3. Bir GitHub App Oluştur

Otomasyon, kalıcı bir kişisel token yerine bir GitHub App üzerinden
çalışır (hem GitHub Actions hem Vercel tarafında).

[github.com/settings/apps/new](https://github.com/settings/apps/new)
adresinden:
- **Repository permissions:** `Contents` (Read and Write), `Pull
requests` (Read and Write), `Actions` (Read and Write)
- Oluşturduktan sonra **App ID**'yi not al, bir **private key** üret ve
indir (`.pem` dosyası)
- App'i fork'ladığın repoya kur (Install App)

[github.com/settings/tokens](https://github.com/settings/tokens/new) adresinden:
- **Token adı:** eptran
- **İzinler:** `Contents` (Read and Write), `Actions` (Write)
### 4. GitHub Actions Secret'larını Ekle

Repo → **Settings → Secrets and variables → Actions**:

| İsim | Açıklama |
|---|---|
| `APP_ID` | 3. adımdaki App ID |
| `APP_PRIVATE_KEY` | İndirdiğin `.pem` dosyasının tam içeriği |
| `GROQ_API_KEY_1..4` | Groq API key'leri (bkz. aşağıdaki not) — tek key de yeterli, o zaman sadece `GROQ_API_KEY` kullan |
| `GEMINI_API_KEY`, `GEMINI_API_KEY_2`, `GEMINI_API_KEY_3` | Gemini API key'leri (birden fazlası isteğe bağlı, rate limit rotasyonu için) |

### 4. Groq API Key Al
> **Not — birden fazla Groq/Gemini key'i:** Rotasyonun gerçekten işe
> yaraması için her key'in **ayrı bir hesaptan** gelmesi gerekir.
> Groq'un (ve çoğu sağlayıcının) rate limit'leri hesap/organizasyon
> başınadır — aynı hesaptan üretilmiş birden fazla key toplam
> kapasiteyi ARTIRMAZ, hepsi aynı havuzu paylaşır.

[console.groq.com](https://console.groq.com) adresinden ücretsiz key oluştur.
Ayrıca **Settings → Secrets and variables → Actions → Variables**
kısmına `GEMINI_MODEL` (örn. güncel bir Gemini model adı) eklemen
gerekir.

### 5. Vercel'e Deploy Et

[vercel.com](https://vercel.com) üzerinden repoyu import et ve şu ortam değişkenlerini gir:
[vercel.com](https://vercel.com) üzerinden repoyu import et ve şu ortam
değişkenlerini gir:

| Değişken | Açıklama |
|---|---|
| `GH_PAT` | 3. adımda oluşturduğun token |
| `GH_PAT` | Sunucu tarafı işlemler (dal açma, workflow tetikleme) için bir GitHub token — repo'ya `Contents` + `Actions` yazma izni yeterli |
| `GH_REPO` | `kullaniciadi/eptran` formatında fork'un adı |
| `GH_BRANCH` | Branch adı (genellikle `main`) |

### 6. Repo Secret Ekle

GitHub repo → Settings → Secrets and variables → Actions → **New repository secret**:
- İsim: `GROQ_API_KEY`
- Değer: Groq API key'in
| `GH_BRANCH` | Ana dal adı (genellikle `main`) |
| `APP_ID` | 3. adımdaki App ID — GitHub Actions'takiyle AYNI değer |
| `APP_PRIVATE_KEY` | 3. adımdaki private key — GitHub Actions'takiyle AYNI değer |

## Limitler

Groq ücretsiz tier (llama-3.3-70b-versatile):
- 14,400 token/gün
- Büyük kitaplarda çeviri birden fazla güne yayılabilir
- Actions her 6 saatte bir otomatik devam eder
Groq'un güncel rate limit'lerini kendi hesabından doğrula:
[console.groq.com/settings/limits](https://console.groq.com/settings/limits)
(model, plan tipine göre değişir — ücretsiz planda dakikalık token
tavanı düşük olabilir, çok bölümlü kitaplarda çeviri birden fazla
çalıştırmaya yayılabilir).

## Çıktı Formatı

Çeviri tamamlanınca `output/kitap-adi/kitap-adi_tr.epub` olarak indirilir.
Bölümler ayrıca `output/kitap-adi/001_kitap-adi.txt` şeklinde de mevcuttur.
Çeviri tamamlanınca `output/<kitap-adı>/<kitap-adı>_tr.epub` olarak
üretilir. Bölümler ayrıca `output/<kitap-adı>/001_<kitap-adı>.txt`
şeklinde de mevcuttur.

## Bilinen İstisna Listeleri

- `common_pitfalls.json` — kitap bağımsız, tekrar eden genel çeviri
hataları (yanlış kelime seçimleri vb.)
- `known_proper_nouns.json` — kitap bağımsız, gerçek dünyaya ait ve
İngilizce bırakılması gereken özel isimler (bir çevirmen notunda
anılan gerçek bir eser adı gibi)

Her ikisi de elle güncellenir — yeni bir örüntü/isim keşfedilince
ilgili dosyaya bir satır eklemek yeterli, kod değişikliği gerekmez.

---

*Groq llama-3.3-70b · GitHub Actions · Vercel*
*Groq (qwen3.8-27b) · Gemini · GitHub Actions · Vercel*
Loading
Loading