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
- CC0-1.0 https://creativecommons.org/publicdomain/zero/1.0/
- CC-BY-4.0 https://creativecommons.org/licenses/by/4.0/
- CC-BY-SA-4.0 https://creativecommons.org/licenses/by-sa/4.0/
- PDM-1.0 https://creativecommons.org/publicdomain/mark/1.0/
Resolved from the canonical deed URL. Anything else is returned verbatim, fails the allowlist, and routes to review.
Runtime contract
Shipped defaults
| Setting | Default |
|---|---|
| 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.