---
title: The retrieval log — every fetch, including the failures
description: "Twenty-one named retrievals plus a 49-request sample, each with the sha256 of the response bytes, the UTC timestamp and the outcome. The refusals are rows, not absences."
lead: "The rule: write the raw response bytes to disk unmodified, hash **those** bytes, and log before parsing anything. A node that cannot name the bytes it came from is an assertion, not a retrieval."
order: 3
toc: false
wide: true
---

Every number on this site derives from these bytes. Nothing on any page here is fetched at read time — the site makes no network call at all — so this log is the only thing standing between a published figure and an unsupported one.

{{retrievals}}

## The failures, and why they are rows

Three responses here are not `200`, and they are the useful ones.

| Row | What it means |
|---|---|
| `404` on `/v1/laws/records/us/ca.json` | The path separator in the law corpus is `--`, not `/` — the same convention the entity detail endpoint uses. A guess, logged as a guess, then corrected to `us--ca.json` |
| `404` on `/v1/cgj/counties/us--ca--santa-barbara.json` | The CGJ corpus is keyed by bare county code (`santa-barbara`), not by entity slug. Two identifier schemes for the same county, in one API |
| `401` on `/v1/ai-laws/index.json` | Blocker **B2**. A key arrived while this report was being written and **the row above is the last anonymous one** — the corpus was then read {{claim:ai-laws-gated}} |

Recording a refusal as an entry rather than leaving it as an absence is the point: a reader can see what was tried, what was declined, and that a shortcut existed and was not taken.

## The 49-request sample

The coverage sample's per-request log is not inlined above — 49 near-identical detail fetches would drown the page — but it is complete and downloadable:

- [`computation-1-sample-retrievals.tsv`](/files/computation-1-sample-retrievals.tsv) — timestamp, status, sha256 and URL for all 49

## What is not here, and why

**The AI-law corpus was read, and none of it is republished.**

Six further requests were made under the key: the index, the vocabulary, the United States record, the JSON Schema, the export manifest, and one 404 that establishes the corpus is addressed by bare slug rather than by the entity API's `--` convention. Their log rows — URL, status, byte count, `sha256` — are metadata about *our own requests* and are in the table above.

**Their content is not, and cannot be.** That corpus carries its own licence block, whose grant field reads *"No license is conveyed by receipt of this file."* {{claim:ai-laws-licence}} It is not CC BY 4.0, whatever the OpenAPI document declares at the top level. So this site describes it, [measures it](/#9-what-went-wrong), and redistributes none of it — and `tools/check_site.py` fails the build if the payload ever appears in this repository or in the vault's tree.

**This is the difference between a report and a mirror**, and it is the one place on this project where the distinction had teeth.

---

This document is released under the Creative Commons Attribution 4.0 International licence (CC BY 4.0).
