Skip to content

CALIPER 1.2 — certification dossier

Generated by bun run conformance:render — do not edit by hand.

Point-by-point certification submission: every conformance requirement against the literal published schema (conform-ed ADR-0013), with emergent’s implementation status, the spec citation, the modelled schema anchors, and the verifying evidence (emergent ADR-0028).

  • Denominator: pinned Coverage Map docs/conformance/maps/caliper-v1.2.json (generated 2026-06-25), sha256 513572b4b05bab4d4c9f95f9c666e00089e0cbbbc7958323de6b1e9ca6820995.
  • Requirements: 23/24 done across 8 profile(s) — endpoint, entity, envelope, event, identifier, sender, serialization, vocabulary.
  • Information model: 1693/2052 literal items modelled.
  • Evidence: each claim cites its [covers:] evidence key; run bun run conformance:prove to resolve these to the proving test names for a submission copy.
Req Level Status Statement Verified by / justification Spec source
CAL-EP-1 MUST ✅ done A Caliper Endpoint MUST be capable of receiving Caliper data sent over HTTP POST by a Sensor over a TLS-secured connection with a valid certificate, and MUST support Bearer (RFC 6750) authentication on the HTTP Authorization request header. caliper:1.2:conf:endpoint/CAL-EP-1 Caliper 1.2 §6 Endpoint — https://www.imsglobal.org/spec/caliper/v1p2
CAL-EP-2 MUST ✅ done Following receipt of a Sensor request the Endpoint MUST reply with an HTTP response message, and to signal successful receipt MUST reply with a 2xx class status code. caliper:1.2:conf:endpoint/CAL-EP-2 Caliper 1.2 §6.1 HTTP Responses — https://www.imsglobal.org/spec/caliper/v1p2
CAL-EP-3 SHOULD ✅ done On success the Endpoint SHOULD use the 200 OK response and SHOULD send back successful responses with an empty body. caliper:1.2:conf:endpoint/CAL-EP-3 Caliper 1.2 §6.1 HTTP Responses — https://www.imsglobal.org/spec/caliper/v1p2
CAL-EP-4 MUST ✅ done When an Endpoint replies with a non-2xx response it MUST adhere to the defined status codes: 400 Bad Request for a missing or malformed Envelope, 401 Unauthorized for an unauthorized request, 415 Unsupported Media Type for a non-application/json content type, and 422 Unprocessable Entity when it cannot support the Envelope’s dataVersion. caliper:1.2:conf:endpoint/CAL-EP-4 Caliper 1.2 §6.1 HTTP Responses (error status codes) — https://www.imsglobal.org/spec/caliper/v1p2
CAL-EP-5 MUST ✅ done On receiving a GET status (ping) request with appropriate authorization, an Endpoint MUST respond with 200 OK and a JSON body containing its configuration parameters, including the required caliperSupportedVersions list; each configuration property MUST be included no more than once and no custom properties are permitted. caliper:1.2:conf:endpoint/CAL-EP-5 Caliper 1.2 §6.2 Configuration Information — https://www.imsglobal.org/spec/caliper/v1p2
CAL-EP-6 SHOULD ✅ done If a status (ping) request arrives without an Authorization header of the RECOMMENDED form, or with a token the Endpoint cannot validate or that lacks sufficient privilege, the Endpoint SHOULD reply with a 401 Unauthorized response. caliper:1.2:conf:endpoint/CAL-EP-6 Caliper 1.2 §6.2 Configuration Information — https://www.imsglobal.org/spec/caliper/v1p2
Modelled schema anchors
  • CAL-EP-1caliper:1.2:def:Envelope/sensor, caliper:1.2:def:Envelope/data
  • CAL-EP-2caliper:1.2:def:Envelope/data
  • CAL-EP-3caliper:1.2:def:Envelope/data
  • CAL-EP-4caliper:1.2:def:Envelope/data, caliper:1.2:def:Envelope/dataVersion
  • CAL-EP-5caliper:1.2:def:Envelope/dataVersion, caliper:1.2:def:Envelope/sensor
  • CAL-EP-6caliper:1.2:def:Envelope/sensor
