Skip to content

emergent is a content & LTI *provider*, not consumer-only — and the conformance board must track the provider roles it already plays

Status: proposed (2026-06-21) — scoping. Update 2026-06-21: Gap 2 (LTI on the board) has landed — the lti:1.3 Coverage Map (conform-ed 2c01155) + emergent tool-role overlay (3c78e37) are live; the remaining provider gap is the Common Cartridge producer (Gap 1).

Builds on ADR-0028 (the conformance-tracking overlay) and conform-ed ADR-0013 (the Coverage Map) — the board this ADR extends; ADR-0022 (Common Cartridge decompose-and-land — the import/consumer side); ADR-0012 (OneRoster projection), ADR-0018 (CASE durable competency nodes), and the credential lane (OB 3.0 / CLR 2.0 issuer). Pre-launch, no legacy ([[feedback_no_legacy_pre_launch]]); the conformance board’s literal-schema denominator stays authoritative ([[project_coverage_map_mechanism]]).

The conformance backlog cleared down to a single theme — the Common Cartridge authorization document (CC-AUTH-1 / CC14-AUTH-1, both deferred) — and its triage reason had drifted: it read as “emergent does not consume this; not learning content,” which sounds like a permanent we-will-not. That is exactly the prose-drift the board exists to kill. The board distinguishes deferred (planned, not done) from not-applicable (genuinely never applies), and several of emergent’s overlay roles were authored as “emergent is a consumer/importer” — a true statement about what is built, mistaken for a decision about what emergent will be.

emergent intends to be a content & LTI provider. This ADR scopes what that means across the targeted spec set so the board tracks the provider roles honestly, and corrects the wording that implied consumer-permanence.

“Provider” is several distinct roles — disentangle them first

Section titled ““Provider” is several distinct roles — disentangle them first”
  • Content producer — emits a standard content artifact (a QTI package, a Common Cartridge, a CASE CFPackage).
  • Service provider — serves a standard’s API (the OneRoster REST surface).
  • Issuer — mints signed artifacts (Open Badges / CLR credentials).
  • LTI tool — a launchable tool a platform integrates (the LTI provider role).
  • LTI platform — an LMS that launches other tools (the LTI consumer role).
  • Sensor — emits analytics events (Caliper).

These are not interchangeable, and emergent already plays most of them.

The provider-role inventory (what’s true today)

Section titled “The provider-role inventory (what’s true today)”
Spec Provider/producer role Built? On the board?
Open Badges 3.0 Issuer ✅ tracked (issuer 9/9)
CLR 2.0 Issuer ✅ tracked (issuer 7/7)
CASE 1.1 Provider — CFPackage export ✅ tracked (provider profile)
OneRoster 1.2 Service provider — REST + CSV export ✅ tracked (all profiles)
QTI 3.0.1 Producer — authors + exports content packages ✅ tracked (QTI-3-native)
LTI 1.3 / Advantage Tool (provider) ✅ (lti-tool-postgresql, lti13-adapter) landed lti:1.3 — Gap 2 (emergent 3c78e37)
Common Cartridge 1.3/1.4 Producer — export cartridges ❌ import-only no producer profile
Caliper 1.2 Sensor — emits events ➖ conform-ed-only (no emitter)

emergent is already a provider in five of the targeted specs. The two genuine provider gaps are narrow and nameable: Common Cartridge producer and LTI on the board. Caliper is a separate, deliberately-unscoped sensor question.

Gap 1 — Common Cartridge producer (export)

Section titled “Gap 1 — Common Cartridge producer (export)”

emergent imports cartridges (ADR-0022 decompose-and-land) but cannot produce one. Becoming a producer means a cartridge export service: emit an imsmanifest.xml, package native content (offerings → organizations tree; QTI assessments → imsqti resources; web content/links → webcontent/imswl; discussion topics → imsdt; CASE-aligned units → Curriculum Standards Metadata) as conformant resources. It is the inverse of ADR-0022’s decomposition.

This is where the authorization document belongs: a CC producer emits an imsccauth document when it packages a protected resource. So CC-AUTH-1 is the first concrete slice of the CC producer direction, not an out-of-scope consumer concern — hence deferred, not N/A.

Producer-scope also re-opens items the consumer role legitimately closed: a producer might emit imswl @window hints and lti-link resources (pointing at emergent itself as a tool). The current lti-link = not-applicable is correct only for the consumer role.

Board impact: conform-ed grows a CC producer profile (export-side MUSTs); emergent adds producer overlay entries. Sizing: substantial — its own design increment.

Gap 2 — LTI on the board (track what already exists) — LANDED 2026-06-21

