{
  "datasets": {
    "agent_keys": {
      "cycle": "iso_week",
      "fingerprint_inputs": [
        "agent_key_history:METHOD"
      ],
      "title": "Agent keys: public keys and card signatures agent hosts publish",
      "versions": [
        {
          "additions": [
            {
              "basis": "founder request data2-ondemand-census (PR #797)",
              "date_utc": "2026-10-02T18:00:00Z",
              "what": "Rows from hosts the Observatory reads because an outside caller asked about them are kept with cohort 'requested_hosts' (their change entries are marked the same way) and are left out of the weekly aggregates and change counts, which report them beside the figures as requested_hosts_not_counted. No such rows existed before, so no earlier row or published figure is read differently and no overlap is needed."
            }
          ],
          "change_kind": "initial",
          "fingerprint": "474ae7df429bbdbdf5adb79c4b8426c7b225f9a426283ef19d46557be901b75b",
          "from_basis": "commit 13b6e28 (four long-run datasets)",
          "from_utc": "2026-10-01T20:49:42Z",
          "version": "v1",
          "what_changed": "First version: A2A agent-card signatures, /.well-known/jwks.json keys (thumbprints, never private material), RFC 9728 protected-resource metadata hosts."
        }
      ]
    },
    "agent_prices": {
      "cycle": "iso_week",
      "fingerprint_inputs": [
        "agent_price_history:METHOD"
      ],
      "title": "Agent prices: x402 Bazaar listings (off until switched on)",
      "versions": [
        {
          "change_kind": "initial",
          "fingerprint": "2e6e8648cf7152b6d5b04603e41764bba22b972584a8bf95047e1db4a2dd1e53",
          "from_basis": "commit 086842e (decision #20); no rows until GAIP_SOURCE_X402_BAZAAR=1",
          "from_utc": "2026-10-02T01:56:25Z",
          "version": "v1",
          "what_changed": "First version: per resource host and ISO week, each listed resource's path, type, category and x402 price requirements (never the pay-to address)."
        }
      ]
    },
    "agent_terms": {
      "cycle": "iso_week",
      "fingerprint_inputs": [
        "agent_terms_history:METHOD"
      ],
      "title": "Agent terms: what agent services promise and charge",
      "versions": [
        {
          "additions": [
            {
              "basis": "founder request data2-ondemand-census (PR #797)",
              "date_utc": "2026-10-02T18:00:00Z",
              "what": "Rows from hosts the Observatory reads because an outside caller asked about them are kept with cohort 'requested_hosts' (their change entries are marked the same way) and are left out of the weekly aggregates and change counts, which report them beside the figures as requested_hosts_not_counted. No such rows existed before, so no earlier row or published figure is read differently and no overlap is needed."
            }
          ],
          "change_kind": "initial",
          "fingerprint": "24e60dd76f84dc9543837ec023e48ed3747b7a7cef72e145224f8d881e77925d",
          "from_basis": "commit 13b6e28 (four long-run datasets)",
          "from_utc": "2026-10-01T20:49:42Z",
          "version": "v1",
          "what_changed": "First version: rate limits, uptime/SLA, retention, terms and privacy links, x402 prices declared in documents GAIP reads, beside what GAIP observed of the host that week."
        }
      ]
    },
    "ai_permissions": {
      "cycle": "iso_week",
      "fingerprint_inputs": [
        "ai_permission_history:METHOD",
        "robots_rfc9309:MATCHER_VERSION"
      ],
      "title": "AI permissions: what a site tells AI systems they may do with its content",
      "versions": [
        {
          "additions": [
            {
              "basis": "commit 086842e (decision #20)",
              "date_utc": "2026-10-02T01:56:25Z",
              "what": "RSL licence links and IETF Content-Usage lines and headers added as new fields. Additive: earlier rows lack them and hash exactly as before; not a change to existing fields."
            }
          ],
          "change_kind": "initial",
          "fingerprint": null,
          "from_basis": "commit 13b6e28 (four long-run datasets)",
          "from_utc": "2026-10-01T20:49:42Z",
          "known_defects": [
            {
              "affects": [
                "robots.ai_tokens",
                "robots.wildcard_home_allowed"
              ],
              "detail": "urllib.robotparser ignores * and $ in rules and applies the first matching rule instead of the longest, so whether a named crawler may fetch the home page may be wrong for sites using such rules. Rows observed before the v2 cutover are left out of published shares.",
              "excluded_from_published_shares": true,
              "flag": "known defect: wildcard robots rules",
              "id": "wildcard_robots_rules"
            }
          ],
          "version": "v1",
          "what_changed": "First version: robots.txt rules for 24 named AI crawlers and assistants (named, home page allowed), * home page allowed, Content-Signal lines, the file fingerprint, TDMRep and TDM-Reservation, llms.txt where read anyway. robots.txt was parsed with Python's urllib.robotparser."
        },
        {
          "additions": [
            {
              "basis": "founder request data2-ondemand-census (PR #797)",
              "date_utc": "2026-10-02T18:00:00Z",
              "what": "Rows from hosts the Observatory reads because an outside caller asked about them are kept with cohort 'requested_hosts' (their change entries are marked the same way) and are left out of the weekly aggregates and change counts, which report them beside the figures as requested_hosts_not_counted. No such rows existed before, so no earlier row or published figure is read differently and no overlap is needed."
            }
          ],
          "change_kind": "parser",
          "fingerprint": "0619516474212b947b85c882a452c9c59f5617cb5937b81a48f2ed649d65ae5f",
          "from_basis": "founder-set cutover for PR #784 (merged 13:05 UTC); rows observed before 14:00 UTC are read as v1",
          "from_utc": "2026-10-02T14:00:00Z",
          "overlap": null,
          "overlap_note": "Not run: this change predates the overlap rule and fixed a defect; pre-fix rows are flagged and left out of published shares instead.",
          "version": "v2",
          "what_changed": "robots.txt parsed by GAIP's RFC 9309 matcher (agent_economy/gaip/robots_rfc9309.py). The first change entry per host whose robots.txt bytes did not change but whose parsed rules did is labelled method_change:robots_rfc9309; entries written before that labelling existed are counted as method_boundary:robots_rfc9309_unverified."
        }
      ]
    },
    "capability_record": {
      "cycle": "iso_week",
      "fingerprint_inputs": [
        "capability_record:SCHEMA_VERSION"
      ],
      "title": "Capability record: what public MCP servers and A2A agents declared",
      "versions": [
        {
          "additions": [
            {
              "basis": "founder request data2-ondemand-census (PR #797)",
              "date_utc": "2026-10-02T18:00:00Z",
              "what": "Scope addition, not a change to existing rows or figures: hosts an outside caller asked about (source 'requested', cohort 'requested') are observed in the census on the same rules. They are outside the 2026-10 panel, the quarterly random sample, the weekly coverage figure, the standards probes and every per-target public view, so every figure published before keeps its meaning; they are counted beside the figures. No overlap is needed: no earlier row or published aggregate is read differently."
            }
          ],
          "change_kind": "initial",
          "fingerprint": "b3e23ba4b9960349f05a83853d656578a433e36cd87dfd28c00c980b01241e4c",
          "from_basis": "commit c8a6fd6 (capability record, 2026-10 reference panel)",
          "from_utc": "2026-10-01T16:30:26Z",
          "version": "v1",
          "what_changed": "First version: tool names, description hashes and excerpts, input-schema hashes, behaviour hints, A2A card fields, change classes per change-log entry."
        }
      ]
    },
    "client_behaviour": {
      "cycle": "iso_week",
      "fingerprint_inputs": [
        "agent_client_behaviour:METHOD",
        "robots_rfc9309:MATCHER_VERSION"
      ],
      "title": "Client behaviour at GAIP's own surfaces, by client family",
      "versions": [
        {
          "change_kind": "initial",
          "fingerprint": null,
          "from_basis": "commit 13b6e28 (four long-run datasets)",
          "from_utc": "2026-10-01T20:49:42Z",
          "known_defects": [
            {
              "affects": [
                "requests_to_disallowed_paths",
                "disallowed_after_reading_robots_txt"
              ],
              "detail": "A missing import meant requests to paths GAIP's robots.txt disallows were never counted (always 0) before PR #784.",
              "excluded_from_published_shares": false,
              "flag": "known defect: disallowed-path counter not counted",
              "id": "disallowed_path_counter_missing"
            }
          ],
          "version": "v1",
          "what_changed": "First version: requests, sessions, robots.txt read first, Retry-After after 429, payment header after 402, MCP protocol versions, retry storms."
        },
        {
          "change_kind": "parser",
          "fingerprint": "f0ee38580be31e7be9e473c36e017d3fa03f9d23e92c894bb065aba7d197a01a",
          "from_basis": "founder-set cutover for PR #784 (merged 13:05 UTC)",
          "from_utc": "2026-10-02T14:00:00Z",
          "overlap": null,
          "overlap_note": "Not run: this change predates the overlap rule and fixed a defect.",
          "version": "v2",
          "what_changed": "GAIP's own robots.txt matched with the RFC 9309 matcher, and the disallowed-path counters counted (discovery_surfaces.robots_txt)."
        }
      ]
    },
    "erc8004_cards": {
      "cycle": "iso_week",
      "fingerprint_inputs": [
        "erc8004_card_archive:METHOD"
      ],
      "title": "ERC-8004 card archive (off until switched on)",
      "versions": [
        {
          "change_kind": "initial",
          "fingerprint": "889c553ffed4979224e584a697b30942992f40b8fcec5a03bcbe4757fba7a7aa",
          "from_basis": "commit 086842e (decision #20); no rows until GAIP_ERC8004_ARCHIVE=1",
          "from_utc": "2026-10-02T01:56:25Z",
          "version": "v1",
          "what_changed": "First version: per ERC-8004 agent and ISO week, agentURI kind, host and hash, the registration file's hash and a short excerpt, declared services; never an owner or wallet address."
        }
      ]
    },
    "outcome_ledger": {
      "cycle": "month",
      "fingerprint_inputs": [
        "outcome_ledger:SCHEMA_VERSION"
      ],
      "title": "Outcome ledger: monthly counts of what happened in agent work GAIP saw",
      "versions": [
        {
          "change_kind": "initial",
          "fingerprint": "102326364539cfa6a569e0f221664b47bb19b0aae26d07c0fd53371b1f19c3ee",
          "from_basis": "commit f2ec336 (outcome ledger); the first row covers October 2026",
          "from_utc": "2026-10-01T18:36:12Z",
          "version": "v1",
          "what_changed": "First version: one frozen, chained row per ended month for outside callers (delivery verdicts, dispute bundles, SLA breaches, receipts, failed protocol calls)."
        }
      ]
    },
    "outcome_research_ledger": {
      "cycle": "month",
      "fingerprint_inputs": [
        "outcome_research_ledger:SCHEMA_VERSION"
      ],
      "title": "Research ledger: monthly failure types and research-consented outcomes",
      "versions": [
        {
          "change_kind": "initial",
          "fingerprint": "5201414637c02deedfb64a6bdd3ea34e35921d2abcd5ac1a4ac9d4210ac77b6b",
          "from_basis": "commit 086842e (decision #20); the first row covers October 2026",
          "from_utc": "2026-10-02T01:56:25Z",
          "version": "v1",
          "what_changed": "First version: front-door diagnoses by class and protocol, and Witness delivery checks by callers who passed research_consent: true, cells under 5 folded."
        }
      ]
    },
    "shop_panel": {
      "cycle": "iso_week",
      "fingerprint_inputs": [
        "shop_panel:SCHEMA_VERSION",
        "shop_panel:METHOD",
        "robots_rfc9309:MATCHER_VERSION"
      ],
      "title": "Agentic-commerce shop panel",
      "versions": [
        {
          "change_kind": "initial",
          "fingerprint": null,
          "from_basis": "commit f2ec336 (outcome ledger and shops-2026-10 panel)",
          "from_utc": "2026-10-01T18:36:12Z",
          "known_defects": [
            {
              "affects": [
                "robots.ai_bots",
                "robots.wildcard_home_allowed"
              ],
              "detail": "urllib.robotparser ignores * and $ in rules and applies the first matching rule instead of the longest, so the parsed robots facts may be wrong for sites using such rules. The file fingerprint (robots.f) and the other facts are not affected.",
              "excluded_from_published_shares": true,
              "flag": "known defect: wildcard robots rules",
              "id": "wildcard_robots_rules"
            }
          ],
          "version": "v1",
          "what_changed": "First version: weekly light checks (robots.txt AI-crawler rules for the home page and a fingerprint, discovery documents) and full checks of 2 fixed products. robots.txt was parsed with Python's urllib.robotparser."
        },
        {
          "change_kind": "parser",
          "fingerprint": "484ff39c1e6583a98a2f6c16c9dca70325a591cb44e358bfbdc6030d680669e8",
          "from_basis": "founder-set cutover for PR #784 (merged 13:05 UTC); rows observed before 14:00 UTC are read as v1",
          "from_utc": "2026-10-02T14:00:00Z",
          "overlap": null,
          "overlap_note": "Not run: this change predates the overlap rule and fixed a defect; pre-fix robots facts are flagged and left out of published shares instead.",
          "version": "v2",
          "what_changed": "robots.txt parsed by GAIP's RFC 9309 matcher (agent_economy/gaip/robots_rfc9309.py: * and $, longest match, exact product tokens). The first change entry per shop whose robots.txt bytes did not change but whose parsed rules did is labelled method_change:robots_rfc9309."
        }
      ]
    }
  },
  "from_basis_note": "Unless stated otherwise, a version's from_utc is the time (UTC) of the commit that added the code; rows were first written after the next deploy.",
  "meaning": "For each long-run dataset GAIP keeps: each method version, when it took effect, what changed and any known defect of an earlier version. Rows are never rewritten or deleted when a method changes; a row is read under the version in force when it was observed, and rows with a defect marked excluded_from_published_shares are left out of published figures. Facts observed at the stated times; not an assessment of any party.",
  "method_doc": "https://github.com/tjcgraham-rgb/-gaip-agent-to-art-prototype/blob/main/agent_economy/docs/observatory-method-v1.md#2g-method-versions-and-the-overlap-rule-since-2-october-2026",
  "overlap_rule": {
    "applies_to_changes_from_utc": "2026-10-03T00:00:00Z",
    "enforced_by": "agent_economy/gaip/dataset_methods.py (validate, stale_fingerprints) and agent_economy/tests/test_data2_method_changelog_v1.py",
    "rule": "A parser, field or scope change runs the old and the new method side by side for at least one collection cycle (an ISO week for weekly datasets, a month for monthly ledgers) before the new values are published. The new version declares that overlap (dates, number of cycles, what was compared) here, and its from_utc is not before the overlap ends. Wording-only changes need no overlap."
  },
  "schema_version": "gaip.dataset-methods.v1",
  "title": "GAIP dataset methods: versions and changes",
  "url": "/v1/free/observatory/methods"
}