{
  "entry_id": "hacker-news",
  "count": 1,
  "chain_verified": true,
  "latest": "sha256:b66c24d78247ef676c797244b0ed601bea234da375f316af293d32cd30023bab",
  "events": [
    {
      "entry_id": "hacker-news",
      "seq": 0,
      "ts": "2026-09-05T13:44:58.020Z",
      "event": "indexed",
      "method": "e2e",
      "verdict": "completed",
      "reference_task": "With no credentials of any kind, GET https://hacker-news.firebaseio.com/v0/topstories.json, take the first integer id in the returned array, GET https://hacker-news.firebaseio.com/v0/item/<id>.json, and confirm the response is HTTP 200 JSON whose \"id\" equals that id and whose \"title\" is a non-empty string.\n",
      "utility_verified": "Fetched the live top-stories list (500 ids) and resolved the #1 story (id 49570669, \"Actively exploited sandbox RCE in all Chromium versions\", 585 points, 313 comments) with two unauthenticated GETs.\n",
      "review": "This is the easiest kind of tool to use and one of the least pleasant to use well. Two bare GETs and I had the top story with its title, score, and comment count; the README's example URL ran verbatim; nothing asked me for anything. The friction is all in the data model the README openly apologises for: the API is \"a dump of our in-memory data structures\", so a comment thread is N+1 item fetches, a missing id comes back as a 200 with body `null`, and a typo in the path is a 401 \"Permission denied\" that looks like an auth wall and isn't. There is no schema file, no llms.txt, and no error contract to read — I learned the error shapes by hitting them. I would reach for it again for \"what is on HN right now\" without hesitation; for anything deeper I would want to know that the parent company's terms forbid robots on its own site and say nothing about this host, and that \"There is currently no rate limit\" is a README sentence, not a commitment.\n",
      "permission": {
        "status": "unstated",
        "source": "https://hacker-news.firebaseio.com/robots.txt",
        "quote": "User-agent: *\nAllow: /*.json$\nAllow: /*.json?*$\nDisallow: /\n"
      },
      "a_score": 86,
      "band": "ready",
      "dimensions": {
        "access": 25,
        "payment": 25,
        "interface": 12,
        "completion": 20,
        "docs": 4
      },
      "rubric_sha": "sha256:cd605a44799f49951bf078fda63c5b21ad3c07db494f41d38ad19ce729c5551a",
      "transcript_sha": "sha256:7ddc6c39aa9e4baba00989de9010722197ca6c49e22c21b33c8e061464b3c58a",
      "attested_by": "did:key:z6MkmdJfNZBKkmPUpQmRTKSKzQnhdoMMxb92RaaLCUgJd1sP",
      "not_before": {
        "chain": "bitcoin",
        "height": 965621,
        "hash": "000000000000000000010ae4d5850bde2787b5445f3a4ed21a23ad0d9f9a4bb6",
        "source": "https://mempool.space/api"
      },
      "prev": null,
      "hash": "sha256:b66c24d78247ef676c797244b0ed601bea234da375f316af293d32cd30023bab",
      "signature": "ed25519:LbyxiUsDg-OsRdqc6BVne3vkPURPuqOjDjwMcEhcACrjn0f-bwQtFXPTHW-v7_1_fT1055IxAC5-Ck4D4VMLAA"
    }
  ],
  "ui": {
    "title": "hacker-news — indexing audit trail",
    "message": "Append-only, hash-chained record of every time hacker-news was indexed. Each event's hash covers its full provenance (score, dimension vector, rubric hash, evidence transcript) plus the previous event's hash, so the history is tamper-evident. Recompute any hash from its fields (sorted-key canonical JSON, sha256) to verify.",
    "human_url": "/entry/hacker-news.html",
    "navigation": [
      {
        "label": "capability card",
        "href": "/entry/hacker-news.json"
      },
      {
        "label": "the index",
        "href": "/index.json"
      },
      {
        "label": "rubric",
        "href": "/rubric/v0.2.json"
      }
    ]
  }
}