{
  "contract": "walsh-research-test-fixtures/v1",
  "updated":  "2026-05-23T00:00:00Z",
  "fixtures": {
    "robots_allowed_sentinel": "https://wal.sh/research/bots/dogfood-allow",
    "robots_disallowed":       "https://wal.sh/research/bots/dogfood-disallow",
    "walsh_only_allowed":      "https://wal.sh/research/bots/dogfood-walsh-only",
    "external_positive":       "https://pypi.org/project/jsonschema/",
    "operator_blocked_host":   "example.com",
    "flaky_429_endpoint":      null
  },
  "expected": {
    "robots_allowed_sentinel": "200 (R2 allow)",
    "robots_disallowed":       "denied by R2 for the Walsh-Research named group, every representation (.html/.md/extensionless)",
    "walsh_only_allowed":      "200 for Walsh-Research; a generic * bot is Disallow-ed here (R2a: named group overrides * to allow)",
    "external_positive":       "200; robots-allowed third-party host, sandbox-reachable",
    "operator_blocked_host":   "any URL on this host is denied by R3 (apex match against the live blocklist)"
  },
  "notes": {
    "external_positive": "PyPI is allowlisted in the egress policies LLM sandboxes run under. Use the project page, which is robots-allowed. Do NOT use /pypi/<name>/json: pypi.org/robots.txt Disallows /pypi/*/json, so a robots-respecting bot must refuse it.",
    "flaky_429_endpoint": "no live fixture for R5 backoff; tools SHOULD verify backoff/Retry-After against a local mock that returns 429 + Retry-After"
  }
}
