159 lines
No EOL
9.5 KiB
Markdown
159 lines
No EOL
9.5 KiB
Markdown
# Graph Report - breadarr (2026-08-03)
|
|
|
|
## Corpus Check
|
|
- 46 files · ~90,608 words
|
|
- Verdict: corpus is large enough that graph structure adds value.
|
|
|
|
## Summary
|
|
- 605 nodes · 1557 edges · 19 communities
|
|
- Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS · INFERRED: 2 edges (avg confidence: 0.8)
|
|
- Token cost: 0 input · 0 output
|
|
|
|
## Graph Freshness
|
|
- Built from commit: `109b29ee`
|
|
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
|
- Run `graphify update .` after code changes (no API cost).
|
|
|
|
## Community Hubs (Navigation)
|
|
- scheduler.rs
|
|
- api/mod.rs
|
|
- Connection
|
|
- execute_search_targets
|
|
- enumerate_search_targets
|
|
- rss.rs
|
|
- matcher/mod.rs
|
|
- parser/mod.rs
|
|
- config.rs
|
|
- transcode/mod.rs
|
|
- ffprobe.rs
|
|
- importer/mod.rs
|
|
- Result
|
|
- process_pending_grabs
|
|
- Connection
|
|
- import_one
|
|
- find_relinkable_episode_files
|
|
- fetch_candidates
|
|
- import_season_pack
|
|
|
|
## God Nodes (most connected - your core abstractions)
|
|
1. `import_one()` - 30 edges
|
|
2. `process_item()` - 30 edges
|
|
3. `TranscodeConfig` - 24 edges
|
|
4. `process_pending_grabs()` - 24 edges
|
|
5. `parse()` - 22 edges
|
|
6. `AppState` - 19 edges
|
|
7. `encode_and_verify()` - 18 edges
|
|
8. `fetch_candidates()` - 18 edges
|
|
9. `import_season_pack_file()` - 17 edges
|
|
10. `execute_search_targets()` - 17 edges
|
|
|
|
## Surprising Connections (you probably didn't know these)
|
|
- `import_one()` --references--> `TranscodeConfig` [EXTRACTED]
|
|
breadarrd/src/importer/mod.rs → breadarr-shared/src/config.rs
|
|
- `import_season_pack()` --references--> `TranscodeConfig` [EXTRACTED]
|
|
breadarrd/src/importer/mod.rs → breadarr-shared/src/config.rs
|
|
- `import_season_pack_file()` --references--> `TranscodeConfig` [EXTRACTED]
|
|
breadarrd/src/importer/mod.rs → breadarr-shared/src/config.rs
|
|
- `maybe_enqueue_transcode()` --references--> `TranscodeConfig` [EXTRACTED]
|
|
breadarrd/src/importer/mod.rs → breadarr-shared/src/config.rs
|
|
- `process_pending_grabs()` --references--> `TranscodeConfig` [EXTRACTED]
|
|
breadarrd/src/importer/mod.rs → breadarr-shared/src/config.rs
|
|
|
|
## Import Cycles
|
|
- None detected.
|
|
|
|
## Communities (19 total, 0 thin omitted)
|
|
|
|
### Community 0 - "scheduler.rs"
|
|
Cohesion: 0.07
|
|
Nodes (24): a_second_prepare_call_on_an_already_claimed_review_sees_not_pending(), count_monitored_missing_episodes_in_season_counts_correctly(), does_not_find_an_unmonitored_or_already_have_episode(), find_episode_id_ignores_monitored_and_has_file_state(), finds_a_monitored_missing_episode(), insert_pending_review(), movie_does_not_need_grab_once_it_has_a_file(), movie_does_not_need_grab_when_unmonitored() (+16 more)
|
|
|
|
### Community 1 - "api/mod.rs"
|
|
Cohesion: 0.09
|
|
Nodes (37): AppState, BackgroundRequest, constant_time_eq(), CycleRecord, CycleStatus, require_api_token(), router(), Connection (+29 more)
|
|
|
|
### Community 2 - "Connection"
|
|
Cohesion: 0.16
|
|
Nodes (37): ApprovalPrep, best_existing_movie_score(), best_existing_score(), best_existing_season_pack_score(), count_monitored_missing_episodes_in_season(), finalize_review_approval(), find_episode_id(), find_media_item_id_by_title() (+29 more)
|
|
|
|
### Community 3 - "execute_search_targets"
|
|
Cohesion: 0.24
|
|
Nodes (17): TitleMatcher, execute_search_targets(), GrabCycleStats, is_seen(), mark_seen(), QbitClient, run_grab_cycle(), run_search_cycle() (+9 more)
|
|
|
|
### Community 4 - "enumerate_search_targets"
|
|
Cohesion: 0.13
|
|
Nodes (30): build_movie_query(), build_tv_query(), cadence_stays_backed_off_at_a_high_search_count_instead_of_overflowing(), enumerate_search_targets(), enumerate_search_targets_excludes_owned_movies_includes_missing(), enumerate_search_targets_excludes_unaired_inflight_and_anime(), enumerate_search_targets_for_media_item(), enumerate_search_targets_for_media_item_routes_anime_movie_via_tmdb_table() (+22 more)
|
|
|
|
### Community 5 - "rss.rs"
|
|
Cohesion: 0.07
|
|
Nodes (29): parse_human_size(), RawReleaseItem, Option, String, urlencode(), accumulate_field(), build_search_url(), ItemFields (+21 more)
|
|
|
|
### Community 6 - "matcher/mod.rs"
|
|
Cohesion: 0.14
|
|
Nodes (17): download(), ensure_model(), MatchCandidate, MatchOutcome, queue_for_review(), Connection, Option, Path (+9 more)
|
|
|
|
### Community 7 - "parser/mod.rs"
|
|
Cohesion: 0.08
|
|
Nodes (42): a_genuine_season_only_pack_with_no_dash_episode_still_has_no_episode(), brackets_still_take_priority_over_a_coincidental_bare_year(), Codec, does_not_mistake_a_year_titled_movie_for_a_bare_year(), does_not_mistake_a_yyyy_mm_dd_date_for_an_episode_range(), does_not_panic_on_real_corpus(), does_not_panic_on_unparsable_manga_release(), extracts_a_bare_year_from_a_scene_style_movie_name() (+34 more)
|
|
|
|
### Community 8 - "config.rs"
|
|
Cohesion: 0.06
|
|
Nodes (56): Config, config_path(), DaemonConfig, default_1337x_mirrors(), default_anime_svtav1_max_threads(), default_anime_svtav1_preset(), default_av1_efficiency_factor(), default_config_has_expected_values() (+48 more)
|
|
|
|
### Community 9 - "transcode/mod.rs"
|
|
Cohesion: 0.09
|
|
Nodes (63): Arc, TranscodeConfig, BacklogCandidate, cfg(), claim_pending_jobs(), claim_pending_jobs_claims_nothing_when_already_at_the_cap(), claim_pending_jobs_enforces_live_action_and_anime_caps_independently(), claim_pending_jobs_respects_already_running_jobs_as_a_global_cap() (+55 more)
|
|
|
|
### Community 10 - "ffprobe.rs"
|
|
Cohesion: 0.12
|
|
Nodes (27): AudioStream, build_media_probe(), DecodeCheck, generate_clip(), generate_test_clip(), is_english(), MediaProbe, parse_frame_rate_fraction() (+19 more)
|
|
|
|
### Community 11 - "importer/mod.rs"
|
|
Cohesion: 0.10
|
|
Nodes (25): a_fresh_grab_is_not_stalled(), a_grab_untouched_past_the_threshold_is_stalled(), a_torrent_missing_past_the_grace_period_is_failed(), a_torrent_missing_within_the_grace_period_is_not_yet_failed(), fail_grab_reopens_the_release_for_search(), find_relinkable_episode_files_falls_back_to_the_unpadded_season_folder(), find_relinkable_episode_files_skips_an_ambiguous_match_rather_than_guessing(), media_item_with_root() (+17 more)
|
|
|
|
### Community 12 - "Result"
|
|
Cohesion: 0.15
|
|
Nodes (24): copy_via_temp_file(), copy_via_temp_file_writes_through_a_part_file_and_renames_into_place(), find_by_basename(), find_by_stem(), import_season_pack_file(), insufficient_space(), largest_video_file(), locate_video_file() (+16 more)
|
|
|
|
### Community 13 - "process_pending_grabs"
|
|
Cohesion: 0.20
|
|
Nodes (13): a_persistently_failing_import_escalates_to_failed_instead_of_retrying_forever(), does_not_import_a_torrent_while_it_is_still_being_physically_moved(), fail_grab(), fetch_pending_grabs(), ImportStats, PendingGrab, process_pending_grabs(), process_pending_grabs_routes_each_grab_by_torrent_state() (+5 more)
|
|
|
|
### Community 14 - "Connection"
|
|
Cohesion: 0.17
|
|
Nodes (16): ensure_probed(), ensure_probed_does_not_flag_a_wide_aspect_ratio_file_as_under_quality(), generate_dual_audio_clip(), grab_is_stalled(), grab_missing_past_grace(), probe_library(), probe_library_reports_probed_vs_skipped_up_to_date(), ProbeSweepReport (+8 more)
|
|
|
|
### Community 15 - "import_one"
|
|
Cohesion: 0.16
|
|
Nodes (14): a_drifted_root_folder_does_not_defeat_the_dest_collision_check(), a_strictly_better_release_replaces_the_existing_file_via_a_real_move(), an_upgrade_swap_sweeps_every_duplicate_episode_file_row_not_just_one(), ensure_probed_flags_a_low_resolution_file_as_under_quality(), ensure_probed_skips_reprobing_an_unchanged_file(), generate_test_clip(), import_one(), import_one_enqueues_a_transcode_job_when_transcode_is_enabled() (+6 more)
|
|
|
|
### Community 16 - "find_relinkable_episode_files"
|
|
Cohesion: 0.20
|
|
Nodes (13): collect_video_files(), deterministic_filename(), deterministic_movie_filename(), find_relinkable_episode_files(), find_relinkable_episode_files_finds_a_file_with_no_tracked_row(), has_cjk(), ProbeFields, relink_episode_files() (+5 more)
|
|
|
|
### Community 17 - "fetch_candidates"
|
|
Cohesion: 0.17
|
|
Nodes (12): fetch_candidates(), infer_has_english_audio(), is_anime(), load_quality_profile(), load_quality_profile_applies_a_stored_override(), load_quality_profile_uses_defaults_for_the_seeded_empty_weights_row(), passes_relevance_filter(), release_sort_key() (+4 more)
|
|
|
|
### Community 18 - "import_season_pack"
|
|
Cohesion: 0.43
|
|
Nodes (7): import_season_pack(), import_season_pack_fails_when_nothing_in_it_matches_a_tracked_episode(), import_season_pack_imports_every_file_and_marks_episodes_owned(), import_season_pack_skips_an_upgrade_locked_episode_even_with_a_lower_scoring_existing_release(), import_season_pack_skips_episodes_that_already_have_a_better_file(), SeasonPackImportOutcome, seeded_season_pack_conn()
|
|
|
|
## Suggested Questions
|
|
_Questions this graph is uniquely positioned to answer:_
|
|
|
|
- **Why does `TranscodeConfig` connect `transcode/mod.rs` to `config.rs`, `Result`, `process_pending_grabs`, `import_one`, `import_season_pack`?**
|
|
_High betweenness centrality (0.462) - this node is a cross-community bridge._
|
|
- **Why does `SearchCycleStats` connect `execute_search_targets` to `scheduler.rs`, `api/mod.rs`?**
|
|
_High betweenness centrality (0.316) - this node is a cross-community bridge._
|
|
- **Why does `AppState` connect `api/mod.rs` to `transcode/mod.rs`?**
|
|
_High betweenness centrality (0.195) - this node is a cross-community bridge._
|
|
- **Should `scheduler.rs` be split into smaller, more focused modules?**
|
|
_Cohesion score 0.0666049953746531 - nodes in this community are weakly interconnected._
|
|
- **Should `api/mod.rs` be split into smaller, more focused modules?**
|
|
_Cohesion score 0.08527131782945736 - nodes in this community are weakly interconnected._
|
|
- **Should `enumerate_search_targets` be split into smaller, more focused modules?**
|
|
_Cohesion score 0.12643678160919541 - nodes in this community are weakly interconnected._
|
|
- **Should `rss.rs` be split into smaller, more focused modules?**
|
|
_Cohesion score 0.06570048309178744 - nodes in this community are weakly interconnected._ |