From f11a6b8b6b552a065ca4eb4c3cc17ca62aceb479 Mon Sep 17 00:00:00 2001 From: vitya Date: Wed, 20 May 2026 13:23:32 +0300 Subject: [PATCH] =?UTF-8?q?tasks(using-yt-tools):=20close=20review=20?= =?UTF-8?q?=F0=9F=9F=A2=20+=20file=203=20nice-to-have=20findings=20?= =?UTF-8?q?=E2=9A=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [using-yt-tools-review] ⚪ → 🟢. Fresh-eyes subagent reviewer (no impl priming) prošёл все 4 acceptance dimensions: - Flow A PASS — URL OmJ-4B-mS-Y (Domain of Science, 11:06 en), transcript header + paragraph segmentation OK, 3 frames at 4:23/4:41/8:16 visually consistent with chosen paragraphs. - Flow B PASS — URL gCfzeONu3Mo (TED-Ed), 1 frame at 2:00, no transcript dependency. - Failure modes PASS — broken URL exit 1; --lang zz proxy для no-captions exit 1 с available-langs hint; non-YouTube URL «cannot extract video id». - What NOT to do PASS — rules agent-side policy, CLI не contradicts; --mode interval/scene flags существуют, но spec явно их называет в prohibition (intentional). 3 nice-to-have findings зафайлены как ⚪ siblings: - [using-yt-tools-empty-cache-dir-on-failure] — yt-transcript mkdir до фетча captions, на abort оставляет пустую папку. - [using-yt-tools-frames-multiline-stdout] — SKILL.md обещает single-line EOF path, но yt-frames с N timestamps выдаёт N строк «Wrote: ». Spec/CLI mismatch. - [using-yt-tools-warning-mojibake] — yt-dlp warnings на Windows console показывают «�» вместо unicode quotes (cp1251 vs UTF-8). No blockers, no functional break. Закрытие по «findings зафайлены» ветке review-acceptance. Tasks_create через MCP сорвался на write-side (Gitea POST 404, known bug cluster — preview OK, confirm fails); все 4 правки сделаны через local-file edit. Co-Authored-By: Claude Opus 4.7 (1M context) --- .tasks/STATUS.md | 74 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 5 deletions(-) diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 13e07ea..08c0ee1 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -1,5 +1,5 @@ # Task Board -_Updated: 2026-05-20 (using-yt-tools: 3 baseline 🟢; 3 finding fixes 🟢; skill-body-fill 🟢 [SKILL.md 0.2.0]; trigger-smoke-clean-session 🟢 [13/13 ✅ — 10 positive activate, 3 false-positive not-activate]; review now ⚪ ready — все blockers сняты, awaiting fresh-eyes reviewer для full Steps/Failure/NOT behavioral pass)_ +_Updated: 2026-05-20 (using-yt-tools: 3 baseline 🟢; 3 finding fixes 🟢; skill-body-fill 🟢 [SKILL.md 0.2.0]; trigger-smoke-clean-session 🟢 [13/13]; review 🟢 by fresh-eyes subagent — Flow A/B/Failure-modes/NOT all PASS; 3 nice-to-have findings filed as ⚪ [empty-cache-dir-on-failure, frames-multiline-stdout, warning-mojibake])_ + + +--- + +## ⚪ [using-yt-tools-empty-cache-dir-on-failure] — `yt-transcript` создаёт `yt-cache//` ДО фетча captions; при abort оставляет пустую папку, что противоречит Failure-modes интенту SKILL.md «никогда не оставляй полусостояние». + +**Reviewer observed** на broken-URL тесте (URL=`https://www.youtube.com/watch?v=AAAAAAAAAAAA`): exit 1 + stderr clean, но пустая `yt-cache/AAAAAAAAAAAA/` остаётся на FS. + +**Fix-направления:** +- (a) defer mkdir до первого успешного write — проще логически, но требует review всех путей записи в `yt_tools/cache.py` + `transcript.py`; +- (b) cleanup-on-abort через atexit / try-finally в CLI entry — точечный диф, дешевле. + +Затем — тест на «no empty dir после abort» в `tests/test_cache.py` (или новом `test_failure_modes.py`). + +**Severity:** nice-to-have (cosmetic, не ломает workflow). + +**Status:** ready +**Where I stopped:** (not started) +**Next action:** Решить fix-стратегию (a) vs (b). Имплементировать. Добавить regression-тест. +**Branch:** n/a + + +--- + +## ⚪ [using-yt-tools-frames-multiline-stdout] — Spec/реальность mismatch в SKILL.md: «Last line каждого CLI's stdout — absolute path артефакта (CLI designed для single-line EOF output)» обещает чистый bare-path, а `yt-frames --timestamps T1,T2,T3` фактически выдаёт N строк формата `Wrote: ` (с префиксом). + +**Проблема:** наивный «take last line as path» парс ломается на префиксе. Single-line EOF контракт работает для `yt-transcript` и `yt-frames` с одним таймкодом, но не для multi-timestamp. + +**Решений два:** +- (a) **fix CLI** — emit bare paths matching contract (для multi-timestamp выводить N строк без `Wrote: ` префикса); +- (b) **fix spec** — описать multi-line case + `Wrote: ` префикс явно в SKILL.md. + +Рекомендация ревьюера implicit: (a) чище — единый контракт «last line = path» через все три CLI, парсинг агента остаётся тривиальным. (b) дешевле — только edit SKILL.md, но размывает контракт. + +Решение влияет на yt-tools 0.x semver (CLI change = MINOR bump; spec change = PATCH в claude-skills). + +**Severity:** nice-to-have (работает на практике потому что агент знает имена кадров из таймкодов и Read'ит их напрямую, но spec wording misleading; будущий tooling «парсь stdout, бери EOF» сломается). + +**Status:** ready +**Where I stopped:** (not started) +**Next action:** Выбрать (a) vs (b). Если (a) — fix `yt_tools/frames.py` printf, bump yt-tools версию, регрессионный тест. Если (b) — edit `skills/using-yt-tools/SKILL.md` Inputs/Outputs или Steps секцию, bump skill PATCH. +**Branch:** n/a + + +--- + +## ⚪ [using-yt-tools-warning-mojibake] — yt-dlp warnings на Windows console рендерятся с mojibake: `Video unavailable “ using minimal metadata` → `Video unavailable � using minimal metadata`. + +**Корень:** stderr encoding mismatch (cp1251 default Windows console vs UTF-8 source). + +**Fix-направления:** +- `sys.stderr.reconfigure(encoding='utf-8', errors='replace')` в trio CLI-entry (`yt-transcript`, `yt-frames`, `yt-watch`) — программная починка; +- PYTHONIOENCODING=utf-8 hint в README Windows-блоке — пользовательская; +- filter warning sym↔ascii — workaround в `_warning_filter`. + +Рекомендация: первый вариант (программная) — единый fix, не требует от user'а лишних шагов. + +**Severity:** nice-to-have (cosmetic, сообщение остаётся читаемым). + +**Status:** ready +**Where I stopped:** (not started) +**Next action:** Проверить, помогает ли `sys.stderr.reconfigure(encoding='utf-8', errors='replace')` в trio CLI-entry на проблемном кейсе. Если нет — добавить PYTHONIOENCODING=utf-8 в README Windows-note. +**Branch:** n/a + ---