Compare commits

...

2 commits

Author SHA1 Message Date
Breadway
5543485976 Fix all cargo clippy warnings across the workspace
Some checks failed
check / check (push) Failing after 53s
Removes genuinely dead code (unused import, no-op cast, an unused
PendingGrab accessor, and TmdbClient's TV-search methods now that TVDB
fully covers that path), tightens len()>0 checks to is_empty(), swaps
two fixed-size test vec!s for arrays, restructures a match to avoid an
unnecessary unwrap_err, fixes doc-comment list indentation, and hoists
a locked-connection call out of a match scrutinee. Struct fields/enum
variants that are still meaningful but not read by current callers
(TorrentInfo::save_path, GrabCycleStats::items_seen, X1337 fallback
route, BacklogCandidate::path) get #[allow(dead_code)] rather than
deletion, same for the two 8-argument functions (too_many_arguments).
2026-08-06 08:51:07 +08:00
Breadway
471ca884a6 gitignore: stop tracking graphify-out/ tool cache
graphify's local knowledge-graph output was never gitignored, so its
generated cache/graph files (75 tracked entries) were showing up as
dirty noise on every run. Add graphify-out/ to .gitignore and untrack
the existing files.
2026-08-06 08:46:00 +08:00
85 changed files with 35 additions and 100406 deletions

3
.gitignore vendored
View file

@ -6,3 +6,6 @@ config.toml
# Local hygiene notes (not for commit)
CLAUDE.md
# graphify knowledge-graph output (local tool cache, not for commit)
graphify-out/

View file

