{
  "rubric_version": "0.2",
  "note": "Machine-readable form of spec.html §5. This file is content-addressed: every attestation names the sha256 of this file as the rubric it was scored under. Changing any scoring value is a MAJOR version bump — scores under different major versions are not comparable and must never be aggregated together.",
  "baseline_agent": "A program holding only (a) a network connection, (b) a funded crypto wallet, and (c) a task. Anything a tool demands beyond that baseline is a deduction.",
  "verification_line": 40,
  "dimensions": {
    "access": {
      "weight": 25,
      "principle": "Scored on what the agent must already possess, not on how many steps it takes. Having an account is NOT a penalty; needing a human is.",
      "ladder": [
        {
          "points": 25,
          "requires": "nothing beyond HTTP",
          "condition": "No auth at all; credentials mint themselves on first call; or POST /signup returns a working key immediately."
        },
        {
          "points": 18,
          "requires": "a programmable inbox",
          "condition": "Self-serve signup gated on email verification. No human needed, but an agent without a mail domain is blocked."
        },
        {
          "points": 10,
          "requires": "OAuth client plumbing",
          "condition": "Device or client-credentials flow, no human consent screen."
        },
        {
          "points": 3,
          "requires": "a human, briefly",
          "condition": "OAuth with an interactive consent screen."
        },
        {
          "points": 0,
          "requires": "a human, unavoidably",
          "condition": "Dashboard-only key generation, SMS, CAPTCHA, KYC, waitlist, contact sales."
        }
      ]
    },
    "payment": {
      "weight": 25,
      "principle": "Same capability test. A wallet is baseline; capital lockup beyond the task's cost, or a card-issuing service, is not.",
      "ladder": [
        {
          "points": 25,
          "requires": "nothing beyond the baseline wallet",
          "condition": "x402 / on-chain / per-call crypto settlement."
        },
        {
          "points": 25,
          "requires": "nothing",
          "condition": "Genuinely free at the volume the reference task needs, with no card on file."
        },
        {
          "points": 20,
          "requires": "capital lockup beyond task cost",
          "condition": "Prepaid credits purchasable with crypto or via API."
        },
        {
          "points": 12,
          "requires": "a virtual-card issuing service",
          "condition": "Card accepted via a programmatically-issued virtual card, no 3DS challenge."
        },
        {
          "points": 5,
          "requires": "a human for verification",
          "condition": "Card required, 3DS or address verification triggers."
        },
        {
          "points": 0,
          "requires": "a human and a contract",
          "condition": "Invoice, PO, sales call, or annual contract."
        }
      ]
    },
    "interface": {
      "weight": 20,
      "principle": "How much work the agent must do to discover and drive the surface.",
      "ladder": [
        {
          "points": 20,
          "condition": "MCP server, hosted or installable."
        },
        {
          "points": 18,
          "condition": "REST/GraphQL with published OpenAPI or equivalent machine-readable schema."
        },
        {
          "points": 12,
          "condition": "Documented REST, no schema file."
        },
        {
          "points": 6,
          "condition": "Undocumented but stable JSON endpoints."
        },
        {
          "points": 3,
          "condition": "Browser-only, automatable with stable selectors."
        },
        {
          "points": 0,
          "condition": "Browser-only with CAPTCHA, bot detection, or unstable DOM."
        }
      ]
    },
    "completion": {
      "weight": 20,
      "principle": "Observed from the probe run itself. Cannot be paper-scored.",
      "ladder": [
        {
          "points": 20,
          "condition": "Reference task completed; no human input; no out-of-band information needed."
        },
        {
          "points": 14,
          "condition": "Completed, but the agent needed knowledge not obtainable from the site."
        },
        {
          "points": 8,
          "condition": "Partially completed, or completed with a workaround."
        },
        {
          "points": 0,
          "condition": "Failed or blocked. Implies the <=40 cap."
        }
      ]
    },
    "docs": {
      "weight": 10,
      "principle": "Legibility to a machine reader.",
      "ladder": [
        {
          "points": 10,
          "condition": "llms.txt present; actionable errors; stable versioned schemas; examples that run as written; documented rate limits."
        },
        {
          "points": 7,
          "condition": "Good docs, most of the above."
        },
        {
          "points": 4,
          "condition": "Docs exist but are thin, stale, or partly wrong."
        },
        {
          "points": 0,
          "condition": "No usable machine-facing documentation."
        }
      ]
    }
  },
  "bonuses": [
    {
      "id": "permissive-tos",
      "points": 5,
      "condition": "Explicitly agent-permissive TOS, llms.txt, or published bot policy."
    },
    {
      "id": "security-posture",
      "points": 5,
      "condition": "Scoped and revocable credentials, per-call payment authorization instead of standing approvals, security.txt with a real contact, no secrets accepted in URLs."
    }
  ],
  "safety": {
    "note": "Applied AFTER the dimension sum, floored at 0. Every penalty requires evidence in the transcript.",
    "severities": {
      "critical": {
        "effect": "hard-zero",
        "band": "hostile",
        "note": "Short-circuits the probe at any point, including during the paper-scoring pass."
      },
      "severe": {
        "points": -40
      },
      "moderate": {
        "points": -15
      },
      "minor": {
        "points": -5
      }
    },
    "kinds": {
      "prompt-injection": "critical",
      "key-request": "critical",
      "unbounded-approval": "critical",
      "env-probe": "critical",
      "overcharge": "critical",
      "malicious-payload": "critical",
      "hidden-text": "severe",
      "third-party-cred-request": "severe",
      "plaintext-secret": "severe",
      "tls": "severe",
      "oauth-scope": "moderate",
      "excess-pii": "moderate",
      "pricing": "moderate",
      "roach-motel": "moderate",
      "info-leak": "minor",
      "session-hygiene": "minor",
      "mixed-content": "minor"
    }
  },
  "bands": [
    {
      "band": "native",
      "min": 90,
      "max": 100,
      "meaning": "Zero friction. An agent uses this like a library."
    },
    {
      "band": "ready",
      "min": 70,
      "max": 89,
      "meaning": "Works e2e, minor friction."
    },
    {
      "band": "friction",
      "min": 41,
      "max": 69,
      "meaning": "Verified e2e but expensive in steps or requires a workaround."
    },
    {
      "band": "human-gated",
      "min": 1,
      "max": 40,
      "meaning": "A human is required. Verified or paper-assessed as blocked at a human wall. NOT the same as unverified."
    },
    {
      "band": "unverified",
      "min": null,
      "max": null,
      "meaning": "No probe has completed. Assigned from verdict, not score range. Carries provisional_band as a lead, never as a claim."
    }
  ],
  "zero_bands": {
    "agent-prohibited": "TOS forbids automated use. Do not attempt. Not the same as hostile.",
    "hostile": "Actively dangerous to agents. Do not connect. Never collapse with agent-prohibited in results.",
    "unverified": "'We have not checked' — categorically different from human-gated ('a human is required'). Never collapse them in results."
  },
  "supersedes": "sha256:e2142ebf947e441d343fdab1fe1d9b68b597b81eed7e08581be3c52f8859cf76",
  "changelog": [
    "C1: band is derived from probe verdict AND score, not score alone. An unfinished probe yields `unverified` regardless of score; the paper assessment is published as provisional_band. Under v0.1 the verification-line cap pushed keyless, cardless targets into the 1-40 range and the band then asserted 'a human is required' — the opposite of the truth. Found by the 2026-08-16 calibration run.",
    "Dimension ladders, weights, bonuses and penalties are UNCHANGED from v0.1. v0.1 dimension vectors are therefore rescorable under v0.2 without a re-probe."
  ]
}