Req Level Status Statement Verified by / justification Spec source
CAL-ENT-1 MUST ✅ done Every Caliper Entity MUST carry a type matching the Caliper term for the entity (e.g. Person) and an id that is a unique, persistent IRI. caliper:1.2:conf:entity/CAL-ENT-1 Caliper 1.2 §Entity (type/id) — https://www.imsglobal.org/spec/caliper/v1p2
Modelled schema anchors
  • CAL-ENT-1caliper:1.2:def:Entity/type, caliper:1.2:def:Entity/id
Req Level Status Statement Verified by / justification Spec source
CAL-ENV-1 MUST ✅ done A Caliper Envelope MUST carry the emitting sensor, the dataVersion IRI, a sendTime, and the data payload. caliper:1.2:conf:envelope/CAL-ENV-1 Caliper 1.2 §Envelope — https://www.imsglobal.org/spec/caliper/v1p2
CAL-ENV-2 MUST ✅ done The Envelope sendTime MUST be expressed in UTC with millisecond precision (YYYY-MM-DDTHH:mm:ss.SSSZ, no offset); the dataVersion MUST be set to the 1EdTech Caliper context IRI governing the payload; the data array MUST carry one or more Event/Entity describe objects; and each Envelope property MUST be referenced only once with no custom properties permitted. caliper:1.2:conf:envelope/CAL-ENV-2 Caliper 1.2 §5.2 Envelope (Properties) — https://www.imsglobal.org/spec/caliper/v1p2
Modelled schema anchors
  • CAL-ENV-1caliper:1.2:def:Envelope/sensor, caliper:1.2:def:Envelope/dataVersion, caliper:1.2:def:Envelope/sendTime, caliper:1.2:def:Envelope/data
  • CAL-ENV-2caliper:1.2:def:Envelope/sendTime, caliper:1.2:def:Envelope/dataVersion, caliper:1.2:def:Envelope/data
Req Level Status Statement Verified by / justification Spec source
CAL-EVT-1 MUST ✅ done Every Caliper Event MUST identify the actor, the action performed, and the object it was performed on. caliper:1.2:conf:event/CAL-EVT-1 Caliper 1.2 §Event — https://www.imsglobal.org/spec/caliper/v1p2
CAL-EVT-2 MUST ✅ done Every Caliper Event MUST also carry its id, a type matching the Caliper term for the event, and an eventTime expressed in UTC (YYYY-MM-DDTHH:mm:ss.SSSZ). caliper:1.2:conf:event/CAL-EVT-2 Caliper 1.2 §Event (id/type/eventTime) — https://www.imsglobal.org/spec/caliper/v1p2
Modelled schema anchors
  • CAL-EVT-1caliper:1.2:def:Event/actor, caliper:1.2:def:Event/action, caliper:1.2:def:Event/object
  • CAL-EVT-2caliper:1.2:def:Event/id, caliper:1.2:def:Event/type, caliper:1.2:def:Event/eventTime
