{
 "tool": "knowatoa",
 "raw_files": [
  "raw/kn_lab2.tsv",
  "raw/kn_lab2-clean.tsv",
  "raw/kn_page_lab2.html",
  "raw/kn_page_lab2-clean.html"
 ],
 "reach": {
  "fetched_paths": [
   "/ only (one GET per agent, redirects not followed)"
  ],
  "agents": [
   "AI2Bot",
   "Amazonbot",
   "anthropic-ai",
   "ClaudeBot",
   "claude-web",
   "Applebot",
   "Applebot-Extended",
   "BingBot",
   "Bytespider",
   "CCBot",
   "ChatGPT-User",
   "GPTBot",
   "OAI-SearchBot",
   "cohere-ai",
   "Diffbot",
   "DuckAssistBot",
   "FacebookBot",
   "meta-externalagent",
   "Google-Extended (UA does not contain \"Googlebot\")",
   "LinkedInBot",
   "omgili",
   "PerplexityBot",
   "Perplexity-User",
   "Timpibot",
   "YouBot"
  ],
  "not_fetched": "robots.txt never requested; no files; no sub-pages; no Googlebot user agent.",
  "row_mapping": "The TSV name column was lost by the batch script (it holds a truncated data-url); rows follow kn_ids.txt order, which is the agent order on kn_page_lab2.html and matches the request log (row 4 = 302 ClaudeBot, row 12 = 429 GPTBot, row 22 = 403 PerplexityBot)."
 },
 "faults": {
  "R1": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "R2": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "R3": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "R4": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "R5": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "R6": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "R7": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "S1": {
   "v": "caught",
   "quote": "{\"status\":\"error\",\"code\":\"403\",\"message\":\"Forbidden\"}",
   "where": "kn_lab2.tsv line 22 (PerplexityBot)",
   "loc": "home:PerplexityBot"
  },
  "S2": {
   "v": "wrong",
   "quote": "{\"status\":\"success\",\"code\":\"200\",\"message\":\"OK\"}",
   "where": "kn_lab2.tsv line 6 (Applebot)",
   "note": "Applebot gets a 200 \"Just a moment...\" challenge page; the tool, whose page says it is \"Checking 25 AI search engine bots' ability to read\", marks Applebot success.",
   "loc": "home:Applebot"
  },
  "S3": {
   "v": "missed",
   "quote": "",
   "where": "",
   "note": "OAI-SearchBot fetched (log 1925284); row 13 \"success 200 OK\" is true as far as it goes; the stripped content is not examined.",
   "loc": "home:OAI-SearchBot"
  },
  "S4": {
   "v": "partial",
   "quote": "{\"status\":\"success\",\"code\":\"302\",\"message\":\"Found\"}",
   "where": "kn_lab2.tsv line 4 (ClaudeBot)",
   "note": "The 302 is shown, but classed \"success\"; the redirect target (/unavailable) is not followed or named.",
   "loc": "home:ClaudeBot"
  },
  "S5": {
   "v": "caught",
   "quote": "{\"status\":\"error\",\"code\":\"429\",\"message\":\"Too Many Requests\"}",
   "where": "kn_lab2.tsv line 12 (GPTBot)",
   "loc": "home:GPTBot"
  },
  "S6": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home:Googlebot",
   "note": "Set by the independent verification pass (grades/_verification.json)."
  },
  "S7": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/pricing:Bingbot"
  },
  "I1": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/services/gutter-guards"
  },
  "I2": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/pricing"
  },
  "I3": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/areas/riverbend"
  },
  "I4": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/services/downspout-repair"
  },
  "I5": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home"
  },
  "I6": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/faq"
  },
  "I7": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/about"
  },
  "J1": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/pricing"
  },
  "J2": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home"
  },
  "J3": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/reviews"
  },
  "J4": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/faq"
  },
  "J5": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/gallery"
  },
  "J6": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/careers"
  },
  "D1": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home"
  },
  "D2": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/contact"
  },
  "D3": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/contact"
  },
  "D4": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/reviews"
  },
  "D5": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/about"
  },
  "D6": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/about"
  },
  "D7": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/blog/*"
  },
  "M1": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "llms"
  },
  "M2": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "llms"
  },
  "M3": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "security"
  },
  "M4": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "security"
  },
  "M5": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "security"
  },
  "X1": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "smidx"
  },
  "X2": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "smpages"
  },
  "X3": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "smpages"
  },
  "X4": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "smpages"
  },
  "X5": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "smpages"
  },
  "X6": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "smpages"
  },
  "L1": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home"
  },
  "L2": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/old-gutter-page"
  },
  "L3": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/blog/do-gutter-guards-work,/promo-a"
  },
  "L4": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/specials"
  },
  "L5": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "smpages"
  },
  "L6": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/faq/"
  },
  "L7": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/about"
  },
  "P1": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/careers"
  },
  "P2": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/areas/millbrook,/areas/cedar-park"
  },
  "P3": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/services/fascia-repair"
  },
  "P4": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/services/ice-dam-prevention"
  },
  "P5": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home"
  },
  "P6": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/privacy"
  },
  "P7": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/terms"
  },
  "T1": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home"
  },
  "T2": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/about"
  },
  "T3": {
   "v": "unreached",
   "quote": "",
   "where": "",
   "loc": "sub:/blog/do-gutter-guards-work"
  },
  "T4": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home"
  }
 },
 "score": {
  "caught": 2,
  "partial": 1,
  "points": 2.5,
  "wrong": 1,
  "reached": 13,
  "points_of_reached": 0.192,
  "pct_of_63": 4.0
 },
 "clean": {
  "false_alarms": [],
  "advisories": [],
  "note": "All 25 rows on the clean twin are {\"status\":\"success\",\"code\":\"200\",\"message\":\"OK\"}."
 },
 "other_false_claims_lab2": [
  {
   "claim": "ClaudeBot succeeded",
   "quote": "{\"status\":\"success\",\"code\":\"302\",\"message\":\"Found\"}",
   "where": "kn_lab2.tsv line 4",
   "why_false": "A 302 to /unavailable is not a successful read; counted under S4 as partial, listed here because the success classification itself is untrue."
  }
 ],
 "evidence_quality": {
  "score": 2,
  "why": "Names each agent with the HTTP status code it got; no request detail, no redirect target, no explanation or standard."
 },
 "strengths_not_scored": [
  "Live homepage fetch with 25 real crawler user-agent strings, including legacy tokens (anthropic-ai, claude-web), Diffbot, Timpibot, omgili, LinkedInBot and AI2Bot (request log 1922266-1927852).",
  "Fetches from Amazon AWS rather than a single CDN, one agent at a time.",
  "Clean twin: zero false alarms."
 ],
 "notes": "Status-code checker only: one GET of / per agent, no robots.txt, no content inspection. It caught the two hard refusals (403, 429) correctly, half-caught the 302, and passed the Applebot challenge page as success because it only looks at the status code. No Googlebot UA (S6 unreached) and no /pricing (S7 unreached)."
}