Files
urieljareth 06497299ab feat: integrated audio player + animated transcript follower
- Video detail (done videos): added 'Download audio' button; removed the
  manual 'Thumbnail' button (thumbnails auto-download now, so it was redundant).
- New 'GET /api/videos/{id}/audio' endpoint (also serves HEAD for probing),
  serving data/audio/<video_id>.mp3. Audio job outtmpl switched to %(id)s so
  files are addressable per video.
- Integrated <audio> player appears in the detail view once the MP3 is present
  (probed via HEAD on openVideo; polled after a download job until ready).
- Synced transcript follower: as audio plays, the matching segment is
  highlighted (seg-active) and auto-scrolled into view like a karaoke/lyrics
  tracker. Clicking any segment timestamp or chapter seeks the audio to that
  point (falls back to scroll when no audio). Playback indicator pulses while
  playing.
2026-07-27 00:00:28 -06:00

115 lines
6.7 KiB
Markdown

# Graph Report - . (2026-07-26)
## Corpus Check
- Corpus is ~28,854 words - fits in a single context window. You may not need a graph.
## Summary
- 392 nodes · 951 edges · 14 communities (12 shown, 2 thin omitted)
- Extraction: 93% EXTRACTED · 7% INFERRED · 0% AMBIGUOUS · INFERRED: 65 edges (avg confidence: 0.76)
- Token cost: 11,800 input · 4,100 output
## Community Hubs (Navigation)
- Webapp Frontend (JS)
- Transcript Extraction & Parsing
- Config & Discovery Pipeline
- Store & Export Layer
- CLI Command Layer
- Platform Design & Proposals
- Segments Search & Backfill
- Store Platform Tests
- Content Analysis
- README & Config Docs
- Package Manifest
## God Nodes (most connected - your core abstractions)
1. `Store` - 81 edges
2. `Segment` - 32 edges
3. `api()` - 31 edges
4. `toast()` - 29 edges
5. `Config` - 23 edges
6. `process_video()` - 19 edges
7. `JobManager` - 17 edges
8. `resolve_active_path()` - 13 edges
9. `discover_channel()` - 13 edges
10. `backfill_from_markdown()` - 13 edges
## Surprising Connections (you probably didn't know these)
- `test_dashboard_aggregates()` --calls--> `Segment` [INFERRED]
tests/test_store_platform.py → src/yt_scraper/parse.py
- `test_store_and_search_segments()` --calls--> `Segment` [INFERRED]
tests/test_store_platform.py → src/yt_scraper/parse.py
- `test_store_segments_overwrites()` --calls--> `Segment` [INFERRED]
tests/test_store_platform.py → src/yt_scraper/parse.py
- `store()` --calls--> `Store` [INFERRED]
tests/test_store_platform.py → src/yt_scraper/store.py
- `test_migration_idempotent()` --calls--> `Store` [INFERRED]
tests/test_store_platform.py → src/yt_scraper/store.py
## Import Cycles
- None detected.
## Hyperedges (group relationships)
- **Workstream B webapp stack (FastAPI + Alpine SPA + subagent)** — opencode_agent_webapp_builder, opencode_goals_webapp_build, src_yt_scraper_webapp_static_index, docs_superpowers_specs_2026_07_26_platform_design_dark_command_center, docs_superpowers_specs_2026_07_26_platform_design_sse_job_runner [EXTRACTED 0.95]
- **FTS5 transcript search flow (proposal -> spec -> SPA view)** — opportunities_search_fts5, docs_superpowers_specs_2026_07_26_platform_design_transcript_fts5, src_yt_scraper_webapp_static_index [INFERRED 0.85]
- **Cookie auth chain (vault -> resolve_active_path -> scrape job)** — docs_superpowers_specs_2026_07_26_platform_design_cookie_vault_ux, docs_superpowers_specs_2026_07_26_platform_design_sse_job_runner, docs_superpowers_specs_2026_07_26_platform_design_cookies_bug_fix, src_yt_scraper_webapp_static_index [INFERRED 0.85]
## Communities (14 total, 2 thin omitted)
### Community 0 - "Webapp Frontend (JS)"
Cohesion: 0.06
Nodes (59): activateCookie(), addChannel(), api(), axisOpts(), barOpts(), cancelScrape(), checkHealth(), closeStream() (+51 more)
### Community 1 - "Transcript Extraction & Parsing"
Cohesion: 0.07
Nodes (57): Environment, align_chapters(), Chapter, chapters_from_info(), Section, _parse_tags(), Regenerar Markdown desde segmentos almacenados., re_render_cmd() (+49 more)
### Community 2 - "Config & Discovery Pipeline"
Cohesion: 0.06
Nodes (40): APIRouter, FastAPI, _build_config(), Config, DelayConfig, load_config(), Any, Path (+32 more)
### Community 3 - "Store & Export Layer"
Cohesion: 0.07
Nodes (28): Connection, Cursor, Row, is_expired(), list_vault(), export_csv(), export_html(), export_json() (+20 more)
### Community 4 - "CLI Command Layer"
Cohesion: 0.08
Nodes (41): analyze_cmd(), _apply_filters(), audio_cmd(), _channel_targets(), channels_add(), cli(), export_cmd(), _extract_handle() (+33 more)
### Community 5 - "Platform Design & Proposals"
Cohesion: 0.12
Nodes (20): Platform Implementation Plan, Platform Design Spec, Cookie drag-and-drop vault UX, cli.py cookies scope bug fix, Design language: dark data command center, Architecture: Monorepo in-package webapp (Approach A), Scope rule: No AI features, Single-threaded scrape job runner + SSE event bus (+12 more)
### Community 6 - "Segments Search & Backfill"
Cohesion: 0.26
Nodes (11): backfill_from_markdown(), parse_markdown(), ParsedMarkdown, Path, Parse all done .md files under md_root, populate segments/FTS/metadata. Idempote, search(), store_segments(), _strip_quotes() (+3 more)
### Community 7 - "Store Platform Tests"
Cohesion: 0.17
Nodes (5): store(), test_dashboard_aggregates(), test_migration_idempotent(), test_store_and_search_segments(), test_store_segments_overwrites()
### Community 8 - "Content Analysis"
Cohesion: 0.27
Nodes (10): _iter_texts(), Path, Return [(YYYY-MM, count)] of months where `term` appears in transcripts., render_timeline_chart(), render_top_words_chart(), render_wordcloud(), term_timeline(), _tokenize() (+2 more)
## Knowledge Gaps
- **10 isolated node(s):** `yt-channel-scraper`, `OPPORTUNITIES.md - extension audit`, `Design language: dark data command center`, `yt-dlp InnerTube mechanism (ANDROID/IOS/WEB clients)`, `Feature proposal: search (FTS5 transcript search)` (+5 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **2 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `Store` connect `Store & Export Layer` to `Transcript Extraction & Parsing`, `Config & Discovery Pipeline`, `CLI Command Layer`, `Segments Search & Backfill`, `Store Platform Tests`, `Content Analysis`?**
_High betweenness centrality (0.194) - this node is a cross-community bridge._
- **Why does `Segment` connect `Transcript Extraction & Parsing` to `CLI Command Layer`, `Segments Search & Backfill`, `Store Platform Tests`?**
_High betweenness centrality (0.057) - this node is a cross-community bridge._
- **Why does `Config` connect `Config & Discovery Pipeline` to `Transcript Extraction & Parsing`, `CLI Command Layer`?**
_High betweenness centrality (0.024) - this node is a cross-community bridge._
- **Are the 4 inferred relationships involving `Store` (e.g. with `ParsedMarkdown` and `store()`) actually correct?**
_`Store` has 4 INFERRED edges - model-reasoned connections that need verification._
- **Are the 17 inferred relationships involving `Segment` (e.g. with `Chapter` and `Section`) actually correct?**
_`Segment` has 17 INFERRED edges - model-reasoned connections that need verification._
- **What connects `yt-channel-scraper`, `OPPORTUNITIES.md - extension audit`, `Design language: dark data command center` to the rest of the system?**
_10 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `Webapp Frontend (JS)` be split into smaller, more focused modules?**
_Cohesion score 0.062317429406037 - nodes in this community are weakly interconnected._