Req Level Status Statement Verified by / justification Spec source
CAL-ID-1 MUST ✅ done Every Caliper Event id MUST be a UUID expressed as a urn:uuid: (RFC 4122); every Entity id MUST be a unique, persistent IRI. caliper:1.2:conf:identifier/CAL-ID-1 Caliper 1.2 §Event / §Entity identifier — https://www.imsglobal.org/spec/caliper/v1p2
Modelled schema anchors
  • CAL-ID-1caliper:1.2:def:Agent/id, caliper:1.2:def:AggregateMeasure/id, caliper:1.2:def:AggregateMeasureCollection/id, caliper:1.2:def:Annotation/id, caliper:1.2:def:AnnotationEvent/id, caliper:1.2:def:Assessment/id, caliper:1.2:def:AssessmentEvent/id, caliper:1.2:def:AssessmentItem/id, caliper:1.2:def:AssessmentItemEvent/id, caliper:1.2:def:AssignableDigitalResource/id, caliper:1.2:def:AssignableEvent/id, caliper:1.2:def:Attempt/id, caliper:1.2:def:AudioObject/id, caliper:1.2:def:BookmarkAnnotation/id, caliper:1.2:def:Chapter/id, caliper:1.2:def:Collection/id, caliper:1.2:def:Comment/id, caliper:1.2:def:CourseOffering/id, caliper:1.2:def:CourseSection/id, caliper:1.2:def:DateTimeQuestion/id, caliper:1.2:def:DateTimeResponse/id, caliper:1.2:def:DigitalResource/id, caliper:1.2:def:DigitalResourceCollection/id, caliper:1.2:def:Document/id, caliper:1.2:def:Entity/id, caliper:1.2:def:Event/id, caliper:1.2:def:FeedbackEvent/id, caliper:1.2:def:FillinBlankResponse/id, caliper:1.2:def:Forum/id, caliper:1.2:def:ForumEvent/id, caliper:1.2:def:Frame/id, caliper:1.2:def:GradeEvent/id, caliper:1.2:def:Group/id, caliper:1.2:def:HighlightAnnotation/id, caliper:1.2:def:ImageObject/id, caliper:1.2:def:LearningObjective/id, caliper:1.2:def:LikertScale/id, caliper:1.2:def:Link/id, caliper:1.2:def:LtiLink/id, caliper:1.2:def:LtiSession/id, caliper:1.2:def:MediaEvent/id, caliper:1.2:def:MediaLocation/id, caliper:1.2:def:MediaObject/id, caliper:1.2:def:Membership/id, caliper:1.2:def:Message/id, caliper:1.2:def:MessageEvent/id, caliper:1.2:def:MultipleChoiceResponse/id, caliper:1.2:def:MultipleResponseResponse/id, caliper:1.2:def:MultiselectQuestion/id, caliper:1.2:def:MultiselectResponse/id, caliper:1.2:def:MultiselectScale/id, caliper:1.2:def:NavigationEvent/id, caliper:1.2:def:NumericScale/id, caliper:1.2:def:OpenEndedQuestion/id, caliper:1.2:def:OpenEndedResponse/id, caliper:1.2:def:Organization/id, caliper:1.2:def:OutcomeEvent/id, caliper:1.2:def:Page/id, caliper:1.2:def:Person/id, caliper:1.2:def:Query/id, caliper:1.2:def:Question/id, caliper:1.2:def:Questionnaire/id, caliper:1.2:def:QuestionnaireEvent/id, caliper:1.2:def:QuestionnaireItem/id, caliper:1.2:def:QuestionnaireItemEvent/id, caliper:1.2:def:Rating/id, caliper:1.2:def:RatingScaleQuestion/id, caliper:1.2:def:RatingScaleResponse/id, caliper:1.2:def:Reading/id, caliper:1.2:def:ReadingEvent/id, caliper:1.2:def:ResourceManagementEvent/id, caliper:1.2:def:Response/id, caliper:1.2:def:Result/id, caliper:1.2:def:Scale/id, caliper:1.2:def:Score/id, caliper:1.2:def:SearchEvent/id, caliper:1.2:def:SearchResponse/id, caliper:1.2:def:SelectTextResponse/id, caliper:1.2:def:Session/id, caliper:1.2:def:SessionEvent/id, caliper:1.2:def:SharedAnnotation/id, caliper:1.2:def:SoftwareApplication/id, caliper:1.2:def:Survey/id, caliper:1.2:def:SurveyEvent/id, caliper:1.2:def:SurveyInvitation/id, caliper:1.2:def:SurveyInvitationEvent/id, caliper:1.2:def:TagAnnotation/id, caliper:1.2:def:Thread/id, caliper:1.2:def:ThreadEvent/id, caliper:1.2:def:ToolLaunchEvent/id, caliper:1.2:def:ToolUseEvent/id, caliper:1.2:def:TrueFalseResponse/id, caliper:1.2:def:VideoObject/id, caliper:1.2:def:ViewEvent/id, caliper:1.2:def:WebPage/id, caliper:1.2:def:epubChapter/id, caliper:1.2:def:epubPart/id, caliper:1.2:def:epubSubChapter/id, caliper:1.2:def:epubVolume/id
