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 withloopmath ocp migrate. - Unknown fields. Ignore fields you do not know, at every level, and every
extnamespace 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.evidencemeansasserted. A missing capability means unknown.
What a reader should weigh
- Evidence tiers. Weigh outcomes and signals by tier. See Evidence.
- Cost basis.
allocatedcounts were apportioned from a coarser total; weigh them less thanmeasuredones. - Dollars. Prices change and tools price differently. Prefer recomputing dollars from the token streams and a dated price table over trusting
usd, and usecost.tariffto see how a storedusdwas priced. - Model names. Use
model.idwhen present.model.rawis 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.iddeclared the same workflow and baseline settings. An attempt may still override its piece’s setting, so check attemptsettingfields 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