Section titled “Gap 2 — LTI on the board (track what already exists) — LANDED 2026-06-21”

This gap is now closed: the lti:1.3 map (conform-ed 2c01155, 46 items / 27 reqs across 6 profiles — core, security, nrps, ags, deep-linking, proctoring) and emergent’s tool-role overlay (3c78e37, 10 done / 13 partial / 3 deferred / 1 N/A, all proven offline under --require-proof) are live. AGS landed as the schema-backed spine exactly as scoped below (5 lifted media-type schemas reconcile 0 gaps + a 7-operation transport axis); Core/NRPS/Deep-Linking/Proctoring are guide-catalogue, cited 0 throughout (the AGS OpenAPI uses prose-case “must”, not ALL-CAPS MUST — so AGS earns “schema-backed” via L2 reconciliation, not cited, like the XSD CC/QTI maps). The design rationale that follows is the as-built record. Note partial is the dominant honest verdict: emergent owns the tool surface while the vendored adapter does the raw OIDC/JWT/OAuth crypto.

emergent is a conformant-ish LTI 1.3 tool, but the board cannot see it, so we cannot say how complete the Advantage surface (Names & Role Provisioning, Assignment & Grade Services, Deep Linking) is. Adding LTI tracking is mostly “make the existing role visible.”

Mechanism note (important): LTI conformance is flow/protocol-shaped (OIDC launch, OAuth 2.0 client-credentials, signed messages), not a single published schema, so it only partly fits the Coverage Map’s schema denominator. Verified against the published specs (2026-06-21):

  • AGS 2.0 has a machine-readable denominator — the spec references an accompanying AGS OpenAPI (§3.2.1) defining the lineitem(container) / score / result(container) media types and the REST endpoints. So AGS walks as JSON-Schema (info model) + the transport axis (walkOpenApiPaths, built for OneRoster), reconciled against the existing LtiAgsV2_0 Zod — a real cited denominator.
  • NRPS 2.0 publishes NO schema — the membership service is human examples + normative prose only (confirmed: no OpenAPI/JSON-Schema artifact). It is guide-catalogue-only (curated MUSTs, no cited), like the other guide-only maps.
  • LTI Core 1.3 launch claims + Deep Linking 2.0 messages — URN-keyed JSON defined in spec prose, no single published schema → guide-catalogue-only as well.

So the LTI map is a hybrid: a thin schema-reconciled spine (AGS) plus a guide-curated catalogue (Core, NRPS, Deep Linking). conform-ed already holds the matching Zod contracts (packages/contracts/src/lti/*: LtiV1_3, LtiNrpsV2_0, LtiAgsV2_0, LtiDeepLinkingV2_0, LtiProctoringV1_0); the wire format is URN/snake_case while the Zod is normalized camelCase, so the AGS reconciliation needs a nameNormalizer (as QTI’s XML↔JSON binding does). emergent already implements the tool side of Core + NRPS + AGS + Deep Linking (apps/api/src/features/lti-tool/*: launch, NRPS, AGS, context-mapping, identity-binding, plus a Deep Linking content-selection response that assembles ltiResourceLink content items and returns the auto-submit redirect — so DL is partial, not unbuilt); only Proctoring is unbuilt. Sizing: medium; the highest-signal first step, and the catalogue dominates (only AGS carries a denominator).

  1. Affirm the provider direction. emergent is a content & LTI provider; the board tracks provider roles, not just consumer ones. Overlays stop implying consumer-permanence.
  2. Authorization stays deferred, never N/A — it is the first slice of the CC producer direction (and protected-resource consumption), which is planned.
  3. Sequence: (a) ✅ corrected the drifted consumer-only wording (this ADR’s companion overlay change); (b) ✅ LTI on the board — landed 2026-06-21 (lti:1.3, conform-ed 2c01155 + emergent 3c78e37); it exercised the transport-axis walker on a real protocol as intended; (c) next: scope the CC producer as its own design increment (inverse of ADR-0022).
  4. Caliper stays out — no analytics-emitter product need yet; it remains conform-ed-only.
  • The board gains a provider dimension: emergent can claim the issuer/provider/producer conformance it already has, and shows a tracked path (not prose) to the rest.
  • A CC producer profile and an LTI map are future conform-ed additions; until they exist, the provider scope lives here.
  • Consumer-scoped not-applicable items (notably lti-link) are explicitly revisitable under the producer role — recorded, not silently permanent.
  • This is a scoping ADR: it commits to tracking and intent, not to an implementation timeline. The two gaps each get their own design ADR when picked up.