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 trigger
Section titled “The trigger”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 existingLtiAgsV2_0Zod — a realciteddenominator. - 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).
Decision (proposed)
Section titled “Decision (proposed)”- Affirm the provider direction. emergent is a content & LTI provider; the board tracks provider roles, not just consumer ones. Overlays stop implying consumer-permanence.
- Authorization stays
deferred, never N/A — it is the first slice of the CC producer direction (and protected-resource consumption), which is planned. - 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-ed2c01155+ emergent3c78e37); 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). - Caliper stays out — no analytics-emitter product need yet; it remains conform-ed-only.
Consequences
Section titled “Consequences”- 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-applicableitems (notablylti-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.