{
 "tool": "isitagentready",
 "raw_files": [
  "raw/iar_lab2.json",
  "raw/iar_lab2-clean.json"
 ],
 "reach": {
  "fetched_paths": [
   "/",
   "/?_mfa=… (headless render)",
   "/assets/site.js",
   "/favicon.ico (404)",
   "/robots.txt",
   "/sitemap.xml",
   "/sitemap-index.xml (404)",
   "/sitemap_index.xml (404)",
   "/sitemap.xml.gz (404)",
   "/.well-known/* agent/OAuth/MCP/A2A/UCP/ACP/api-catalog/ai-catalog/poppy/skills/http-message-signatures-directory (all 404)",
   "/auth.md, /api, /api/v1, /openapi.json (404)"
  ],
  "agents": [
   "AgentReadinessScanner/1.0",
   "HeadlessChrome 152"
  ],
  "not_fetched": "No AI crawler user agent; no llms.txt; no security.txt; no sub-pages; sitemap children not opened."
 },
 "faults": {
  "R1": {
   "v": "caught",
   "quote": "{\"userAgent\": \"claudebot\", \"effectiveAccess\": \"disallowed\", \"ruleSource\": \"explicit\", \"matchedRule\": {\"directive\": \"disallow\", \"pattern\": \"/\"}}",
   "where": "iar_lab2.json checks.botAccessControl.robotsTxtAiRules.details.botPolicies[16]",
   "note": "Reference-parser reading, but only in the details JSON, without a line number, under a check whose status is \"pass\" (\"Found rules for AI bots: claudebot\").",
   "loc": "robots"
  },
  "R2": {
   "v": "partial",
   "quote": "{\"directive\": \"disallow\", \"pattern\": \"/assets/\"}",
   "where": "iar_lab2.json checks.botAccessControl.robotsTxtAiRules.details.botPolicies[0].rules (every wildcard bot)",
   "note": "Rule listed with effectiveAccess \"allowed\"; not identified as blocking render resources.",
   "loc": "robots"
  },
  "R3": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "R4": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "R5": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "R6": {
   "v": "partial",
   "quote": "No Sitemap directives found in robots.txt",
   "where": "iar_lab2.json checks.discoverability.sitemap.evidence[0].finding.summary",
   "note": "On the clean twin the same step says \"Found 1 Sitemap directive(s) in robots.txt\", so the relative line is what it rejected; reported as absent rather than invalid.",
   "loc": "robots"
  },
  "R7": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "robots"
  },
  "S1": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home:PerplexityBot",
   "note": "Set by the independent verification pass (grades/_verification.json)."
  },
  "S2": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home:Applebot",
   "note": "Set by the independent verification pass (grades/_verification.json)."
  },
  "S3": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home:OAI-SearchBot",
   "note": "Set by the independent verification pass (grades/_verification.json)."
  },
  "S4": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home:ClaudeBot",
   "note": "Set by the independent verification pass (grades/_verification.json)."
  },
  "S5": {
   "v": "missed",
   "quote": "",
   "where": "",
   "loc": "home:GPTBot",
   "note": "Set by the independent verification pass (grades/_verification.json)."
  },
  "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": "missed",
   "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": 1,
  "partial": 2,
  "points": 2.0,
  "wrong": 0,
  "reached": 21,
  "points_of_reached": 0.095,
  "pct_of_63": 3.2
 },
 "clean": {
  "false_alarms": [],
  "advisories": [
   {
    "claim": "no Link headers",
    "quote": "No Link headers found on target page",
    "where": "iar_lab2-clean.json checks.discoverability.linkHeaders"
   },
   {
    "claim": "no DNS-AID records",
    "quote": "DNS for AI Discovery (DNS-AID) well-known entrypoint records not found",
    "where": "checks.discoverability.dnsAid"
   },
   {
    "claim": "no markdown negotiation",
    "quote": "Site does not support Markdown for Agents",
    "where": "checks.contentAccessibility.markdownNegotiation"
   },
   {
    "claim": "no Content Signals",
    "quote": "No Content Signals found in robots.txt",
    "where": "checks.botAccessControl.contentSignals"
   },
   {
    "claim": "no Web Bot Auth directory",
    "quote": "Web Bot Auth directory not found (informational only)",
    "where": "checks.botAccessControl.webBotAuth"
   },
   {
    "claim": "no API catalog / OAuth / auth.md",
    "quote": "API Catalog not found",
    "where": "checks.discovery.apiCatalog, oauthDiscovery, oauthProtectedResource, authMd"
   },
   {
    "claim": "no MCP server card / A2A card / agent skills / WebMCP / ARD / PAP",
    "quote": "MCP Server Card not found",
    "where": "checks.discovery.mcpServerCard, a2aAgentCard, agentSkills, webMcp, ard, personalAgentProtocol"
   },
   {
    "claim": "commerce protocols absent (marked neutral, not a commerce site)",
    "quote": "x402 payment protocol not detected (not a commerce site)",
    "where": "checks.commerce.*"
   }
  ]
 },
 "other_false_claims_lab2": [],
 "evidence_quality": {
  "score": 3,
  "why": "Every check carries the request it made, the response status, selected headers and a body preview (e.g. the full robots.txt), so findings are reproducible; but it catches almost none of the key."
 },
 "strengths_not_scored": [
  "Probes 20+ agent-protocol endpoints (MCP server card, A2A agent card, OAuth discovery, api-catalog, agent skills, UCP/ACP, x402) with the request and status shown for each.",
  "DNS-AID lookups over DoH with the queries listed (checks.discoverability.dnsAid.details.queriesAttempted).",
  "Markdown content negotiation test (Accept: text/markdown).",
  "Headless render to detect WebMCP tool registrations.",
  "Clean twin: zero false alarms."
 ],
 "notes": "Scope is agent-protocol readiness, not SEO or crawler access: it never sends an AI crawler user agent, so S1-S7 are unreached, and it reads only robots.txt and the sitemap index besides the homepage. The robots parse is correct where it reports (ClaudeBot disallowed, wildcard bots get /assets/ and /quote), but it reports these as data, not problems, and ignores Googlebot-Image/Storebot-Google (AI bots only). \"robots.txt exists with valid format\" and \"sitemap.xml exists with valid structure\" pass a file with Noindex, a relative Sitemap and a 404 child sitemap; not graded wrong because they are generic format checks, not statements about those faults."
}