From 32bbf126345f2def4906b4d7e3c5a831e4606176 Mon Sep 17 00:00:00 2001 From: IzzmooPro Date: Sat, 29 Aug 2026 20:25:59 +0300 Subject: [PATCH 1/6] fix: isolate subtitles for queued media --- app/player.py | 24 +++++++++- docs/CONTINUITY.md | 10 ++-- docs/VERIFICATION_LEDGER.json | 45 ++++++++++++++++++ ...st_subtitle_drop_activation_regressions.py | 47 +++++++++++++++++++ translations/mlcplayer_de.ts | 14 ++++-- translations/mlcplayer_en.ts | 14 ++++-- translations/mlcplayer_es.ts | 14 ++++-- translations/mlcplayer_fr.ts | 14 ++++-- translations/mlcplayer_it.ts | 14 ++++-- translations/mlcplayer_pt_BR.ts | 14 ++++-- translations/mlcplayer_ru.ts | 14 ++++-- 11 files changed, 189 insertions(+), 35 deletions(-) diff --git a/app/player.py b/app/player.py index 2c5e32f..d037cf5 100644 --- a/app/player.py +++ b/app/player.py @@ -679,6 +679,26 @@ def dropEvent(self, event): if (os.path.isfile(p) and p not in subtitle_paths and os.path.splitext(p)[1].lower() in allowed_media) ] + had_current_media = bool(self.current_file) + + def finish_appended_subtitles(): + """Yalnız gerçekten başlatılan yeni medyaya altyazı bağlar. + + Aktif oynatma varken `append_media_paths` bırakılan videoları + başlatmadan kuyruğa ekler. Global pending kuyruğuna bu videoların + altyazısını yazmak, onu mevcut medyanın sonraki UI turunda + tüketmesine yol açar. Hedef belirsizken yanlış medyaya bağlamak + yerine mevcut pending durumunu koruyup kullanıcıyı yönlendiririz. + """ + if not subtitle_paths: + return + if had_current_media: + show_user_error( + self, tr("Altyazı Eklenemedi"), + tr("Altyazı sıradaki videoya otomatik bağlanamadı. " + "Videoyu oynatın ve altyazıyı yeniden bırakın.")) + return + self._pending_subs = list(subtitle_paths) def add_sub(s): # mpv, video yüklü değilken sub_add'i -12 (command) ile reddeder. @@ -707,7 +727,7 @@ def add_sub(s): # Playlist açıkken video yüzeyine bırakılan tek dosya da kuyruğa # eklenir; listeyi tek öğeye sıfırlamaz. if append_media_paths(self, media_paths): - self._pending_subs = list(subtitle_paths) + finish_appended_subtitles() else: # Yeni medya açılacak: mpv yükleme sırasında önceden eklenen dış # altyazıları sildiği için altyazıları yükleme tamamlanınca ekle @@ -717,7 +737,7 @@ def add_sub(s): # Çoklu bırakma mevcut listeyi silmez. Oynatma yoksa ilk yeni öğe # başlatılır; oynatma sürüyorsa yalnızca kuyruğa eklenir. if append_media_paths(self, media_paths): - self._pending_subs = list(subtitle_paths) + finish_appended_subtitles() else: # Sürükle-bırak ile altyazı: video oynarken anında ekle (canlı) for s in subtitle_paths: diff --git a/docs/CONTINUITY.md b/docs/CONTINUITY.md index 1d6f11f..b4e05bc 100644 --- a/docs/CONTINUITY.md +++ b/docs/CONTINUITY.md @@ -6,10 +6,10 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi `ROADMAP.md` ve `ENGINEERING_AUDIT.md` içindedir. - Güncelleme: 29 Ağustos 2026 -- Kayıt hazırlanırken doğrulanan HEAD: `2c68648c82cbc3a6b56fc03b1317f07c322da1bd` +- Kayıt hazırlanırken doğrulanan HEAD: `3b400ed8fefd0945248dfe7bde766df7f67267c3` - Güncel HEAD/origin farkı her oturumda `git rev-list --left-right --count` ile ölçülür; bu belge kendi commit hash'ini tahmin etmez. -- Dal: `codex/ipc-offscreen-acceptance` (temiz canonical `master` ve `origin/master` exact `2c68648`, `0/0` tabanında source/test/docs değişiklikleri uncommitted) -- Son kanıt: `EV-20260829-002` +- Dal: `codex/deferred-drop-subtitle-binding` (PR #71 exact head `3b400ed` tabanında subtitle-drop source/test/translation/docs değişiklikleri uncommitted; PR #71 remote head değiştirilmedi) +- Son kanıt: `EV-20260829-003` - Yayın kararı: **v0.40 canlı/latest; 87 varlık eş, public ana/add-on indirme hashleri ve Ed25519 imzaları geçti.** ## Canlı ürün ve yayın durumu @@ -41,7 +41,7 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi ## Kalite kabul özeti - Windows P0 matrisi: `WIN-P0-01`–`WIN-P0-05` PASSED; drag/drop, playlist sınırları ve IPC için `P0-06`, `P0-07`, `P0-08` NOT_RUN. -- `WIN-P0-08` deterministik offscreen çok-süreç kapsamı gerçek secondary PID, dosya/URL/aktivasyon devri, exit `0` ve terminal kapanış ölçümüyle genişletildi; dar etki paketi **93 passed** verdi. Gerçek ürün penceresi foreground ve hedef-yükleme sonucu ölçülmediği için fiziksel satır hâlâ `NOT_RUN` (`EV-20260829-002`). +- `WIN-P0-08` deterministik offscreen çok-süreç kapsamı gerçek secondary PID, dosya/URL/aktivasyon devri, exit `0` ve terminal kapanış ölçümüyle genişletildi; dar etki paketi **93 passed** verdi. Gerçek ürün penceresi foreground ve hedef-yükleme sonucu ölçülmediği için fiziksel satır hâlâ `NOT_RUN` (`EV-20260829-002`). Aktif oynatma sırasında kuyruğa eklenen yeni video(lar)la birlikte bırakılan altyazının global pending kuyruğuyla yanlışlıkla mevcut videoya uygulanması kırmızı testte doğrulandı; hedef medya başlatılmadığında pending durum artık korunuyor ve kullanıcı açıkça yönlendiriliyor. Subtitle/playlist/atomiklik/çeviri etki paketi **87 passed** verdi (`EV-20260829-003`). - Video biçimi matrisi: SDR ekranda `VF-CORE-01` ve HDR ekranda SDR-on-HDR `VF-CORE-02` exact native ve kontrollü insan ramp kabulüyle PASSED. Kalan 14 biçim satırı ve genel `WIN-P2-01` BLOCKED; bu iki PASS genel HDR/format @@ -182,7 +182,7 @@ merge/parent/run/`0/0` readback'ini sonraki gerçek kayıt provenance'ına bağl ## Sıradaki tek adım -Mevcut toplu Git onayı kapsamında `EV-20260829-002` offscreen IPC kapsamını commit/push/PR kapılarından geçir; hosted test sonucunu kullanıcı bildirsin. Gerçek `WIN-P0-08` ürün-penceresi koşumu, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. +`EV-20260829-003` subtitle-drop düzeltmesini yerel commit'e bağla; PR #71 sonucunu kullanıcı bildirdikten sonra stacked dalı protected PR akışına taşı. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. ## Dokunulmayacaklar ve ayrı onaylar diff --git a/docs/VERIFICATION_LEDGER.json b/docs/VERIFICATION_LEDGER.json index 144ecb8..ee3d92e 100644 --- a/docs/VERIFICATION_LEDGER.json +++ b/docs/VERIFICATION_LEDGER.json @@ -10962,6 +10962,51 @@ "No Computer Use, physical/native run, build, installation, uninstall, tag or release was performed." ], "next_action": "Commit and submit this bounded offscreen IPC package through the protected PR workflow; after merge, require a separately approved exact real-window IPC runner before changing WIN-P0-08 from NOT_RUN." + }, + { + "id": "EV-20260829-003", + "recorded_at_utc": "2026-08-29T17:24:56Z", + "proof_layer": "deterministic", + "result": "passed", + "commit": "3b400ed8fefd0945248dfe7bde766df7f67267c3", + "baseline_commit": "3b400ed8fefd0945248dfe7bde766df7f67267c3", + "working_tree_state": "uncommitted source, regression, translation and evidence changes on codex/deferred-drop-subtitle-binding stacked locally from the unchanged PR 71 exact head", + "changed_files": [ + "app/player.py", + "docs/CONTINUITY.md", + "docs/VERIFICATION_LEDGER.json", + "tests/test_subtitle_drop_activation_regressions.py", + "translations/mlcplayer_de.ts", + "translations/mlcplayer_en.ts", + "translations/mlcplayer_es.ts", + "translations/mlcplayer_fr.ts", + "translations/mlcplayer_it.ts", + "translations/mlcplayer_pt_BR.ts", + "translations/mlcplayer_ru.ts" + ], + "subject": "Prevent queued-media subtitles from being consumed by the currently playing media", + "commands": [ + "read-only dropEvent, append_media_paths, play_from_playlist and existing subtitle-drop regression audit from exact 3b400ed", + "two focused red regressions for active-playback multi-file drop and open-playlist single-file drop; expected 2 failed because the dropped subtitle replaced the existing global pending list", + "route subtitle completion according to whether append_media_paths starts a new media or only queues it; preserve existing pending state and show a safe user instruction for queued-only targets", + "python packaging/extract_translations.py; 457 strings extracted; add the complete English translation and regenerate the canonical catalogs", + "python -m pytest -q subtitle-drop, playlist-panel, media-selection-atomic and translation-pipeline families; 87 passed", + "python packaging/extract_translations.py --check; translation files up to date; git diff --check" + ], + "evidence": [ + "both red regressions reproduced the same source defect: append_media_paths accepted the new video paths without starting them, then dropEvent overwrote _pending_subs with their subtitle while the old current_file remained active", + "when playback is already active, successful append now keeps all new media queued, leaves the existing pending subtitle state unchanged and reports that the target video must be played before the subtitle is dropped again", + "when no media is active, append_media_paths still starts the first dropped media and the accompanying subtitle remains pending for that newly loading media", + "the complete affected deterministic package passed 87 tests and the translation extractor reports all 457 source strings current" + ], + "summary": "Queued video subtitles can no longer leak into the currently playing media; ambiguous queued-only attachment fails closed with an explicit user instruction while the start-new-media path is preserved.", + "limitations": [ + "The fix intentionally does not invent a persistent subtitle-to-playlist-item association when several queued media are dropped; the user must play the intended video and drop its subtitle again.", + "This deterministic result does not prove Explorer OLE drag/drop, physical pointer behavior, native playback or an installed artifact.", + "The user-required single-agent constraint leaves independent adversarial review NOT_RUN, so this is not an independent formal GO.", + "No Computer Use, physical/native run, build, installation, uninstall, push, PR, merge, tag or release was performed." + ], + "next_action": "Commit this bounded local fix and preserve PR 71 exact head; after the user reports PR 71 completion, submit the stacked fix through a separate protected PR." } ] } diff --git a/tests/test_subtitle_drop_activation_regressions.py b/tests/test_subtitle_drop_activation_regressions.py index a23bfb6..cc1b201 100644 --- a/tests/test_subtitle_drop_activation_regressions.py +++ b/tests/test_subtitle_drop_activation_regressions.py @@ -298,6 +298,53 @@ def test_failed_video_drop_does_not_replace_existing_pending_subtitles( assert player._pending_subs == ["already-pending.srt"] +def test_subtitle_for_multiple_queued_videos_is_not_applied_to_current_media( + errors, srt, monkeypatch, tmp_path): + """Aktif oynatmada yeni videolar yalnız kuyruğa girer. + + Onlarla birlikte bırakılan altyazı mevcut videonun pending kuyruğunu + değiştiremez; ilişki belirsiz olduğu için kullanıcı açıkça uyarılır. + """ + first = tmp_path / "queued-one.mkv" + second = tmp_path / "queued-two.mkv" + first.write_bytes(b"one") + second.write_bytes(b"two") + appended = [] + monkeypatch.setattr( + player_module, "append_media_paths", + lambda _player, paths: appended.extend(paths) or True) + player = FakePlayer(FakeMpv(), current_file="D:/playing.mkv") + player._pending_subs = ["already-pending.srt"] + + MPVPlayer.dropEvent( + player, FakeDropEvent([str(first), str(second), srt])) + + assert appended == [str(first), str(second)] + assert player._pending_subs == ["already-pending.srt"] + assert errors == ["Altyazı Eklenemedi"] + + +def test_subtitle_for_single_panel_queued_video_is_not_applied_to_current_media( + errors, srt, monkeypatch, tmp_path): + """Panel açıkken tek video da aktif medyayı değiştirmeden kuyruğa girer.""" + video = tmp_path / "queued.mkv" + video.write_bytes(b"queued") + appended = [] + monkeypatch.setattr( + player_module, "append_media_paths", + lambda _player, paths: appended.extend(paths) or True) + player = FakePlayer(FakeMpv(), current_file="D:/playing.mkv") + player.video_frame.playlist_panel = type( + "OpenPanel", (), {"is_open": True})() + player._pending_subs = ["already-pending.srt"] + + MPVPlayer.dropEvent(player, FakeDropEvent([str(video), srt])) + + assert appended == [str(video)] + assert player._pending_subs == ["already-pending.srt"] + assert errors == ["Altyazı Eklenemedi"] + + def test_the_pending_drain_waits_for_a_real_track_list(errors, srt): """`track_list` bos oldugu surece kuyruk BOSALTILMAZ.""" mpv = FakeMpv() diff --git a/translations/mlcplayer_de.ts b/translations/mlcplayer_de.ts index bbc17f0..aecdd85 100644 --- a/translations/mlcplayer_de.ts +++ b/translations/mlcplayer_de.ts @@ -138,7 +138,8 @@ - + + Altyazı Eklenemedi @@ -296,17 +297,22 @@ Altyazı sonucu: + + + Altyazı sıradaki videoya otomatik bağlanamadı. Videoyu oynatın ve altyazıyı yeniden bırakın. + + - + Altyazı yolu: - + Altyazı yükleniyor... @@ -2363,7 +2369,7 @@ Bu klasör silinmiş veya program başka bir yere taşınmış olabilir. - + Önce bir video açın, sonra altyazıyı ekleyin. diff --git a/translations/mlcplayer_en.ts b/translations/mlcplayer_en.ts index 2bd6112..acae3fc 100644 --- a/translations/mlcplayer_en.ts +++ b/translations/mlcplayer_en.ts @@ -138,7 +138,8 @@ - + + Altyazı Eklenemedi Could Not Add Subtitle @@ -296,17 +297,22 @@ Altyazı sonucu: Subtitle result: + + + Altyazı sıradaki videoya otomatik bağlanamadı. Videoyu oynatın ve altyazıyı yeniden bırakın. + The subtitle could not be linked to the queued video automatically. Play the video, then drop the subtitle again. + - + Altyazı yolu: Subtitle path: - + Altyazı yükleniyor... Loading subtitle... @@ -2382,7 +2388,7 @@ That folder may have been deleted, or the program may have been moved elsewhere. Enter the API key first. - + Önce bir video açın, sonra altyazıyı ekleyin. Open a video first, then add the subtitle. diff --git a/translations/mlcplayer_es.ts b/translations/mlcplayer_es.ts index 732c649..681b510 100644 --- a/translations/mlcplayer_es.ts +++ b/translations/mlcplayer_es.ts @@ -138,7 +138,8 @@ - + + Altyazı Eklenemedi @@ -296,17 +297,22 @@ Altyazı sonucu: + + + Altyazı sıradaki videoya otomatik bağlanamadı. Videoyu oynatın ve altyazıyı yeniden bırakın. + + - + Altyazı yolu: - + Altyazı yükleniyor... @@ -2363,7 +2369,7 @@ Bu klasör silinmiş veya program başka bir yere taşınmış olabilir. - + Önce bir video açın, sonra altyazıyı ekleyin. diff --git a/translations/mlcplayer_fr.ts b/translations/mlcplayer_fr.ts index e923425..bf267d6 100644 --- a/translations/mlcplayer_fr.ts +++ b/translations/mlcplayer_fr.ts @@ -138,7 +138,8 @@ - + + Altyazı Eklenemedi @@ -296,17 +297,22 @@ Altyazı sonucu: + + + Altyazı sıradaki videoya otomatik bağlanamadı. Videoyu oynatın ve altyazıyı yeniden bırakın. + + - + Altyazı yolu: - + Altyazı yükleniyor... @@ -2363,7 +2369,7 @@ Bu klasör silinmiş veya program başka bir yere taşınmış olabilir. - + Önce bir video açın, sonra altyazıyı ekleyin. diff --git a/translations/mlcplayer_it.ts b/translations/mlcplayer_it.ts index d8c6932..6431303 100644 --- a/translations/mlcplayer_it.ts +++ b/translations/mlcplayer_it.ts @@ -138,7 +138,8 @@ - + + Altyazı Eklenemedi @@ -296,17 +297,22 @@ Altyazı sonucu: + + + Altyazı sıradaki videoya otomatik bağlanamadı. Videoyu oynatın ve altyazıyı yeniden bırakın. + + - + Altyazı yolu: - + Altyazı yükleniyor... @@ -2363,7 +2369,7 @@ Bu klasör silinmiş veya program başka bir yere taşınmış olabilir. - + Önce bir video açın, sonra altyazıyı ekleyin. diff --git a/translations/mlcplayer_pt_BR.ts b/translations/mlcplayer_pt_BR.ts index ca0d725..6a12ef9 100644 --- a/translations/mlcplayer_pt_BR.ts +++ b/translations/mlcplayer_pt_BR.ts @@ -138,7 +138,8 @@ - + + Altyazı Eklenemedi @@ -296,17 +297,22 @@ Altyazı sonucu: + + + Altyazı sıradaki videoya otomatik bağlanamadı. Videoyu oynatın ve altyazıyı yeniden bırakın. + + - + Altyazı yolu: - + Altyazı yükleniyor... @@ -2363,7 +2369,7 @@ Bu klasör silinmiş veya program başka bir yere taşınmış olabilir. - + Önce bir video açın, sonra altyazıyı ekleyin. diff --git a/translations/mlcplayer_ru.ts b/translations/mlcplayer_ru.ts index d497e19..b3cc905 100644 --- a/translations/mlcplayer_ru.ts +++ b/translations/mlcplayer_ru.ts @@ -138,7 +138,8 @@ - + + Altyazı Eklenemedi @@ -296,17 +297,22 @@ Altyazı sonucu: + + + Altyazı sıradaki videoya otomatik bağlanamadı. Videoyu oynatın ve altyazıyı yeniden bırakın. + + - + Altyazı yolu: - + Altyazı yükleniyor... @@ -2363,7 +2369,7 @@ Bu klasör silinmiş veya program başka bir yere taşınmış olabilir. - + Önce bir video açın, sonra altyazıyı ekleyin. From b54a9c3d5c87472f47acab6155c5d6325d24dc45 Mon Sep 17 00:00:00 2001 From: IzzmooPro Date: Sat, 29 Aug 2026 20:26:53 +0300 Subject: [PATCH 2/6] docs: bind queued subtitle fix evidence --- docs/CONTINUITY.md | 8 ++++---- docs/VERIFICATION_LEDGER.json | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/docs/CONTINUITY.md b/docs/CONTINUITY.md index b4e05bc..45b5ef7 100644 --- a/docs/CONTINUITY.md +++ b/docs/CONTINUITY.md @@ -6,10 +6,10 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi `ROADMAP.md` ve `ENGINEERING_AUDIT.md` içindedir. - Güncelleme: 29 Ağustos 2026 -- Kayıt hazırlanırken doğrulanan HEAD: `3b400ed8fefd0945248dfe7bde766df7f67267c3` +- Kayıt hazırlanırken doğrulanan HEAD: `32bbf126345f2def4906b4d7e3c5a831e4606176` - Güncel HEAD/origin farkı her oturumda `git rev-list --left-right --count` ile ölçülür; bu belge kendi commit hash'ini tahmin etmez. -- Dal: `codex/deferred-drop-subtitle-binding` (PR #71 exact head `3b400ed` tabanında subtitle-drop source/test/translation/docs değişiklikleri uncommitted; PR #71 remote head değiştirilmedi) -- Son kanıt: `EV-20260829-003` +- Dal: `codex/deferred-drop-subtitle-binding` (PR #71 exact head `3b400ed` üzerinde exact yerel ürün/evidence commit `32bbf12`; PR #71 remote head değiştirilmedi) +- Son kanıt: `EV-20260829-004` - Yayın kararı: **v0.40 canlı/latest; 87 varlık eş, public ana/add-on indirme hashleri ve Ed25519 imzaları geçti.** ## Canlı ürün ve yayın durumu @@ -182,7 +182,7 @@ merge/parent/run/`0/0` readback'ini sonraki gerçek kayıt provenance'ına bağl ## Sıradaki tek adım -`EV-20260829-003` subtitle-drop düzeltmesini yerel commit'e bağla; PR #71 sonucunu kullanıcı bildirdikten sonra stacked dalı protected PR akışına taşı. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. +`EV-20260829-004` iki-belge bağlama kaydını commit et; PR #71 sonucunu kullanıcı bildirdikten ve yeni Git onayı alındıktan sonra stacked dalı push/PR akışına taşı. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. ## Dokunulmayacaklar ve ayrı onaylar diff --git a/docs/VERIFICATION_LEDGER.json b/docs/VERIFICATION_LEDGER.json index ee3d92e..bbaa37b 100644 --- a/docs/VERIFICATION_LEDGER.json +++ b/docs/VERIFICATION_LEDGER.json @@ -11007,6 +11007,39 @@ "No Computer Use, physical/native run, build, installation, uninstall, push, PR, merge, tag or release was performed." ], "next_action": "Commit this bounded local fix and preserve PR 71 exact head; after the user reports PR 71 completion, submit the stacked fix through a separate protected PR." + }, + { + "id": "EV-20260829-004", + "recorded_at_utc": "2026-08-29T17:26:14Z", + "proof_layer": "deterministic", + "result": "passed", + "commit": "32bbf126345f2def4906b4d7e3c5a831e4606176", + "evidence_commit": "32bbf126345f2def4906b4d7e3c5a831e4606176", + "baseline_commit": "3b400ed8fefd0945248dfe7bde766df7f67267c3", + "working_tree_state": "clean after the approved local product, regression, translation and EV003 evidence commit readback and before this append-only binding record", + "changed_files": [ + "docs/CONTINUITY.md", + "docs/VERIFICATION_LEDGER.json" + ], + "subject": "Evidence-commit binding for queued-media subtitle isolation", + "commands": [ + "git add for the exact eleven-file reviewed scope; git diff --cached --check and staged-stat readback", + "git commit -m fix: isolate subtitles for queued media", + "git status --short --branch; git log -1 exact hash, subject and parent readback; git diff-tree name-status readback", + "git rev-parse origin/codex/ipc-offscreen-acceptance" + ], + "evidence": [ + "the approved package committed locally as exact 32bbf126345f2def4906b4d7e3c5a831e4606176 with sole parent 3b400ed8fefd0945248dfe7bde766df7f67267c3", + "commit readback contains only app/player.py, the subtitle-drop regression, seven translation catalogs and the two required evidence documents", + "the worktree was clean immediately after commit and the parent PR 71 remote tracking head remained exact 3b400ed8fefd0945248dfe7bde766df7f67267c3", + "the committed tree is the exact package whose continuity-inclusive affected deterministic run passed 97 tests and whose 457-string translation catalog check was current" + ], + "summary": "The queued-media subtitle isolation package and its regression evidence are immutably bound to exact local commit 32bbf12 without changing PR 71's remote head.", + "limitations": [ + "This evidence commit does not add independent adversarial review, hosted CI, Explorer OLE drag/drop, physical/native behavior or installed-artifact proof.", + "No Computer Use, push, PR, merge, build, installation, uninstall, tag or release was performed." + ], + "next_action": "Commit this two-document binding record; wait for the user-reported PR 71 result and a fresh Git authorization before pushing or opening the separate stacked fix PR." } ] } From 9711982b0e3f4b6928f7a6dc8b6b2b173cefae62 Mon Sep 17 00:00:00 2001 From: IzzmooPro Date: Sat, 29 Aug 2026 20:47:22 +0300 Subject: [PATCH 3/6] docs: refresh player architecture inventory --- docs/ARCHITECTURE_INVENTORY.json | 10 ++--- docs/CONTINUITY.md | 8 ++-- docs/VERIFICATION_LEDGER.json | 64 ++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 9 deletions(-) diff --git a/docs/ARCHITECTURE_INVENTORY.json b/docs/ARCHITECTURE_INVENTORY.json index 35375a7..a0c9898 100644 --- a/docs/ARCHITECTURE_INVENTORY.json +++ b/docs/ARCHITECTURE_INVENTORY.json @@ -1,9 +1,9 @@ { "schema_version": 1, "status": "analyzed", - "measured_product_commit": "59f6980d6be88d5c66ab55aeb235a1e07518e212", - "working_tree_state": "modified", - "measured_at_utc": "2026-08-28T14:28:54Z", + "measured_product_commit": "b54a9c3d5c87472f47acab6155c5d6325d24dc45", + "working_tree_state": "clean product sources; inventory refresh uncommitted", + "measured_at_utc": "2026-08-29T17:45:44Z", "hash_contract": "sha256 of UTF-8 source normalized to LF", "modules": [ { @@ -26,8 +26,8 @@ }, { "path": "app/player.py", - "sha256": "ab4a7623cae2fba369f8acc1b0756644eec9ad896e9bd419113dc4c17a4f5b73", - "lines": 1200, + "sha256": "8162463bd06777b6544af5f46d5579e2a1644041b2cee6f7c4946bad27602c24", + "lines": 1220, "classes": 1, "top_functions": 1, "indented_functions": 78, diff --git a/docs/CONTINUITY.md b/docs/CONTINUITY.md index 45b5ef7..51793f4 100644 --- a/docs/CONTINUITY.md +++ b/docs/CONTINUITY.md @@ -8,8 +8,8 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi - Güncelleme: 29 Ağustos 2026 - Kayıt hazırlanırken doğrulanan HEAD: `32bbf126345f2def4906b4d7e3c5a831e4606176` - Güncel HEAD/origin farkı her oturumda `git rev-list --left-right --count` ile ölçülür; bu belge kendi commit hash'ini tahmin etmez. -- Dal: `codex/deferred-drop-subtitle-binding` (PR #71 exact head `3b400ed` üzerinde exact yerel ürün/evidence commit `32bbf12`; PR #71 remote head değiştirilmedi) -- Son kanıt: `EV-20260829-004` +- Dal: `codex/deferred-drop-subtitle-binding` (PR #72 exact head `b54a9c3`; hosted envanter drift düzeltmesi source değiştirmeden uncommitted) +- Son kanıt: `EV-20260829-006` - Yayın kararı: **v0.40 canlı/latest; 87 varlık eş, public ana/add-on indirme hashleri ve Ed25519 imzaları geçti.** ## Canlı ürün ve yayın durumu @@ -41,7 +41,7 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi ## Kalite kabul özeti - Windows P0 matrisi: `WIN-P0-01`–`WIN-P0-05` PASSED; drag/drop, playlist sınırları ve IPC için `P0-06`, `P0-07`, `P0-08` NOT_RUN. -- `WIN-P0-08` deterministik offscreen çok-süreç kapsamı gerçek secondary PID, dosya/URL/aktivasyon devri, exit `0` ve terminal kapanış ölçümüyle genişletildi; dar etki paketi **93 passed** verdi. Gerçek ürün penceresi foreground ve hedef-yükleme sonucu ölçülmediği için fiziksel satır hâlâ `NOT_RUN` (`EV-20260829-002`). Aktif oynatma sırasında kuyruğa eklenen yeni video(lar)la birlikte bırakılan altyazının global pending kuyruğuyla yanlışlıkla mevcut videoya uygulanması kırmızı testte doğrulandı; hedef medya başlatılmadığında pending durum artık korunuyor ve kullanıcı açıkça yönlendiriliyor. Subtitle/playlist/atomiklik/çeviri etki paketi **87 passed** verdi (`EV-20260829-003`). +- `WIN-P0-08` deterministik offscreen çok-süreç kapsamı gerçek secondary PID, dosya/URL/aktivasyon devri, exit `0` ve terminal kapanış ölçümüyle genişletildi; dar etki paketi **93 passed** verdi. Gerçek ürün penceresi foreground ve hedef-yükleme sonucu ölçülmediği için fiziksel satır hâlâ `NOT_RUN` (`EV-20260829-002`). Aktif oynatma sırasında kuyruğa eklenen yeni video(lar)la birlikte bırakılan altyazının global pending kuyruğuyla yanlışlıkla mevcut videoya uygulanması kırmızı testte doğrulandı; hedef medya başlatılmadığında pending durum artık korunuyor ve kullanıcı açıkça yönlendiriliyor. Subtitle/playlist/atomiklik/çeviri etki paketi **87 passed** verdi (`EV-20260829-003`). PR #72 hosted run `33266269968`, **5151 passed / 22 skipped / 1 failed** ile yalnız stale `app/player.py` mimari hash/satır kapısında durdu; diğer beş modül exact eşti. Envanter exact `b54a9c3` kaynağına güncellendi (`EV-20260829-005`–`006`); retry yapılmadı. - Video biçimi matrisi: SDR ekranda `VF-CORE-01` ve HDR ekranda SDR-on-HDR `VF-CORE-02` exact native ve kontrollü insan ramp kabulüyle PASSED. Kalan 14 biçim satırı ve genel `WIN-P2-01` BLOCKED; bu iki PASS genel HDR/format @@ -182,7 +182,7 @@ merge/parent/run/`0/0` readback'ini sonraki gerçek kayıt provenance'ına bağl ## Sıradaki tek adım -`EV-20260829-004` iki-belge bağlama kaydını commit et; PR #71 sonucunu kullanıcı bildirdikten ve yeni Git onayı alındıktan sonra stacked dalı push/PR akışına taşı. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. +`EV-20260829-006` envanter/kanıt düzeltmesini ayrı onayla commit ve push et; yeni hosted run sonucunu kullanıcı bildirsin. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. ## Dokunulmayacaklar ve ayrı onaylar diff --git a/docs/VERIFICATION_LEDGER.json b/docs/VERIFICATION_LEDGER.json index bbaa37b..617170b 100644 --- a/docs/VERIFICATION_LEDGER.json +++ b/docs/VERIFICATION_LEDGER.json @@ -11040,6 +11040,70 @@ "No Computer Use, push, PR, merge, build, installation, uninstall, tag or release was performed." ], "next_action": "Commit this two-document binding record; wait for the user-reported PR 71 result and a fresh Git authorization before pushing or opening the separate stacked fix PR." + }, + { + "id": "EV-20260829-005", + "recorded_at_utc": "2026-08-29T17:44:10Z", + "proof_layer": "hosted_ci", + "result": "failed", + "commit": "b54a9c3d5c87472f47acab6155c5d6325d24dc45", + "tested_commit": "b54a9c3d5c87472f47acab6155c5d6325d24dc45", + "working_tree_state": "clean local and remote PR 72 head at exact parity when the completed hosted result was read", + "changed_files": [], + "subject": "PR 72 hosted failure caused by stale app.player architecture inventory metadata", + "commands": [ + "user reported the PR test complete; gh pr view 72 and gh pr checks 72 single readback", + "gh run view 33266269968 metadata and failed log for job 99136769957", + "read-only normalized SHA-256 and structure comparison for all six architecture inventory sources" + ], + "evidence": [ + "required test run 33266269968 completed FAILURE for exact PR head b54a9c3d5c87472f47acab6155c5d6325d24dc45", + "ledger append-only, locked environment, Python compilation and translation/whitespace steps passed", + "the CI-safe suite completed 5151 passed, 22 skipped and 1 failed; the sole failure was test_machine_inventory_matches_the_exact_six_sources", + "app/player.py normalized SHA-256 was 8162463bd06777b6544af5f46d5579e2a1644041b2cee6f7c4946bad27602c24 while the inventory retained ab4a7623cae2fba369f8acc1b0756644eec9ad896e9bd419113dc4c17a4f5b73", + "read-only full inventory comparison found the other five source hashes and all their structure metrics exact" + ], + "summary": "PR 72 is NO-GO because its sole hosted failure is a stale machine architecture inventory entry for the intentionally changed app/player.py source.", + "limitations": [ + "The 5151 hosted passes do not override the required failing check; merge and retry remain prohibited until the root cause is repaired.", + "The 22 skipped tests remain not PASS.", + "No retry, merge, product change, Computer Use, physical/native run, build, installation, uninstall, tag or release was performed." + ], + "next_action": "Refresh only the app/player.py machine inventory hash and structural line count from exact b54a9c3, run the inventory and continuity regressions, then request separate commit and push approval." + }, + { + "id": "EV-20260829-006", + "recorded_at_utc": "2026-08-29T17:45:44Z", + "proof_layer": "deterministic", + "result": "passed", + "commit": "b54a9c3d5c87472f47acab6155c5d6325d24dc45", + "baseline_commit": "b54a9c3d5c87472f47acab6155c5d6325d24dc45", + "working_tree_state": "uncommitted architecture inventory, continuity and append-only evidence correction on the exact failed PR 72 head", + "changed_files": [ + "docs/ARCHITECTURE_INVENTORY.json", + "docs/CONTINUITY.md", + "docs/VERIFICATION_LEDGER.json" + ], + "subject": "Refresh the machine architecture inventory for the exact queued-subtitle fix source", + "commands": [ + "local red reproduction of test_machine_inventory_matches_the_exact_six_sources on exact b54a9c3", + "read-only normalized hash and regex structure measurement across all six inventory modules", + "update only inventory provenance plus app/player.py normalized SHA-256 and line count from 1200 to 1220", + "python -m pytest -q tests/test_quality_evolution_plan_regressions.py tests/test_continuity_regressions.py; 16 passed", + "python -m json.tool for both machine JSON records; git diff --check; continuity remained at 200 lines" + ], + "evidence": [ + "the local target reproduced the hosted failure before modification with the same old and actual app/player.py hashes", + "app/player.py product bytes remain unchanged; the corrected inventory records normalized SHA-256 8162463bd06777b6544af5f46d5579e2a1644041b2cee6f7c4946bad27602c24 and 1220 lines", + "all five other module entries were already exact and were not altered", + "the complete architecture-quality and continuity package passed 16 tests after the metadata correction" + ], + "summary": "The stale machine inventory metadata now matches the exact PR 72 app/player.py source without changing product behavior.", + "limitations": [ + "This deterministic metadata repair is not hosted CI and requires a new required check after push.", + "No hosted retry, merge, product change, Computer Use, physical/native run, build, installation, uninstall, commit, push, tag or release was performed." + ], + "next_action": "Commit and push the three-document repair only after separate approval; do not manually retry the failed hosted run." } ] } From 9d940e195fdb3ff86295248f0b09d579c58a0ffe Mon Sep 17 00:00:00 2001 From: IzzmooPro Date: Sat, 29 Aug 2026 20:48:15 +0300 Subject: [PATCH 4/6] docs: bind architecture inventory evidence --- docs/CONTINUITY.md | 8 ++++---- docs/VERIFICATION_LEDGER.json | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/docs/CONTINUITY.md b/docs/CONTINUITY.md index 51793f4..90a156a 100644 --- a/docs/CONTINUITY.md +++ b/docs/CONTINUITY.md @@ -6,10 +6,10 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi `ROADMAP.md` ve `ENGINEERING_AUDIT.md` içindedir. - Güncelleme: 29 Ağustos 2026 -- Kayıt hazırlanırken doğrulanan HEAD: `32bbf126345f2def4906b4d7e3c5a831e4606176` +- Kayıt hazırlanırken doğrulanan HEAD: `9711982b0e3f4b6928f7a6dc8b6b2b173cefae62` - Güncel HEAD/origin farkı her oturumda `git rev-list --left-right --count` ile ölçülür; bu belge kendi commit hash'ini tahmin etmez. -- Dal: `codex/deferred-drop-subtitle-binding` (PR #72 exact head `b54a9c3`; hosted envanter drift düzeltmesi source değiştirmeden uncommitted) -- Son kanıt: `EV-20260829-006` +- Dal: `codex/deferred-drop-subtitle-binding` (PR #72 remote head `b54a9c3`; exact yerel envanter/evidence commit `9711982`, dal uzak ref'in bir commit önünde) +- Son kanıt: `EV-20260829-007` - Yayın kararı: **v0.40 canlı/latest; 87 varlık eş, public ana/add-on indirme hashleri ve Ed25519 imzaları geçti.** ## Canlı ürün ve yayın durumu @@ -182,7 +182,7 @@ merge/parent/run/`0/0` readback'ini sonraki gerçek kayıt provenance'ına bağl ## Sıradaki tek adım -`EV-20260829-006` envanter/kanıt düzeltmesini ayrı onayla commit ve push et; yeni hosted run sonucunu kullanıcı bildirsin. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. +`EV-20260829-007` iki-belge bağlama kaydını ayrı onayla commit et; ardından ayrı push onayıyla PR #72 head'ini ilerlet ve yeni hosted sonucu kullanıcı bildirsin. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. ## Dokunulmayacaklar ve ayrı onaylar diff --git a/docs/VERIFICATION_LEDGER.json b/docs/VERIFICATION_LEDGER.json index 617170b..81eb25f 100644 --- a/docs/VERIFICATION_LEDGER.json +++ b/docs/VERIFICATION_LEDGER.json @@ -11104,6 +11104,39 @@ "No hosted retry, merge, product change, Computer Use, physical/native run, build, installation, uninstall, commit, push, tag or release was performed." ], "next_action": "Commit and push the three-document repair only after separate approval; do not manually retry the failed hosted run." + }, + { + "id": "EV-20260829-007", + "recorded_at_utc": "2026-08-29T17:47:28Z", + "proof_layer": "deterministic", + "result": "passed", + "commit": "9711982b0e3f4b6928f7a6dc8b6b2b173cefae62", + "evidence_commit": "9711982b0e3f4b6928f7a6dc8b6b2b173cefae62", + "baseline_commit": "b54a9c3d5c87472f47acab6155c5d6325d24dc45", + "working_tree_state": "clean after the separately approved three-document inventory correction commit and before this append-only binding record", + "changed_files": [ + "docs/CONTINUITY.md", + "docs/VERIFICATION_LEDGER.json" + ], + "subject": "Evidence-commit binding for the PR 72 architecture inventory correction", + "commands": [ + "git add for docs/ARCHITECTURE_INVENTORY.json, docs/CONTINUITY.md and docs/VERIFICATION_LEDGER.json", + "git diff --cached --check and exact three-file staged-stat readback", + "git commit -m docs: refresh player architecture inventory", + "git status --short --branch; git log -1 exact hash, subject and parent; git diff-tree name-status readback" + ], + "evidence": [ + "the approved correction committed locally as exact 9711982b0e3f4b6928f7a6dc8b6b2b173cefae62 with sole parent b54a9c3d5c87472f47acab6155c5d6325d24dc45", + "commit readback contains only the machine architecture inventory plus the required continuity and append-only evidence documents", + "the local task branch is exactly one commit ahead of the unchanged PR 72 remote head", + "the committed tree is the exact metadata package whose architecture-quality and continuity validation passed 16 tests" + ], + "summary": "The PR 72 stale architecture inventory repair is immutably bound to exact local commit 9711982 without changing product source bytes.", + "limitations": [ + "The correction has not been pushed and no new hosted check exists for this commit.", + "No product change, Computer Use, physical/native run, build, installation, uninstall, push, merge, tag or release was performed." + ], + "next_action": "Commit this two-document binding record under separate approval, then request a separate push approval; do not manually retry the failed run." } ] } From 5b4a59dd1f5f2681cd316f325833227f190c01c3 Mon Sep 17 00:00:00 2001 From: IzzmooPro Date: Sat, 29 Aug 2026 20:56:56 +0300 Subject: [PATCH 5/6] test: stabilize subtitle wait budget assertion --- docs/CONTINUITY.md | 8 +-- docs/VERIFICATION_LEDGER.json | 66 +++++++++++++++++++ tests/test_subtitle_apply_wait_regressions.py | 16 ++++- 3 files changed, 83 insertions(+), 7 deletions(-) diff --git a/docs/CONTINUITY.md b/docs/CONTINUITY.md index 90a156a..ba89a51 100644 --- a/docs/CONTINUITY.md +++ b/docs/CONTINUITY.md @@ -8,8 +8,8 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi - Güncelleme: 29 Ağustos 2026 - Kayıt hazırlanırken doğrulanan HEAD: `9711982b0e3f4b6928f7a6dc8b6b2b173cefae62` - Güncel HEAD/origin farkı her oturumda `git rev-list --left-right --count` ile ölçülür; bu belge kendi commit hash'ini tahmin etmez. -- Dal: `codex/deferred-drop-subtitle-binding` (PR #72 remote head `b54a9c3`; exact yerel envanter/evidence commit `9711982`, dal uzak ref'in bir commit önünde) -- Son kanıt: `EV-20260829-007` +- Dal: `codex/deferred-drop-subtitle-binding` (PR #72 exact head `9d940e1`; hosted zamanlama-test düzeltmesi test/docs olarak uncommitted) +- Son kanıt: `EV-20260829-009` - Yayın kararı: **v0.40 canlı/latest; 87 varlık eş, public ana/add-on indirme hashleri ve Ed25519 imzaları geçti.** ## Canlı ürün ve yayın durumu @@ -41,7 +41,7 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi ## Kalite kabul özeti - Windows P0 matrisi: `WIN-P0-01`–`WIN-P0-05` PASSED; drag/drop, playlist sınırları ve IPC için `P0-06`, `P0-07`, `P0-08` NOT_RUN. -- `WIN-P0-08` deterministik offscreen çok-süreç kapsamı gerçek secondary PID, dosya/URL/aktivasyon devri, exit `0` ve terminal kapanış ölçümüyle genişletildi; dar etki paketi **93 passed** verdi. Gerçek ürün penceresi foreground ve hedef-yükleme sonucu ölçülmediği için fiziksel satır hâlâ `NOT_RUN` (`EV-20260829-002`). Aktif oynatma sırasında kuyruğa eklenen yeni video(lar)la birlikte bırakılan altyazının global pending kuyruğuyla yanlışlıkla mevcut videoya uygulanması kırmızı testte doğrulandı; hedef medya başlatılmadığında pending durum artık korunuyor ve kullanıcı açıkça yönlendiriliyor. Subtitle/playlist/atomiklik/çeviri etki paketi **87 passed** verdi (`EV-20260829-003`). PR #72 hosted run `33266269968`, **5151 passed / 22 skipped / 1 failed** ile yalnız stale `app/player.py` mimari hash/satır kapısında durdu; diğer beş modül exact eşti. Envanter exact `b54a9c3` kaynağına güncellendi (`EV-20260829-005`–`006`); retry yapılmadı. +- `WIN-P0-08` deterministik offscreen çok-süreç kapsamı gerçek secondary PID, dosya/URL/aktivasyon devri, exit `0` ve terminal kapanış ölçümüyle genişletildi; dar etki paketi **93 passed** verdi. Gerçek ürün penceresi foreground ve hedef-yükleme sonucu ölçülmediği için fiziksel satır hâlâ `NOT_RUN` (`EV-20260829-002`). Aktif oynatma sırasında kuyruğa eklenen yeni video(lar)la birlikte bırakılan altyazının global pending kuyruğuyla yanlışlıkla mevcut videoya uygulanması kırmızı testte doğrulandı; hedef medya başlatılmadığında pending durum artık korunuyor ve kullanıcı açıkça yönlendiriliyor. Subtitle/playlist/atomiklik/çeviri etki paketi **87 passed** verdi (`EV-20260829-003`). PR #72 ilk hosted run `33266269968`, **5151 passed / 22 skipped / 1 failed** ile stale `app/player.py` mimari hash/satır kapısında durdu; diğer beş modül exact eşti ve envanter düzeltildi (`EV-20260829-005`–`007`). Yeni push koşumu `33266596701` yine **5151/22/1** verdi; tek hata ürün bütçesi yerine runner/UI overhead'ini de kapsayan `elapsed <= 0.8` testiydi. Test sonluluğu artık duvar-saati üst sınırı yerine exact 40 Qt wait çağrısıyla ölçülüyor; hedef 5/5 ve dosya paketi **12 passed** (`EV-20260829-008`–`009`). Hiçbir başarısız run retry edilmedi. - Video biçimi matrisi: SDR ekranda `VF-CORE-01` ve HDR ekranda SDR-on-HDR `VF-CORE-02` exact native ve kontrollü insan ramp kabulüyle PASSED. Kalan 14 biçim satırı ve genel `WIN-P2-01` BLOCKED; bu iki PASS genel HDR/format @@ -182,7 +182,7 @@ merge/parent/run/`0/0` readback'ini sonraki gerçek kayıt provenance'ına bağl ## Sıradaki tek adım -`EV-20260829-007` iki-belge bağlama kaydını ayrı onayla commit et; ardından ayrı push onayıyla PR #72 head'ini ilerlet ve yeni hosted sonucu kullanıcı bildirsin. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. +`EV-20260829-009` test/kanıt düzeltmesini ayrı onayla commit et; evidence-binding ve push ayrı onaylıdır, yeni hosted sonucu kullanıcı bildirsin. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. ## Dokunulmayacaklar ve ayrı onaylar diff --git a/docs/VERIFICATION_LEDGER.json b/docs/VERIFICATION_LEDGER.json index 81eb25f..1fc223c 100644 --- a/docs/VERIFICATION_LEDGER.json +++ b/docs/VERIFICATION_LEDGER.json @@ -11137,6 +11137,72 @@ "No product change, Computer Use, physical/native run, build, installation, uninstall, push, merge, tag or release was performed." ], "next_action": "Commit this two-document binding record under separate approval, then request a separate push approval; do not manually retry the failed run." + }, + { + "id": "EV-20260829-008", + "recorded_at_utc": "2026-08-29T17:51:46Z", + "proof_layer": "hosted_ci", + "result": "failed", + "commit": "9d940e195fdb3ff86295248f0b09d579c58a0ffe", + "tested_commit": "9d940e195fdb3ff86295248f0b09d579c58a0ffe", + "working_tree_state": "clean local and remote PR 72 head at exact parity when the user-reported completed hosted result was read", + "changed_files": [], + "subject": "PR 72 hosted timing-test failure after the architecture inventory repair", + "commands": [ + "user reported the new PR test complete; gh pr view 72 and gh pr checks 72 single readback", + "gh run view 33266596701 metadata and failed log for job 99137632318", + "read-only subtitle apply wait test, controller, service and PR file-scope inspection" + ], + "evidence": [ + "required test run 33266596701 completed FAILURE for exact PR head 9d940e195fdb3ff86295248f0b09d579c58a0ffe", + "ledger append-only, locked environment, Python compilation and translation/whitespace steps passed", + "the CI-safe suite completed 5151 passed, 22 skipped and 1 failed; the sole failure was test_apply_spends_real_time_when_the_track_never_arrives", + "the test measured 0.832 seconds against a fixed 0.800 second wall-clock upper limit although the designed polling budget is 40 times 10 milliseconds", + "the PR does not change app/subtitle_service.py, app/subtitle_download_controller.py or the failing test; the assertion included worker dispatch, Qt scheduling, apply polling and settlement overhead in one runner-sensitive duration" + ], + "summary": "PR 72 remains NO-GO because its sole hosted failure is a runner-sensitive wall-clock upper-bound assertion unrelated to the queued-media product change.", + "limitations": [ + "The 5151 hosted passes do not override the required failing check and the 22 skips remain not PASS.", + "The failure cannot be dismissed by retry; the test contract must measure finite polling directly before a new commit is submitted.", + "No retry, merge, product change, Computer Use, physical/native run, build, installation, uninstall, tag or release was performed." + ], + "next_action": "Replace the loaded-runner wall-clock upper bound with an exact TRACK_WAIT_ATTEMPTS wait-call assertion while retaining the real-time lower bound and bounded pump timeout." + }, + { + "id": "EV-20260829-009", + "recorded_at_utc": "2026-08-29T17:55:29Z", + "proof_layer": "deterministic", + "result": "passed", + "commit": "9d940e195fdb3ff86295248f0b09d579c58a0ffe", + "baseline_commit": "9d940e195fdb3ff86295248f0b09d579c58a0ffe", + "working_tree_state": "uncommitted test-only timing-contract and append-only evidence correction on the exact failed PR 72 head", + "changed_files": [ + "docs/CONTINUITY.md", + "docs/VERIFICATION_LEDGER.json", + "tests/test_subtitle_apply_wait_regressions.py" + ], + "subject": "Measure subtitle apply polling boundedness by exact wait calls instead of loaded-runner wall time", + "commands": [ + "instrument the real SubtitleDownloadController._qt_wait path inside the never-arrives regression and count completed calls", + "retain the 0.25 second real-time lower bound and the existing eight-second pump fail-safe; replace only elapsed <= 0.8 with exact TRACK_WAIT_ATTEMPTS equality", + "run the corrected target five independent local times; each passed", + "python -m pytest -q tests/test_subtitle_apply_wait_regressions.py; 12 passed", + "python -m pytest -q subtitle-apply-wait, architecture-quality and continuity families; 28 passed; git diff --check" + ], + "evidence": [ + "the corrected test still proves that Qt polling consumes real time rather than collapsing into immediate processEvents calls", + "finite work is now proven directly: the never-arrives path must complete exactly 40 real _qt_wait calls, so one extra or missing polling step fails deterministically", + "the unchanged eight-second pump timeout still fails closed on a stuck controller without treating hosted scheduler overhead as product polling work", + "the target passed five consecutive isolated runs and the complete subtitle apply wait family passed all 12 tests", + "the combined timing, architecture and continuity package passed 28 tests and continuity remained at 200 lines" + ], + "summary": "Subtitle apply wait boundedness is now measured by the exact product polling count while real waiting and stuck-controller fail-safe coverage remain intact.", + "limitations": [ + "This is a test-only deterministic correction and does not change subtitle product behavior.", + "A new required hosted check is necessary after commit and push; the prior failed run is not retried.", + "No Computer Use, physical/native run, build, installation, uninstall, commit, push, merge, tag or release was performed." + ], + "next_action": "Commit the three-file test/evidence correction only after separate approval; evidence binding and push remain separate gates." } ] } diff --git a/tests/test_subtitle_apply_wait_regressions.py b/tests/test_subtitle_apply_wait_regressions.py index 3a350ae..05313c9 100644 --- a/tests/test_subtitle_apply_wait_regressions.py +++ b/tests/test_subtitle_apply_wait_regressions.py @@ -186,9 +186,17 @@ def test_slower_delayed_track_is_still_inside_the_budget(bench): # --- 2. Track hiç gelmezse GERÇEK süre harcanmalı --- -def test_apply_spends_real_time_when_the_track_never_arrives(bench): +def test_apply_spends_real_time_and_uses_exact_wait_budget(bench): mpv = DelayedTrackMPV(never=True) app, dialog, controller, mpv, tmp = bench(mpv=mpv) + wait_calls = [] + real_wait = controller._qt_wait + + def measured_wait(): + real_wait() + wait_calls.append(True) + + controller._qt_wait = measured_wait started = time.monotonic() controller.download_and_apply() @@ -198,8 +206,10 @@ def test_apply_spends_real_time_when_the_track_never_arrives(bench): assert elapsed >= 0.25, ( f"apply beklemesi gercek zaman harcamadi: {elapsed:.3f}s " f"(beklenen butce ~{EXPECTED_BUDGET_S:.2f}s)") - # Windows zamanlayici cozunurlugu icin genis tolerans. - assert elapsed <= 0.8, f"apply beklemesi butceyi asti: {elapsed:.3f}s" + # Duvar saati üst sınırı yüklü CI runner zamanlayıcısını da ölçer ve ürün + # bütçesini kanıtlamaz. Sonluluk doğrudan gerçek polling adımı sayısıyla + # doğrulanır; tek bir fazla/eksik bekleme de regresyondur. + assert len(wait_calls) == service.TRACK_WAIT_ATTEMPTS assert dialog.status_text() == STATUS_PARTIAL assert (tmp / TARGET_NAME).exists(), "kismi basarida dosya silinmemeli" From f3ad6489ef9f3dff9130cd094b27f3dfa6d89994 Mon Sep 17 00:00:00 2001 From: IzzmooPro Date: Sat, 29 Aug 2026 20:57:48 +0300 Subject: [PATCH 6/6] docs: bind subtitle wait test evidence --- docs/CONTINUITY.md | 8 ++++---- docs/VERIFICATION_LEDGER.json | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/docs/CONTINUITY.md b/docs/CONTINUITY.md index ba89a51..40773d5 100644 --- a/docs/CONTINUITY.md +++ b/docs/CONTINUITY.md @@ -6,10 +6,10 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi `ROADMAP.md` ve `ENGINEERING_AUDIT.md` içindedir. - Güncelleme: 29 Ağustos 2026 -- Kayıt hazırlanırken doğrulanan HEAD: `9711982b0e3f4b6928f7a6dc8b6b2b173cefae62` +- Kayıt hazırlanırken doğrulanan HEAD: `5b4a59dd1f5f2681cd316f325833227f190c01c3` - Güncel HEAD/origin farkı her oturumda `git rev-list --left-right --count` ile ölçülür; bu belge kendi commit hash'ini tahmin etmez. -- Dal: `codex/deferred-drop-subtitle-binding` (PR #72 exact head `9d940e1`; hosted zamanlama-test düzeltmesi test/docs olarak uncommitted) -- Son kanıt: `EV-20260829-009` +- Dal: `codex/deferred-drop-subtitle-binding` (PR #72 remote head `9d940e1`; exact yerel timing-test/evidence commit `5b4a59d`, dal uzak ref'in bir commit önünde) +- Son kanıt: `EV-20260829-010` - Yayın kararı: **v0.40 canlı/latest; 87 varlık eş, public ana/add-on indirme hashleri ve Ed25519 imzaları geçti.** ## Canlı ürün ve yayın durumu @@ -182,7 +182,7 @@ merge/parent/run/`0/0` readback'ini sonraki gerçek kayıt provenance'ına bağl ## Sıradaki tek adım -`EV-20260829-009` test/kanıt düzeltmesini ayrı onayla commit et; evidence-binding ve push ayrı onaylıdır, yeni hosted sonucu kullanıcı bildirsin. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. +`EV-20260829-010` iki-belge bağlama kaydını ayrı onayla commit et; ardından ayrı push onayıyla PR #72 head'ini ilerlet ve yeni hosted sonucu kullanıcı bildirsin. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur. ## Dokunulmayacaklar ve ayrı onaylar diff --git a/docs/VERIFICATION_LEDGER.json b/docs/VERIFICATION_LEDGER.json index 1fc223c..ed497b0 100644 --- a/docs/VERIFICATION_LEDGER.json +++ b/docs/VERIFICATION_LEDGER.json @@ -11203,6 +11203,39 @@ "No Computer Use, physical/native run, build, installation, uninstall, commit, push, merge, tag or release was performed." ], "next_action": "Commit the three-file test/evidence correction only after separate approval; evidence binding and push remain separate gates." + }, + { + "id": "EV-20260829-010", + "recorded_at_utc": "2026-08-29T17:57:02Z", + "proof_layer": "deterministic", + "result": "passed", + "commit": "5b4a59dd1f5f2681cd316f325833227f190c01c3", + "evidence_commit": "5b4a59dd1f5f2681cd316f325833227f190c01c3", + "baseline_commit": "9d940e195fdb3ff86295248f0b09d579c58a0ffe", + "working_tree_state": "clean after the separately approved timing-test and EV008-EV009 evidence commit and before this append-only binding record", + "changed_files": [ + "docs/CONTINUITY.md", + "docs/VERIFICATION_LEDGER.json" + ], + "subject": "Evidence-commit binding for the deterministic subtitle wait-budget test correction", + "commands": [ + "git add for docs/CONTINUITY.md, docs/VERIFICATION_LEDGER.json and tests/test_subtitle_apply_wait_regressions.py", + "git diff --cached --check and exact three-file staged-stat readback", + "git commit -m test: stabilize subtitle wait budget assertion", + "git status --short --branch; git log -1 exact hash, subject and parent; git diff-tree name-status readback" + ], + "evidence": [ + "the approved correction committed locally as exact 5b4a59dd1f5f2681cd316f325833227f190c01c3 with sole parent 9d940e195fdb3ff86295248f0b09d579c58a0ffe", + "commit readback contains only the subtitle apply wait regression plus the required continuity and append-only evidence documents", + "the local task branch is exactly one commit ahead of the unchanged PR 72 remote head", + "the committed tree is the exact package whose corrected target passed five consecutive isolated runs, full timing family passed 12 tests and combined impact package passed 28 tests" + ], + "summary": "The deterministic subtitle wait-budget assertion repair is immutably bound to exact local commit 5b4a59d without changing product behavior.", + "limitations": [ + "The correction has not been pushed and no new hosted check exists for this commit.", + "No product change, Computer Use, physical/native run, build, installation, uninstall, push, merge, tag or release was performed." + ], + "next_action": "Commit this two-document binding record under separate approval, then request a separate push approval; do not manually retry either failed run." } ] }