Peer Book a call Plug Peer in
← PeerLibrary overview
PeerLibrary schema reference

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.

schema_version 2026.1 encoding JSON-lines (UTF-8) delivery format JSONL + Parquet + manifest ontology peer_v2 updated 2026-06-13
↓ peerlibrary-schema.json ↓ peerlibrary-sample.jsonl use ajv validate -s schema.json -d sample.jsonl to verify

Field groups

  1. Provenance & identity 8 fields
  2. Skill anchoring 6 fields
  3. Context 4 fields
  4. AI grade 6 fields
  5. Exchange (the conversation turn) 1 object
  6. Verification 2 fields
  7. Full record shape
  8. Loading the data
§ 1 / Provenance & identity
Where the row came from

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.

primitive_id
stringrequired
Stable, globally-unique identifier for this primitive. Format: 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.
prim_2026-04-18_c3a91f60_b8d217-207
source_call_id
string | nullrequired
Pseudonymous identifier for the source conversation. Primitives extracted from the same call share this id, so you can group records by their originating interaction without any link back to the raw call. Format: call_{12hex}. Hashed; carries no PII.
call_5e8a2f9b7c31
schema_version
stringrequired
Version of this delivery envelope. Breaking changes bump the version (and we publish a migration note). Currently 2026.1, the shape shipped in every evaluation portal and full licence delivery.
"2026.1"
sanitisation_version
stringrequired
Version of the sanitisation pipeline that processed this primitive (PII removal, speaker-name → role-placeholder swap, account/deal/company stripping). Filter on this when you want a specific sanitisation contract.
"v1_sanitise-v0.3"
ontology_version
stringrequired
Version of the competency ontology used to grade this primitive. Older primitives may carry peer_v1; new captures use peer_v2 (5 SEAs, 424 competencies). Filter to a single ontology when you want internal consistency.
"peer_v2"
sanitised_at
ISO-8601 timestamp
UTC timestamp the primitive was sanitised and admitted to the licensable corpus. Useful for incremental pulls: "give me everything sanitised after my last sync".
"2026-04-18T11:34:52+00:00"
licensable
booleanrequired
Always true in a delivery: non-licensable rows are never exported. Present so the contract is explicit.
true
license_terms
string | null
Reserved for per-record licence terms. Currently null; licence terms are governed by the delivery agreement.
null
§ 2 / Skill anchoring
What skill this primitive is about

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.

function
enumrequired
Top-level function the framework belongs to. SALES, SDR and FOUNDER are the sales-motion functions currently represented in volume; CUSTOMER_SUCCESS and CUSTOMER_SUPPORT are also present. MANAGEMENT and CULTURE are defined in the ontology but not yet in the licensable corpus.
Values: SALES · SDR · FOUNDER · CUSTOMER_SUCCESS · CUSTOMER_SUPPORT · MANAGEMENT · CULTURE
"SALES"
framework_code
stringrequired
Stable framework identifier. Frameworks bundle competencies for a specific role + segment + motion. 127 frameworks defined across the ontology; 64 are currently represented in the licensable corpus.
"ISR-VELOCITY" // Inside Sales Rep, Velocity motion
framework_level
string | null
The competency's position on the framework's own tier ladder (lowercased), e.g. 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.
"foundation"
competency
stringrequired
Competency code within its framework's SEA (Skill Evaluation Architecture), with the SEA prefix stripped. Combine with framework_code for a globally-unique competency reference.
"CC6"
competency_title
string | null
Human-readable competency name. Stable across versions.
"Objection Handling & Risk Mitigation"
cla_theme
string | null
Cross-Library Anchor: a short theme code grouping conceptually-related competencies across frameworks. Use to align competencies that mean the same thing in different roles/segments.
"OB" // Objection handling
§ 3 / Context
Granularity, language & overlays

The primitive's scope and source language, plus two overlay slots reserved for future tagging.

primitive_class
constrequired
Granularity of the primitive. Deliveries are PER_REP only: one observed rep behaviour per record. (MEETING- and THREAD-scope primitives exist internally but are never licensed.)
"PER_REP"
language
stringrequired
ISO-639-1 source language of the conversation. Quotes are provided both in this language (text_original) and translated to English (text).
"pt" // also: en, de, fr, ja, …
industry_overlay
string | null
Reserved for an industry-specific overlay tag. Currently null on all records.
null
condition_overlay
string | null
Reserved for a deal-condition overlay tag (e.g. competitive, renewal). Currently null on all records.
null
§ 4 / AI grade
How the primitive was graded

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.

ai_grade.tier_grade
enumrequired
Tier-ladder grade for the observed behaviour. The four positive tiers (FOUNDATION → EXPERT) form a strict progression. ABSENCE indicates the skill should have appeared and didn't.
Values: FOUNDATION · PROFICIENT · ADVANCED · EXPERT · ABSENCE
"ABSENCE"
ai_grade.polarity
enumrequired
Whether this is a positive, neutral, or negative example of the competency. Combine with tier_grade to balance contrastive training pairs.
Values: POSITIVE · NEUTRAL · NEGATIVE
"NEGATIVE"
ai_grade.model
string
Identifier of the model that produced the grade.
"claude-opus-4-7"
ai_grade.rubric_version
string
Version of the grading rubric / assessor used.
"assess-v0.5"
ai_grade.evidence
string | null
2-4 sentence rationale grounding the grade in the rubric: what the rep demonstrated, what was missing, and what would have lifted the grade. Sanitised. Use as a teacher signal during fine-tuning or as a rationale field in eval traces.
"The owner flagged price and cash-flow pressure explicitly. No acknowledgement, no probe, no value response followed before the call ended: an ABSENCE of objection handling at the moment the deal most needed it."
ai_grade.next_tier_example
object | null
Model-generated example of what a higher-tier response would have looked like, with an 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."
}
§ 5 / Exchange (the conversation turn)
The sanitised behavioural moment

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.

exchange.rep_behaviour
object | nullrequired
The rep's turn: what was said and what behaviour it demonstrated. Sub-fields: 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."
}
exchange.prospect_context
object | null
The buyer's turn that preceded the rep behaviour, the context that made the rep's response observable. Same sub-fields as rep_behaviour minus observable_behaviour (so speaker, text, text_original, language). null when the rep behaviour was unprompted (e.g. an opening statement).
exchange.prospect_reaction
object | null
The buyer's turn that followed the rep behaviour, the outcome of the rep's move. null when the buyer didn't respond before the call ended or topic shifted.
§ 6 / Verification
How the grade was checked

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.

model_verification
object | null
Independent blind second-model re-grade of the same primitive, where available (sparse: present on a subset of records). Sub-fields: 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)"
}
human_verification
object | null
Reserved for human attestation of the grade. Currently null on delivered records; the independent blind second-model re-grade in model_verification is the live verification signal.
null
§ 7 / Full record shape
One complete primitive, end to end

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
}
§ 8 / Loading the data
Drop into your pipeline in 3 lines

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.