{
  "gate": "MCP Verification Gate",
  "gate_version": "0.4.20",
  "gate_commit": "unpinned: this deployment did not inject a commit (deploy_gate.sh not used)",
  "subject": "the gate itself",
  "endpoint": "https://gate.horizonshield.dev",
  "checked_at": "2026-10-07T07:04:17.348Z",
  "status": "pending",
  "scope_note": "The gate applies its own conditions to itself. Where a condition does not apply, that is stated explicitly rather than skipped silently.",
  "checks": {
    "agent_card": {
      "pass": true,
      "reason": "agent-card published and well-formed",
      "detail": {
        "url": "https://gate.horizonshield.dev/.well-known/agent-card.json",
        "name": "MCP Verification Gate"
      }
    },
    "compensation_disclosure": {
      "pass": true,
      "reason": "compensation structure declared",
      "detail": {
        "extension_identifier": {
          "declared": [
            "https://gate.horizonshield.dev/ext/conduct/v1"
          ],
          "forms": [
            "canonical"
          ],
          "identifier": "https://gate.horizonshield.dev/ext/conduct/v1",
          "note": "declared under the canonical string"
        },
        "paid_by": "buyer",
        "referral_fee": false,
        "listing_fee": false,
        "success_fee_pct": 0,
        "disclosure_url": "https://shield.the-horizons-innovation.com/yakumo/plans/",
        "location": "both"
      }
    },
    "determinism": {
      "pass": true,
      "reason": "the published spec and verdict format are stable across reads",
      "detail": {
        "spec_sha256": "ee1ca918f62c5aad0867af3dbc229ad579646f440ff04c3a8075a74fbfa68c8b"
      }
    },
    "mcp_endpoint": {
      "pass": false,
      "measured": false,
      "reason": "not measured: this gate now speaks MCP at /mcp, so the condition applies to it. It cannot reach itself over the network from inside its own account, so it has not measured this, and it does not count an unmeasured condition as a pass. That is the same rule this gate applies to every other server it checks. Point another checker at /mcp from outside and the claim is either confirmed or destroyed.",
      "detail": {
        "applicable": true,
        "self_measured": false,
        "mcp_endpoint": "https://gate.horizonshield.dev/mcp",
        "http_endpoints": [
          "/check",
          "/is-verified",
          "/record/<record_sha256>",
          "/spec",
          "/self",
          "/health"
        ]
      }
    }
  },
  "establishes": [
    "at 2026-10-07T07:04:17.348Z this gate (commit unpinned: this deployment did not inject a commit (deploy_gate.sh not used), version 0.4.20) measured https://gate.horizonshield.dev and recorded status pending",
    "conditions passed: agent_card, compensation_disclosure, determinism; conditions failed: none",
    "every hash in this record recomputes from the bytes it names, and record_sha256 recomputes from this record with record_sha256 and recompute_note removed"
  ],
  "does_not_establish": [
    "correctness of any price, figure or answer the server returns",
    "truth of the compensation declaration; only its presence and shape are measured",
    "quality, competence or fitness of the operator or the service",
    "behaviour at instants not measured or from vantages this gate did not use",
    "conditions not measured on this instant: mcp_endpoint (unmeasured is not failed)",
    "that the measurement instant was unpredictable to the subject (coordinate not derived on this instant; the legacy computable schedule applied and is disclosed)"
  ],
  "number_safety": {
    "since": "0.4.2",
    "parse_safe": true,
    "safe_integers_only": true,
    "unsafe_integers": [],
    "non_integer_numbers": [],
    "what": "Which numbers in these bytes a second implementer might not reproduce. Two questions, not one, because the two failures are not the same size. parse_safe is the one that matters: true means unsafe_integers is empty, so no value here is destroyed by JSON.parse before any canonicalization code can run, and a reader at least sees what was written. safe_integers_only is stricter: true means both lists are empty, so every number here is an integer inside the RFC 7493 (I-JSON) safe range and a compact re-serialization with the keys in the order printed reproduces these bytes in any language at all. non_integer_numbers lists doubles: every runtime that prints the shortest form that round trips (JavaScript, Python, Go, Java and others) reaches the same characters, but a runtime that prints a fixed number of digits does not. A verdict that measures a surface normally carries one such double, the percentage in absence_vs_failure, so parse_safe true with safe_integers_only false is the ordinary state and is not a warning.",
    "why": "An integer past 2^53 is rounded by JSON.parse before any canonicalization runs, and a double can be printed more than one way. Either silently breaks the recompute recipe for some readers, and prose in the recipe cannot prevent it, because the damage happens before the reader reaches the prose. Found in public on 2026-09-09 by Federico Blanco Sanchez-Llanos, from the payments side, in an idempotency key where two different large amounts collapsed into one fingerprint.",
    "self_applied": "This is condition 07's rule, which this gate applies to every surface it measures and for which it withholds a fingerprint rather than publish one nobody could reproduce, asked of the gate's own verdict. The operator is a subject of the rule, not an exception to it.",
    "not_a_rule": "A disclosed measurement, not a pass or fail. Nothing turns red on it, and a listed number does not make a verdict wrong. It says how to check: fetch the bytes at record_url and hash them, rather than parsing and re-serializing them yourself.",
    "this_block_holds_no_number": "By construction this block contains no numeric value, so adding it to the record cannot change the answer it reports about the record."
  },
  "record_sha256": "138c6464dfb0ac1038ff3a0cc4a69a1aa0c0f8a467781c017f4db9aef24448c8",
  "recompute_note": "Remove record_sha256 and recompute_note, JSON.stringify the remainder in this key order, take the SHA-256, and it must equal record_sha256."
}