Skip to content

Commit d7e4888

Browse files
committed
fix(report): improve legacy status compatibility for release readiness
1 parent af72271 commit d7e4888

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

bladerecon/modules/report.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1844,9 +1844,12 @@ def run(target: str, output: Path = Path("results"), scan_duration: Optional[str
18441844
parameters = _load_parameters(target_dir)
18451845
discovered_parameters = _load_discovered_parameters(target_dir)
18461846
screenshots_skipped_reason = ""
1847+
screenshots_incomplete_reason = ""
18471848
screenshot_state_status = resolve_module_status(screenshot_state, has_artifact=bool(screenshots))
18481849
if screenshot_state_status == "skipped":
18491850
screenshots_skipped_reason = _normalize_skip_reason(str(screenshot_state.get("error") or "Missing Dependency"))
1851+
elif screenshot_state_status in {"failed", "timeout", "partial"}:
1852+
screenshots_incomplete_reason = _normalize_skip_reason(str(screenshot_state.get("error") or screenshot_state_status))
18501853
else:
18511854
chromium_ok, chromium_detail = check_playwright_chromium()
18521855
if not screenshots and not chromium_ok:
@@ -1896,7 +1899,11 @@ def run(target: str, output: Path = Path("results"), scan_duration: Optional[str
18961899
screenshots_status = (
18971900
f"Skipped ({screenshots_skipped_reason})"
18981901
if screenshots_skipped_reason
1899-
else ("Completed" if isinstance(screenshot_state, dict) and screenshot_state.get("status") == "completed" and not screenshots else (len(screenshots) if screenshots_available else "Not Run"))
1902+
else (
1903+
f"{_status_label(screenshot_state_status)} ({screenshots_incomplete_reason})"
1904+
if screenshots_incomplete_reason
1905+
else ("Completed" if screenshot_state_status == "completed" and not screenshots else (len(screenshots) if screenshots_available else "Not Run"))
1906+
)
19001907
)
19011908
nuclei_status = (
19021909
f"{nuclei_status_label} ({nuclei_skipped_reason})"

tests/test_report.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,20 @@ def test_report_shows_skipped_parameters_from_scan_state(tmp_path: Path) -> None
598598
assert "redirect_url" not in html
599599

600600

601+
def test_report_preserves_legacy_screenshot_timeout_status(tmp_path: Path) -> None:
602+
target = tmp_path / "timeout.example"
603+
target.mkdir(parents=True)
604+
(target / "scan_state.json").write_text(
605+
json.dumps({"modules": {"screenshots": {"status": "timed_out", "error": "browser timeout"}}}),
606+
encoding="utf-8",
607+
)
608+
609+
report.run("timeout.example", output=tmp_path)
610+
611+
md = (target / "reports" / "report.md").read_text(encoding="utf-8")
612+
assert "- Screenshots: Timed Out (browser timeout)" in md
613+
614+
601615
def test_report_shows_template_unavailable_nuclei_as_skipped(tmp_path: Path) -> None:
602616
target = tmp_path / "example.com"
603617
target.mkdir(parents=True)

0 commit comments

Comments
 (0)