Req Level Status Statement Verified by / justification Spec source
CAL-SND-1 MUST 🔲 todo A Caliper Sensor MUST be capable of transmitting Caliper data successfully to a Caliper Endpoint over HTTP with the connection encrypted using Transport Layer Security (TLS). Real TLS is a deployment property — the Sensor transmits over an https endpoint URL and the runtime negotiates the secure connection — not something the in-process interop lane exercises. The transmission TLS secures (single Envelope POST, headers, version negotiation) IS proven (CAL-SND-2..6), and the config-time guard (assertEndpointTransportSecure) already refuses a non-internal endpoint that is not https, so plaintext export can never reach the wire. Flips to done under a deployed-endpoint smoke check (pending the worker-host decision). Caliper 1.2 §5.4 HTTP Requests — https://www.imsglobal.org/spec/caliper/v1p2
CAL-SND-2 MUST ✅ done Each message request a Sensor sends MUST consist of a single JSON representation of a Caliper Envelope, and messages MUST be sent using the HTTP POST request method. caliper:1.2:conf:sender/CAL-SND-2 Caliper 1.2 §5.4 HTTP Requests — https://www.imsglobal.org/spec/caliper/v1p2
CAL-SND-3 MUST ✅ done A Sensor MUST set the HTTP Host and Content-Type request header fields; the Content-Type value MUST be the IANA media type “application/json”. caliper:1.2:conf:sender/CAL-SND-3 Caliper 1.2 §5.4 HTTP Requests (request headers) — https://www.imsglobal.org/spec/caliper/v1p2
CAL-SND-4 SHOULD ✅ done A Sensor SHOULD set the Authorization request header field using the “Bearer” authentication scheme (RFC 6750 §2.1); the b64token credential sent MUST be one the Endpoint can validate, although it MAY be opaque to the Sensor. caliper:1.2:conf:sender/CAL-SND-4 Caliper 1.2 §5.4 HTTP Requests (Authorization) — https://www.imsglobal.org/spec/caliper/v1p2
CAL-SND-5 MUST ✅ done A Sensor MUST serialize each Event and Entity describe as a JSON-LD document, and Caliper Event and Entity data MUST be transmitted inside a Caliper Envelope (never outside one). caliper:1.2:conf:sender/CAL-SND-5 Caliper 1.2 §5.1 Behavior / §5.3 JSON-LD Payload — https://www.imsglobal.org/spec/caliper/v1p2
CAL-SND-6 MUST ✅ done A Sensor MUST ensure that the Caliper data it sends is based on one of the Caliper JSON-LD context document versions listed in the Endpoint’s caliperSupportedVersions configuration. caliper:1.2:conf:sender/CAL-SND-6 Caliper 1.2 §6.2 Configuration Information (caliperSupportedVersions) — https://www.imsglobal.org/spec/caliper/v1p2
Modelled schema anchors
  • CAL-SND-1caliper:1.2:def:Envelope/sensor, caliper:1.2:def:Envelope/data
  • CAL-SND-2caliper:1.2:def:Envelope/data, caliper:1.2:def:Envelope/dataVersion
  • CAL-SND-3caliper:1.2:def:Envelope/dataVersion
  • CAL-SND-4caliper:1.2:def:Envelope/sensor
  • CAL-SND-5caliper:1.2:def:Envelope/data
  • CAL-SND-6caliper:1.2:def:Envelope/dataVersion