@ -598,7 +598,7 @@ impl App {
return;
};
let (media_item_id, season_number, monitored) =
(detail.id, episode.season_number as i64, episode.monitored);
(detail.id, episode.season_number, episode.monitored);
let result = if monitored {
self.client
.unmonitor_season(media_item_id, season_number)

View file

@ -99,14 +99,6 @@ impl PendingGrab {
PendingGrab::Movie { .. } | PendingGrab::SeasonPack { .. } => None,
}
}
fn root_folder(&self) -> &str {
match self {
PendingGrab::Episode { root_folder, .. }
| PendingGrab::Movie { root_folder, .. }
| PendingGrab::SeasonPack { root_folder, .. } => root_folder,
}
}
}
/// Three separate queries (rather than one `LEFT JOIN episode`) because a
@ -1615,7 +1607,7 @@ impl StaleFile {
/// later step (free-space check, the actual move) fails, so a failed
/// import never leaves neither the old file nor the new one behind.
fn restore(&self) {
if self.parked_at.as_os_str().len() > 0 {
if !self.parked_at.as_os_str().is_empty() {
std::fs::rename(&self.parked_at, &self.restore_to).ok();
}
}
@ -1909,7 +1901,7 @@ fn import_one(
if let Some(row_id) = stale.row_id {
conn.execute("DELETE FROM episode_file WHERE id = ?1", params![row_id])?;
}
if stale.parked_at.as_os_str().len() > 0 {
if !stale.parked_at.as_os_str().is_empty() {
std::fs::remove_file(&stale.parked_at).ok();
}
}
@ -2309,7 +2301,7 @@ fn import_season_pack_file(
if let Some(row_id) = stale.row_id {
conn.execute("DELETE FROM episode_file WHERE id = ?1", params![row_id])?;
}
if stale.parked_at.as_os_str().len() > 0 {
if !stale.parked_at.as_os_str().is_empty() {
std::fs::remove_file(&stale.parked_at).ok();
}
}

View file

@ -633,10 +633,11 @@ async fn background_loop(
// repaired (a rename or an in-place transcode) gets re-probed
// immediately rather than waiting for its own turn a full
// interval later.
match {
let probe_result = {
let conn = conn.lock().await;
importer::probe_library(&conn)
} {
};
match probe_result {
Ok(report) if report.probed > 0 || report.failed > 0 => {
info!(?report, "media probe sweep complete");
}

View file

@ -41,6 +41,7 @@ pub struct EpisodeInfo {
/// `MutexGuard` across an `.await` point — this convenience wrapper is only
/// safe for callers with an owned, unshared `Connection` (e.g. the debug
/// CLI commands).
#[allow(clippy::too_many_arguments)]
pub async fn add_series(
conn: &Connection,
tvdb: &tvdb::TvdbClient,

View file

@ -1,7 +1,7 @@
use anyhow::{Context, Result};
use serde::Deserialize;
use super::{EpisodeInfo, MovieSearchResult, SeriesSearchResult};
use super::MovieSearchResult;
pub struct TmdbClient {
bearer_token: String,
@ -22,44 +22,6 @@ impl TmdbClient {
}
}
pub async fn search_tv(&self, query: &str) -> Result<Vec<SeriesSearchResult>> {
#[derive(Deserialize)]
struct SearchResponse {
results: Vec<TvItem>,
}
#[derive(Deserialize)]
struct TvItem {
id: u64,
name: String,
first_air_date: Option<String>,
}
let resp: SearchResponse = self
.client
.get("https://api.themoviedb.org/3/search/tv")
.bearer_auth(&self.bearer_token)
.query(&[("query", query)])
.send()
.await
.context("tmdb tv search request failed")?
.error_for_status()
.context("tmdb tv search returned an error status")?
.json()
.await
.context("tmdb tv search response was not valid JSON")?;
Ok(resp
.results
.into_iter()
.map(|item| SeriesSearchResult {
external_id: item.id.to_string(),
name: item.name,
year: year_from_date(item.first_air_date.as_deref()),
aliases: Vec::new(),
})
.collect())
}
pub async fn search_movie(&self, query: &str) -> Result<Vec<MovieSearchResult>> {
#[derive(Deserialize)]
struct SearchResponse {
@ -96,48 +58,6 @@ impl TmdbClient {
})
.collect())
}
pub async fn tv_season_episodes(&self, tv_id: u64, season: u32) -> Result<Vec<EpisodeInfo>> {
#[derive(Deserialize)]
struct SeasonResponse {
#[serde(default)]
episodes: Vec<EpisodeItem>,
}
#[derive(Deserialize)]
struct EpisodeItem {
season_number: u32,
episode_number: u32,
name: Option<String>,
air_date: Option<String>,
}
let resp: SeasonResponse = self
.client
.get(format!(
"https://api.themoviedb.org/3/tv/{tv_id}/season/{season}"
))
.bearer_auth(&self.bearer_token)
.send()
.await
.context("tmdb season request failed")?
.error_for_status()
.context("tmdb season returned an error status")?
.json()
.await
.context("tmdb season response was not valid JSON")?;
Ok(resp
.episodes
.into_iter()
.map(|e| EpisodeInfo {
season_number: e.season_number,
episode_number: e.episode_number,
absolute_number: None,
title: e.name,
air_date: e.air_date,
})
.collect())
}
}
fn year_from_date(date: Option<&str>) -> Option<u32> {

View file

@ -1,4 +1,3 @@
use anyhow::Result;
use serde::Serialize;
#[derive(Serialize)]

View file

@ -69,6 +69,9 @@ pub struct TorrentInfo {
pub name: String,
pub state: String,
pub progress: f64,
// Not read internally today, but kept to mirror qBittorrent's actual API
// shape 1:1 — useful in `{:?}` debug logging and cheap to keep in sync.
#[allow(dead_code)]
pub save_path: String,
/// Full path to the torrent's content (file or directory root) —
/// qBittorrent resolves this for us, so importers don't need to guess

View file

@ -752,6 +752,10 @@ async fn grab_and_capture_hash(
#[derive(Debug, Default)]
pub struct GrabCycleStats {
// Only read via the derived `Debug` (the debug-grab-cycle CLI command
// prints the whole struct), which clippy's dead-code analysis doesn't
// credit as a read.
#[allow(dead_code)]
pub items_seen: usize,
pub new_items: usize,
pub grabbed: usize,
@ -840,8 +844,8 @@ pub async fn run_grab_cycle(
/// outright (TLS/connection error, not a slow response). Also
/// Cloudflare-fronted, so even if connectivity is restored it carries the
/// same risk profile 1337x does.
/// If revisiting either, re-verify connectivity first — this isn't a
/// permanent architectural decision, just what was true when checked.
/// If revisiting either, re-verify connectivity first — this isn't a
/// permanent architectural decision, just what was true when checked.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
enum SearchRoute {
/// Primary general-content (movies + non-anime TV) route — a JSON API,
@ -851,6 +855,7 @@ enum SearchRoute {
/// (not just "no relevant results") — the mirror-rotation/cooldown
/// machinery already built for it is real resilience worth keeping,
/// just no longer the first choice given TPB's better precision.
#[allow(dead_code)]
X1337,
NyaaSearch,
}
@ -1658,17 +1663,17 @@ pub async fn execute_search_targets(
// with, since dedup (`is_seen`/`mark_seen`) and grab records
// are keyed by source id — attributing a 1337x-sourced guid to
// TPB's source id would silently break dedup between the two.
let (fetch_result, result_source_id) =
if primary_result.is_err() && matches!(target.route, SearchRoute::Tpb) {
let (fetch_result, result_source_id) = match primary_result {
Err(e) if matches!(target.route, SearchRoute::Tpb) => {
tracing::warn!(
query = %target.query,
error = %primary_result.as_ref().unwrap_err(),
error = %e,
"TPB search failed, falling back to 1337x"
);
(scrape.fetch(Some(&target.query)).await, scrape_source_id)
} else {
(primary_result, primary_id)
};
}
other => (other, primary_id),
};
match fetch_result {
Ok(items) => {
@ -2821,7 +2826,7 @@ mod tests {
seeders: Some(500),
leechers: None,
};
let mut items = vec![episode.clone(), pack.clone()];
let mut items = [episode.clone(), pack.clone()];
items.sort_by_key(release_sort_key);
assert_eq!(items[0].guid, "pack");
assert_eq!(items[1].guid, "episode");
@ -2845,7 +2850,7 @@ mod tests {
seeders: Some(50),
leechers: None,
};
let mut items = vec![low.clone(), high.clone()];
let mut items = [low.clone(), high.clone()];
items.sort_by_key(release_sort_key);
assert_eq!(items[0].guid, "high");
assert_eq!(items[1].guid, "low");

View file

@ -337,6 +337,7 @@ enum EncodeOutcome {
/// original on most of a real backfill — regardless of how well-tuned the
/// rate control is, this is what makes "never keep a non-improvement" true
/// unconditionally.
#[allow(clippy::too_many_arguments)]
fn encode_and_verify(
input: PathBuf,
job_id: i64,
@ -726,6 +727,10 @@ pub fn find_oversized_av1_candidates(conn: &Connection, cfg: &TranscodeConfig) -
pub struct BacklogCandidate {
pub episode_file_id: i64,
// Not read by current callers (they only need episode_file_id to look up
// the row again), but cheap to carry along for future logging/debugging
// of which file a candidate refers to.
#[allow(dead_code)]
pub path: String,
pub size_bytes: i64,
pub video_codec: Option<String>,

File diff suppressed because it is too large Load diff

View file

@ -1,134 +0,0 @@
{
"nodes": [
{"id": "readme", "label": "breadarr README", "file_type": "document", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_breadarrd", "label": "breadarrd (daemon)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_breadarr_tui", "label": "breadarr-tui (terminal client)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_nyaa_si_rss", "label": "nyaa.si (RSS source, anime TV)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_apibay_org", "label": "apibay.org (TPB mirror JSON API source)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_1337x", "label": "1337x (scraped HTML source, mirrored)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_nyaa_si_search_mode", "label": "nyaa.si search mode (anime movies)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_request_budget", "label": "Shared per-cycle search request budget", "file_type": "rationale", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_wrong_default_audio_track", "label": "Wrong default audio track fix", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_anime_numbering", "label": "Anime absolute-episode numbering resolution", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_fuzzy_title_matching", "label": "Fuzzy title matching (ONNX embedding)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_library_normalization", "label": "Library normalization (folder rename to Title (Year))", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_season_packs", "label": "Season pack per-episode splitting", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_media_intelligence", "label": "Media intelligence (ffprobe ground truth)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_quality_upgrades", "label": "Post-import quality upgrade background cycle", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_manual_release_picker", "label": "Manual release picker (TUI 'c' key)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_mkvmerge", "label": "mkvmerge (mkvtoolnix-cli)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_ffprobe", "label": "ffprobe", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_ffmpeg", "label": "ffmpeg (incl. -xerror decode verify)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_jellyfin", "label": "Jellyfin", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_qbittorrent", "label": "qBittorrent (WebUI)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_tvdb", "label": "TVDB API", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_tmdb", "label": "TMDB API (v4 Read Access Token)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_anidb", "label": "AniDB (mapping source)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_all_minilm_l6_v2", "label": "all-MiniLM-L6-v2 (ONNX embedding model, CPU-only)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_whisper", "label": "Whisper (external tool being reimplemented)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_token_overlap_gate", "label": "Token-overlap sanity gate", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_review_queue", "label": "Review queue (low-confidence title matches)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_quality_profile_weights", "label": "Hardcoded quality-scoring weights (known limitation)", "file_type": "rationale", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "breadarrd_src_scoring_profile_default_tv", "label": "QualityProfile::default_tv", "file_type": "code", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "breadarrd_src_scoring_profile_default_movie", "label": "QualityProfile::default_movie", "file_type": "code", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "breadarrd_src_matcher_mod_min_token_overlap", "label": "MIN_TOKEN_OVERLAP constant", "file_type": "code", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "breadarrd_src_matcher_mod_auto_match_confidence", "label": "AUTO_MATCH_CONFIDENCE constant", "file_type": "code", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "breadarrd_src_scoring_score_module", "label": "scoring/score.rs module", "file_type": "code", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_remux_backlog", "label": "breadarrd remux-backlog command", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_probe_library", "label": "breadarrd probe-library command", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_verify_library", "label": "breadarrd verify-library command", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_disk_reconciliation", "label": "Hourly disk-reconciliation pass", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_database_backup", "label": "Startup database backup (WAL/SHM sidecars)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_health_endpoint", "label": "/health endpoint", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_library_health_endpoint", "label": "/library/health endpoint", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_media_file_probe_table", "label": "media_file_probe table", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_episode_file_table", "label": "episode_file table", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_torrent_fetch_table", "label": "torrent_fetch table", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_quality_profile_table", "label": "quality_profile table (weights JSON column)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_release_table", "label": "release table (status field)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_tdarr_hand_off", "label": "Roadmap: Tdarr hand-off", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_smart_library_auto_upgrade_daemon", "label": "Roadmap: Smart-library auto-upgrade daemon", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_tracker_release_group_reliability_scoring", "label": "Roadmap: Tracker/release-group reliability scoring", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_mining_raw_ffprobe_json", "label": "Roadmap: Mining the raw ffprobe JSON", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_learning_from_review_queue_decisions", "label": "Roadmap: Learning from review-queue decisions", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_seerr_overseerr_compat_shim", "label": "Roadmap: Seerr/Overseerr compatibility shim + request fulfillment", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_whisper_subtitle_generation", "label": "Roadmap: Whisper subtitle generation", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_compat_module", "label": "compat/ module (reserved, Sonarr/Radarr v3 API shim)", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_no_indexer_plugin_system_no_web_ui", "label": "Design rejection: no indexer-plugin system, no web UI", "file_type": "rationale", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_gotify_webhook", "label": "Gotify-shaped notifications.webhook_url", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_systemd_user_service", "label": "systemd --user service deployment", "file_type": "concept", "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}
],
"edges": [
{"source": "readme_breadarrd", "target": "readme_wrong_default_audio_track", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_anime_numbering", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_fuzzy_title_matching", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_library_normalization", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_season_packs", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_media_intelligence", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_quality_upgrades", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_manual_release_picker", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_disk_reconciliation", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_database_backup", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_health_endpoint", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_library_health_endpoint", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_jellyfin", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_qbittorrent", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_tvdb", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_tmdb", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_systemd_user_service", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarrd", "target": "readme_gotify_webhook", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarr_tui", "target": "readme_breadarrd", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarr_tui", "target": "readme_manual_release_picker", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarr_tui", "target": "readme_review_queue", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_breadarr_tui", "target": "readme_library_health_endpoint", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_wrong_default_audio_track", "target": "readme_mkvmerge", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_remux_backlog", "target": "readme_wrong_default_audio_track", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_anime_numbering", "target": "readme_anidb", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_anime_numbering", "target": "readme_tvdb", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_anime_numbering", "target": "readme_tmdb", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_fuzzy_title_matching", "target": "readme_all_minilm_l6_v2", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_fuzzy_title_matching", "target": "readme_token_overlap_gate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_token_overlap_gate", "target": "breadarrd_src_matcher_mod_min_token_overlap", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_fuzzy_title_matching", "target": "readme_review_queue", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_library_normalization", "target": "readme_tvdb", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_library_normalization", "target": "readme_tmdb", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_media_intelligence", "target": "readme_ffprobe", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_quality_upgrades", "target": "readme_media_file_probe_table", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_quality_upgrades", "target": "readme_request_budget", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_apibay_org", "target": "readme_request_budget", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_1337x", "target": "readme_request_budget", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_nyaa_si_search_mode", "target": "readme_request_budget", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_quality_profile_weights", "target": "breadarrd_src_scoring_profile_default_tv", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_quality_profile_weights", "target": "breadarrd_src_scoring_profile_default_movie", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_quality_profile_weights", "target": "readme_quality_profile_table", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_learning_from_review_queue_decisions", "target": "breadarrd_src_matcher_mod_auto_match_confidence", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_learning_from_review_queue_decisions", "target": "breadarrd_src_matcher_mod_min_token_overlap", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_learning_from_review_queue_decisions", "target": "readme_review_queue", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_tdarr_hand_off", "target": "readme_media_file_probe_table", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_tracker_release_group_reliability_scoring", "target": "readme_torrent_fetch_table", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_tracker_release_group_reliability_scoring", "target": "readme_release_table", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_tracker_release_group_reliability_scoring", "target": "breadarrd_src_scoring_score_module", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_mining_raw_ffprobe_json", "target": "readme_media_file_probe_table", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_seerr_overseerr_compat_shim", "target": "readme_compat_module", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_whisper_subtitle_generation", "target": "readme_episode_file_table", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_whisper_subtitle_generation", "target": "readme_mkvmerge", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_whisper_subtitle_generation", "target": "readme_whisper", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_no_indexer_plugin_system_no_web_ui", "target": "readme_breadarrd", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_no_indexer_plugin_system_no_web_ui", "target": "readme_breadarr_tui", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_smart_library_auto_upgrade_daemon", "target": "readme_quality_upgrades", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_smart_library_auto_upgrade_daemon", "target": "readme_library_health_endpoint", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_smart_library_auto_upgrade_daemon", "target": "readme_gotify_webhook", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_verify_library", "target": "readme_media_intelligence", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_probe_library", "target": "readme_media_intelligence", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_disk_reconciliation", "target": "readme_episode_file_table", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_disk_reconciliation", "target": "readme_database_backup", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.65, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0},
{"source": "readme_quality_upgrades", "target": "readme_remux_backlog", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "/home/breadway/Projects/breadarr/README.md", "source_location": null, "weight": 1.0}
],
"hyperedges": [
{"id": "search_budget_sources", "label": "Search-driven sources sharing per-cycle request budget", "nodes": ["readme_apibay_org", "readme_1337x", "readme_nyaa_si_search_mode", "readme_request_budget"], "relation": "participate_in", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md"},
{"id": "medium_term_roadmap_group", "label": "Medium-term roadmap items closing the loop on already-collected data", "nodes": ["readme_tdarr_hand_off", "readme_smart_library_auto_upgrade_daemon", "readme_tracker_release_group_reliability_scoring", "readme_mining_raw_ffprobe_json"], "relation": "participate_in", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md"},
{"id": "core_problems_solved_directly", "label": "Problems breadarr solves directly instead of configuring around", "nodes": ["readme_wrong_default_audio_track", "readme_anime_numbering", "readme_fuzzy_title_matching", "readme_library_normalization", "readme_season_packs", "readme_media_intelligence", "readme_quality_upgrades", "readme_manual_release_picker"], "relation": "implement", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "/home/breadway/Projects/breadarr/README.md"}
],
"input_tokens": 0,
"output_tokens": 0
}

View file

@ -1 +0,0 @@
{"files": {"code": ["/home/breadway/Projects/breadarr/breadarr-shared/src/client.rs", "/home/breadway/Projects/breadarr/breadarr-shared/src/config.rs", "/home/breadway/Projects/breadarr/breadarr-shared/src/dto.rs", "/home/breadway/Projects/breadarr/breadarr-shared/src/lib.rs", "/home/breadway/Projects/breadarr/breadarr-tui/src/app.rs", "/home/breadway/Projects/breadarr/breadarr-tui/src/main.rs", "/home/breadway/Projects/breadarr/breadarr-tui/src/ui.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/mod.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/routes/calendar.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/routes/health.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/routes/library_health.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/routes/media.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/routes/mod.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/routes/quality_profiles.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/routes/releases.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/routes/review.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/routes/search.rs", "/home/breadway/Projects/breadarr/breadarrd/src/api/routes/stuck.rs", "/home/breadway/Projects/breadarr/breadarrd/src/db.rs", "/home/breadway/Projects/breadarr/breadarrd/src/importer/ffprobe.rs", "/home/breadway/Projects/breadarr/breadarrd/src/importer/mkv.rs", "/home/breadway/Projects/breadarr/breadarrd/src/importer/mod.rs", "/home/breadway/Projects/breadarr/breadarrd/src/jellyfin.rs", "/home/breadway/Projects/breadarr/breadarrd/src/library_scan.rs", "/home/breadway/Projects/breadarr/breadarrd/src/main.rs", "/home/breadway/Projects/breadarr/breadarrd/src/matcher/embed.rs", "/home/breadway/Projects/breadarr/breadarrd/src/matcher/mod.rs", "/home/breadway/Projects/breadarr/breadarrd/src/metadata/anime_map.rs", "/home/breadway/Projects/breadarr/breadarrd/src/metadata/mod.rs", "/home/breadway/Projects/breadarr/breadarrd/src/metadata/tmdb.rs", "/home/breadway/Projects/breadarr/breadarrd/src/metadata/tvdb.rs", "/home/breadway/Projects/breadarr/breadarrd/src/notify.rs", "/home/breadway/Projects/breadarr/breadarrd/src/parser/mod.rs", "/home/breadway/Projects/breadarr/breadarrd/src/parser/tokens.rs", "/home/breadway/Projects/breadarr/breadarrd/src/qbit/mod.rs", "/home/breadway/Projects/breadarr/breadarrd/src/scheduler.rs", "/home/breadway/Projects/breadarr/breadarrd/src/scoring/gate.rs", "/home/breadway/Projects/breadarr/breadarrd/src/scoring/mod.rs", "/home/breadway/Projects/breadarr/breadarrd/src/scoring/profile.rs", "/home/breadway/Projects/breadarr/breadarrd/src/scoring/score.rs", "/home/breadway/Projects/breadarr/breadarrd/src/sources/mod.rs", "/home/breadway/Projects/breadarr/breadarrd/src/sources/rss.rs", "/home/breadway/Projects/breadarr/breadarrd/src/sources/scrape.rs", "/home/breadway/Projects/breadarr/breadarrd/src/sources/tpb.rs", "/home/breadway/Projects/breadarr/breadarrd/src/transcode/mod.rs"], "document": ["/home/breadway/Projects/breadarr/README.md"], "paper": [], "image": [], "video": []}, "total_files": 46, "total_words": 84649, "needs_graph": true, "warning": null, "skipped_sensitive": [], "unclassified": ["/home/breadway/Projects/breadarr/.gitignore", "/home/breadway/Projects/breadarr/Cargo.toml", "/home/breadway/Projects/breadarr/LICENSE", "/home/breadway/Projects/breadarr/breadarr-shared/Cargo.toml", "/home/breadway/Projects/breadarr/breadarr-tui/Cargo.toml", "/home/breadway/Projects/breadarr/breadarrd/Cargo.toml", "/home/breadway/Projects/breadarr/breadarrd/src/src.tar.xz", "/home/breadway/Projects/breadarr/config.example.toml", "/home/breadway/Projects/breadarr/packaging/systemd/breadarrd.service"], "walk_errors": [], "ignored": ["/home/breadway/Projects/breadarr/.claude/scheduled_tasks.lock", "/home/breadway/Projects/breadarr/CLAUDE.md"], "pruned_noise_dirs": ["/home/breadway/Projects/breadarr/.git/", "/home/breadway/Projects/breadarr/.idea/", "/home/breadway/Projects/breadarr/graphify-out/", "/home/breadway/Projects/breadarr/target/"], "graphifyignore_patterns": 16, "scan_root": "/home/breadway/Projects/breadarr"}

View file

@ -1,26 +0,0 @@
{
"0": "scheduler.rs",
"1": "api/mod.rs",
"2": "Connection",
"3": "fetch_candidates",
"4": "enumerate_upgrade_targets",
"5": "rss.rs",
"6": "TitleMatcher",
"7": "parser/mod.rs",
"8": "config.rs",
"9": "transcode/mod.rs",
"10": "ffprobe.rs",
"11": "importer/mod.rs",
"12": "Result",
"13": "process_pending_grabs",
"14": "Connection",
"15": "import_one",
"16": "find_relinkable_episode_files",
"17": "main.rs",
"18": "import_season_pack",
"19": "QbitClient",
"20": "db.rs",
"21": "String",
"22": "enumerate_search_targets",
"23": "seeded_conn"
}

View file

@ -1 +0,0 @@
{"0": "a20711b8a258bdba", "1": "00eec605035731e0", "2": "fe27e60c0c69f644", "3": "aab173d1c84b4fa5", "4": "fcbc321c7cc48bd5", "5": "f2c1c699c8bbb3f1", "6": "edcd439ab7a6e602", "7": "045ecbe6e4c68626", "8": "1bc76ecd7d47170b", "9": "41ae8ae078021091", "10": "b5579e7d3cb56163", "11": "6e96670b2e6365c8", "12": "86a8b42c2c2db791", "13": "afab72e500fc3a5e", "14": "d44144490006b82e", "15": "03a7fd4f5097c30c", "16": "742257b51006ffce", "17": "c4a1f2a2c670d77d", "18": "6e74d48dd61b8d86", "19": "4fe857e1f7ed4db3", "20": "416c05e55e9af1a8", "21": "61f849337b416151", "22": "fe71e07eb838ebc3", "23": "ef859e5fff310b02"}

View file

@ -1 +0,0 @@
/home/breadway/.cache/uv/archive-v0/4yQjntA8tzDKxQRL/bin/python

View file

@ -1 +0,0 @@
/home/breadway/Projects/breadarr

View file

@ -1 +0,0 @@
/home/breadway/Projects/breadarr/README.md

View file

@ -1,21 +0,0 @@
{
"0": "scheduler.rs",
"1": "api/mod.rs",
"2": "Connection",
"3": "execute_search_targets",
"4": "enumerate_search_targets",
"5": "rss.rs",
"6": "matcher/mod.rs",
"7": "parser/mod.rs",
"8": "config.rs",
"9": "transcode/mod.rs",
"10": "ffprobe.rs",
"11": "importer/mod.rs",
"12": "Result",
"13": "process_pending_grabs",
"14": "Connection",
"15": "import_one",
"16": "find_relinkable_episode_files",
"17": "fetch_candidates",
"18": "import_season_pack"
}

View file

@ -1,159 +0,0 @@
# 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._

File diff suppressed because it is too large Load diff

View file

@ -1,232 +0,0 @@
{
"breadarr-shared/src/client.rs": {
"mtime": 1784176136.6198714,
"ast_hash": "383a3e626e611317f06b28984d72ab9e",
"semantic_hash": ""
},
"breadarr-shared/src/config.rs": {
"mtime": 1785696395.8005114,
"ast_hash": "f6b6fb2eb97829e12f88821408ad1f02",
"semantic_hash": ""
},
"breadarr-shared/src/dto.rs": {
"mtime": 1784908572.450929,
"ast_hash": "aa32217f2eb0f9f0dd3cb5384063e22f",
"semantic_hash": ""
},
"breadarr-shared/src/lib.rs": {
"mtime": 1783781950.6175613,
"ast_hash": "a2ab57e66492dd8a3dd59c60f9821b27",
"semantic_hash": ""
},
"breadarr-tui/src/app.rs": {
"mtime": 1784638215.5754883,
"ast_hash": "ca1205c8be64ec95230c75db46ceac51",
"semantic_hash": ""
},
"breadarr-tui/src/main.rs": {
"mtime": 1784638316.713315,
"ast_hash": "5fd64e003fb112a15f45e26b70a0e286",
"semantic_hash": ""
},
"breadarr-tui/src/ui.rs": {
"mtime": 1784638447.1445198,
"ast_hash": "44d8a181957b8c1e644a45dff91e9a76",
"semantic_hash": ""
},
"breadarrd/src/api/mod.rs": {
"mtime": 1785696056.3421187,
"ast_hash": "3868111877263996f985e7297f566569",
"semantic_hash": ""
},
"breadarrd/src/api/routes/calendar.rs": {
"mtime": 1784033809.0910208,
"ast_hash": "4d04ad23ceba40405f5a015525753b5c",
"semantic_hash": ""
},
"breadarrd/src/api/routes/health.rs": {
"mtime": 1784908576.1114342,
"ast_hash": "55d7e27388131a844315e941095f2127",
"semantic_hash": ""
},
"breadarrd/src/api/routes/library_health.rs": {
"mtime": 1784113370.1363761,
"ast_hash": "1e2fc6fff36cbf091a539000ede57611",
"semantic_hash": ""
},
"breadarrd/src/api/routes/media.rs": {
"mtime": 1784171609.152028,
"ast_hash": "c1e84c6268e624f1eae46fd70033fa04",
"semantic_hash": ""
},
"breadarrd/src/api/routes/mod.rs": {
"mtime": 1784175849.5137725,
"ast_hash": "46b952bdd0b9cbb8d0418a350e814459",
"semantic_hash": ""
},
"breadarrd/src/api/routes/quality_profiles.rs": {
"mtime": 1784176136.6858702,
"ast_hash": "2dfbf6122c323b7521df3087e739f62f",
"semantic_hash": ""
},
"breadarrd/src/api/routes/releases.rs": {
"mtime": 1783782116.7739515,
"ast_hash": "0eb53bc15913f1445687f8de7e4040ad",
"semantic_hash": ""
},
"breadarrd/src/api/routes/review.rs": {
"mtime": 1785695923.5693555,
"ast_hash": "907f8d308d2942eb3abb92482ffca187",
"semantic_hash": ""
},
"breadarrd/src/api/routes/search.rs": {
"mtime": 1783841453.3332663,
"ast_hash": "7d82ca20febd26e9020642aecbab313c",
"semantic_hash": ""
},
"breadarrd/src/api/routes/stuck.rs": {
"mtime": 1784638231.949136,
"ast_hash": "46ff0112d0302f18ed8ad0d2c47d9f3b",
"semantic_hash": ""
},
"breadarrd/src/db.rs": {
"mtime": 1785332784.4654708,
"ast_hash": "54d92eeae67311c25b0dec690302f6c1",
"semantic_hash": ""
},
"breadarrd/src/importer/ffprobe.rs": {
"mtime": 1785695262.529791,
"ast_hash": "c9749d92cd5bffb5e7633facb369f051",
"semantic_hash": ""
},
"breadarrd/src/importer/mkv.rs": {
"mtime": 1784175099.8600957,
"ast_hash": "99c3e8684a7081eda3730e6ecee4d862",
"semantic_hash": ""
},
"breadarrd/src/importer/mod.rs": {
"mtime": 1785695989.9557424,
"ast_hash": "3f763d44c853bcd5d0cdfba4a60783c6",
"semantic_hash": ""
},
"breadarrd/src/jellyfin.rs": {
"mtime": 1784911004.2736921,
"ast_hash": "245f75ff1d6f3c86e15635537f9234a5",
"semantic_hash": ""
},
"breadarrd/src/library_scan.rs": {
"mtime": 1784632454.081846,
"ast_hash": "b35f50965f0e39bacf99059c84d18006",
"semantic_hash": ""
},
"breadarrd/src/main.rs": {
"mtime": 1785677152.6518264,
"ast_hash": "3e5baa3fdebcfe6172675afe575b4505",
"semantic_hash": ""
},
"breadarrd/src/matcher/embed.rs": {
"mtime": 1784269828.2931612,
"ast_hash": "e0a425d2e351589b6e56af02fe8ad396",
"semantic_hash": ""
},
"breadarrd/src/matcher/mod.rs": {
"mtime": 1785695690.847343,
"ast_hash": "e71d4677d9f421b7ef8b84354ac9fc4d",
"semantic_hash": ""
},
"breadarrd/src/metadata/anime_map.rs": {
"mtime": 1783855515.7563374,
"ast_hash": "46b90382ecc49a1452d580f61d7806a4",
"semantic_hash": ""
},
"breadarrd/src/metadata/mod.rs": {
"mtime": 1784636520.9888098,
"ast_hash": "bc4ebde5b9e89515ee87ea6a5ffd3c10",
"semantic_hash": ""
},
"breadarrd/src/metadata/tmdb.rs": {
"mtime": 1783802179.6291993,
"ast_hash": "02ff58e5db664e947f486bb0e685f5b4",
"semantic_hash": ""
},
"breadarrd/src/metadata/tvdb.rs": {
"mtime": 1784635726.8710334,
"ast_hash": "cd21d4943f6a05269a46d95bae368758",
"semantic_hash": ""
},
"breadarrd/src/notify.rs": {
"mtime": 1784033287.1188982,
"ast_hash": "35b8279fb3d6f05892bda5401541c838",
"semantic_hash": ""
},
"breadarrd/src/parser/mod.rs": {
"mtime": 1785695514.945018,
"ast_hash": "5d42da21fd9eae954c0b1d0633d7ba45",
"semantic_hash": ""
},
"breadarrd/src/parser/tokens.rs": {
"mtime": 1785695636.4009888,
"ast_hash": "88b08a119a5285c9e640d2dfe59dbd85",
"semantic_hash": ""
},
"breadarrd/src/qbit/mod.rs": {
"mtime": 1785662339.058403,
"ast_hash": "cd3e6c110e9cf757815d4bfb62faca8e",
"semantic_hash": ""
},
"breadarrd/src/scheduler.rs": {
"mtime": 1785695949.7192466,
"ast_hash": "99233bde5f082ea7ed9b9065ff4943a0",
"semantic_hash": ""
},
"breadarrd/src/scoring/gate.rs": {
"mtime": 1784117113.4110034,
"ast_hash": "f6090fd0a592380dc3ce045decf6932d",
"semantic_hash": ""
},
"breadarrd/src/scoring/mod.rs": {
"mtime": 1784175656.340803,
"ast_hash": "f00b3e1527789cc6ab5ac6e384c451c0",
"semantic_hash": ""
},
"breadarrd/src/scoring/profile.rs": {
"mtime": 1784175744.9204473,
"ast_hash": "5f637981034d7c4edb9e7f70aebc2e36",
"semantic_hash": ""
},
"breadarrd/src/scoring/score.rs": {
"mtime": 1784015678.9287148,
"ast_hash": "6ca1852f1e611ac7046127ab2b60524e",
"semantic_hash": ""
},
"breadarrd/src/sources/mod.rs": {
"mtime": 1785696200.501458,
"ast_hash": "d4efc09eab30de5fee6d25d000ca2b0c",
"semantic_hash": ""
},
"breadarrd/src/sources/rss.rs": {
"mtime": 1785696625.7660108,
"ast_hash": "4f3fd2400a3cc2cf3e24900f1335e884",
"semantic_hash": ""
},
"breadarrd/src/sources/scrape.rs": {
"mtime": 1784177018.756294,
"ast_hash": "df885de8d787d6c2af3d814f0831ee6e",
"semantic_hash": ""
},
"breadarrd/src/sources/tpb.rs": {
"mtime": 1785696280.7010753,
"ast_hash": "8b6896a57f82268a0e1c6924054ce968",
"semantic_hash": ""
},
"breadarrd/src/transcode/mod.rs": {
"mtime": 1785696564.622992,
"ast_hash": "fd89d1494a14380c2d758a7d90312a1b",
"semantic_hash": ""
},
"README.md": {
"mtime": 1784175535.4875388,
"ast_hash": "62f6240c65824f55179178205fb74b90",
"semantic_hash": ""
}
}

View file

@ -1,188 +0,0 @@
# Graph Report - breadarr (2026-08-03)
## Corpus Check
- 46 files · ~90,608 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 693 nodes · 1770 edges · 24 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: `d110556a`
- 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
- fetch_candidates
- enumerate_upgrade_targets
- rss.rs
- TitleMatcher
- parser/mod.rs
- config.rs
- transcode/mod.rs
- ffprobe.rs
- importer/mod.rs
- Result
- process_pending_grabs
- Connection
- import_one
- find_relinkable_episode_files
- main.rs
- import_season_pack
- QbitClient
- db.rs
- String
- enumerate_search_targets
- seeded_conn
## 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. `main()` - 23 edges
6. `parse()` - 22 edges
7. `AppState` - 19 edges
8. `encode_and_verify()` - 18 edges
9. `fetch_candidates()` - 18 edges
10. `QbitClient` - 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 (24 total, 0 thin omitted)
### Community 0 - "scheduler.rs"
Cohesion: 0.07
Nodes (21): a_second_prepare_call_on_an_already_claimed_review_sees_not_pending(), insert_pending_review(), load_quality_profile(), load_quality_profile_applies_a_stored_override(), load_quality_profile_uses_defaults_for_the_seeded_empty_weights_row(), movie_does_not_need_grab_once_it_has_a_file(), movie_does_not_need_grab_when_unmonitored(), movie_does_not_need_grab_while_a_release_is_in_flight() (+13 more)
### Community 1 - "api/mod.rs"
Cohesion: 0.09
Nodes (36): AppState, BackgroundRequest, constant_time_eq(), CycleRecord, CycleStatus, require_api_token(), router(), Connection (+28 more)
### Community 2 - "Connection"
Cohesion: 0.18
Nodes (30): best_existing_movie_score(), best_existing_score(), best_existing_season_pack_score(), count_monitored_missing_episodes_in_season(), find_episode_id(), find_media_item_id_by_title(), find_monitored_episode(), find_monitored_missing_episode() (+22 more)
### Community 3 - "fetch_candidates"
Cohesion: 0.20
Nodes (18): execute_search_targets(), fetch_candidates(), infer_has_english_audio(), is_anime(), looks_like_season_pack(), passes_relevance_filter(), release_sort_key(), ReleaseCandidate (+10 more)
### Community 4 - "enumerate_upgrade_targets"
Cohesion: 0.21
Nodes (15): build_tv_query(), enumerate_search_targets_for_media_item(), enumerate_search_targets_for_media_item_routes_anime_movie_via_tmdb_table(), enumerate_upgrade_targets(), enumerate_upgrade_targets_excludes_an_upgrade_locked_episode(), enumerate_upgrade_targets_prioritizes_a_probe_flagged_episode_over_a_clean_one(), enumerate_upgrade_targets_returns_both_when_budget_allows(), relevance_filter_accepts_a_genuine_match() (+7 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 - "TitleMatcher"
Cohesion: 0.15
Nodes (19): download(), ensure_model(), MatchCandidate, MatchOutcome, queue_for_review(), Connection, Option, Path (+11 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 - "main.rs"
Cohesion: 0.17
Nodes (35): BackgroundRequest, background_loop(), debug_1337x_search(), debug_anime_map_refresh(), debug_grab_cycle(), debug_import_cycle(), debug_jellyfin_refresh(), debug_match_title() (+27 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()
### Community 19 - "QbitClient"
Cohesion: 0.10
Nodes (18): AddTorrentResponse, extract_btih(), MagnetRejected, QbitClient, Mutex, Option, Result, TorrentInfo (+10 more)
### Community 20 - "db.rs"
Cohesion: 0.25
Nodes (18): add_column_if_missing(), backup_before_open(), backup_before_open_copies_an_existing_database(), backup_before_open_is_a_noop_when_no_database_exists_yet(), backup_before_open_prunes_beyond_max_backups(), init(), init_is_idempotent(), prune_old_backups() (+10 more)
### Community 21 - "String"
Cohesion: 0.23
Nodes (13): ApprovalPrep, build_movie_query(), finalize_review_approval(), get_media_item(), grab_and_capture_hash(), grab_candidate(), grab_prepared_approval(), MediaItemRow (+5 more)
### Community 22 - "enumerate_search_targets"
Cohesion: 0.33
Nodes (11): 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_prioritizes_never_searched_first(), enumerate_search_targets_respects_budget(), enumerate_search_targets_routes_anime_movies_to_nyaa_search(), record_search_attempt() (+3 more)
### Community 23 - "seeded_conn"
Cohesion: 0.22
Nodes (10): 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(), record_grab(), record_grab_still_logs_to_torrent_fetch_when_hash_capture_failed(), record_grab_writes_both_a_release_row_and_a_torrent_fetch_audit_row(), resolves_absolute_episode_via_anime_map() (+2 more)
## Knowledge Gaps
- **1 isolated node(s):** `AddTorrentResponse`
These have ≤1 connection - possible missing edges or undocumented components.
## 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.409) - this node is a cross-community bridge._
- **Why does `SearchCycleStats` connect `fetch_candidates` to `scheduler.rs`, `api/mod.rs`?**
_High betweenness centrality (0.271) - this node is a cross-community bridge._
- **Why does `AppState` connect `api/mod.rs` to `transcode/mod.rs`, `main.rs`?**
_High betweenness centrality (0.217) - this node is a cross-community bridge._
- **What connects `AddTorrentResponse` to the rest of the system?**
_1 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `scheduler.rs` be split into smaller, more focused modules?**
_Cohesion score 0.06976744186046512 - nodes in this community are weakly interconnected._
- **Should `api/mod.rs` be split into smaller, more focused modules?**
_Cohesion score 0.08826945412311266 - 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._

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"nodes": [{"id": "$graphify-root$_breadarrd_src_scoring_mod_rs", "label": "mod.rs", "file_type": "code", "source_file": "breadarrd/src/scoring/mod.rs", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_breadarrd_src_scoring_mod_rs", "target": "gate", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "breadarrd/src/scoring/mod.rs", "source_location": "L5", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_breadarrd_src_scoring_mod_rs", "target": "profile", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "breadarrd/src/scoring/mod.rs", "source_location": "L6", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_breadarrd_src_scoring_mod_rs", "target": "score", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "breadarrd/src/scoring/mod.rs", "source_location": "L7", "weight": 1.0, "context": "import"}], "raw_calls": []}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"nodes": [{"id": "$graphify-root$_breadarr_shared_src_lib_rs", "label": "lib.rs", "file_type": "code", "source_file": "breadarr-shared/src/lib.rs", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_breadarr_shared_src_lib_rs", "target": "daemonclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "breadarr-shared/src/lib.rs", "source_location": "L5", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_breadarr_shared_src_lib_rs", "target": "config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "breadarr-shared/src/lib.rs", "source_location": "L6", "weight": 1.0, "context": "import"}], "raw_calls": []}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"nodes": [{"id": "$graphify-root$_breadarrd_src_api_routes_mod_rs", "label": "mod.rs", "file_type": "code", "source_file": "breadarrd/src/api/routes/mod.rs", "source_location": "L1"}], "edges": [], "raw_calls": []}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -1,232 +0,0 @@
{
"breadarr-shared/src/client.rs": {
"mtime": 1784176136.6198714,
"ast_hash": "383a3e626e611317f06b28984d72ab9e",
"semantic_hash": ""
},
"breadarr-shared/src/config.rs": {
"mtime": 1785696395.8005114,
"ast_hash": "f6b6fb2eb97829e12f88821408ad1f02",
"semantic_hash": ""
},
"breadarr-shared/src/dto.rs": {
"mtime": 1784908572.450929,
"ast_hash": "aa32217f2eb0f9f0dd3cb5384063e22f",
"semantic_hash": ""
},
"breadarr-shared/src/lib.rs": {
"mtime": 1783781950.6175613,
"ast_hash": "a2ab57e66492dd8a3dd59c60f9821b27",
"semantic_hash": ""
},
"breadarr-tui/src/app.rs": {
"mtime": 1784638215.5754883,
"ast_hash": "ca1205c8be64ec95230c75db46ceac51",
"semantic_hash": ""
},
"breadarr-tui/src/main.rs": {
"mtime": 1784638316.713315,
"ast_hash": "5fd64e003fb112a15f45e26b70a0e286",
"semantic_hash": ""
},
"breadarr-tui/src/ui.rs": {
"mtime": 1784638447.1445198,
"ast_hash": "44d8a181957b8c1e644a45dff91e9a76",
"semantic_hash": ""
},
"breadarrd/src/api/mod.rs": {
"mtime": 1785696056.3421187,
"ast_hash": "3868111877263996f985e7297f566569",
"semantic_hash": ""
},
"breadarrd/src/api/routes/calendar.rs": {
"mtime": 1784033809.0910208,
"ast_hash": "4d04ad23ceba40405f5a015525753b5c",
"semantic_hash": ""
},
"breadarrd/src/api/routes/health.rs": {
"mtime": 1784908576.1114342,
"ast_hash": "55d7e27388131a844315e941095f2127",
"semantic_hash": ""
},
"breadarrd/src/api/routes/library_health.rs": {
"mtime": 1784113370.1363761,
"ast_hash": "1e2fc6fff36cbf091a539000ede57611",
"semantic_hash": ""
},
"breadarrd/src/api/routes/media.rs": {
"mtime": 1784171609.152028,
"ast_hash": "c1e84c6268e624f1eae46fd70033fa04",
"semantic_hash": ""
},
"breadarrd/src/api/routes/mod.rs": {
"mtime": 1784175849.5137725,
"ast_hash": "46b952bdd0b9cbb8d0418a350e814459",
"semantic_hash": ""
},
"breadarrd/src/api/routes/quality_profiles.rs": {
"mtime": 1784176136.6858702,
"ast_hash": "2dfbf6122c323b7521df3087e739f62f",
"semantic_hash": ""
},
"breadarrd/src/api/routes/releases.rs": {
"mtime": 1783782116.7739515,
"ast_hash": "0eb53bc15913f1445687f8de7e4040ad",
"semantic_hash": ""
},
"breadarrd/src/api/routes/review.rs": {
"mtime": 1785695923.5693555,
"ast_hash": "907f8d308d2942eb3abb92482ffca187",
"semantic_hash": ""
},
"breadarrd/src/api/routes/search.rs": {
"mtime": 1783841453.3332663,
"ast_hash": "7d82ca20febd26e9020642aecbab313c",
"semantic_hash": ""
},
"breadarrd/src/api/routes/stuck.rs": {
"mtime": 1784638231.949136,
"ast_hash": "46ff0112d0302f18ed8ad0d2c47d9f3b",
"semantic_hash": ""
},
"breadarrd/src/db.rs": {
"mtime": 1785332784.4654708,
"ast_hash": "54d92eeae67311c25b0dec690302f6c1",
"semantic_hash": ""
},
"breadarrd/src/importer/ffprobe.rs": {
"mtime": 1785695262.529791,
"ast_hash": "c9749d92cd5bffb5e7633facb369f051",
"semantic_hash": ""
},
"breadarrd/src/importer/mkv.rs": {
"mtime": 1784175099.8600957,
"ast_hash": "99c3e8684a7081eda3730e6ecee4d862",
"semantic_hash": ""
},
"breadarrd/src/importer/mod.rs": {
"mtime": 1785695989.9557424,
"ast_hash": "3f763d44c853bcd5d0cdfba4a60783c6",
"semantic_hash": ""
},
"breadarrd/src/jellyfin.rs": {
"mtime": 1784911004.2736921,
"ast_hash": "245f75ff1d6f3c86e15635537f9234a5",
"semantic_hash": ""
},
"breadarrd/src/library_scan.rs": {
"mtime": 1784632454.081846,
"ast_hash": "b35f50965f0e39bacf99059c84d18006",
"semantic_hash": ""
},
"breadarrd/src/main.rs": {
"mtime": 1785677152.6518264,
"ast_hash": "3e5baa3fdebcfe6172675afe575b4505",
"semantic_hash": ""
},
"breadarrd/src/matcher/embed.rs": {
"mtime": 1784269828.2931612,
"ast_hash": "e0a425d2e351589b6e56af02fe8ad396",
"semantic_hash": ""
},
"breadarrd/src/matcher/mod.rs": {
"mtime": 1785695690.847343,
"ast_hash": "e71d4677d9f421b7ef8b84354ac9fc4d",
"semantic_hash": ""
},
"breadarrd/src/metadata/anime_map.rs": {
"mtime": 1783855515.7563374,
"ast_hash": "46b90382ecc49a1452d580f61d7806a4",
"semantic_hash": ""
},
"breadarrd/src/metadata/mod.rs": {
"mtime": 1784636520.9888098,
"ast_hash": "bc4ebde5b9e89515ee87ea6a5ffd3c10",
"semantic_hash": ""
},
"breadarrd/src/metadata/tmdb.rs": {
"mtime": 1783802179.6291993,
"ast_hash": "02ff58e5db664e947f486bb0e685f5b4",
"semantic_hash": ""
},
"breadarrd/src/metadata/tvdb.rs": {
"mtime": 1784635726.8710334,
"ast_hash": "cd21d4943f6a05269a46d95bae368758",
"semantic_hash": ""
},
"breadarrd/src/notify.rs": {
"mtime": 1784033287.1188982,
"ast_hash": "35b8279fb3d6f05892bda5401541c838",
"semantic_hash": ""
},
"breadarrd/src/parser/mod.rs": {
"mtime": 1785695514.945018,
"ast_hash": "5d42da21fd9eae954c0b1d0633d7ba45",
"semantic_hash": ""
},
"breadarrd/src/parser/tokens.rs": {
"mtime": 1785695636.4009888,
"ast_hash": "88b08a119a5285c9e640d2dfe59dbd85",
"semantic_hash": ""
},
"breadarrd/src/qbit/mod.rs": {
"mtime": 1785662339.058403,
"ast_hash": "cd3e6c110e9cf757815d4bfb62faca8e",
"semantic_hash": ""
},
"breadarrd/src/scheduler.rs": {
"mtime": 1785695949.7192466,
"ast_hash": "99233bde5f082ea7ed9b9065ff4943a0",
"semantic_hash": ""
},
"breadarrd/src/scoring/gate.rs": {
"mtime": 1784117113.4110034,
"ast_hash": "f6090fd0a592380dc3ce045decf6932d",
"semantic_hash": ""
},
"breadarrd/src/scoring/mod.rs": {
"mtime": 1784175656.340803,
"ast_hash": "f00b3e1527789cc6ab5ac6e384c451c0",
"semantic_hash": ""
},
"breadarrd/src/scoring/profile.rs": {
"mtime": 1784175744.9204473,
"ast_hash": "5f637981034d7c4edb9e7f70aebc2e36",
"semantic_hash": ""
},
"breadarrd/src/scoring/score.rs": {
"mtime": 1784015678.9287148,
"ast_hash": "6ca1852f1e611ac7046127ab2b60524e",
"semantic_hash": ""
},
"breadarrd/src/sources/mod.rs": {
"mtime": 1785696200.501458,
"ast_hash": "d4efc09eab30de5fee6d25d000ca2b0c",
"semantic_hash": ""
},
"breadarrd/src/sources/rss.rs": {
"mtime": 1785696625.7660108,
"ast_hash": "4f3fd2400a3cc2cf3e24900f1335e884",
"semantic_hash": ""
},
"breadarrd/src/sources/scrape.rs": {
"mtime": 1784177018.756294,
"ast_hash": "df885de8d787d6c2af3d814f0831ee6e",
"semantic_hash": ""
},
"breadarrd/src/sources/tpb.rs": {
"mtime": 1785696280.7010753,
"ast_hash": "8b6896a57f82268a0e1c6924054ce968",
"semantic_hash": ""
},
"breadarrd/src/transcode/mod.rs": {
"mtime": 1785696564.622992,
"ast_hash": "fd89d1494a14380c2d758a7d90312a1b",
"semantic_hash": ""
},
"README.md": {
"mtime": 1784175535.4875388,
"ast_hash": "62f6240c65824f55179178205fb74b90",
"semantic_hash": ""
}
}