Vocabulary

A decision is what the evidence said at collection time. It is never rewritten. It carries two independent verdicts: whether the request may be made, and whether the text may be used for training.

An exclusion is a separate column applied every time an export is built. A quarantine keeps the text and stops using it. A takedown destroys it.

A signal is one contributing observation, recorded with a precedence integer and stored with the decision it contributed to.

An evidence hash covers what the origin said and nothing else. A decision hash additionally covers the engine revision, the parser versions and the outcome.

A grant is a dated, scoped, attributable permission naming an exact origin, a path prefix, a purpose, a rights basis, a reviewer and an expiry.

Policy endpoints and states

The crawler fetches six fixed paths per origin before it fetches any page. The list lives in code and does not grow per site.

absent, unavailable and wrong_content_type are three different facts. Collapsing them is how a prevalence number becomes fiction.

A markup response is never read as a policy document, whatever status code carried it. An HTML file parsed as robots.txt yields no rules, which would read as permission to crawl everything.

Precedence and conflict

Signals carry a precedence integer. Robots access sits at the bottom. Risk findings sit at the top, above even the development bypass, because a planted credential is a safety problem.

Explicit denial wins. Ambiguity resolves to review, and nothing resolves upward toward permission.

Conflicts are reported. A person resolves them, and the taxonomy names the shape of each disagreement so there is something to resolve.

Enumeration

Verdicts

allowdenyreview

Enumeration

Policy endpoints

/robots.txt/.well-known/tdmrep.json/.well-known/ai.json/.well-known/ai.txt/ai.txt/llms.txt

Enumeration

Signal kinds

robots_accessrobots_content_usagecontent_signaltdmrepai_txtai_jsonlegacy_ai_txthttp_headerhtml_metalicensemanual_grantriskbypass

Enumeration

Endpoint states

presentabsentblocked_by_robotsparse_errorwrong_content_typeunavailable

Enumeration

Conflict codes

robots_allows_but_training_deniedtdm_reserved_with_permissive_ai_policyrecognized_license_with_training_denialtraining_allowed_without_license_evidencelicense_present_but_unrecognizedwell_known_and_legacy_ai_policy_disagreellms_txt_without_ai_policypolicy_endpoint_blocked_by_robotspolicy_parse_failurepolicy_endpoint_served_as_markuprobots_unavailable

Enumeration

Drift classes

first_observationunchangedevidence_changedmore_restrictivemore_permissivemixedunavailable

Enumeration

Failure kinds

transportresponsepolicy

Allowlist

Recognised licences

Resolved from the canonical deed URL. Anything else is returned verbatim, fails the allowlist, and routes to review.

Runtime contract

Shipped defaults

SettingDefault
min_delay_seconds 2
max_delay_seconds 120
request_timeout_seconds 20
max_redirects 5
max_pages 100
max_depth 3
per_origin_request_budget unset
per_origin_byte_budget unset

Failure codes: 24, in 3 kinds. The code is the contract, and messages change. Safety invariants enforced in code: 51. Decision policy version: 2026-08-15.1.

Not implemented

A command-line tool and the files it writes. Nothing has been released, no dataset has been published, and retention periods are not set. None of this exists yet:

  • a dataset registry, and immutable dataset versions
  • propagation of a quarantine or takedown into an already published dataset
  • asymmetric export signatures
  • a reviewer workflow, recorded per-document verdicts, or two-person approval
  • language identification, as opposed to an eight-language disagreement check
  • an HTTP API, an SDK, or any hosted service
  • distributed operation, an external database, or object storage
  • cross-origin discovery and general open-web crawling
  • headless rendering and JavaScript execution

Export manifests are signed with HMAC-SHA256, which is symmetric. See Datasets for the limits of what that proves.

Verified against ethical-crawler 8d999e3, 2026-08-18.