Req Level Status Statement Verified by / justification Spec source
CAL-SER-1 MUST ✅ done Each Caliper Event and Entity describe document MUST carry a top-level @context property defined as a string or an array. If a string it MUST be the Caliper remote context URL “http://purl.imsglobal.org/ctx/caliper/v1p2”; if an array the remote Caliper context MUST be listed last. The remote context’s terms MUST NOT be redefined inline as an object, nor overridden by nested local contexts. caliper:1.2:conf:serialization/CAL-SER-1 Caliper 1.2 §4.1 JSON-LD Context (Requirements) — https://www.imsglobal.org/spec/caliper/v1p2
CAL-SER-2 MUST ✅ done An Event’s entity-valued properties — the actor and object, and any edApp, generated, target, referrer or group — MUST each be expressed either as an object or as a string corresponding to the resource’s IRI (Caliper’s reference-or-inline duality). caliper:1.2:conf:serialization/CAL-SER-2 Caliper 1.2 §2.1 Event (Properties) / §5.1 Behavior — https://www.imsglobal.org/spec/caliper/v1p2
CAL-SER-3 MUST ✅ done Within an Event or Entity each property MUST be referenced only once, and any custom attribute not described by the Caliper model MUST be added to the extensions property rather than as an ad-hoc top-level term. caliper:1.2:conf:serialization/CAL-SER-3 Caliper 1.2 §2.1 Event / §2.2 Entity (extensions) — https://www.imsglobal.org/spec/caliper/v1p2
Modelled schema anchors
  • CAL-SER-1caliper:1.2:def:Event/@context, caliper:1.2:def:Entity/@context
  • CAL-SER-2caliper:1.2:def:Event/actor, caliper:1.2:def:Event/object, caliper:1.2:def:Event/edApp, caliper:1.2:def:Event/generated, caliper:1.2:def:Event/target, caliper:1.2:def:Event/referrer, caliper:1.2:def:Event/group
  • CAL-SER-3caliper:1.2:def:Event/extensions, caliper:1.2:def:Entity/extensions
Req Level Status Statement Verified by / justification Spec source
CAL-VOCAB-1 MUST ✅ done An Event’s action MUST be a term drawn from the Caliper action vocabulary (the term appropriate to the event’s metric profile). caliper:1.2:conf:vocabulary/CAL-VOCAB-1 Caliper 1.2 §Actions / metric profiles — https://www.imsglobal.org/spec/caliper/v1p2
CAL-VOCAB-2 MUST ✅ done Caliper’s controlled vocabularies MUST be honoured: an AggregateMeasure metric is a Caliper metric term, an entity status is Active or Inactive, and a sensor declares the metric profiles it supports as Caliper profile terms. caliper:1.2:conf:vocabulary/CAL-VOCAB-2 Caliper 1.2 §Metric / §Status / metric profiles — https://www.imsglobal.org/spec/caliper/v1p2
CAL-VOCAB-3 MUST ✅ done A Membership’s roles MUST be drawn from the Caliper role vocabulary — the eight base roles (Learner, Instructor, …) and their Base#Subrole specialisations. caliper:1.2:conf:vocabulary/CAL-VOCAB-3 Caliper 1.2 §Role vocabulary / Membership — https://www.imsglobal.org/spec/caliper/v1p2
Modelled schema anchors
  • CAL-VOCAB-1caliper:1.2:def:Action, caliper:1.2:def:Event/action
  • CAL-VOCAB-2caliper:1.2:def:Metric, caliper:1.2:def:AggregateMeasure/metric, caliper:1.2:def:Status, caliper:1.2:def:Membership/status, caliper:1.2:def:Profile
  • CAL-VOCAB-3caliper:1.2:def:Membership/roles, caliper:1.2:def:Membership/roles/[]