{
  "spec": "rs-ratings-browse/1",
  "record": {
    "kind": "skill",
    "id": "raw-githubusercontent-com-foundry-rs-foundryup-head-foun-5b7347806b",
    "name": "foundry-rs/foundryup",
    "area": null,
    "score": 64,
    "band": "Moderate public signals",
    "as_of": "2026-10-27T23:51:14.652Z",
    "check_version": "rs-safety-checks-2.0",
    "rating_sha256": "af12bb5fe87579919146e789cfa1c8762fcf086336ddd2295a4d973ec7ba9b7f",
    "source_url": "https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh",
    "page": "https://www.rightshold.com/ratings/skill/raw-githubusercontent-com-foundry-rs-foundryup-head-foun-5b7347806b",
    "record_page": "/ratings/browse/skill/raw-githubusercontent-com-foundry-rs-foundryup-head-foun-5b7347806b",
    "record_url": "https://www.rightshold.com/v1/ratings/browse/skill/raw-githubusercontent-com-foundry-rs-foundryup-head-foun-5b7347806b",
    "seal": {
      "seals": 1,
      "latest": {
        "seq": 5144,
        "at": "2026-11-02T02:21:43.929Z",
        "as_of": "2026-10-27T23:51:14.652Z",
        "score": 64,
        "check_version": "rs-safety-checks-2.0",
        "rating_sha256": "af12bb5fe87579919146e789cfa1c8762fcf086336ddd2295a4d973ec7ba9b7f",
        "entry_url": "https://www.rightshold.com/v1/ledger/entries/5144"
      }
    },
    "timeline": {
      "first_rated_at": "2026-10-27T23:51:14.652Z",
      "ratings_recorded": 1,
      "score_changes": 0,
      "last_changed_at": null
    },
    "drift": {
      "status": "clean",
      "versions": 1
    },
    "scan_receipt": {
      "id": "rsc_cb7dc01932ca68b4c55611f9",
      "scanned_at": "2026-10-27T23:51:14.652Z",
      "summary": "3 of 8 checks flagged",
      "ledger_seq": 1996,
      "receipt_url": "https://www.rightshold.com/resource-scans/raw-githubusercontent-com-foundry-rs-foundryup-head-foun-5b7347806b",
      "rightshold": "The rightshold on https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh — scanned 2026-10-27 · 3 of 8 checks flagged · receipt rsc_cb7dc01932ca68b4c55611f9, verify at rightshold.com/verify."
    },
    "series": [
      {
        "as_of": "2026-10-27T23:51:14.652Z",
        "score": 64,
        "band": "Moderate public signals",
        "check_version": "rs-safety-checks-2.0",
        "rating_sha256": "af12bb5fe87579919146e789cfa1c8762fcf086336ddd2295a4d973ec7ba9b7f",
        "seal_seq": 5144
      }
    ],
    "checks": [
      {
        "id": "credentials",
        "title": "Credential and environment access",
        "status": "found",
        "points": 15,
        "max": 15,
        "evidence": "The scan recorded a pass: No credential or environment access patterns were found in the scanned bytes.",
        "source": "https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh"
      },
      {
        "id": "known_bad",
        "title": "Known-bad indicators",
        "status": "found",
        "points": 15,
        "max": 15,
        "evidence": "The scan recorded a pass: None of the scanner's published known-bad indicator patterns matched the scanned bytes.",
        "source": "https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh"
      },
      {
        "id": "shell_and_download",
        "title": "Shell-outs and download-and-execute",
        "status": "not_found",
        "points": 0,
        "max": 12,
        "evidence": "The scan flagged this check: The scanned bytes contain shell-out or download patterns: shell command tools named in the bytes (curl, wget, powershell). Code that runs shell commands acts with the full permissions of whoever runs it.",
        "source": "https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh"
      },
      {
        "id": "install_hooks",
        "title": "Install and postinstall hooks",
        "status": "found",
        "points": 12,
        "max": 12,
        "evidence": "The scan recorded a pass: No install or postinstall hooks were found in the scanned bytes.",
        "source": "https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh"
      },
      {
        "id": "obfuscation",
        "title": "Obfuscation and encoded payloads",
        "status": "found",
        "points": 10,
        "max": 10,
        "evidence": "The scan recorded a pass: No obfuscation or encoded-payload signs were found in the scanned bytes.",
        "source": "https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh"
      },
      {
        "id": "network",
        "title": "Outbound network references",
        "status": "not_found",
        "points": 0,
        "max": 10,
        "evidence": "The scan flagged this check: The scanned bytes reference outbound network activity to these domains: github.com. Any resource that reaches the network can send data out as well as bring data in; the findings name what the bytes reference, and the reader decides whether that fits the resource's stated purpose.",
        "source": "https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh"
      },
      {
        "id": "permission_vs_behavior",
        "title": "Permission declarations vs behavior",
        "status": "not_found",
        "points": 0,
        "max": 10,
        "evidence": "The scan flagged this check: The bytes show network behavior, and no permissions declaration was found in the scanned bytes to compare it against.",
        "source": "https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh"
      },
      {
        "id": "provenance",
        "title": "Provenance facts (weak signals)",
        "status": "found",
        "points": 6,
        "max": 6,
        "evidence": "The scan recorded a pass: Provenance facts, labeled weak signals — they say where the bytes sit, not what the bytes do: source host: raw.githubusercontent.com; repository: foundry-rs/foundryup; bytes scanned: 12908.",
        "source": "https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh"
      }
    ],
    "rating_url": "https://www.rightshold.com/v1/ratings/skill/raw-githubusercontent-com-foundry-rs-foundryup-head-foun-5b7347806b",
    "scan_diff": null,
    "claim_block": {
      "claim": {
        "state": "no_claim_recorded"
      },
      "profile": null,
      "claim_flow": "Claim through the directory of record (rs-directory-claim/1): POST /v1/profiles/{handle}/claim-challenge, then POST /v1/profiles/{handle}/claim with the signature the challenge names — RS-KYA L1 (key-bound) or above.",
      "note": "No public directory record publishes this artifact's source address, so no claim stands against it. A claim binds through a directory record whose own published addresses name the artifact."
    },
    "counting": {
      "corpus": "The corpus is every artifact with a current rating: GitHub repositories under check version rs-safety-checks-1.0, and npm packages, PyPI packages, MCP servers and agent skills under rs-safety-checks-2.0. A skill's rating is its latest sealed resource-scan receipt, scored under the published skill check set — never a second scan. Counts are computed when the page is read, from the same records the rating pages and GET /v1/ratings read, so the total here and the total there are two reads of one corpus.",
      "seal": "Every rating shown is sealed on the public ledger as a safety.rating entry naming its score and rating hash. The seal named on each row is the latest entry for that artifact; earlier ratings stay on the ledger and in the record page's series. An entry can be read in full at its ledger entry URL.",
      "search": "Search matches a case-insensitive substring of the artifact's name, id or area. Filters name a kind, a band, a drift state or a minimum score. Search and filters change which rows are shown — never any rating, seal or count of record.",
      "ordering": "Ordering is mechanical, over sealed facts only: score (the sealed score, highest first), recent (the rating's as-of date, newest first), name (A to Z), or changes (recorded rating or byte changes, most first). Ties break by name, then kind, then id, so the order is total and stable from page to page. No ordering is sold, submitted or editorial, and no placement on this index is for sale.",
      "drift": "Drift is stated only where a drift watch exists: skill artifacts, whose ratings are resource scans — clean when every receipt names the same bytes, changed when the receipts name more than one version of the bytes or a drift event is sealed against the artifact. Registry-collected ratings (GitHub, npm, PyPI, MCP servers) carry no drift watch and read not_watched; their change record is the rating timeline, not a byte watch.",
      "timeline": "The timeline counts what is on record: for registry-collected ratings, the first rating's date, how many ratings are recorded, and how many times the recorded rating changed (a new rating hash — a re-check cannot erase an earlier rating). For skills it counts recorded scans instead: first seen, scans on record, and how many times the scanned bytes changed.",
      "diff": "Diff-since-scan exists only for skill artifacts with more than one recorded version: it names the first and current byte hashes and the scan checks whose outcome differs between the earliest and the latest receipt. Registry-collected ratings have no byte diff — their collections are metadata, not bytes — and their record shows the rating series instead.",
      "claim": "The claim block records whether a directory claim stands for this artifact. A claim binds through the directory of record (rs-directory-claim/1): a public directory profile whose own published addresses name this artifact's source address, claimed by an account that proved control of the agent's key at RS-KYA L1 or above. A claim attests key control only — it changes no rating, seal or ordering here, and the claiming account is never named."
    }
  },
  "generated_at": "2026-11-11T09:26:21.209Z"
}