tasks(using-yt-tools): close 3 finding fixes 🟢🟢🟢
- using-yt-tools-transcript-paragraphs-fix → a0e4cc8 (yt-tools 0.1.1, hybrid #4) - using-yt-tools-frames-stderr-fix → 6961796 (yt-tools 0.1.2, ffmpeg pre-check + _format_subprocess_failure) - using-yt-tools-windows-path-doc-fix → 2471228 (yt-tools 0.1.3, README winget+PATH note) yt-tools 0.1.0 → 0.1.3. 67 → 74 tests (3 markdown + 4 frames). 74/74 green. Remaining: ⚪ using-yt-tools-trigger-smoke-clean-session (needs fresh CC session), 🔵 using-yt-tools-review (still blocked on SKILL.md body fill). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# Task Board
|
||||
_Updated: 2026-05-20 (using-yt-tools impl: 3 baseline 🟢; test-trigger partial — CLI e2e + iterative-flow done, 4 findings filed as new ⚪ tasks; review still 🔵 — now blocked on SKILL.md body fill)_
|
||||
_Updated: 2026-05-20 (using-yt-tools: 3 baseline 🟢; 3 finding fixes 🟢 [paragraphs/frames-stderr/windows-path-doc] → yt-tools 0.1.0→0.1.3, 74/74 tests; trigger-smoke-clean-session still ⚪ (needs fresh CC session); review 🔵 on SKILL.md body fill)_
|
||||
|
||||
<!--
|
||||
Canonical layout. One block per task. Per-task deep context lives in
|
||||
@@ -83,52 +83,33 @@ Mode: **`pending`** — скил вызывает внешние CLI (yt-dlp/ffm
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [using-yt-tools-transcript-paragraphs-fix] — Fix paragraph segmentation in yt-transcript — 4s-gap heuristic collapses densely-captioned videos into one block.
|
||||
## 🟢 [using-yt-tools-transcript-paragraphs-fix] — Fix paragraph segmentation in yt-transcript — 4s-gap heuristic collapses densely-captioned videos into one block.
|
||||
|
||||
**Symptom:** 9:51-минутное видео (3blue1brown chapter 1 с community-submitted EN-субтитрами) превращается в один параграф с единственным `[0:00]`-якорем. Voids iterative-флоу primary use-case — агент не может выбирать таймкоды по содержанию.
|
||||
|
||||
**Корень:** `yt_tools/markdown.py:_group_paragraphs` группирует snippet'ы только при gap > `DEFAULT_PARAGRAPH_GAP_SECONDS=4.0`. У профессиональных каналов и YouTube auto-subs snippet'ы стыкуются без 4-секундных пауз.
|
||||
|
||||
**Варианты фикса** (брейнсторм для имплементера):
|
||||
1. Снизить дефолт до 1.0-2.0s — простой, но всё ещё может схлопывать монотонные блоки.
|
||||
2. Жёсткий cap по `max_paragraph_seconds` (например 45s) — гарантирует якоря каждые ~45 сек независимо от gap.
|
||||
3. Сегментация по пунктуации (`.`, `?`, `!` в конце snippet'а) + минимальный интервал между якорями.
|
||||
4. Гибрид: gap OR max-duration OR sentence-boundary (whichever fires first).
|
||||
|
||||
**Acceptance:** на том же test-URL (`fNk_zzaMoSs`) транскрипт содержит ≥5 anchors at sane intervals (~1-2 min). Unit-тест в `tests/test_markdown.py` с фикстурой плотных snippet'ов (gap < 1s) проверяет, что paragraphs > 1. Существующие 67 тестов остаются зелёными.
|
||||
|
||||
**Status:** ready
|
||||
**Where I stopped:** (not started — finding from using-yt-tools-test-trigger 2026-05-20)
|
||||
**Next action:** Решить approach (рекомендую гибрид #4). Реализовать в `_group_paragraphs`. Добавить unit-тест. Прогнать pytest. Прогнать e2e на `fNk_zzaMoSs`. Обновить yt-tools `version: 0.1.0` → `0.1.1` в `pyproject.toml`.
|
||||
**Branch:** n/a
|
||||
**Status:** done
|
||||
**Where I stopped:** Closed by `a0e4cc8` (yt-tools 0.1.1). Гибрид #4 в `_group_paragraphs`: gap > 4s OR elapsed > 45s OR sentence-end (`.?!…`) после ≥15s от начала параграфа. E2E на `fNk_zzaMoSs` (9:51): **31 anchor** at ~15-25s intervals (был 1). 70→74 unit-тестов 🟢 (3 новых в `test_markdown.py`: dense-snippets, sentence-end-after-min, sentence-end-no-split-before-min). Параметры `max_paragraph_seconds` / `sentence_split_seconds` пробрасываются через `snippets_to_markdown` для тюнинга.
|
||||
**Next action:** (none — kept until merged)
|
||||
**Branch:** master
|
||||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-20 / acceptance: ≥5 anchors ✅ (31 на test URL); unit-тест paragraphs>1 ✅; existing tests green ✅ -->
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [using-yt-tools-frames-stderr-fix] — yt-frames swallows yt-dlp/ffmpeg stderr, hiding real failure cause.
|
||||
## 🟢 [using-yt-tools-frames-stderr-fix] — yt-frames swallows yt-dlp/ffmpeg stderr, hiding real failure cause.
|
||||
|
||||
**Symptom:** При запуске `yt-frames URL --timestamps ...` без ffmpeg на PATH — вывод `error: yt-dlp source download failed:` без описания (после двоеточия пусто). Реальная причина (yt-dlp требует ffmpeg для muxing) скрыта.
|
||||
|
||||
**Корень:** в `yt_tools/frames.py` (или вызывающем слое) подавляется `stderr` от yt-dlp/ffmpeg subprocess, печатается голое сообщение без cause.
|
||||
|
||||
**Acceptance:** при отсутствии ffmpeg вывод содержит указание на ffmpeg как причину (либо явно «ffmpeg required on PATH», либо передача yt-dlp stderr в верх). Аналогично для других fail-mode (network, private video, age-gated).
|
||||
|
||||
**Status:** ready
|
||||
**Where I stopped:** (not started — finding from using-yt-tools-test-trigger 2026-05-20)
|
||||
**Next action:** Найти точку подавления в `frames.py`. Пробросить stderr (capture + re-print) или хотя бы exit-code → message map. Unit-test на mock yt-dlp с симулированным fail. Pytest зелёный. Bump `pyproject.toml` version.
|
||||
**Branch:** n/a
|
||||
**Status:** done
|
||||
**Where I stopped:** Closed by `6961796` (yt-tools 0.1.2). Pre-check `ffmpeg` в `_ensure_source_mp4` (yt-dlp требует его для mux) → missing-ffmpeg теперь выдаёт `"ffmpeg not found on PATH"` до запуска yt-dlp. Helper `_format_subprocess_failure(proc, label)` собирает `exit N | stderr/stdout tail | no output hint`, применён в обоих сайтах failure (`_ensure_source_mp4`, `_ffmpeg_extract_from_file`, `_ffmpeg_extract_streaming`). `--no-warnings` дропнут на yt-dlp invocations чтобы warnings попадали в captured output. 4 новых теста в `tests/test_frames.py` (missing ffmpeg / stderr surfaced / stdout-only surfaced / empty-empty hint). 74/74 🟢.
|
||||
**Next action:** (none — kept until merged)
|
||||
**Branch:** master
|
||||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-20 / acceptance: ffmpeg-named ✅; other fail-modes via formatter ✅; unit-тест на mock fail ✅; pytest 🟢 -->
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [using-yt-tools-windows-path-doc-fix] — README install section should warn about restart-shell-after-winget on Windows.
|
||||
## 🟢 [using-yt-tools-windows-path-doc-fix] — README install section should warn about restart-shell-after-winget on Windows.
|
||||
|
||||
**Symptom:** `winget install Gyan.FFmpeg` записывает ffmpeg в user-PATH, но текущая bash/PowerShell сессия (а также Claude Code git-bash subshell) PATH не подхватывает до рестарта. Агент в CC-сессии видит «ffmpeg not found» даже после успешного winget.
|
||||
|
||||
**Acceptance:** `~/projects/.common/lib/yt-tools/README.md` (раздел Install / Windows) содержит note: «после `winget install Gyan.FFmpeg` перезапустить терминал (и Claude Code session) — winget пишет в user-PATH, который текущая сессия не перечитывает». Опционально — workaround-команда для exposure без рестарта.
|
||||
|
||||
**Status:** ready
|
||||
**Where I stopped:** (not started — finding from using-yt-tools-test-trigger 2026-05-20)
|
||||
**Next action:** Дописать раздел в README пакета. Bump `pyproject.toml` patch version. Это правка в `.common/lib/yt-tools/`, не в `claude-skills/` — таска живёт здесь как coordination-point.
|
||||
**Branch:** n/a
|
||||
**Status:** done
|
||||
**Where I stopped:** Closed by `2471228` (yt-tools 0.1.3). README Install section получил `> **Windows note.**` блок: winget пишет в per-user PATH, текущий shell (вкл. git-bash subshell внутри CC) его не перечитывает; canonical fix = restart terminal + Claude Code session; verify via `where.exe ffmpeg`. In-session workaround упомянут (lookup путь через `winget show <package>` → `$env:Path +=`). Заодно sync test count 67 → 74 (drift от 0.1.1 + 0.1.2 additions).
|
||||
**Next action:** (none — kept until merged)
|
||||
**Branch:** master
|
||||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-20 / acceptance: README warn block с restart + workaround ✅ -->
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user