Skip to content

OR 1.2 — conformance status

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

Denominator: pinned Coverage Map docs/conformance/maps/oneroster-v1.2.json (generated 2026-06-22). See conform-ed ADR-0013 (map) and emergent ADR-0028 (overlay).

Profile Requirements Done Partial Other Progress
assessment-results 3 3 0 0 ████████████████ 100%
gradebook 5 5 0 0 ████████████████ 100%
resources 3 3 0 0 ████████████████ 100%
rostering 5 5 0 0 ████████████████ 100%
transport 5 5 0 0 ████████████████ 100%
Req Level Status Evidence Statement
OR-AR-1 MUST ✅ done or:1.2:conf:assessment-results/OR-AR-1 Every assessment-results object (AssessmentLineItem, AssessmentResult) MUST carry a sourcedId, a status and a dateLastModified.
OR-AR-2 MUST ✅ done or:1.2:conf:assessment-results/OR-AR-2 An AssessmentResult MUST reference its AssessmentLineItem and the student it scores, and carry a score status.
OR-AR-3 MUST ✅ done or:1.2:conf:assessment-results/OR-AR-3 An assessment-results service provider MUST serve the assessmentLineItems and assessmentResults GET endpoints (collection and single-object).
Req Level Status Evidence Statement
OR-GB-1 MUST ✅ done or:1.2:conf:gradebook/OR-GB-1 A LineItem MUST reference the class it scores and the academic session it falls within.
OR-GB-2 MUST ✅ done or:1.2:conf:gradebook/OR-GB-2 A Result MUST reference the LineItem it scores and the student it belongs to, and carry a score status.
OR-GB-3 MUST ✅ done or:1.2:conf:gradebook/OR-GB-3 Every gradebook object (LineItem, Result, Category, ScoreScale) MUST carry a sourcedId, a status and a dateLastModified.
OR-GB-4 MUST ✅ done or:1.2:conf:gradebook/OR-GB-4 A Result MUST carry the score value (or its scoreStatus rationale) and the date it was recorded.
OR-GB-5 MUST ✅ done or:1.2:conf:gradebook/OR-GB-5 A gradebook service provider MUST serve either the pull endpoints (GET categories, lineItems, results, scoreScales) or the push endpoints (PUT lineItems/{id}, PUT results/{id}).
Req Level Status Evidence Statement
OR-RES-1 MUST ✅ done or:1.2:conf:resources/OR-RES-1 A Resource MUST carry a title and a vendorResourceId identifying it within the providing vendor.
OR-RES-2 MUST ✅ done or:1.2:conf:resources/OR-RES-2 A Resource MUST carry a sourcedId, a status and a dateLastModified like every other OneRoster object.
OR-RES-3 MUST ✅ done or:1.2:conf:resources/OR-RES-3 A resources service provider MUST serve the GET /resources collection and GET /resources/{sourcedId} single-object endpoints.
Req Level Status Evidence Statement
OR-1 MUST ✅ done or:1.2:conf:rostering/OR-1 Every rostering object MUST carry a stable sourcedId and a status (active / tobedeleted), and a dateLastModified — the watermark a delta exchange reconciles against.
OR-2 MUST ✅ done or:1.2:conf:rostering/OR-2 A User MUST declare at least one role binding the user to an organization, each role carrying a roleType.
OR-3 MUST ✅ done or:1.2:conf:rostering/OR-3 An Enrollment MUST reference the user it enrols and the class it enrols them into, and declare the enrolment role.
OR-4 MUST ✅ done or:1.2:conf:rostering/OR-4 A Class MUST reference the course it instantiates and the school (org) that offers it.
OR-5 MUST ✅ done or:1.2:conf:rostering/OR-5 A rostering service provider MUST serve the collection and single-object GET endpoints for every rostering entity (academicSessions, classes, courses, enrollments, gradingPeriods, orgs, schools, students, teachers, terms, users).
Req Level Status Evidence Statement
OR-TR-1 MUST ✅ done or:1.2:conf:transport/OR-TR-1 Every REST endpoint MUST be protected by OAuth 2.0 using the Client Credentials grant, per the 1EdTech Security Framework.
OR-TR-2 MUST ✅ done or:1.2:conf:transport/OR-TR-2 A provider MUST support the pagination mechanism (the limit and offset query parameters) on every response that provides a collection.
OR-TR-3 MUST ✅ done or:1.2:conf:transport/OR-TR-3 A provider MUST support the filtering mechanism (the filter query parameter) on collection responses.
OR-TR-4 MUST ✅ done or:1.2:conf:transport/OR-TR-4 A provider MUST support the sorting mechanism (the sort and orderBy query parameters) on every response that provides a collection.
OR-TR-5 MUST ✅ done or:1.2:conf:transport/OR-TR-5 A provider MUST support the field-selection mechanism (the fields query parameter) on collection and singleton responses.

Information-model coverage (vs conform-ed model)

