{
  "schema_version": 1,
  "collection": "findings",
  "generated_at": "2026-08-03",
  "source": "https://gxplex.com",
  "notice": "Reports the published status of regulatory documents. No advice or interpretation.",
  "source_terms": "This site compiles publicly available regulatory information. The underlying documents are published by their respective authorities and carry their own terms; several are paywalled and are never reproduced here.",
  "count": 21,
  "items": [
    {
      "id": "ai-agent-blocks",
      "finding_type": "crawlability",
      "headline": "16 source(s) return HTTP 200 to a browser and a non-200 to an AI-agent user-agent",
      "value": "16",
      "method": "Count of sources where the browser user-agent received HTTP 200 and the AI-agent user-agent did not, on the same URL, seconds apart. This records the observed responses only, and only for hosts whose robots.txt does not refuse that agent.",
      "computed_at": "2026-08-02",
      "instruments_involved": [
        "astm-e2363",
        "astm-e2500",
        "astm-e2537",
        "fda-ai-guidance",
        "fda-aiml-device-list",
        "fda-cdrh-aiml",
        "fda-csa",
        "fda-data-integrity",
        "fda-device-cybersecurity",
        "fda-etp",
        "fda-guidance-agenda",
        "fda-part-11-scope",
        "fda-pccp",
        "fda-process-analytical-framework",
        "fda-software-validation",
        "who-annex5-data-management"
      ],
      "superseded_by": null
    },
    {
      "id": "ai-agent-declared-exclusions",
      "finding_type": "crawlability",
      "headline": "7 source(s) name an AI agent in robots.txt and disallow it from the whole site",
      "value": "7",
      "method": "Count of sources whose robots.txt carries a group naming an AI agent with `Disallow: /`. Read from the publisher's own file, identifying as this archive. No request is sent to a host that refuses the agent by name.",
      "computed_at": "2026-08-03",
      "instruments_involved": [
        "iec-62443",
        "ieee-7000",
        "ispe-gamp-ai",
        "ispe-gamp5-2e",
        "ispe-pharma-4-0",
        "who-ai-health",
        "who-computerised-systems"
      ],
      "superseded_by": null
    },
    {
      "id": "api-sources",
      "finding_type": "archive",
      "headline": "11 of 11 declared API sources observed",
      "value": "11",
      "method": "Count of declared API sources with at least one observation recorded. A source requiring a credential that is not configured is recorded as unobserved on every run rather than omitted, so the gap is visible in the series instead of resembling an empty result.",
      "computed_at": "2026-08-03",
      "instruments_involved": [
        "openfda-drug-enforcement",
        "openfda-device-enforcement",
        "openfda-device-recall",
        "federal-register-ai",
        "federal-register-part11",
        "eurlex-ai-act-metadata",
        "regulations-gov-comments",
        "eudragmdp-noncompliance",
        "fda-warning-letters",
        "nando-notified-bodies",
        "eu-ai-act-sandboxes"
      ],
      "superseded_by": null
    },
    {
      "id": "browser-blocked",
      "finding_type": "crawlability",
      "headline": "3 source(s) return HTTP 200 to an AI-agent user-agent and a non-200 to a browser",
      "value": "3",
      "method": "The inverse of the preceding finding, recorded from the same two probes.",
      "computed_at": "2026-08-02",
      "instruments_involved": [
        "ispe-gamp-ai",
        "ispe-gamp5-2e",
        "ispe-pharma-4-0"
      ],
      "superseded_by": null
    },
    {
      "id": "committee-scope-quoted",
      "finding_type": "committee",
      "headline": "3 of 6 recorded committees have a scope quoted from their charter",
      "value": "3",
      "method": "Count of body records carrying a non-empty scope. Scope must be the charter's own words; a charter that cannot be retrieved yields no scope rather than a paraphrase.",
      "computed_at": "2026-08-03",
      "instruments_involved": [],
      "superseded_by": null
    },
    {
      "id": "crawlability",
      "finding_type": "crawlability",
      "headline": "56 of the 86 sources probed for crawlability return the document to a standard HTTP client (86 instruments are tracked in total)",
      "value": "56",
      "method": "Each source URL is requested twice: once with a desktop browser user-agent and once with an AI-agent user-agent. `yes` means at least one request returned HTTP 200 with 600 or more characters of extractable text. No judgment about the publisher is expressed or implied.",
      "computed_at": "2026-08-03",
      "instruments_involved": [],
      "superseded_by": null
    },
    {
      "id": "days-in-status",
      "finding_type": "corpus",
      "headline": "Longest interval between a recorded status date and today: fda-software-validation, 10,647 days",
      "value": "10647",
      "method": "For each verified instrument, the number of days from the date the SOURCE states for its status to today. This measures the age of the regulatory fact, NOT how long this archive has observed it — the observation series is far younger and its length is reported separately. No weighting is applied.",
      "computed_at": "2026-08-03",
      "instruments_involved": [
        "astm-e2363",
        "astm-e2500",
        "astm-e2537",
        "ema-ai-reflection",
        "eu-ai-act",
        "eu-gmp-annex-15",
        "eu-ivdr",
        "eu-mdr",
        "fda-software-validation",
        "health-canada-ml",
        "ich-e6r3",
        "mhra-data-integrity",
        "nist-csf",
        "us-21-cfr-part-11",
        "who-ai-health"
      ],
      "superseded_by": null
    },
    {
      "id": "instruments-per-committee",
      "finding_type": "committee",
      "headline": "13 of 86 tracked instruments name a producing committee",
      "value": "13",
      "method": "Count of distinct instrument ids appearing in the produces list of any body record, intersected with the tracked corpus. Counting only: a committee producing more tracked instruments is not a more important committee.",
      "computed_at": "2026-08-03",
      "instruments_involved": [
        "iso-iec-22989",
        "iso-iec-23894",
        "iso-iec-24028",
        "iso-iec-38507",
        "iso-iec-42001",
        "iso-iec-42005",
        "iso-iec-5259",
        "iso-iec-sc42-programme",
        "pics-pi041",
        "pren-18229-1",
        "pren-18229-2",
        "pren-18281"
      ],
      "superseded_by": null
    },
    {
      "id": "instruments-without-committee",
      "finding_type": "committee",
      "headline": "73 tracked instruments name no producing committee",
      "value": "73",
      "method": "Count of tracked instruments not appearing in any body produces list. States a gap in this archive's committee coverage; it is not evidence that no committee produced the document.",
      "computed_at": "2026-08-03",
      "instruments_involved": [
        "anvisa-ai",
        "astm-e2363",
        "astm-e2500",
        "astm-e2537",
        "cen-jtc21-programme",
        "ema-ai-reflection",
        "ema-annex11-concept-paper",
        "ema-ct-computerised-systems",
        "ema-pics-annex15-concept",
        "ema-pics-data-integrity-concept",
        "ema-work-programme",
        "eu-ai-act"
      ],
      "superseded_by": null
    },
    {
      "id": "link-rot",
      "finding_type": "observation",
      "headline": "0 source URL(s) retrievable at first observation and not at the last",
      "value": "0",
      "method": "Count of instruments whose most recent observation recorded fetch_method=blocked and which had at least one earlier observation with fetch_method=direct. Sources blocked from the first observation are not counted as rot.",
      "computed_at": "2026-08-03",
      "instruments_involved": [],
      "superseded_by": null
    },
    {
      "id": "median-days-in-status",
      "finding_type": "corpus",
      "headline": "Median days in current status: 1620",
      "value": "1620",
      "method": "Median of (today − status_as_of) in days, over instruments with a verified status and a recorded status date.",
      "computed_at": "2026-08-03",
      "instruments_involved": [
        "astm-e2363",
        "astm-e2500",
        "astm-e2537",
        "ema-ai-reflection",
        "eu-ai-act",
        "eu-gmp-annex-15",
        "eu-ivdr",
        "eu-mdr",
        "fda-software-validation",
        "health-canada-ml",
        "ich-e6r3",
        "mhra-data-integrity",
        "nist-csf",
        "us-21-cfr-part-11",
        "who-ai-health"
      ],
      "superseded_by": null
    },
    {
      "id": "observation-days",
      "finding_type": "archive",
      "headline": "7 days of continuous observation across 104 observed sources (86 instruments tracked)",
      "value": "7",
      "method": "Count of calendar days from the first recorded observation to today, inclusive. Every tracked instrument is fetched and hashed on every run, including runs where nothing changed. The observed-source count exceeds the tracked count because observation records for instruments since removed from scope are retained rather than deleted — the series is not broken by a scope decision.",
      "computed_at": "2026-08-03",
      "instruments_involved": [],
      "superseded_by": null
    },
    {
      "id": "provisions-tracked",
      "finding_type": "corpus",
      "headline": "26 provision(s) tracked at article or section level; 0 with an applicability date still in the future",
      "value": "26",
      "method": "Count of records in the provisions collection, and of those whose recorded applicability_date is later than today. Applicability is recorded per provision because instruments phase in across years and a single instrument-level date would be wrong for most of their articles.",
      "computed_at": "2026-08-03",
      "instruments_involved": [],
      "superseded_by": null
    },
    {
      "id": "revisions-by-class",
      "finding_type": "observation",
      "headline": "Detected revisions: 35 method transition, 3 silent revision, 3 relocation, 1 status change",
      "value": "{\"method_transition\": 35, \"silent_revision\": 3, \"relocation\": 3, \"status_change\": 1}",
      "method": "Count of records in the revisions collection by `change_class`. A revision is recorded when the SHA-256 of an instrument's normalised text differs from the previous observation.",
      "computed_at": "2026-08-01",
      "instruments_involved": [],
      "superseded_by": null
    },
    {
      "id": "robots-unreadable",
      "finding_type": "crawlability",
      "headline": "40 of 86 sources publish no robots policy this archive can read",
      "value": "40",
      "method": "Count of sources whose /robots.txt could not be retrieved, or returned a body that is not a robots file, when requested with this archive's own user-agent. A policy that cannot be confirmed is not a permission: no agent probe is sent to these hosts.",
      "computed_at": "2026-08-03",
      "instruments_involved": [
        "cen-jtc21-programme",
        "eu-ai-act",
        "eu-cyber-resilience-act",
        "eu-ivdr",
        "eu-mdr",
        "eu-nis2",
        "ich-e6r3",
        "ich-q12",
        "ich-q13",
        "ich-q14",
        "ich-q2r2",
        "ich-q9r1",
        "iec-62304",
        "imdrf-aiml-wg",
        "imdrf-samd",
        "iso-13485",
        "iso-14971",
        "iso-iec-22989",
        "iso-iec-23894",
        "iso-iec-24028",
        "iso-iec-27001",
        "iso-iec-27002",
        "iso-iec-27017",
        "iso-iec-27018",
        "iso-iec-38507",
        "iso-iec-42001",
        "iso-iec-42005",
        "iso-iec-5259",
        "iso-iec-sc42-programme",
        "nist-ai-rmf-playbook",
        "nist-csf",
        "nist-sp-800-82",
        "nmpa-ai",
        "pmda-ai",
        "pren-18229-1",
        "pren-18229-2",
        "pren-18281",
        "pren-18282",
        "swissmedic-ai",
        "tga-samd"
      ],
      "superseded_by": null
    },
    {
      "id": "silent-revisions",
      "finding_type": "observation",
      "headline": "3 silent revision(s): content changed with no declared version or date change",
      "value": "3",
      "method": "Count of revisions where the normalised text hash changed and no version identifier or declared date differed between the two observations. Version identifiers are matched by pattern in the normalised text.",
      "computed_at": "2026-08-01",
      "instruments_involved": [],
      "superseded_by": null
    },
    {
      "id": "standards-progression",
      "finding_type": "standards",
      "headline": "14 standard(s) tracked by lifecycle stage; 8 with a confirmed stage",
      "value": "14",
      "method": "Count of instruments with at least one standards-progression record. Stage codes are published openly by ISO, CEN/CENELEC and ICH even where the standard's text is paywalled, so progression is observable without reproducing any restricted text.",
      "computed_at": "2026-08-03",
      "instruments_involved": [
        "ich-q12",
        "ich-q13",
        "ich-q14",
        "ich-q2r2",
        "ich-q9r1",
        "iso-iec-23894",
        "iso-iec-42001",
        "ispe-gamp-ai",
        "ispe-gamp5-2e",
        "pic-s",
        "pren-18229-1",
        "pren-18229-2",
        "pren-18281",
        "pren-18282"
      ],
      "superseded_by": null
    },
    {
      "id": "status-distribution",
      "finding_type": "corpus",
      "headline": "Status across the tracked corpus: 38 final, 33 unknown, 10 in-force, 3 draft, 2 withdrawn",
      "value": "{\"unknown\": 33, \"final\": 38, \"in-force\": 10, \"draft\": 3, \"withdrawn\": 2}",
      "method": "Count of instruments by the `status` field, as recorded after human verification against the primary source. Instruments never verified are counted as `unknown`.",
      "computed_at": "2026-08-03",
      "instruments_involved": [],
      "superseded_by": null
    },
    {
      "id": "tier1-coverage",
      "finding_type": "corpus",
      "headline": "35 of 40 declared tier-1 documents are tracked; 32 carry a verified status",
      "value": "35",
      "method": "Count of documents named in sources/tier1-declared.yaml that appear in the tracked corpus at tier 1, and how many of those carry a status confirmed against a primary source. The declared list is a judgement about what belongs and is published so it can be disputed. Both figures are counts.",
      "computed_at": "2026-08-03",
      "instruments_involved": [
        "ema-qig",
        "fda-dhcoe",
        "ich-q10",
        "ich-q11",
        "ich-q8"
      ],
      "superseded_by": null
    },
    {
      "id": "tier1-undeclared",
      "finding_type": "corpus",
      "headline": "17 instrument(s) tracked at tier 1 but not named in the declared list",
      "value": "17",
      "method": "Count of instruments carrying tier 1 whose id does not appear in sources/tier1-declared.yaml. Either the list is out of date or the tier assignment is. Both are gaps in this archive's own record-keeping, reported rather than reconciled silently.",
      "computed_at": "2026-08-03",
      "instruments_involved": [
        "ema-annex11-concept-paper",
        "ema-ct-computerised-systems",
        "ema-pics-annex15-concept",
        "ema-pics-data-integrity-concept",
        "eu-cyber-resilience-act",
        "eu-gmp-annex-15",
        "eu-gmp-chapter-4",
        "eu-nis2",
        "fda-device-cybersecurity",
        "fda-ema-good-ai-practice",
        "fda-part-11-scope",
        "fda-process-analytical-framework",
        "fda-software-validation",
        "mhra-data-integrity",
        "pics-annex-11",
        "us-21-cfr-part-211",
        "who-annex5-data-management"
      ],
      "superseded_by": null
    },
    {
      "id": "total-observations",
      "finding_type": "archive",
      "headline": "621 observations recorded",
      "value": "621",
      "method": "Count of distinct instrument-days observed: one per source per calendar day on which a record was written, whether or not the content changed. The store holds 4255 raw records across those days, because the loop can run more than once in a day.",
      "computed_at": "2026-08-03",
      "instruments_involved": [],
      "superseded_by": null
    }
  ]
}