crabidy/plan/youtube-provider.md

2.5 KiB

Plan: youtube-provider

Ordered tasks; each names its verification (tests in ytdy/src/lib.rs and/or gates in quality/youtube-provider.md). The crate skeleton, stubs, workspace/devenv wiring, and all tests exist; the tests fail on todo!() at plan time.

  • T1 — Engine. run (argv-only, --no-warnings, cookie flag, timeout with kill_on_drop, stdout cap, typed errors), probe, flat_listing, video_entry, stream_urls. Verifies: engine_failures_are_typed_never_panics, parts of every other test; gates "Engine".
  • T2 — Path parsing. parse_path for all YtPath shapes; reject everything else. Verifies: foreign_and_malformed_paths_are_rejected, tracks_resolve_streams_and_metadata (is_track_path).
  • T3 — Init. Settings parse (defaults on broken TOML like the other providers), engine construction, --version probe, cookies readability check (degrade to logged out with a warning). Verifies: init_probes_the_binary, root_lists_playlists_only_when_logged_in.
  • T4 — Search. Term registry (snapshot/register), search_term_node (ytsearchN:), create/rename/delete_lib_node, get_lib_node arms for Root/Search/SearchTerm, central downloadable rule. Verifies: search_terms_are_created_listed_and_searched, search_terms_rename_and_delete.
  • T5 — Playlists + tracks. playlists_node (feed URL, login gate), playlist_node, get_urls_for_track (-g), get_metadata_for_track (single-video -J). Verifies: playlists_list_and_resolve_when_logged_in, tracks_resolve_streams_and_metadata.
  • T6 — Orchestrator wiring. youtube_client: Option<Arc<_>>, non-fatal init from ytdy.toml (written back), routing arms in every method, root child; extension_for gains audio/webm. Verifies: existing orchestrator patterns by inspection; gates "Orchestrator wiring"; extension_prefers_content_type_then_url_then_bin extended.
  • T7 — Full verification. Workspace suite green; clippy/fmt/ taplo/markdownlint clean; every gate ticked; no todo!().
  • T8 — Live smoke test. With the devenv yt-dlp: search a term through the provider, fetch a stream URL for one result, and download a small capture through the capture store — remove the probe afterwards. Validate the playlists feed invocation if cookies are available; otherwise record it as unvalidated in the summary.
  • T9 — Docs. plan/summary.md section incl. deviations; reconcile architecture/youtube-provider.md.