Field-by-field contract for the export.
Every field a licensee receives, with its type, value range, and a worked example. This is the 2026.1 delivery envelope: the exact shape shipped in every evaluation portal and full licence delivery. Generated from the production exporter (peerlibrary_exports.to_delivery_envelope), so this page, the downloadable peerlibrary-sample.jsonl, and your delivery always agree.
ajv validate -s schema.json -d sample.jsonl to verify
Field groups
Identification, schema versioning, and sanitisation lineage. Use primitive_id for dedup and source_call_id to group primitives from the same conversation; everything else is for traceability and lets you filter on ontology or sanitiser version when you re-pull.
prim_{YYYY-MM-DD}_{8hex}_{6hex}-{NNN}. Hashed at export: the same source primitive always produces the same external ID, so licensees can dedup across re-pulls. Carries no PII.call_{12hex}. Hashed; carries no PII.2026.1, the shape shipped in every evaluation portal and full licence delivery.peer_v1; new captures use peer_v2 (5 SEAs, 424 competencies). Filter to a single ontology when you want internal consistency.true in a delivery: non-licensable rows are never exported. Present so the contract is explicit.null; licence terms are governed by the delivery agreement.Where this primitive sits in the Peer v2 ontology. Use these fields to slice the corpus by function, framework, competency, or theme. framework_code + competency is the cross-dataset join key.
foundation, enhanced, advanced. Framework-defined, so the exact set of labels varies by framework. Distinct from ai_grade.tier_grade, which is the grade observed in this primitive.framework_code for a globally-unique competency reference.The primitive's scope and source language, plus two overlay slots reserved for future tagging.
PER_REP only: one observed rep behaviour per record. (MEETING- and THREAD-scope primitives exist internally but are never licensed.)text_original) and translated to English (text).null on all records.null on all records.The AI assessor's rubric scoring of the observed behaviour, nested under ai_grade. tier_grade and polarity are the headline labels for any fine-tuning or eval workload; evidence and next_tier_example are teacher signals.
ABSENCE indicates the skill should have appeared and didn't.tier_grade to balance contrastive training pairs.explanation. Synthetic (assessor-generated, not extracted). Useful for contrastive fine-tuning; filter out for a pure real-only subset. Sub-fields: quote, explanation. Present in licensee deliveries; null in the public marketing sample.{
"quote": "That's fair, it's a real line in your budget. One option to make it lighter: compare it against what your two slowest weeks currently cost…",
"explanation": "Acknowledges the objection without dismissing it and gives a basic, concrete response: the FOUNDATION behaviour that was missing."
}
The actual conversation excerpt the grade was awarded against. Three speaker blocks capture the full micro-arc: buyer context → rep behaviour → buyer reaction. All speaker names are replaced with role placeholders ("the rep", "the buyer") before this row is admitted to the corpus.
speaker (role placeholder), text (English), text_original (source language), language, observable_behaviour (the assessor's third-person description of what the rep did). The key is always present, but its value may be null when the moment has no usable rep turn.{
"speaker": "the rep",
"text": null,
"text_original": null,
"language": "en",
"observable_behaviour": "The buyer raised price as a direct objection. The rep moved straight to scheduling the next call without acknowledging it at all."
}
rep_behaviour minus observable_behaviour (so speaker, text, text_original, language). null when the rep behaviour was unprompted (e.g. an opening statement).null when the buyer didn't respond before the call ended or topic shifted.Independent checks on the AI grade. model_verification carries a blind second-model re-grade where available. Use concordance as a per-record confidence signal. human_verification is reserved for human attestation.
tier_grade (the blind model's grade), concordance (exact / adjacent / divergent agreement with ai_grade.tier_grade), model.{
"tier_grade": "ABSENCE",
"concordance": "exact",
"model": "claude-sonnet-4-6 (blind)"
}
null on delivered records; the independent blind second-model re-grade in model_verification is the live verification signal.A full row from the export. Identical to what you'll find in the downloadable sample, just one line of JSONL.
{
// Provenance & identity
"schema_version": "2026.1",
"primitive_id": "prim_2026-04-18_c3a91f60_b8d217-207",
"source_call_id": "call_5e8a2f9b7c31",
// Skill anchoring
"competency": "CC6",
"competency_title": "Objection Handling & Risk Mitigation",
"cla_theme": "OB",
"framework_code": "ISR-VELOCITY",
"framework_level": "foundation",
"function": "SALES",
// Context
"primitive_class": "PER_REP",
"language": "en",
"industry_overlay": null,
"condition_overlay": null,
// Exchange (the conversation turn)
"exchange": {
"prospect_context": {
"speaker": "the buyer",
"text": "…four hundred a month is a stretch for us right now. Every line in the budget gets questioned.",
"text_original": null,
"language": "en"
},
"rep_behaviour": {
"speaker": "the rep",
"text": null,
"text_original": null,
"language": "en",
"observable_behaviour": "The buyer raised price as a direct objection. The rep moved straight to scheduling without acknowledging it."
},
"prospect_reaction": null
},
// AI grade
"ai_grade": {
"tier_grade": "ABSENCE",
"polarity": "NEGATIVE",
"model": "claude-opus-4-7",
"rubric_version": "assess-v0.5",
"evidence": "The buyer flagged budget pressure explicitly. No acknowledgement, no probe, and no value response followed before the call moved on.",
"next_tier_example": { /* licensee deliveries only; null in this public sample */ }
},
// Verification
"human_verification": null,
"model_verification": { "tier_grade": "ABSENCE", "concordance": "exact", "model": "claude-sonnet-4-6 (blind)" },
// Lineage
"ontology_version": "peer_v2",
"sanitisation_version": "v1_sanitise-v0.3",
"sanitised_at": "2026-04-18T11:34:52+00:00",
"licensable": true,
"license_terms": null
}
The export is JSONL: one record per line, UTF-8. Loads natively into HuggingFace datasets, pandas, or any line-oriented stream.
# HuggingFace datasets from datasets import load_dataset ds = load_dataset("json", data_files="peerlibrary.jsonl") # Pandas (in-memory for smaller pulls) import pandas as pd df = pd.read_json("peerlibrary.jsonl", lines=True) # Streamed (memory-safe for full corpus) import json with open("peerlibrary.jsonl", encoding="utf-8") as f: for line in f: primitive = json.loads(line) # ... your processing here
Full HuggingFace dataset directory layout (with dataset_info.json + README.md) is available on request for licensees who want save_to_disk / load_from_disk ergonomics.