Section titled “Information-model coverage (vs conform-ed model)”
  • 410 literal items — 248 modelled ✅, 0 partial 🟡, 0 gaps ❌
  • Silent gaps (in spec, not modelled): none
  • conform-ed extensions (modelled, not in spec): none
  • Transport surface (REST binding, separate axis): 81 operations, 6 query parameters, 1 security scheme(s) — see the transport requirements above
  • or:1.2:conf:assessment-results/OR-AR-1
    • Every projected AssessmentLineItem (from assessment_definition) and AssessmentResult (from assessment_attempt) carries a stable sourcedId + status + dateLastModified; the offline provider-rest-routes suite and the DB-backed round-trip suite both assert it.
  • or:1.2:conf:assessment-results/OR-AR-2
    • AssessmentResult is a pure projection over real assessment outcomes: each finalized/evaluated/ submitted/invalidated assessment_attempt projects with its assessmentLineItem ref (the assessment_definition it ran), its student ref (the attempting person), and a scoreStatus derived from the attempt state — both refs resolve to served objects (the line item and the student are drawn from the exported sets). Proven offline (reference resolution) and DB-backed (the round-trip suite seeds a finalized attempt + score and asserts the projected refs resolve to the real definition and student).
  • or:1.2:conf:assessment-results/OR-AR-3
    • The assessment-results endpoints (GET assessmentLineItems / assessmentResults, collection and single) are served and contract-valid as scope-gated projections over the core — asserted by the offline provider-rest-routes suite and the DB-backed round-trip suite.
  • or:1.2:conf:gradebook/OR-GB-1
    • A LineItem references the class it scores and the academic session; the gradebook write surface persists the core rows and answers sourcedIdPairs.
  • or:1.2:conf:gradebook/OR-GB-2
    • A Result references its LineItem and the student; persisted and round-tripped by the gradebook surface.
  • or:1.2:conf:gradebook/OR-GB-3
    • LineItem/Result (and the Category/ScoreScale boundary) carry sourcedId + status + dateLastModified; the gradebook surface persists and answers them.
  • or:1.2:conf:gradebook/OR-GB-4
    • A Result carries its score and the date recorded (or the scoreStatus rationale); persisted by the gradebook write surface.
  • or:1.2:conf:gradebook/OR-GB-5
    • The gradebook surface serves both the pull endpoints (GET categories / lineItems / results / scoreScales) and the push endpoints (PUT lineItems/{id}, PUT results/{id}); the scope-gated projection is asserted by the provider-rest-routes suite.
  • or:1.2:conf:resources/OR-RES-1
    • Resources are first-class emergent data (oneroster-resources-v1; ADR-0012): the neutral catalog_resource core entity is authored by org admins (admin-console) and attached to offerings by teachers (teacher-portal), and the provider projects each catalog_resource as a wire Resource carrying its title and vendorResourceId. Proven offline by the provider-rest-routes suite (populated GET /resources) and end-to-end by the round-trip integration suite.
  • or:1.2:conf:resources/OR-RES-2
    • Every served Resource carries its sourcedId (the catalog_resource id), status, and dateLastModified; the round-trip suite reconciles by sourcedId on re-import. Proven by the same provider-rest-routes + round-trip evidence as OR-RES-1.
  • or:1.2:conf:resources/OR-RES-3
    • GET /resources and GET /resources/{sourcedId} are served as scope-gated, contract-valid endpoints, now serving the populated catalog (oneroster-resources-v1) — the relation-scoped /classes/{id}/resources and /courses/{id}/resources are served too (UserResource deferred).
  • or:1.2:conf:rostering/OR-1
    • Every consumed/served OneRoster object carries its sourcedId (stable GUID) and status; the REST delta sync reconciles by sourcedId and a tobedeleted status retracts the row.
  • or:1.2:conf:rostering/OR-2
    • ⚠️ Enrollment/user roles map onto emergent membership roles; a delta that omits a record never infers absence (only an explicit tobedeleted retracts), so partial syncs are safe.
  • or:1.2:conf:rostering/OR-3
    • Enrollments are consumed/served referencing their user and class and carrying the enrolment role; asserted by the REST sync.
  • or:1.2:conf:rostering/OR-4
    • Classes reference their course and school (org); the round-trip fixtures carry both refs and reconcile.
  • or:1.2:conf:rostering/OR-5
    • The REST provider serves the full rostering GET surface — collection + single-object for academicSessions, classes, courses, enrollments, gradingPeriods, orgs, schools, students, teachers, terms and users (plus the relation-scoped convenience routes) — with the spec envelope; asserted by the offline provider-rest-routes suite.
  • or:1.2:conf:transport/OR-TR-1
    • Every endpoint is protected by OAuth 2.0 Client Credentials: the provider issues bearer tokens from /ims/oneroster/auth/token and gates each route on the matching read/write scope.
  • or:1.2:conf:transport/OR-TR-2
    • Collection responses honour limit/offset and emit X-Total-Count + RFC-5988 Link (first/next/prev).
  • or:1.2:conf:transport/OR-TR-3
    • The filter query parameter is applied (and malformed filters answer an imsx failure).
  • or:1.2:conf:transport/OR-TR-4
    • The sort + orderBy query parameters order collection responses.
  • or:1.2:conf:transport/OR-TR-5
    • The fields query parameter projects collection and singleton responses to the requested fields.