A consumer reads OCP documents to compare, price, learn from or show runs. The format is designed so that a careful reader handles every conforming document, from any producer and any version.

What a reader must handle

  • Every version. Check ocp, and read each document by the rules of the version it declares: 0.1 and 0.2 documents have fewer fields, and 0.1 edges may lack a tier. Or upgrade them first with loopmath ocp migrate.
  • Unknown fields. Ignore fields you do not know, at every level, and every ext namespace you do not understand. Never fail on them.
  • Open vocabularies. Values outside a recommended list, such as a new harness name or effort level, are valid, and a reader accepts them. Piece roles are never rewritten; they are compared as written.
  • Missing values. An absent cost means unknown, not zero. An absent outcome.evidence means asserted. A missing capability means unknown.

What a reader should weigh

  • Evidence tiers. Weigh outcomes and signals by tier. See Evidence.
  • Cost basis. allocated counts were apportioned from a coarser total; weigh them less than measured ones.
  • Dollars. Prices change and tools price differently. Prefer recomputing dollars from the token streams and a dated price table over trusting usd, and use cost.tariff to see how a stored usd was priced.
  • Model names. Use model.id when present. model.raw is the tool’s own label, kept as ground truth; canonicalizing it is the reader’s job.
  • Duplicates across files. Preferences are copied into every member of a slate; deduplicate them by id.
  • Configuration ids. Two runs with the same configuration.id declared the same workflow and baseline settings. An attempt may still override its piece’s setting, so check attempt setting fields before pooling runs by id. A careful reader recomputes the id (E190) before trusting it.

A small reader

Observed tokens per model and outcomes per harness, over any number of documents. Standard library only. An attempt without a cost record is counted as unknown, never as zero.
read.py

Privacy