Constitution
The protocol serves people.
People do not serve the protocol.
These are constraints on what this system is permitted to do, written down so that violating one is visible rather than convenient.
They are not decoration. Every published finding lists the articles it was held to, and both that list and the text below are generated from the same source — so a rule cited by a finding but missing here, or the reverse, cannot happen.
I. Reality is not interpretation
What was observed and what it means are different objects and are stored separately. A record of a request contains no score, no verdict and no label. The moment a judgement is written into the record, the evidence needed to check that judgement is gone.
II. Interpretation is versioned
Every conclusion carries the version of the method that produced it. Improving the method means deleting the old conclusions and recomputing them over the same untouched observations — not starting a fresh dataset and quietly abandoning the old one.
III. No layer validates itself
No layer may validate itself using its own output as independent evidence. Assessment cannot confirm assessment. A model's account of its own knowledge is not evidence about that model. This rule costs more than any other and is the reason the rest exists.
IV. Replay guesses nothing
Any published figure must be reproducible from the stored record alone. Where the record is silent, the answer is that it is unknown — not an estimate presented as a measurement.
V. Observation does not alter the observed
Every client receives identical bytes for the same URL. No content is varied by user agent, nothing is hidden from human readers to be shown to crawlers, and no page attempts to instruct an agent that reads it. A measurement that changes its subject is not a measurement.
VI. The record is honest about its size
Figures are published from the first observation onward, including when they are too sparse to support a conclusion. Sample size is stated. Absence of evidence is reported as absence of evidence.
VII. Observation is not surveillance
The unit of observation is a request, not a person. No cookies, no fingerprinting scripts, no cross-site tracking, no accounts. Published tables report user agents, paths and counts; nothing that identifies an individual is collected or shown.
VIII. Documentation is a deliverable
Code changes the system. Documentation changes the understanding of the system. A change that alters how this observatory works and is not written down has only been half made.
IX. The subject is the behaviour, not the visitor
A finding states what was done. It does not make a client the subject of a sentence about conduct.
This is not a matter of tone. Whether a name appears in a headline decides what the finding can be wrong about. "One address requested 87 credential-file paths in six seconds" can be wrong about a count, and the count is in the record. "GPTBot scanned this site for secrets" can be wrong about a company, and nothing in a request establishes which company sent it — a user agent is a string the sender chose.
Six findings were published here naming ClaudeBot, PerplexityBot, CCBot, GPTBot, OAI-SearchBot and ChatGPT-User as visitors to this site. All six were withdrawn on 27 July 2026. Every one of those requests came from a single address presenting ten different companies' crawler identities while requesting .env, .git/config and .aws/credentials. The counts in those findings were correct and verified. The subject of the sentence was wrong, and that was enough to make each one false.
The consequence for what gets built: asking whether a behaviour has been seen before is permitted, and asking whether a visitor has been seen before is not. The first compares patterns and identifies nobody. The second is a cross-session client identifier — the technique Article VII rules out, and the one this project already declined to build for its own convenience when matching a header combination would have let it exclude its own phone from its own figures.
Where the actor genuinely matters, the finding says what can be checked instead: whether the address appears in the range that company publishes for that crawler, and the date the list was captured. That is a statement about a declaration, never about intent.
When an implementation and this document disagree, this document is what the system was supposed to be, and the implementation is a bug.