ocp value selects and breaks none of the error rules below that apply to its version. Warnings do not make a document non-conforming; they point at something a consumer may want to know. A producer conforms when every document it writes conforms, and a consumer conforms when it reads every conforming 0.1, 0.2 and 0.3 document, ignoring what it does not know.
The rules cover what JSON Schema cannot express: references between entities, cycles, sums and consistency across fields. Each has a code: an E code is an error, a W code a warning.
The schema, with the meaning its descriptions give each field, and the rules on this page define OCP; the checker does not.
loopmath ocp validate implements every numbered rule, and the code in each finding is the one on this page; where the two disagree, the checker has a bug. A requirement stated only in a field description is normative too, but the checker does not test every one, so a clean result does not prove a document meets every description. See What the checker does not test and Validate a document.Applicability
Under each code is its level and the version that added it. A rule applies to a document whoseocp version is that version or later. A 0.1 document is checked against the 0.1 rules only, even by a 0.3 checker, and a field that a later version added is an unknown field in an earlier document, so it is ignored.
Reading the document
Ids and lists
Run graph
See Run graph.
Attempts and outcomes
Terminal statuses are
done, failed, rejected, canceled, settled_unverified and lost. See Attempts.
Artifacts
See Artifacts.
Cost
See Cost.
Events
See Events.
Producer, extensions and vocabulary
See Document and Extensions.
The observation
These rules are new in 0.3. Each has a passing and a failing example document; see Rule pairs.
The cross-file part of E194 can only be checked when a checker reads the slate’s documents together, as
loopmath ocp validate does when given several files.
What the checker does not test
A clean result fromloopmath ocp validate means the document passed the schema and every numbered rule. It does not prove the document meets every requirement in the field descriptions. The reference checker in loopmath 0.1.0 does not test the following; a consumer that relies on them should check them itself:
- Whether a preference’s own
membersare members of the slate. When a preference lists members, E194 checks its winner against them only. - Whether documents with the same
slate.idcarry the same slate object. Across files, E194 compares onlytask.idand the base commit. - Whether a timestamp is a real date and time. The schema checks its shape, so a value such as
2026-99-99T99:99:99+99:99passes. - The length of strings the schema does not cap, such as
task.featuresvalues, settingoptionsandextpayloads, so a pass is not a size or privacy filter (Privacy).
fraction signal whose own target lies outside [0, 1].
Not checked mechanically
Some requirements cannot be checked from the document alone. A producer is bound by them all the same:- Under
metadata_only, no field holds prompt, completion or transcript text (Privacy). A checker cannot tell a short label from a pasted prompt. basis: "measured"is written only for counts summed from usage records of that attempt (Cost).- A tier is never upgraded without new mechanical evidence (Attempts).
- Ids SHOULD stay stable when the same run is written again (Document).