Apply quality gates before queuing for review, not just before auto-grab
The "reject sub-1080p when a better resolution exists in this batch" gate (and every other quality gate) only ran on the confident auto-match path — a low-confidence match skipped straight to queue_for_review before ever reaching it. A human review decision is about whether this is genuinely the right show, not a backdoor around quality standards; a title match being ambiguous is no reason to let a worse-quality release through untested. Verified live: several 720p season-pack releases were sitting in the review queue for shows that also had 1080p+ alternatives in the same search batch. Moved the gate check ahead of the review-queue branch so it applies uniformly.
This commit is contained in:
parent
2f0d8300ce
commit
e179b9bf90
1 changed files with 20 additions and 11 deletions
|
|
@ -534,17 +534,6 @@ async fn process_item(
|
||||||
episode_id = Some(eid);
|
episode_id = Some(eid);
|
||||||
}
|
}
|
||||||
|
|
||||||
if needs_review {
|
|
||||||
matcher::queue_for_review(
|
|
||||||
conn,
|
|
||||||
&item.title,
|
|
||||||
&candidate,
|
|
||||||
Some(&item.link),
|
|
||||||
Some(source_id),
|
|
||||||
)?;
|
|
||||||
return Ok(ProcessOutcome::QueuedForReview);
|
|
||||||
}
|
|
||||||
|
|
||||||
let anime = match media_item.tvdb_id {
|
let anime = match media_item.tvdb_id {
|
||||||
Some(id) => is_anime(conn, id)?,
|
Some(id) => is_anime(conn, id)?,
|
||||||
None => false,
|
None => false,
|
||||||
|
|
@ -566,10 +555,30 @@ async fn process_item(
|
||||||
is_season_pack: season_pack_number.is_some(),
|
is_season_pack: season_pack_number.is_some(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Quality gates — including "reject sub-1080p when a 1080p+ alternative
|
||||||
|
// exists in this same batch" — apply before a candidate ever reaches a
|
||||||
|
// human, not just on the confident auto-grab path. A human's review
|
||||||
|
// decision is about whether this is genuinely the right show/season;
|
||||||
|
// it was never meant to also be the place quality standards get
|
||||||
|
// relaxed just because the title match happened to be ambiguous
|
||||||
|
// (verified live: several 720p season-pack releases sat in the review
|
||||||
|
// queue for shows that also had 1080p+ releases available in the same
|
||||||
|
// search, when they should have been silently gate-rejected instead).
|
||||||
if let GateResult::Reject(reason) = scoring::evaluate_gates(&parsed, &gate_ctx, &profile) {
|
if let GateResult::Reject(reason) = scoring::evaluate_gates(&parsed, &gate_ctx, &profile) {
|
||||||
return Ok(ProcessOutcome::GateRejected(reason));
|
return Ok(ProcessOutcome::GateRejected(reason));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if needs_review {
|
||||||
|
matcher::queue_for_review(
|
||||||
|
conn,
|
||||||
|
&item.title,
|
||||||
|
&candidate,
|
||||||
|
Some(&item.link),
|
||||||
|
Some(source_id),
|
||||||
|
)?;
|
||||||
|
return Ok(ProcessOutcome::QueuedForReview);
|
||||||
|
}
|
||||||
|
|
||||||
let release_score = scoring::score(&parsed, item.seeders.unwrap_or(0), false, &profile);
|
let release_score = scoring::score(&parsed, item.seeders.unwrap_or(0), false, &profile);
|
||||||
let existing_best = match (episode_id, season_pack_number) {
|
let existing_best = match (episode_id, season_pack_number) {
|
||||||
(Some(eid), _) => best_existing_score(conn, eid)?,
|
(Some(eid), _) => best_existing_score(conn, eid)?,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue