{"record":{"id":"56847316b507917a","repo":"tonhowtf/omniget","slug":"nenhuma-lista-veio-nada-a-bloquear","errorCode":null,"errorMessage":"nenhuma lista veio: nada a bloquear","messagePattern":"nenhuma lista veio: nada a bloquear","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/omniget-core/src/core/tools/hosts_block.rs","lineNumber":610,"sourceCode":"        }\n    }\n    let extra: Vec<String> = opts\n        .extra\n        .iter()\n        .filter_map(|d| normalize_domain(d.as_str()))\n        .collect();\n    if !extra.is_empty() {\n        stats.push(SourceStat {\n            id: \"extra\".into(),\n            url: None,\n            domains: extra.len(),\n            ok: true,\n            error: None,\n        });\n        lists.push(extra);\n    }\n    if lists.iter().all(|l| l.is_empty()) {\n        return Err(anyhow!(\"nenhuma lista veio: nada a bloquear\"));\n    }\n\n    let (domains, skipped) = merge(&lists, &opts.whitelist);\n    let current = std::fs::read_to_string(&path).unwrap_or_default();\n    let blocked_before = count_blocked(&current);\n    let updated_at = now_stamp();\n    let next = apply_to_text(&current, &domains, &opts.ip, &updated_at);\n    super::report(progress, ID, \"progress\", total - 1, Some(total), None);\n\n    let mut result = ApplyResult {\n        path: path.to_string_lossy().to_string(),\n        dry_run: opts.dry_run,\n        written: false,\n        blocked: domains.len(),\n        blocked_before,\n        skipped_whitelist: skipped,\n        bytes: next.len() as u64,\n        backup: None,","sourceCodeStart":592,"sourceCodeEnd":628,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omniget-core/src/core/tools/hosts_block.rs#L592-L628","documentation":"Merge guard in hosts_block apply: after fetching all sources (including the 'extra' manual domains), every collected list is empty — fetching failed everywhere or returned zero domains — so applying would only rewrite the hosts file without blocking anything, and the run aborts.","triggerScenarios":"Thrown at src-tauri/omniget-core/src/core/tools/hosts_block.rs:610 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check network connectivity and retry so at least one source downloads","Add manual extra domains so the run has content even if remote lists fail","Inspect per-source SourceStat errors to see which fetches failed and why"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}