A document conforms when it validates against the JSON Schema its 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 whose ocp 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 from loopmath 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 members are members of the slate. When a preference lists members, E194 checks its winner against them only.
  • Whether documents with the same slate.id carry the same slate object. Across files, E194 compares only task.id and 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:99 passes.
  • The length of strings the schema does not cap, such as task.features values, setting options and ext payloads, so a pass is not a size or privacy filter (Privacy).
OCP 0.4 plans warnings, not errors, for the first three: a reader repairs or ignores such a value with a note, and treats an impossible timestamp as missing. 0.4 also plans a warning for a 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).

Adding a rule

A new rule arrives in a minor version, through a proposal, with a new code, a line on this page, a passing and a failing example document, and the check in the reference checker.

Privacy