Files
Devour/.desloppify/subagents/runs/20260224_101740/results/batch-1.raw.txt
T
2026-02-24 12:10:13 +01:00

78 lines
4.8 KiB
Plaintext

{
"batch": "Cross-cutting Sweep",
"batch_index": 1,
"assessments": {
"error_consistency": 73.0
},
"dimension_notes": {
"error_consistency": {
"evidence": [
"Quality analyzers mix hard failures and silent skips: `TestCoverageDetector.Detect` returns `nil, nil` when `go` is missing and when coverage file is still absent (`internal/quality/plugins/go/analyzers/test_coverage.go:38-41,50-52`), while other paths return wrapped errors.",
"Multiple detector paths suppress parse/read failures instead of propagating context (`internal/quality/plugins/go/analyzers/detectors.go:44-47,111-114`).",
"Scraper modules differ on partial failure handling: `LocalScraper.Scrape` drops document conversion errors (`internal/scraper/local.go:90-93`), while `WebScraper`/`LocalSearchScraper` accumulate and return aggregated scrape errors (`internal/scraper/web.go:257-261`, `internal/scraper/localsearch.go:141-145`).",
"HTTP error context is uneven: external scrapers return bare `HTTP <code>` (`internal/scraper/external/astrodocs.go:86-88`) while local search includes status plus response body excerpt (`internal/scraper/localsearch.go:212-217`).",
"Plugin startup uses process-terminating panic on registration failure (`internal/quality/plugins/go/plugin.go:360-363`) instead of the recoverable error style used elsewhere in scanner execution (`internal/quality/scanner.go:109-116`)."
],
"impact_scope": "subsystem",
"fix_scope": "multi_file_refactor",
"confidence": "high"
}
},
"findings": [
{
"dimension": "error_consistency",
"identifier": "quality_detectors_silent_failure_paths",
"summary": "Quality detectors silently skip failures in some paths but fail loudly in others",
"related_files": [
"internal/quality/plugins/go/analyzers/test_coverage.go",
"internal/quality/plugins/go/analyzers/detectors.go"
],
"evidence": [
"`TestCoverageDetector.Detect` returns `nil, nil` when `go` is unavailable and when `coverage.out` is missing after test run, making tooling/environment failures indistinguishable from a clean run.",
"`LargeFileDetector.Detect` continues on `countLines` error and `GodStructDetector.analyzeFile` returns nil on parse error, suppressing scanner visibility into unreadable/unparseable files."
],
"suggestion": "Standardize detector contracts: return typed non-fatal diagnostics (or wrapped errors) for tool-missing/parse/read failures, and let scanner decide whether to downgrade to warnings instead of silently returning no findings.",
"confidence": "high",
"impact_scope": "module",
"fix_scope": "multi_file_refactor"
},
{
"dimension": "error_consistency",
"identifier": "scraper_partial_failure_contract_drift",
"summary": "Scraper implementations disagree on whether per-item errors are surfaced or dropped",
"related_files": [
"internal/scraper/local.go",
"internal/scraper/web.go",
"internal/scraper/localsearch.go"
],
"evidence": [
"`LocalScraper.Scrape` ignores `fileToDocument` errors by returning nil in the walk callback and continues without recording failures.",
"`WebScraper` and `LocalSearchScraper` collect per-URL failures and return an explicit error when no documents are produced."
],
"suggestion": "Adopt one partial-failure policy across scrapers (for example: collect bounded per-item errors and return them when output is empty, optionally include warnings when output is partial). Implement this via a shared helper used by local/web/localsearch scrapers.",
"confidence": "high",
"impact_scope": "subsystem",
"fix_scope": "multi_file_refactor"
},
{
"dimension": "error_consistency",
"identifier": "http_error_context_inconsistent",
"summary": "HTTP failure messages vary from rich context to opaque status-only strings",
"related_files": [
"internal/scraper/external/astrodocs.go",
"internal/scraper/external/cloudflaredocs.go",
"internal/scraper/external/dockerdocs.go",
"internal/scraper/external/nuxtdocs.go",
"internal/scraper/localsearch.go"
],
"evidence": [
"External docs scrapers return generic `HTTP %d` without endpoint or response snippet, reducing traceability during failures.",
"Local search includes status code and trimmed response body in error messages, providing significantly better debugging context."
],
"suggestion": "Create a shared HTTP error formatter for scraper clients that includes URL host/path, status code, and a bounded response-body excerpt; update all external scraper fetchers to use it.",
"confidence": "medium",
"impact_scope": "subsystem",
"fix_scope": "multi_file_refactor"
}
]
}