TimeBack Platform / QTI / Alpha Surface / Data Dictionary

School-language QTI objects, traced to the approved qti.* database truth.

Alpha is not a second QTI schema. This dictionary maps the objects teachers, students, parents, and app-builder LLMs work with to the approved 1EdTech data dictionary, the shared Supabase qti.* tables, and the Alpha ITDs that allow each rename, restriction, cut, or extension.

9public Alpha objects
13shared qti.* tables
127shared fields mapped
10allowed-value sets

How to Read This Dictionary

Each Alpha field has an Alpha name, a canonical qti.* source or derived-source path, type, nullability, constraints, invalid examples, and links to Alpha architecture ITDs. If an Alpha field cannot be traced here, implementation must stop and roll back to architecture.

1EdTech pass-through Alpha rename Alpha restriction Alpha cut Alpha extension

Alpha Public Object Index

Alpha public object

Workspace

The school, district, publisher, or application boundary that owns Alpha QTI content, activities, answer submissions, and result views.

Created before a package is imported or an activity starts. All public Alpha operations must be scoped to the authenticated workspace.

Source tables
qti.tenant
Example
{
  "workspaceId": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
  "workspaceKey": "north-valley",
  "name": "North Valley School District",
  "createdAt": "2026-05-20T12:30:00Z"
}
Alpha Field Type and Nullability Meaning and Constraints Provenance and Example
workspaceIdsource qti.tenant.tenant_id
Alpha rename Public foundation

uuid

Required

Default: none

Stable platform identifier for one tenant boundary.

Constraints: Must be a valid PostgreSQL UUID and unique as the primary key.

Relationship: None.

Invalid when: Not parseable as UUID, reused by another tenant, or copied into QTI XML as assessment content.

Source: qti.tenant.tenant_id

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, School Vocabulary Layer, Alpha Provenance Requirements

Example: 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3

workspaceKeysource qti.tenant.tenant_key
Alpha rename Public foundation

text

Required

Default: none

Human-stable lookup key for operations, logs, and local tooling.

Constraints: Unique across qti.tenant. SQL has no length or charset check; API and migrations should keep it short, stable, and non-secret.

Relationship: None.

Invalid when: Duplicated, empty in API input, used for direct learner identity, or treated as a QTI identifier.

Source: qti.tenant.tenant_key

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, School Vocabulary Layer, Alpha Provenance Requirements

Example: north-valley

namesource qti.tenant.display_name
Alpha rename Public foundation

text

Required

Default: none

Operational display label for the tenant.

Constraints: Required text. SQL has no length check; do not use as an authorization key.

Relationship: None.

Invalid when: Null, blank in API input, or used in place of tenant_id for joins.

Source: qti.tenant.display_name

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Shared QTI Persistence, Alpha Facade, Alpha Provenance Requirements

Example: North Valley School District

createdAtsource qti.tenant.created_at
Alpha rename Public foundation

timestamptz

Required

Default: now()

Timestamp when the tenant row was inserted.

Constraints: Required timestamp with time zone. Defaults to database now().

Relationship: None.

Invalid when: Null, manually backdated without migration evidence, or compared as local time without timezone normalization.

Source: qti.tenant.created_at

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, School Vocabulary Layer, Alpha Provenance Requirements

Example: 2026-05-20T12:30:00Z

Alpha public object

Assessment package

A validated uploaded QTI package summarized for teachers and app-builder LLMs. It tells whether import succeeded, what content was created, and where safe validation evidence lives.

Created by importAssessmentPackage. A package can be checking, ready, rejected, or replaced; only ready packages produce content that can be delivered.

Source tables
qti.content_package, qti.package_resource, qti.package_file
Example
{
  "packageId": "7f2e4dd2-c147-49ea-af77-41a6fdd70980",
  "workspaceId": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
  "sourceName": "publisher/grade-6-math/qti.zip",
  "importStatus": "ready",
  "qtiProfile": "qti-3.0",
  "contentCreated": {
    "questions": 12,
    "tests": 1,
    "passages": 2
  },
  "importedAt": "2026-05-20T13:00:00Z"
}
Alpha Field Type and Nullability Meaning and Constraints Provenance and Example
packageIdsource qti.content_package.package_id
Alpha restriction Public import summary

uuid

Required

Default: none

Stable identifier assigned to one package ingest record.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused across package rows.

Source: qti.content_package.package_id

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: 7f2e4dd2-c147-49ea-af77-41a6fdd70980

workspaceIdsource qti.content_package.tenant_id
Alpha rename Public import summary

uuid

Required

Default: none

Tenant that owns the package and all extracted resources.

Constraints: Must reference qti.tenant(tenant_id).

Relationship: Belongs to exactly one qti.tenant; not nullable.

Invalid when: References a missing tenant or disagrees with the tenant path in the API request.

Source: qti.content_package.tenant_id

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3

sourceNamesource qti.content_package.source_uri
Alpha rename Public import summary

text

Nullable

Default: none

Friendly file name, URI, or content-addressable label shown for the uploaded assessment package. It is diagnostic only and not a trusted package locator.

Constraints: Nullable text. It is diagnostic only and must not be used as a trusted package locator after ingest.

Relationship: None.

Invalid when: Used as a primary identity, contains secrets, or points outside tenant authorization.

Source: qti.content_package.source_uri

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, School Vocabulary Layer, Plain-Language Problems, Alpha Provenance Requirements

Example: publisher/grade-6-math/qti.zip

idempotencyKeysource qti.content_package.idempotency_key
Alpha restriction Advanced request safety

text

Nullable

Default: none

Idempotency-Key from the package ingest API so retries return the same package instead of duplicating work.

Constraints: Unique with tenant_id. PostgreSQL allows multiple nulls; API ingest should provide a key for client retries.

Relationship: None.

Invalid when: Same tenant reuses the key for different package bytes, or a secret/token is stored here.

Source: qti.content_package.idempotency_key

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: pkg-upload-2026-05-20-001

packageHashsource qti.content_package.package_hash
Alpha restriction Advanced provenance

text

Required

Default: none

Cryptographic hash of the normalized package payload used to identify repeated imports.

Constraints: Required text and unique with tenant_id. Store the algorithm prefix with the digest, such as sha256:<hex>.

Relationship: None.

Invalid when: Missing, not reproducible from the normalized package, or reused for different bytes in one tenant.

Source: qti.content_package.package_hash

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: sha256:6a8c1f58c16f4b0b4f0a0d8c6be8d226e3d5d80f0b2f7d2f49e6d7d9e9d4f1cb

manifestIdentifiersource qti.content_package.manifest_identifier
Alpha restriction Advanced provenance

text

Nullable

Default: none

IMS manifest identifier copied from imsmanifest when the package has one.

Constraints: Nullable because loose XML ingest may not include imsmanifest. If present, preserve the source value without Alpha renaming.

Relationship: None.

Invalid when: Invented when no manifest exists, changed to a platform name, or used as a database primary key.

Source: qti.content_package.manifest_identifier

Source class: 1EdTech pass-through

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: MANIFEST-G6-MATH-2026

qtiProfilesource qti.content_package.qti_profile
Alpha restriction Public import summary

text

Required

Default: 'qti-3.0'

Conformance profile asserted for this import.

Constraints: Required text. Current default and target profile is qti-3.0; optional feature sets must be explicit and supported by conformance evidence.

Relationship: None.

Invalid when: Unsupported profile string, null, or used to imply the live network spec changed the accepted bundle.

Source: qti.content_package.qti_profile

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: qti-3.0

importStatussource qti.content_package.import_status
Alpha restriction Public import summary

text

Required

Default: 'imported'

Current lifecycle state of package ingest.

Constraints: Must satisfy content_package_import_status_ck.

Relationship: None.

Invalid when: Outside the enum set or inconsistent with resource/artifact projection state.

Allowed values: import_status

Source: qti.content_package.import_status

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: imported

contentCreatedsource qti.content_package.metadata; qti.artifact.artifact_kind
Alpha extension Public derived field

object

Required

Default: none

Safe counts of questions, tests, passages, sections, and assets created from the package.

Constraints: Derived from qti.content_package.metadata plus qti.artifact rows. Counts must not include raw package bytes, secrets, or direct learner data.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: qti.content_package.metadata; qti.artifact.artifact_kind

Source class: Alpha extension

Alpha ITDs: Restricted Assessment Package Import, Content Catalog Read Model

Example: {"questions":12,"tests":1,"passages":2}

importEvidencesource qti.content_package.metadata
Alpha restriction Public import summary

jsonb

Required

Default: '{}'::jsonb

Safe generated import evidence such as content counts, validation diagnostics, and package facts. Alpha summaries must not include package bytes or secrets.

Constraints: Required JSON object. Do not store package bytes or secrets here; store original bytes in qti.package_file.

Relationship: None.

Invalid when: Null, non-object JSON, direct learner PII, access tokens, or duplicated source XML bytes.

Source: qti.content_package.metadata

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: {"resourceCount":18,"fileCount":42}

importedAtsource qti.content_package.imported_at
Alpha restriction Public import summary

timestamptz

Required

Default: now()

Timestamp when the package row was inserted.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or used as the source of content version ordering instead of artifact_version.version_number.

Source: qti.content_package.imported_at

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: 2026-05-20T13:00:00Z

Alpha public object

Content

A school-language catalog entry for a question, test, section, passage, or other QTI artifact that can be inspected, delivered, edited, or exported.

Created by package import or authoring. It is stable across versions; each save creates a new contentVersion rather than overwriting past versions.

Source tables
qti.artifact, qti.artifact_version, qti.component, qti.content_package
Example
{
  "contentId": "9e8d7c21-5983-4c8f-a5af-124a4f91519a",
  "kind": "question",
  "title": "Linear equations checkpoint",
  "language": "en-US",
  "latestVersionId": "efcf3561-3a66-4825-9588-e792ef20c312",
  "qtiIdentifier": "ITEM-LINEAR-EQ-001"
}
Alpha Field Type and Nullability Meaning and Constraints Provenance and Example
contentIdsource qti.artifact.artifact_id
Alpha rename Public catalog source

uuid

Required

Default: none

Stable platform identity for one logical artifact across versions.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID, reused, or derived from a mutable QTI identifier.

Source: qti.artifact.artifact_id

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: 58612cab-9c46-426c-8c20-0e9f19c807c5

workspaceIdsource qti.artifact.tenant_id
Alpha rename Public catalog source

uuid

Required

Default: none

Tenant that owns this artifact.

Constraints: Must reference qti.tenant(tenant_id).

Relationship: Belongs to exactly one qti.tenant.

Invalid when: Missing tenant or different from the owning package tenant.

Source: qti.artifact.tenant_id

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, Content Catalog Read Model, School Vocabulary Layer, Alpha Provenance Requirements

Example: 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3

packageIdsource qti.artifact.package_id
Alpha rename Public catalog source

uuid

Nullable

Default: none

Origin package for imported artifacts.

Constraints: Nullable for authored loose artifacts. If present, must reference qti.content_package(package_id). Set null if package is deleted.

Relationship: Belongs to zero or one qti.content_package.

Invalid when: References a package owned by another tenant.

Source: qti.artifact.package_id

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: 7f2e4dd2-c147-49ea-af77-41a6fdd70980

packageResourceIdsource qti.artifact.resource_id
Alpha rename Advanced provenance

uuid

Nullable

Default: none

Origin manifest resource for imported artifacts.

Constraints: Nullable for generated or loose artifacts. If present, must reference qti.package_resource(resource_id). Set null if resource is deleted.

Relationship: Belongs to zero or one qti.package_resource.

Invalid when: Resource comes from another package or tenant.

Source: qti.artifact.resource_id

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: aafcefe4-9814-4d43-93be-556dc38dace0

kindsource qti.artifact.artifact_kind
Alpha rename Public catalog source

text

Required

Default: none

Repository category derived from QTI root element or manifest resource type.

Constraints: Must satisfy artifact_kind_ck.

Relationship: None.

Invalid when: Outside enum set, inconsistent with root_element on versions, or changed for Alpha vocabulary.

Allowed values: artifact_kind

Source: qti.artifact.artifact_kind

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: item

qtiIdentifiersource qti.artifact.qti_identifier
Alpha rename Advanced QTI identity

text

Nullable

Default: none

QTI identifier attribute copied from the root object when present.

Constraints: Nullable because not every artifact has a root identifier. Preserve source spelling; do not use as a globally unique database key.

Relationship: None.

Invalid when: Invented when absent, rewritten to a UUID, or assumed unique outside artifact scope.

Source: qti.artifact.qti_identifier

Source class: 1EdTech pass-through

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: RESPONSE-001

titlesource qti.artifact.title
Alpha rename Public catalog source

text

Nullable

Default: none

QTI title or generated display label when present.

Constraints: Nullable. Preserve QTI title when present; generated labels must be distinguishable in metadata/spec trace.

Relationship: None.

Invalid when: Used as identity, translated without retaining source XML, or contains direct learner PII.

Source: qti.artifact.title

Source class: 1EdTech pass-through

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: Linear equations checkpoint

languagesource qti.artifact.language
Alpha rename Public catalog source

text

Nullable

Default: none

xml:lang or package-default language associated with the artifact.

Constraints: Nullable BCP 47 language tag when known.

Relationship: None.

Invalid when: Not a language tag, invented without source/default evidence, or used to filter tenant access.

Source: qti.artifact.language

Source class: 1EdTech pass-through

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: en-US

latestVersionIdsource qti.artifact.latest_version_id
Alpha rename Public catalog source

uuid

Nullable

Default: none

Newest immutable artifact version for convenience reads.

Constraints: Nullable until a version exists. Must point to a qti.artifact_version for this same artifact when populated.

Relationship: Points to zero or one qti.artifact_version for the same artifact.

Invalid when: Points to another artifact's version or treated as authoritative history instead of the artifact_version table.

Source: qti.artifact.latest_version_id

Source class: Platform gap fill

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, School Vocabulary Layer, Alpha Provenance Requirements

Example: efcf3561-3a66-4825-9588-e792ef20c312

summarysource qti.artifact.title; qti.artifact.language; qti.component.text_value; qti.content_package.metadata
Alpha extension Public derived field

object

Required

Default: none

Safe catalog summary extracted from selected QTI components and metadata so users can find content without reading XML.

Constraints: Derived only from content fields and selected component values. Must not include raw XML, package bytes, learner data, or processing traces.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: qti.artifact.title; qti.artifact.language; qti.component.text_value; qti.content_package.metadata

Source class: Alpha extension

Alpha ITDs: Content Catalog Read Model, Cut Raw QTI Internals From Public Alpha

Example: {"itemCount":12,"hasScoring":true}

createdAtsource qti.artifact.created_at
Alpha rename Public catalog source

timestamptz

Required

Default: now()

Logical artifact creation timestamp.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or used as version_number.

Source: qti.artifact.created_at

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: 2026-05-20T13:00:02Z

Alpha public object

Content version

One immutable saved edition of content. This is the ID activities and answer submissions pin so old results do not change when a teacher edits content later.

Created by package import or saveContentDraft. New edits create new versions; previous versions remain available for delivery history and export.

Source tables
qti.artifact_version
Example
{
  "contentVersionId": "efcf3561-3a66-4825-9588-e792ef20c312",
  "contentId": "9e8d7c21-5983-4c8f-a5af-124a4f91519a",
  "versionNumber": 3,
  "studentView": {
    "lossiness": "declared",
    "kind": "item"
  },
  "editingDraft": {
    "lossiness": "none",
    "kind": "item"
  }
}
Alpha Field Type and Nullability Meaning and Constraints Provenance and Example
contentVersionIdsource qti.artifact_version.artifact_version_id
Alpha rename Public version source with backstage internals

uuid

Required

Default: none

Stable identifier for one immutable artifact edition.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused.

Source: qti.artifact_version.artifact_version_id

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: efcf3561-3a66-4825-9588-e792ef20c312

contentIdsource qti.artifact_version.artifact_id
Alpha rename Public version source with backstage internals

uuid

Required

Default: none

Logical artifact this version belongs to.

Constraints: Must reference qti.artifact(artifact_id). Cascades on artifact delete.

Relationship: Belongs to exactly one qti.artifact.

Invalid when: Missing artifact or cross-tenant mismatch through artifact.

Source: qti.artifact_version.artifact_id

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: 58612cab-9c46-426c-8c20-0e9f19c807c5

versionNumbersource qti.artifact_version.version_number
Alpha rename and restriction Public version source with backstage internals

integer

Required

Default: none

Forward-only per-artifact version number.

Constraints: Required integer and unique with artifact_id. Should increase by one for each saved edition.

Relationship: None.

Invalid when: Zero or negative by convention, duplicated for an artifact, skipped without migration evidence, or reused after rollback.

Source: qti.artifact_version.version_number

Source class: Platform gap fill

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: 1

studentViewsource qti.artifact_version.delivery_json
Alpha rename Public version source with backstage internals

jsonb

Nullable

Default: none

Generated consumer-facing projection used by delivery applications and session snapshots.

Constraints: Nullable before projection. May omit only declared authoring-only or diagnostic detail; must preserve identifiers needed for responses, feedback, scoring, accessibility matching, and session replay.

Relationship: None.

Invalid when: Drops response identifiers, scoring dependencies, feedback links, accessibility references, or includes source traces not intended for delivery.

Allowed values: projection_lossiness

Source: qti.artifact_version.delivery_json

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, School Vocabulary Layer, Content Catalog Read Model, Lossless Authoring Commands, Alpha Provenance Requirements

Example: {"kind":"item","identifier":"RESPONSE-001","interactions":[...]}

editingDraftsource qti.artifact_version.authoring_json
Alpha rename and restriction Public version source with backstage internals

jsonb

Nullable

Default: none

Generated authoring projection for editors that must preserve all spec-defined fields.

Constraints: Nullable before projection. Must round-trip to object_graph with no spec-defined field loss.

Relationship: None.

Invalid when: Lossy, missing extension payloads, missing source trace needed for edits, or used for delivery without declared lossiness.

Allowed values: projection_lossiness

Source: qti.artifact_version.authoring_json

Source class: Platform gap fill

Alpha ITDs: Lossless Authoring Commands, School Vocabulary Layer, Content Catalog Read Model, Activity Delivery Language, Alpha Provenance Requirements

Example: {"kind":"item","identifier":"RESPONSE-001","sourceTrace":{...}}

sourceXmlsource qti.artifact_version.source_xml
Alpha restriction Advanced QTI portability

xml

Required

Default: none

Original XML accepted after bundled XSD/Schematron validation.

Constraints: Required PostgreSQL xml. Must validate before object creation and persistence.

Relationship: None.

Invalid when: Malformed XML, not valid against the bundled schema, contains direct learner runtime PII, or differs from the persisted object graph without trace.

Source: qti.artifact_version.source_xml

Source class: 1EdTech pass-through

Alpha ITDs: Lossless Authoring Commands, Alpha Provenance Requirements, Content Catalog Read Model, Activity Delivery Language

Example: <qti-assessment-item identifier="RESPONSE-001" ...>

canonicalXmlsource qti.artifact_version.canonical_xml
Alpha restriction Advanced QTI portability

text

Required

Default: none

Canonicalized XML used for equivalence checks and stable export.

Constraints: Required text. Must round-trip from object graph to XML and hash to xml_hash.

Relationship: None.

Invalid when: Not reproducible from object_graph, hash mismatch, or changed after delivery sessions point to this version.

Source: qti.artifact_version.canonical_xml

Source class: 1EdTech pass-through

Alpha ITDs: Lossless Authoring Commands, Alpha Provenance Requirements, Content Catalog Read Model, Activity Delivery Language

Example: <qti-assessment-item identifier="RESPONSE-001" ...>

xmlHashsource qti.artifact_version.xml_hash
Alpha rename and restriction Advanced provenance

text

Required

Default: none

Hash of canonical_xml used for idempotency and semantic preservation checks.

Constraints: Required text and unique with artifact_id. Store algorithm prefix with digest.

Relationship: None.

Invalid when: Does not match canonical_xml, algorithm omitted, or duplicates a prior version for the same artifact.

Source: qti.artifact_version.xml_hash

Source class: Platform gap fill

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: sha256:e8a86d190e6d8865c4562b8e8b2b1e299f8a8d37a58c0bb71b35ef28bb62ab31

qtiRootElementsource qti.artifact_version.root_element
Alpha rename and restriction Advanced provenance

text

Required

Default: none

Root XML element for this version.

Constraints: Required text generated from bundled XSD root element catalog.

Relationship: None.

Invalid when: Not present in the bundled root catalog or inconsistent with source_xml.

Source: qti.artifact_version.root_element

Source class: 1EdTech pass-through

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: qti-assessment-item

schemaFilesource qti.artifact_version.schema_file
Alpha rename and restriction Advanced provenance

text

Required

Default: none

Bundled schema file used as validation authority.

Constraints: Required text. Must name a schema in the offline QTI source bundle.

Relationship: None.

Invalid when: Live network schema URL, missing local schema, or schema that does not define the root.

Source: qti.artifact_version.schema_file

Source class: 1EdTech pass-through

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: imsqti_itemv3p0p1_v1p0.xsd

specTracesource qti.artifact_version.spec_trace
Alpha rename and restriction Advanced provenance

jsonb

Required

Default: '{}'::jsonb

Generated traceability from classes, fields, and components to XSD/spec anchors.

Constraints: Required JSON object. Must point back to the offline source bundle and generated model evidence.

Relationship: None.

Invalid when: Null, non-object JSON, live-only references, or links that cannot be reproduced from the bundle.

Source: qti.artifact_version.spec_trace

Source class: 1EdTech pass-through

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: {"rootElement":"qti-assessment-item","schemaFile":"imsqti_itemv3p0p1_v1p0.xsd"}

previousVersionIdsource qti.artifact_version.supersedes_version_id
Alpha rename Public version source with backstage internals

uuid

Nullable

Default: none

Previous version replaced by this version, when the save was an edit or replacement.

Constraints: Nullable. If present, must reference qti.artifact_version(artifact_version_id), normally for the same artifact.

Relationship: References zero or one earlier qti.artifact_version.

Invalid when: Points forward in time, points to another artifact without explicit migration evidence, or creates a cycle.

Source: qti.artifact_version.supersedes_version_id

Source class: Platform gap fill

Alpha ITDs: Lossless Authoring Commands, Content Catalog Read Model, Activity Delivery Language, Alpha Provenance Requirements

Example: a1f6b903-b26f-43ac-93ce-f6626ce3810d

createdAtsource qti.artifact_version.created_at
Alpha rename and restriction Public version source with backstage internals

timestamptz

Required

Default: now()

Timestamp when this immutable version was created.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or mutated to reorder version history.

Source: qti.artifact_version.created_at

Source class: Platform gap fill

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: 2026-05-20T13:00:03Z

createdBysource qti.artifact_version.created_by
Alpha rename and restriction Public version source with backstage internals

text

Nullable

Default: none

Principal or system actor that created the version.

Constraints: Nullable text. Must be a safe principal label; do not store raw JWTs or secrets.

Relationship: None.

Invalid when: Raw access token, raw JWT subject that identifies a learner, email address, or other direct learner PII.

Source: qti.artifact_version.created_by

Source class: Platform gap fill

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: system:package-ingest

Alpha public object

Activity

A student's live or historical interaction with an immutable content version, including the exact studentView snapshot shown at start.

Created by startActivity, progresses through activity status values, and owns answer submissions. Deleting student test data removes activities and submissions for the pseudonymous studentRef.

Source tables
qti.delivery_session, qti.artifact_version
Example
{
  "activityId": "e0b41369-3019-42a5-a419-d5da6e33904f",
  "workspaceId": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
  "studentRef": "9c41d14e-d011-4517-927e-b9bf0b7d5df4",
  "contentVersionId": "efcf3561-3a66-4825-9588-e792ef20c312",
  "status": "inProgress"
}
Alpha Field Type and Nullability Meaning and Constraints Provenance and Example
activityIdsource qti.delivery_session.delivery_session_id
Alpha rename Public runtime object

uuid

Required

Default: none

Stable session identifier exposed by delivery APIs.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID, reused, or guessable outside API authorization.

Source: qti.delivery_session.delivery_session_id

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: e0b41369-3019-42a5-a419-d5da6e33904f

workspaceIdsource qti.delivery_session.tenant_id
Alpha rename Public runtime object

uuid

Required

Default: none

Tenant boundary for the delivery session.

Constraints: Must reference qti.tenant(tenant_id).

Relationship: Belongs to exactly one qti.tenant.

Invalid when: Does not match authenticated tenant claim or root artifact tenant.

Source: qti.delivery_session.tenant_id

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3

studentRefsource qti.delivery_session.candidate_ref
Alpha rename and restriction Public runtime object

text

Required

Default: none

The Alpha student reference for this activity. It must be an opaque tenant-scoped pseudonymous UUID string, not a student's name, email, SIS ID, JWT subject, phone number, or parent contact detail.

Constraints: Required text. Reject direct PII, auth tokens, raw JWT subjects, SIS IDs, contact details, and values that are not scoped to the tenant.

Relationship: Indexed with tenant_id for candidate session history and deletion.

Invalid when: Contains direct learner or parent PII, can be joined outside the tenant without an identity service, or is reused as a QTI content identifier.

Source: qti.delivery_session.candidate_ref

Source class: Platform gap fill

Alpha ITDs: StudentRef Privacy Language, Activity Delivery Language, Alpha Provenance Requirements

Example: 9c41d14e-d011-4517-927e-b9bf0b7d5df4

contentVersionIdsource qti.delivery_session.root_artifact_version_id
Alpha rename Public runtime object

uuid

Required

Default: none

Immutable item, test, or section version delivered in this session.

Constraints: Must reference qti.artifact_version(artifact_version_id).

Relationship: Belongs to exactly one qti.artifact_version.

Invalid when: Missing version, version not owned by tenant, or changed after session start.

Source: qti.delivery_session.root_artifact_version_id

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, Content Catalog Read Model, StudentRef Privacy Language, Alpha Provenance Requirements

Example: efcf3561-3a66-4825-9588-e792ef20c312

statussource qti.delivery_session.status
Alpha rename Public runtime object

text

Required

Default: 'created'

Session lifecycle state.

Constraints: Must satisfy delivery_session_status_ck.

Relationship: None.

Invalid when: Outside enum set or inconsistent with attempts, submitted_at, or review workflow.

Allowed values: delivery_session_status

Source: qti.delivery_session.status

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: active

studentViewSnapshotsource qti.delivery_session.delivery_json_snapshot
Alpha rename Public runtime object

jsonb

Required

Default: none

Snapshot of delivery_json at session start.

Constraints: Required JSON object. Must remain stable for the session even if the artifact later receives a new version.

Relationship: None.

Invalid when: Null, mismatched to root_artifact_version_id at start, mutated after attempts, or contains authoring-only trace without declared lossiness.

Source: qti.delivery_session.delivery_json_snapshot

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: {"kind":"item","identifier":"RESPONSE-001"}

activityStatesource qti.delivery_session.session_state
Alpha rename and restriction Public runtime object

jsonb

Required

Default: '{}'::jsonb

Runtime state not modeled as QTI variables, such as navigation, item sequencing, resume information, or review flags.

Constraints: Required JSON object. Treat as learner-runtime data. Do not store direct PII, raw PNP records, tokens, IP addresses, or user agents.

Relationship: None.

Invalid when: Null, non-object JSON, auth headers, raw PNP records, direct learner identity, or state that contradicts delivery_json_snapshot.

Source: qti.delivery_session.session_state

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: {"navigation":"item","currentItem":"RESPONSE-001"}

createdAtsource qti.delivery_session.created_at
Alpha rename Public runtime object

timestamptz

Required

Default: now()

Session creation timestamp.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or later than updated_at.

Source: qti.delivery_session.created_at

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:15:00Z

updatedAtsource qti.delivery_session.updated_at
Alpha rename Public runtime object

timestamptz

Required

Default: now()

Last session state mutation timestamp.

Constraints: Required timestamp with time zone. Must be updated when status or session_state changes.

Relationship: None.

Invalid when: Null, earlier than created_at, or stale after status/session_state update.

Source: qti.delivery_session.updated_at

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:16:10Z

Alpha public object

Answer submission

The student's answers for an activity, checked against generated QTI declarations before processing and stored with result state after processing.

Created or updated by submitAnswers. Alpha rejects answer shapes that do not match QTI cardinality and base-type declarations instead of coercing them silently.

Source tables
qti.attempt, qti.variable_declaration, qti.processing_rule
Example
{
  "submissionId": "4a3996a6-c638-4813-8969-4ed9a72b29a0",
  "activityId": "e0b41369-3019-42a5-a419-d5da6e33904f",
  "attemptNumber": 1,
  "status": "submitted",
  "answers": {
    "RESPONSE": "B"
  },
  "results": {
    "SCORE": 1
  }
}
Alpha Field Type and Nullability Meaning and Constraints Provenance and Example
submissionIdsource qti.attempt.attempt_id
Alpha rename Public runtime object

uuid

Required

Default: none

Stable identifier for one attempt record.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused.

Source: qti.attempt.attempt_id

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 69e74a21-1190-492f-9f64-7557754d6eef

activityIdsource qti.attempt.delivery_session_id
Alpha rename Public runtime object

uuid

Required

Default: none

Owning delivery session.

Constraints: Must reference qti.delivery_session(delivery_session_id). Cascades on session delete.

Relationship: Belongs to exactly one qti.delivery_session.

Invalid when: Missing session or tenant mismatch through session.

Source: qti.attempt.delivery_session_id

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: e0b41369-3019-42a5-a419-d5da6e33904f

contentVersionIdsource qti.attempt.artifact_version_id
Alpha rename Public runtime object

uuid

Required

Default: none

Immutable item/test artifact version attempted.

Constraints: Must reference qti.artifact_version(artifact_version_id).

Relationship: Belongs to exactly one qti.artifact_version.

Invalid when: Does not belong to the delivery session snapshot or changes after processing.

Source: qti.attempt.artifact_version_id

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Content Catalog Read Model, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: efcf3561-3a66-4825-9588-e792ef20c312

attemptNumbersource qti.attempt.attempt_number
Alpha rename and extension Public runtime object

integer

Required

Default: none

Attempt count within a session and artifact version.

Constraints: Required integer and unique with delivery_session_id plus artifact_version_id. Should increase for repeated attempts.

Relationship: None.

Invalid when: Zero or negative by convention, duplicated, or reused after an adaptive attempt changes state.

Source: qti.attempt.attempt_number

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 1

statussource qti.attempt.status
Alpha rename and extension Public runtime object

text

Required

Default: 'active'

Attempt lifecycle state.

Constraints: Must satisfy attempt_status_ck.

Relationship: None.

Invalid when: Outside enum set or inconsistent with suspended_at/submitted_at.

Allowed values: attempt_status

Source: qti.attempt.status

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: submitted

answerssource qti.attempt.response_state
Alpha rename and restriction Public runtime object

jsonb

Required

Default: '{}'::jsonb

Candidate response variables at the last processing point.

Constraints: Required JSON object. Keys should be QTI response variable identifiers; values must match declaration cardinality/base_type. Treat as learner data.

Relationship: None.

Invalid when: Null, values inconsistent with qti.variable_declaration, unnecessary learner PII copied from outside the response, or logged without redaction.

Source: qti.attempt.response_state

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, StudentRef Privacy Language, Results And Grading Explanations, Alpha Provenance Requirements

Example: {"RESPONSE":"choiceA"}

answerSchemasource qti.variable_declaration.variable_kind; qti.variable_declaration.identifier; qti.variable_declaration.cardinality; qti.variable_declaration.base_type
Alpha extension Public derived field

object

Required

Default: none

Generated schema of answer slots, cardinality, base type, correct-response availability, and mapping rules used to validate answers before processing.

Constraints: Derived from qti.variable_declaration rows where variable_kind is response. Alpha must reject undeclared answer slots and wrong cardinality/base-type values.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: qti.variable_declaration.variable_kind; qti.variable_declaration.identifier; qti.variable_declaration.cardinality; qti.variable_declaration.base_type

Source class: Alpha extension

Alpha ITDs: Declaration-Checked Answers

Example: {"RESPONSE":{"cardinality":"single","baseType":"identifier"}}

templateStatesource qti.attempt.template_state
Alpha restriction Advanced provenance

jsonb

Required

Default: '{}'::jsonb

Template variables used for item cloning and stability.

Constraints: Required JSON object. Keys should be QTI template variable identifiers; values must match declarations.

Relationship: None.

Invalid when: Null, regenerated on read instead of persisted, inconsistent with template processing trace, or logged with learner identity.

Source: qti.attempt.template_state

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: {"A":3,"B":5}

resultssource qti.attempt.outcome_state
Alpha rename and extension Public runtime object

jsonb

Required

Default: '{}'::jsonb

Outcome variables after template, response, and outcome processing.

Constraints: Required JSON object. Keys should be QTI outcome variable identifiers; values must match declarations and processing results.

Relationship: None.

Invalid when: Null, cannot be reproduced by processing rules under the runtime profile, or includes unsupported outcomes without diagnostics.

Source: qti.attempt.outcome_state

Source class: 1EdTech pass-through

Alpha ITDs: Results And Grading Explanations, Declaration-Checked Answers, StudentRef Privacy Language, Alpha Provenance Requirements

Example: {"SCORE":1,"completionStatus":"completed"}

gradingExplanationsource qti.attempt.processing_trace
Alpha rename and extension Public runtime object

jsonb

Required

Default: '[]'::jsonb

Privacy-redacted processing trace used to explain grading. Public Alpha exposes a safe explanation view, not raw tokens, headers, IP addresses, PNP records, or direct identity fields.

Constraints: Required JSON array. May include rule names, variable identifiers, before/after values, and diagnostics. Must exclude JWTs, headers, access tokens, IP addresses, user agents, raw PNP records, raw package bytes, and direct learner identity fields.

Relationship: None.

Invalid when: Null, non-array JSON, nondeterministic, lacks failed-closed diagnostics for unsupported operators, or contains auth/PII data.

Source: qti.attempt.processing_trace

Source class: Platform gap fill

Alpha ITDs: Results And Grading Explanations, StudentRef Privacy Language, Declaration-Checked Answers, Alpha Provenance Requirements

Example: [{"rule":"qti-map-response","variable":"RESPONSE","result":1}]

startedAtsource qti.attempt.started_at
Alpha rename and extension Public runtime object

timestamptz

Required

Default: now()

Attempt start timestamp.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or after submitted_at.

Source: qti.attempt.started_at

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:16:20Z

suspendedAtsource qti.attempt.suspended_at
Alpha rename and extension Public runtime object

timestamptz

Nullable

Default: none

Attempt suspension timestamp, if the attempt was suspended.

Constraints: Nullable timestamp with time zone. Should be set when status is suspended.

Relationship: None.

Invalid when: Set while status never suspended without lifecycle evidence, before started_at, or after submitted_at.

Source: qti.attempt.suspended_at

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:17:00Z

submittedAtsource qti.attempt.submitted_at
Alpha rename and extension Public runtime object

timestamptz

Nullable

Default: none

Attempt submission timestamp, if the attempt was submitted.

Constraints: Nullable timestamp with time zone. Should be set when status is submitted or reviewed.

Relationship: None.

Invalid when: Before started_at, set while status remains active without evidence, or absent for submitted/reviewed attempts.

Source: qti.attempt.submitted_at

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:18:02Z

Alpha public object

Activity result

A family-readable result and grading explanation derived from answer submissions, activity state, outcome variables, and redacted processing trace.

Available after submitAnswers creates or updates an attempt. A result can be in progress, submitted, reviewed, or voided according to the underlying attempt status.

Source tables
qti.attempt, qti.delivery_session, qti.artifact_version
Example
{
  "resultId": "4a3996a6-c638-4813-8969-4ed9a72b29a0",
  "activityId": "e0b41369-3019-42a5-a419-d5da6e33904f",
  "contentVersionId": "efcf3561-3a66-4825-9588-e792ef20c312",
  "score": 1,
  "status": "submitted",
  "gradingExplanation": [
    {
      "step": "match_correct",
      "outcome": "SCORE",
      "value": 1
    }
  ]
}
Alpha Field Type and Nullability Meaning and Constraints Provenance and Example
resultIdsource qti.attempt.attempt_id
Alpha extension Public derived field

uuid

Required

Default: none

Stable public identifier for the result view. It is the same value as the underlying answer submission ID.

Constraints: Must be a valid qti.attempt.attempt_id for the same activity and workspace.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: qti.attempt.attempt_id

Source class: Alpha extension

Alpha ITDs: Results And Grading Explanations

Example: 4a3996a6-c638-4813-8969-4ed9a72b29a0

activityIdsource qti.attempt.delivery_session_id
Alpha rename Public runtime object

uuid

Required

Default: none

Owning delivery session.

Constraints: Must reference qti.delivery_session(delivery_session_id). Cascades on session delete.

Relationship: Belongs to exactly one qti.delivery_session.

Invalid when: Missing session or tenant mismatch through session.

Source: qti.attempt.delivery_session_id

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: e0b41369-3019-42a5-a419-d5da6e33904f

contentVersionIdsource qti.attempt.artifact_version_id
Alpha rename Public runtime object

uuid

Required

Default: none

Immutable item/test artifact version attempted.

Constraints: Must reference qti.artifact_version(artifact_version_id).

Relationship: Belongs to exactly one qti.artifact_version.

Invalid when: Does not belong to the delivery session snapshot or changes after processing.

Source: qti.attempt.artifact_version_id

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Content Catalog Read Model, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: efcf3561-3a66-4825-9588-e792ef20c312

statussource qti.attempt.status
Alpha rename and extension Public runtime object

text

Required

Default: 'active'

Attempt lifecycle state.

Constraints: Must satisfy attempt_status_ck.

Relationship: None.

Invalid when: Outside enum set or inconsistent with suspended_at/submitted_at.

Allowed values: attempt_status

Source: qti.attempt.status

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: submitted

scoresource qti.attempt.outcome_state; qti.variable_declaration.identifier
Alpha extension Public derived field

number | null

Nullable

Default: none

Friendly score extracted from outcome variables when a SCORE-like outcome exists. Null means the QTI content did not produce a score the platform can safely summarize.

Constraints: Derived from qti.attempt.outcome_state and QTI outcome declarations. Must not invent a score if no outcome variable supports it.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: qti.attempt.outcome_state; qti.variable_declaration.identifier

Source class: Alpha extension

Alpha ITDs: Results And Grading Explanations

Example: 1

feedbacksource qti.attempt.outcome_state; qti.artifact_version.delivery_json
Alpha extension Public derived field

object | null

Nullable

Default: none

Student- or parent-readable feedback derived from outcome variables and delivery content when QTI exposes feedback state.

Constraints: Must preserve QTI visibility and privacy rules. Do not reveal correct answers or hidden feedback before the activity permits review.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: qti.attempt.outcome_state; qti.artifact_version.delivery_json

Source class: Alpha extension

Alpha ITDs: Results And Grading Explanations, Activity Delivery Language

Example: {"summary":"Correct"}

gradingExplanationsource qti.attempt.processing_trace
Alpha rename and extension Public runtime object

jsonb

Required

Default: '[]'::jsonb

Privacy-redacted processing trace used to explain grading. Public Alpha exposes a safe explanation view, not raw tokens, headers, IP addresses, PNP records, or direct identity fields.

Constraints: Required JSON array. May include rule names, variable identifiers, before/after values, and diagnostics. Must exclude JWTs, headers, access tokens, IP addresses, user agents, raw PNP records, raw package bytes, and direct learner identity fields.

Relationship: None.

Invalid when: Null, non-array JSON, nondeterministic, lacks failed-closed diagnostics for unsupported operators, or contains auth/PII data.

Source: qti.attempt.processing_trace

Source class: Platform gap fill

Alpha ITDs: Results And Grading Explanations, StudentRef Privacy Language, Declaration-Checked Answers, Alpha Provenance Requirements

Example: [{"rule":"qti-map-response","variable":"RESPONSE","result":1}]

submittedAtsource qti.attempt.submitted_at
Alpha rename and extension Public runtime object

timestamptz

Nullable

Default: none

Attempt submission timestamp, if the attempt was submitted.

Constraints: Nullable timestamp with time zone. Should be set when status is submitted or reviewed.

Relationship: None.

Invalid when: Before started_at, set while status remains active without evidence, or absent for submitted/reviewed attempts.

Source: qti.attempt.submitted_at

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:18:02Z

Alpha public object

QTI trust status

A read-only public summary of the latest 1EdTech conformance evidence and approved upstream documentation links.

Updated only by 1EdTech/internal release tooling and surface QC. Public Alpha can read trust status but cannot run conformance jobs.

Source tables
qti.conformance_run, qti.conformance_assertion
Example
{
  "profile": "qti-3.0",
  "lastRunStatus": "trusted",
  "bundleHash": "sha256:...",
  "runnerVersion": "qti-conformance-2026-05-20",
  "surfaceQcUrl": "https://platform3-a3ocfthbe-andymontgomery-9773s-projects.vercel.app"
}
Alpha Field Type and Nullability Meaning and Constraints Provenance and Example
profilesource qti.conformance_run.profile
Alpha extension Read-only trust source

text

Required

Default: none

Targeted QTI 3.0 conformance profile or optional feature set.

Constraints: Required text. Must be a profile the runner understands.

Relationship: None.

Invalid when: Unsupported profile, Alpha-only label, or profile not represented by assertions.

Source: qti.conformance_run.profile

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: qti-3.0

bundleHashsource qti.conformance_run.bundle_hash
Alpha extension Read-only trust source

text

Required

Default: none

Hash of the offline spec bundle used by the run.

Constraints: Required text with algorithm prefix and digest.

Relationship: None.

Invalid when: Missing, live network URL, or not reproducible from the bundle used.

Source: qti.conformance_run.bundle_hash

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: sha256:184e568a31e239c0b282e7e1926dd7e8756901826f4a91e9e5b1ad58369d9ef4

runnerVersionsource qti.conformance_run.runner_version
Alpha extension Read-only trust source

text

Required

Default: none

Version or identity of the conformance runner.

Constraints: Required text. Must be specific enough to reproduce behavior.

Relationship: None.

Invalid when: Blank, vague, or points to unpinned code.

Source: qti.conformance_run.runner_version

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: qti-conformance-runner/2026-05-20

lastRunStatussource qti.conformance_run.status
Alpha extension Read-only trust source

text

Required

Default: 'running'

Run lifecycle status.

Constraints: Must satisfy conformance_run_status_ck.

Relationship: None.

Invalid when: Outside enum set or inconsistent with child assertion statuses.

Allowed values: conformance_run_status

Source: qti.conformance_run.status

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: passed

startedAtsource qti.conformance_run.started_at
Alpha extension Read-only trust source

timestamptz

Required

Default: now()

Run start timestamp.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or after finished_at.

Source: qti.conformance_run.started_at

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: 2026-05-20T14:00:00Z

finishedAtsource qti.conformance_run.finished_at
Alpha extension Read-only trust source

timestamptz

Nullable

Default: none

Run finish timestamp, if complete.

Constraints: Nullable timestamp with time zone. Should be set for passed, failed, or error.

Relationship: None.

Invalid when: Before started_at, absent for completed terminal status without explanation, or set while still running.

Source: qti.conformance_run.finished_at

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: 2026-05-20T14:04:30Z

assertionSummarysource qti.conformance_assertion.status; qti.conformance_assertion.details
Alpha extension Public derived field

object

Required

Default: none

Counts and notable failures derived from qti.conformance_assertion rows without exposing raw assertion diagnostics as a public Alpha row browser.

Constraints: Failed, skipped, and error counts must remain visible. Alpha must not turn failed evidence into green status copy.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: qti.conformance_assertion.status; qti.conformance_assertion.details

Source class: Alpha extension

Alpha ITDs: Read-Only QTI Trust Status, Cut Public Conformance Runner

Example: {"passed":312,"failed":0,"skipped":4,"error":0}

surfaceQcUrlsource 1edtech/surface_qc.canonical_url
Alpha extension Public derived field

url

Required

Default: none

Canonical approved 1EdTech surface QC URL used as public trust provenance.

Constraints: Must be the driver-approved deployment URL, not the shared project alias.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: 1edtech/surface_qc.canonical_url

Source class: Alpha extension

Alpha ITDs: Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: https://platform3-a3ocfthbe-andymontgomery-9773s-projects.vercel.app

Alpha public object

Problem

Plain-language Alpha validation or authorization problem that preserves the stable HTTP status, problem type, invalid parameter path, and upstream QTI trace needed for support.

Returned when an Alpha command is rejected. Problems never convert hard validation failures into warnings.

Source tables
qti.content_package, qti.variable_declaration, qti.processing_rule, qti.delivery_session, qti.attempt
Example
{
  "type": "https://platform3/problems/invalid-answer-shape",
  "title": "This answer does not match the question",
  "status": 400,
  "detail": "The answer for RESPONSE must be one value, not a list.",
  "invalidParams": [
    {
      "path": "answers.RESPONSE",
      "reason": "Expected single identifier"
    }
  ]
}
Alpha Field Type and Nullability Meaning and Constraints Provenance and Example
typesource Alpha API boundary; qti validation/runtime source
Alpha extension Public derived field

url

Required

Default: none

Stable machine-readable problem type for this rejection class.

Constraints: Must be stable across wording edits and must not contain tenant secrets or learner data.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: Alpha API boundary; qti validation/runtime source

Source class: Alpha extension

Alpha ITDs: Plain-Language Problems

Example: https://platform3/problems/invalid-answer-shape

titlesource Alpha API boundary
Alpha extension Public derived field

text

Required

Default: none

Short human-readable summary a teacher, student, parent, or app-builder LLM can act on.

Constraints: Must not expose package bytes, tokens, headers, IP addresses, raw PNP records, or direct learner identity fields.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: Alpha API boundary

Source class: Alpha extension

Alpha ITDs: Plain-Language Problems, StudentRef Privacy Language

Example: This answer does not match the question

statussource Alpha API boundary
Alpha extension Public derived field

integer

Required

Default: none

HTTP status code for the rejected Alpha operation.

Constraints: Must preserve the real rejection status; Alpha wording must not downgrade a failed validation to a warning.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: Alpha API boundary

Source class: Alpha extension

Alpha ITDs: Plain-Language Problems

Example: 400

detailsource qti.content_package.metadata; qti.variable_declaration; qti.processing_rule; qti.attempt.processing_trace
Alpha extension Public derived field

text

Required

Default: none

Safe explanation of what failed and what the caller can change.

Constraints: Must be privacy-redacted and safe for customer display.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: qti.content_package.metadata; qti.variable_declaration; qti.processing_rule; qti.attempt.processing_trace

Source class: Alpha extension

Alpha ITDs: Plain-Language Problems, StudentRef Privacy Language

Example: The answer for RESPONSE must be one value, not a list.

invalidParamssource Alpha request schema; qti.variable_declaration
Alpha extension Public derived field

array<object>

Nullable

Default: none

Input paths and reasons for field-level validation failures.

Constraints: Paths use Alpha names first and may include canonical QTI names in advanced metadata.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: Alpha request schema; qti.variable_declaration

Source class: Alpha extension

Alpha ITDs: Plain-Language Problems, Declaration-Checked Answers

Example: [{"path":"answers.RESPONSE","reason":"Expected single identifier"}]

upstreamTracesource qti.artifact_version.spec_trace; qti.variable_declaration.source_trace; qti.processing_rule.source_trace
Alpha extension Public derived field

object | null

Nullable

Default: none

Safe link to QTI schema, architecture ITD, data dictionary field, or validation source for support.

Constraints: May include QTI identifiers, variable names, schema file names, and docs links; must not include secrets or raw learner identity.

Relationship: Derived view; no separate Alpha persistence table.

Invalid when: The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source.

Source: qti.artifact_version.spec_trace; qti.variable_declaration.source_trace; qti.processing_rule.source_trace

Source class: Alpha extension

Alpha ITDs: Plain-Language Problems, Alpha Provenance Requirements

Example: {"field":"qti.variable_declaration.cardinality"}

Shared qti.* Table Index

These are the actual shared database tables. Alpha documentation leads with school-language objects, but implementation reads and writes these approved qti.* rows.

Shared qti.* table

qti.tenant - School or workspace

The Alpha workspace boundary for a school, district, publisher, or application. It keeps content, activities, answers, and results separated for one customer while the shared qti.tenant table remains the database truth.

Created before import, authoring, activity start, or deletion of student test data. Alpha callers usually see workspaceId rather than the qti.tenant row name.

Canonical table
qti.tenant
Primary key
tenant_id
1EdTech source
approved data dictionary section
Example row
{
  "tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
  "tenant_key": "north-valley",
  "display_name": "North Valley School District",
  "created_at": "2026-05-20T12:30:00Z"
}

Relationships

  • Parent of qti.content_package, qti.artifact, and qti.delivery_session.

Integrity rules

  • tenant_key is unique across the platform.
  • Every tenant-owned API route must match the authenticated tenant claim.

Invalid examples

  • A row with a tenant_id that is not a valid UUID.
  • A duplicate tenant_key.
  • Using a tenant row to store school PII or learner identity fields.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
workspaceIdcanonical tenant_id
Alpha rename Public foundation

uuid

Required

Default: none

Key: Primary key

Stable platform identifier for one tenant boundary.

Constraints: Must be a valid PostgreSQL UUID and unique as the primary key.

Relationship: None.

Invalid when: Not parseable as UUID, reused by another tenant, or copied into QTI XML as assessment content.

Source: qti.tenant.tenant_id

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, School Vocabulary Layer, Alpha Provenance Requirements

Example: 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3

workspaceKeycanonical tenant_key
Alpha rename Public foundation

text

Required

Default: none

Key: Unique

Human-stable lookup key for operations, logs, and local tooling.

Constraints: Unique across qti.tenant. SQL has no length or charset check; API and migrations should keep it short, stable, and non-secret.

Relationship: None.

Invalid when: Duplicated, empty in API input, used for direct learner identity, or treated as a QTI identifier.

Source: qti.tenant.tenant_key

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, School Vocabulary Layer, Alpha Provenance Requirements

Example: north-valley

namecanonical display_name
Alpha rename Public foundation

text

Required

Default: none

Operational display label for the tenant.

Constraints: Required text. SQL has no length check; do not use as an authorization key.

Relationship: None.

Invalid when: Null, blank in API input, or used in place of tenant_id for joins.

Source: qti.tenant.display_name

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Shared QTI Persistence, Alpha Facade, Alpha Provenance Requirements

Example: North Valley School District

createdAtcanonical created_at
Alpha rename Public foundation

timestamptz

Required

Default: now()

Timestamp when the tenant row was inserted.

Constraints: Required timestamp with time zone. Defaults to database now().

Relationship: None.

Invalid when: Null, manually backdated without migration evidence, or compared as local time without timezone normalization.

Source: qti.tenant.created_at

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, School Vocabulary Layer, Alpha Provenance Requirements

Example: 2026-05-20T12:30:00Z

Shared qti.* table

qti.content_package - Assessment package

An uploaded QTI assessment package after tenant authorization, idempotency checks, QTI validation, package closure checks, and friendly import-status projection.

Created by importAssessmentPackage. The package is usable only after importStatus becomes imported; rejected packages keep diagnostics without becoming deliverable activities.

Canonical table
qti.content_package
Primary key
package_id
1EdTech source
approved data dictionary section
Example row
{
  "package_id": "7f2e4dd2-c147-49ea-af77-41a6fdd70980",
  "tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
  "source_uri": "publisher/grade-6-math/qti.zip",
  "idempotency_key": "pkg-upload-2026-05-20-001",
  "package_hash": "sha256:6a8c1f58c16f4b0b4f0a0d8c6be8d226e3d5d80f0b2f7d2f49e6d7d9e9d4f1cb",
  "manifest_identifier": "MANIFEST-G6-MATH-2026",
  "qti_profile": "qti-3.0",
  "import_status": "imported",
  "metadata": {
    "resourceCount": 18,
    "fileCount": 42
  },
  "imported_at": "2026-05-20T13:00:00Z"
}

Relationships

  • Belongs to one qti.tenant.
  • Parent of qti.package_resource, qti.package_file, and imported qti.artifact rows.

Integrity rules

  • Unique (tenant_id, idempotency_key).
  • Unique (tenant_id, package_hash).
  • import_status must be one of the documented package lifecycle values.

Invalid examples

  • Same tenant imports different bytes with the same idempotency_key.
  • package_hash is missing or not the normalized package hash.
  • import_status outside importing/imported/rejected/superseded.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
packageIdcanonical package_id
Alpha restriction Public import summary

uuid

Required

Default: none

Key: Primary key

Stable identifier assigned to one package ingest record.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused across package rows.

Source: qti.content_package.package_id

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: 7f2e4dd2-c147-49ea-af77-41a6fdd70980

workspaceIdcanonical tenant_id
Alpha rename Public import summary

uuid

Required

Default: none

Key: Foreign key

Tenant that owns the package and all extracted resources.

Constraints: Must reference qti.tenant(tenant_id).

Relationship: Belongs to exactly one qti.tenant; not nullable.

Invalid when: References a missing tenant or disagrees with the tenant path in the API request.

Source: qti.content_package.tenant_id

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3

sourceNamecanonical source_uri
Alpha rename Public import summary

text

Nullable

Default: none

Friendly file name, URI, or content-addressable label shown for the uploaded assessment package. It is diagnostic only and not a trusted package locator.

Constraints: Nullable text. It is diagnostic only and must not be used as a trusted package locator after ingest.

Relationship: None.

Invalid when: Used as a primary identity, contains secrets, or points outside tenant authorization.

Source: qti.content_package.source_uri

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, School Vocabulary Layer, Plain-Language Problems, Alpha Provenance Requirements

Example: publisher/grade-6-math/qti.zip

idempotencyKeycanonical idempotency_key
Alpha restriction Public import summary

text

Nullable

Default: none

Key: Unique with tenant_id when non-null

Idempotency-Key from the package ingest API so retries return the same package instead of duplicating work.

Constraints: Unique with tenant_id. PostgreSQL allows multiple nulls; API ingest should provide a key for client retries.

Relationship: None.

Invalid when: Same tenant reuses the key for different package bytes, or a secret/token is stored here.

Source: qti.content_package.idempotency_key

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: pkg-upload-2026-05-20-001

packageHashcanonical package_hash
Alpha restriction Public import summary

text

Required

Default: none

Key: Unique with tenant_id

Cryptographic hash of the normalized package payload used to identify repeated imports.

Constraints: Required text and unique with tenant_id. Store the algorithm prefix with the digest, such as sha256:<hex>.

Relationship: None.

Invalid when: Missing, not reproducible from the normalized package, or reused for different bytes in one tenant.

Source: qti.content_package.package_hash

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: sha256:6a8c1f58c16f4b0b4f0a0d8c6be8d226e3d5d80f0b2f7d2f49e6d7d9e9d4f1cb

manifestIdentifiercanonical manifest_identifier
Alpha restriction Public import summary

text

Nullable

Default: none

IMS manifest identifier copied from imsmanifest when the package has one.

Constraints: Nullable because loose XML ingest may not include imsmanifest. If present, preserve the source value without Alpha renaming.

Relationship: None.

Invalid when: Invented when no manifest exists, changed to a platform name, or used as a database primary key.

Source: qti.content_package.manifest_identifier

Source class: 1EdTech pass-through

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: MANIFEST-G6-MATH-2026

qtiProfilecanonical qti_profile
Alpha restriction Public import summary

text

Required

Default: 'qti-3.0'

Conformance profile asserted for this import.

Constraints: Required text. Current default and target profile is qti-3.0; optional feature sets must be explicit and supported by conformance evidence.

Relationship: None.

Invalid when: Unsupported profile string, null, or used to imply the live network spec changed the accepted bundle.

Source: qti.content_package.qti_profile

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: qti-3.0

importStatuscanonical import_status
Alpha restriction Public import summary

text

Required

Default: 'imported'

Current lifecycle state of package ingest.

Constraints: Must satisfy content_package_import_status_ck.

Relationship: None.

Invalid when: Outside the enum set or inconsistent with resource/artifact projection state.

Allowed values: import_status

Source: qti.content_package.import_status

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: imported

importEvidencecanonical metadata
Alpha restriction Public import summary

jsonb

Required

Default: '{}'::jsonb

Safe generated import evidence such as content counts, validation diagnostics, and package facts. Alpha summaries must not include package bytes or secrets.

Constraints: Required JSON object. Do not store package bytes or secrets here; store original bytes in qti.package_file.

Relationship: None.

Invalid when: Null, non-object JSON, direct learner PII, access tokens, or duplicated source XML bytes.

Source: qti.content_package.metadata

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: {"resourceCount":18,"fileCount":42}

importedAtcanonical imported_at
Alpha restriction Public import summary

timestamptz

Required

Default: now()

Timestamp when the package row was inserted.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or used as the source of content version ordering instead of artifact_version.version_number.

Source: qti.content_package.imported_at

Source class: Platform gap fill

Alpha ITDs: Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements

Example: 2026-05-20T13:00:00Z

Shared qti.* table

qti.package_resource - Package resource

Backstage IMS manifest resource evidence used to validate, export, and explain packages. Public Alpha does not expose it as a generic resource browser.

Created during package ingest and preserved for provenance. Advanced support can follow the 1EdTech data dictionary link when raw manifest detail is needed.

Canonical table
qti.package_resource
Primary key
resource_id
1EdTech source
approved data dictionary section
Example row
{
  "resource_id": "aafcefe4-9814-4d43-93be-556dc38dace0",
  "package_id": "7f2e4dd2-c147-49ea-af77-41a6fdd70980",
  "resource_identifier": "item-RESPONSE-001",
  "resource_type": "imsqti_item_xmlv3p0",
  "href": "items/response-001.xml",
  "dependencies": [
    "stimulus-READING-PASSAGE-1"
  ],
  "metadata": {
    "files": [
      "items/response-001.xml",
      "media/chart.png"
    ]
  }
}

Relationships

  • Belongs to one qti.content_package.
  • May be referenced by qti.package_file and qti.artifact.

Integrity rules

  • Unique (package_id, resource_identifier).
  • resource_type should be one of the IMS/QTI package resource vocabulary values.
  • Package hrefs and dependencies must stay inside the package closure.

Invalid examples

  • A resource_identifier duplicated in one package.
  • An href that escapes the package root with ../.
  • A resource_type not recognized by the source bundle and not marked extension.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
resourceIdcanonical resource_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Primary key

Stable identifier for this manifest resource row.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused by another package_resource row.

Source: qti.package_resource.resource_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: aafcefe4-9814-4d43-93be-556dc38dace0

packageIdcanonical package_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Foreign key

Owning content package.

Constraints: Must reference qti.content_package(package_id). Cascades on package delete.

Relationship: Belongs to exactly one qti.content_package.

Invalid when: Missing package, cross-tenant package/resource mixture, or null.

Source: qti.package_resource.package_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: 7f2e4dd2-c147-49ea-af77-41a6fdd70980

resourceIdentifiercanonical resource_identifier
Alpha cut Backstage upstream internal

text

Required

Default: none

Key: Unique with package_id

IMS manifest resource identifier copied from imsmanifest.

Constraints: Required text and unique within the package. Preserve source spelling.

Relationship: None.

Invalid when: Duplicated within a package, rewritten to a platform UUID, or missing when the manifest resource has an identifier.

Source: qti.package_resource.resource_identifier

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: item-RESPONSE-001

resourceTypecanonical resource_type
Alpha cut Backstage upstream internal

text

Required

Default: none

IMS/QTI resource type from the package manifest.

Constraints: Required text. Values should match the package resource vocabulary or be explicitly preserved as extension.

Relationship: None.

Invalid when: Blank, invented by Alpha naming, or used to bypass validation.

Allowed values: package_resource_type

Source: qti.package_resource.resource_type

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: imsqti_item_xmlv3p0

hrefcanonical href
Alpha cut Backstage upstream internal

text

Nullable

Default: none

Package-relative path to the resource's primary file.

Constraints: Nullable text. If present, must be normalized and must not escape the package root.

Relationship: Usually corresponds to one qti.package_file.package_path.

Invalid when: Absolute URL for a packaged file, path traversal, unnormalized slashes, or missing package_file for a required primary file.

Source: qti.package_resource.href

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: items/response-001.xml

dependenciescanonical dependencies
Alpha cut Backstage upstream internal

jsonb

Required

Default: '[]'::jsonb

Manifest dependency references and variant resource links generated from the package manifest.

Constraints: Required JSON array. Each referenced resource identifier should resolve within the same package.

Relationship: References other qti.package_resource.resource_identifier values within the same package.

Invalid when: Null, non-array JSON, unresolved dependency, or cross-package dependency not represented as allowed external metadata.

Source: qti.package_resource.dependencies

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: ["stimulus-READING-PASSAGE-1"]

metadatacanonical metadata
Alpha cut Backstage upstream internal

jsonb

Required

Default: '{}'::jsonb

Manifest-derived metadata, file list, and resource facts generated at ingest.

Constraints: Required JSON object. Keep generated manifest/resource evidence here; keep raw bytes in qti.package_file.

Relationship: None.

Invalid when: Null, non-object JSON, direct learner PII, auth tokens, or package bytes.

Source: qti.package_resource.metadata

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: {"files":["items/response-001.xml","media/chart.png"]}

Shared qti.* table

qti.package_file - Package file

Original package bytes, media, manifests, XML, and file evidence for export and audit. Alpha customer APIs do not serve raw package bytes as ordinary documentation objects.

Created during import and retained to support faithful export and diagnostics. content_bytes is deliberately cut from public Alpha.

Canonical table
qti.package_file
Primary key
package_file_id
1EdTech source
approved data dictionary section
Example row
{
  "package_file_id": "30225f0a-949d-49d5-a7fc-e2ea43863e96",
  "package_id": "7f2e4dd2-c147-49ea-af77-41a6fdd70980",
  "resource_id": "aafcefe4-9814-4d43-93be-556dc38dace0",
  "package_path": "items/response-001.xml",
  "media_type": "application/xml",
  "byte_length": 18422,
  "content_hash": "sha256:92fb3e7a6e6d1df0e5759bda79b9c5a0459dfb7ccf2e0b9eb81227759df8c371",
  "metadata": {
    "listedInManifest": true
  },
  "created_at": "2026-05-20T13:00:01Z"
}

Relationships

  • Belongs to one qti.content_package.
  • Optionally points to the qti.package_resource that first listed the file.

Integrity rules

  • Unique (package_id, package_path).
  • package_path must be normalized and package-relative.
  • byte_length must match content_bytes length.

Invalid examples

  • Two files with the same normalized package_path in one package.
  • package_path escapes package root.
  • content_hash does not match content_bytes.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
packageFileIdcanonical package_file_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Primary key

Stable identifier for one original package file row.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused.

Source: qti.package_file.package_file_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: 30225f0a-949d-49d5-a7fc-e2ea43863e96

packageIdcanonical package_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Foreign key

Owning content package.

Constraints: Must reference qti.content_package(package_id). Cascades on package delete.

Relationship: Belongs to exactly one qti.content_package.

Invalid when: References a missing package or mixes tenants.

Source: qti.package_file.package_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: 7f2e4dd2-c147-49ea-af77-41a6fdd70980

resourceIdcanonical resource_id
Alpha cut Backstage upstream internal

uuid

Nullable

Default: none

Key: Foreign key

Manifest resource that first listed this file, when applicable.

Constraints: Nullable. If present, must reference qti.package_resource(resource_id). Set null if the resource row is deleted.

Relationship: Belongs to zero or one qti.package_resource.

Invalid when: References a resource from a different package or tenant.

Source: qti.package_file.resource_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: aafcefe4-9814-4d43-93be-556dc38dace0

packagePathcanonical package_path
Alpha cut Backstage upstream internal

text

Required

Default: none

Key: Unique with package_id

Normalized package-relative path for this file.

Constraints: Required and unique inside package. Must not be absolute or contain traversal that escapes the package root.

Relationship: None.

Invalid when: Contains ../ escape, backslash ambiguity, an absolute scheme, duplicate normalized path, or a path not present in the uploaded package.

Source: qti.package_file.package_path

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: items/response-001.xml

mediaTypecanonical media_type
Alpha cut Backstage upstream internal

text

Required

Default: 'application/octet-stream'

Detected or declared media type used for export, diagnostics, and content serving.

Constraints: Required text. Use a valid media type string; default is application/octet-stream when unknown.

Relationship: None.

Invalid when: Null, unparseable as a media type, or trusted more than validation of the actual content.

Source: qti.package_file.media_type

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: application/xml

byteLengthcanonical byte_length
Alpha cut Backstage upstream internal

integer

Required

Default: none

Original byte length of content_bytes.

Constraints: Required integer. Must be zero or positive and equal to the stored bytea length.

Relationship: None.

Invalid when: Negative, null, or mismatched with content_bytes.

Source: qti.package_file.byte_length

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: 18422

contentHashcanonical content_hash
Alpha cut Backstage upstream internal

text

Required

Default: none

Cryptographic hash of the original file bytes.

Constraints: Required text. Store algorithm prefix with digest; must be reproducible from content_bytes.

Relationship: None.

Invalid when: Missing, digest does not match content_bytes, or algorithm is not recorded.

Source: qti.package_file.content_hash

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: sha256:92fb3e7a6e6d1df0e5759bda79b9c5a0459dfb7ccf2e0b9eb81227759df8c371

contentBytescanonical content_bytes
Alpha cut Cut from public Alpha

bytea

Required

Default: none

Original bytes remain in storage for export and audit, but public Alpha does not expose them as a normal field.

Constraints: Required byte array. Must be preserved for faithful package export and audit.

Relationship: None.

Invalid when: Null, replaced by parsed text only, mutated after ingest, or contains a file that failed package-closure validation.

Source: qti.package_file.content_bytes

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: <binary XML or media bytes>

metadatacanonical metadata
Alpha cut Backstage upstream internal

jsonb

Required

Default: '{}'::jsonb

Generated evidence about the file, such as manifest listing flags, validation role, and extracted diagnostics.

Constraints: Required JSON object. Must not replace content_bytes.

Relationship: None.

Invalid when: Null, non-object JSON, auth tokens, direct learner PII, or raw file bytes duplicated as JSON.

Source: qti.package_file.metadata

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: {"listedInManifest":true,"role":"primary-qti-xml"}

createdAtcanonical created_at
Alpha cut Backstage upstream internal

timestamptz

Required

Default: now()

Timestamp when the file row was inserted.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or used as a proxy for QTI content versioning.

Source: qti.package_file.created_at

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Restricted Assessment Package Import, Alpha Provenance Requirements

Example: 2026-05-20T13:00:01Z

Shared qti.* table

qti.artifact - Content item

The stable Alpha content record for a question, test, section, passage, metadata document, or related QTI artifact. The qti.artifact row is the long-lived identity across saved versions.

Created by import or lossless authoring. The latestVersionId points to the newest immutable qti.artifact_version, but historical activities keep the version they started with.

Canonical table
qti.artifact
Primary key
artifact_id
1EdTech source
approved data dictionary section
Example row
{
  "artifact_id": "58612cab-9c46-426c-8c20-0e9f19c807c5",
  "tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
  "package_id": "7f2e4dd2-c147-49ea-af77-41a6fdd70980",
  "resource_id": "aafcefe4-9814-4d43-93be-556dc38dace0",
  "artifact_kind": "item",
  "qti_identifier": "RESPONSE-001",
  "title": "Linear equations checkpoint",
  "language": "en-US",
  "latest_version_id": "efcf3561-3a66-4825-9588-e792ef20c312",
  "created_at": "2026-05-20T13:00:02Z"
}

Relationships

  • Belongs to one qti.tenant.
  • May originate from qti.content_package and qti.package_resource.
  • Parent of qti.artifact_version.

Integrity rules

  • artifact_kind must satisfy artifact_kind_ck.
  • artifact_lookup_idx supports tenant/kind/QTI identifier lookup.

Invalid examples

  • Using qti_identifier as a database primary key.
  • Changing artifact_kind after versions exist.
  • Pointing latest_version_id to a version from another artifact.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
contentIdcanonical artifact_id
Alpha rename Public catalog source

uuid

Required

Default: none

Key: Primary key

Stable platform identity for one logical artifact across versions.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID, reused, or derived from a mutable QTI identifier.

Source: qti.artifact.artifact_id

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: 58612cab-9c46-426c-8c20-0e9f19c807c5

workspaceIdcanonical tenant_id
Alpha rename Public catalog source

uuid

Required

Default: none

Key: Foreign key

Tenant that owns this artifact.

Constraints: Must reference qti.tenant(tenant_id).

Relationship: Belongs to exactly one qti.tenant.

Invalid when: Missing tenant or different from the owning package tenant.

Source: qti.artifact.tenant_id

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, Content Catalog Read Model, School Vocabulary Layer, Alpha Provenance Requirements

Example: 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3

packageIdcanonical package_id
Alpha rename Public catalog source

uuid

Nullable

Default: none

Key: Foreign key

Origin package for imported artifacts.

Constraints: Nullable for authored loose artifacts. If present, must reference qti.content_package(package_id). Set null if package is deleted.

Relationship: Belongs to zero or one qti.content_package.

Invalid when: References a package owned by another tenant.

Source: qti.artifact.package_id

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: 7f2e4dd2-c147-49ea-af77-41a6fdd70980

resourceIdcanonical resource_id
Alpha rename Public catalog source

uuid

Nullable

Default: none

Key: Foreign key

Origin manifest resource for imported artifacts.

Constraints: Nullable for generated or loose artifacts. If present, must reference qti.package_resource(resource_id). Set null if resource is deleted.

Relationship: Belongs to zero or one qti.package_resource.

Invalid when: Resource comes from another package or tenant.

Source: qti.artifact.resource_id

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: aafcefe4-9814-4d43-93be-556dc38dace0

kindcanonical artifact_kind
Alpha rename Public catalog source

text

Required

Default: none

Repository category derived from QTI root element or manifest resource type.

Constraints: Must satisfy artifact_kind_ck.

Relationship: None.

Invalid when: Outside enum set, inconsistent with root_element on versions, or changed for Alpha vocabulary.

Allowed values: artifact_kind

Source: qti.artifact.artifact_kind

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: item

qtiIdentifiercanonical qti_identifier
Alpha rename Public catalog source

text

Nullable

Default: none

QTI identifier attribute copied from the root object when present.

Constraints: Nullable because not every artifact has a root identifier. Preserve source spelling; do not use as a globally unique database key.

Relationship: None.

Invalid when: Invented when absent, rewritten to a UUID, or assumed unique outside artifact scope.

Source: qti.artifact.qti_identifier

Source class: 1EdTech pass-through

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: RESPONSE-001

titlecanonical title
Alpha rename Public catalog source

text

Nullable

Default: none

QTI title or generated display label when present.

Constraints: Nullable. Preserve QTI title when present; generated labels must be distinguishable in metadata/spec trace.

Relationship: None.

Invalid when: Used as identity, translated without retaining source XML, or contains direct learner PII.

Source: qti.artifact.title

Source class: 1EdTech pass-through

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: Linear equations checkpoint

languagecanonical language
Alpha rename Public catalog source

text

Nullable

Default: none

xml:lang or package-default language associated with the artifact.

Constraints: Nullable BCP 47 language tag when known.

Relationship: None.

Invalid when: Not a language tag, invented without source/default evidence, or used to filter tenant access.

Source: qti.artifact.language

Source class: 1EdTech pass-through

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: en-US

latestVersionIdcanonical latest_version_id
Alpha rename Public catalog source

uuid

Nullable

Default: none

Key: Convenience pointer

Newest immutable artifact version for convenience reads.

Constraints: Nullable until a version exists. Must point to a qti.artifact_version for this same artifact when populated.

Relationship: Points to zero or one qti.artifact_version for the same artifact.

Invalid when: Points to another artifact's version or treated as authoritative history instead of the artifact_version table.

Source: qti.artifact.latest_version_id

Source class: Platform gap fill

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, School Vocabulary Layer, Alpha Provenance Requirements

Example: efcf3561-3a66-4825-9588-e792ef20c312

createdAtcanonical created_at
Alpha rename Public catalog source

timestamptz

Required

Default: now()

Logical artifact creation timestamp.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or used as version_number.

Source: qti.artifact.created_at

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements

Example: 2026-05-20T13:00:02Z

Shared qti.* table

qti.artifact_version - Content version

One immutable saved version of QTI content. Alpha exposes friendly fields such as studentView and editingDraft, while raw XML, canonical XML, objectGraph, and specTrace stay advanced provenance.

Created by import or saveContentDraft. Never updated in place. Activities and answers point to exact version IDs so later edits do not change past student results.

Alpha rename and restriction Public version source with backstage internals Content Catalog Read ModelLossless Authoring CommandsActivity Delivery LanguageAlpha Provenance Requirements
Canonical table
qti.artifact_version
Primary key
artifact_version_id
1EdTech source
approved data dictionary section
Example row
{
  "artifact_version_id": "efcf3561-3a66-4825-9588-e792ef20c312",
  "artifact_id": "58612cab-9c46-426c-8c20-0e9f19c807c5",
  "version_number": 1,
  "root_element": "qti-assessment-item",
  "root_type": "AssessmentItemDType",
  "schema_file": "imsqti_itemv3p0p1_v1p0.xsd",
  "xml_hash": "sha256:e8a86d190e6d8865c4562b8e8b2b1e299f8a8d37a58c0bb71b35ef28bb62ab31",
  "created_by": "system:package-ingest"
}

Relationships

  • Belongs to one qti.artifact.
  • Parent of qti.component, qti.variable_declaration, qti.processing_rule, qti.delivery_session, and qti.attempt references.

Integrity rules

  • Unique (artifact_id, version_number).
  • Unique (artifact_id, xml_hash).
  • source_xml must validate against bundled schema before persistence.

Invalid examples

  • Mutating canonical_xml after attempts exist.
  • delivery_json drops an identifier needed for scoring.
  • schema_file not in the offline source bundle.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
contentVersionIdcanonical artifact_version_id
Alpha rename Public version source with backstage internals

uuid

Required

Default: none

Key: Primary key

Stable identifier for one immutable artifact edition.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused.

Source: qti.artifact_version.artifact_version_id

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: efcf3561-3a66-4825-9588-e792ef20c312

contentIdcanonical artifact_id
Alpha rename Public version source with backstage internals

uuid

Required

Default: none

Key: Foreign key

Logical artifact this version belongs to.

Constraints: Must reference qti.artifact(artifact_id). Cascades on artifact delete.

Relationship: Belongs to exactly one qti.artifact.

Invalid when: Missing artifact or cross-tenant mismatch through artifact.

Source: qti.artifact_version.artifact_id

Source class: Platform gap fill

Alpha ITDs: School Vocabulary Layer, Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: 58612cab-9c46-426c-8c20-0e9f19c807c5

versionNumbercanonical version_number
Alpha rename and restriction Public version source with backstage internals

integer

Required

Default: none

Key: Unique with artifact_id

Forward-only per-artifact version number.

Constraints: Required integer and unique with artifact_id. Should increase by one for each saved edition.

Relationship: None.

Invalid when: Zero or negative by convention, duplicated for an artifact, skipped without migration evidence, or reused after rollback.

Source: qti.artifact_version.version_number

Source class: Platform gap fill

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: 1

sourceXmlcanonical source_xml
Alpha restriction Advanced provenance

xml

Required

Default: none

Original XML accepted after bundled XSD/Schematron validation.

Constraints: Required PostgreSQL xml. Must validate before object creation and persistence.

Relationship: None.

Invalid when: Malformed XML, not valid against the bundled schema, contains direct learner runtime PII, or differs from the persisted object graph without trace.

Source: qti.artifact_version.source_xml

Source class: 1EdTech pass-through

Alpha ITDs: Lossless Authoring Commands, Alpha Provenance Requirements, Content Catalog Read Model, Activity Delivery Language

Example: <qti-assessment-item identifier="RESPONSE-001" ...>

canonicalXmlcanonical canonical_xml
Alpha restriction Advanced provenance

text

Required

Default: none

Canonicalized XML used for equivalence checks and stable export.

Constraints: Required text. Must round-trip from object graph to XML and hash to xml_hash.

Relationship: None.

Invalid when: Not reproducible from object_graph, hash mismatch, or changed after delivery sessions point to this version.

Source: qti.artifact_version.canonical_xml

Source class: 1EdTech pass-through

Alpha ITDs: Lossless Authoring Commands, Alpha Provenance Requirements, Content Catalog Read Model, Activity Delivery Language

Example: <qti-assessment-item identifier="RESPONSE-001" ...>

xmlHashcanonical xml_hash
Alpha rename and restriction Public version source with backstage internals

text

Required

Default: none

Key: Unique with artifact_id

Hash of canonical_xml used for idempotency and semantic preservation checks.

Constraints: Required text and unique with artifact_id. Store algorithm prefix with digest.

Relationship: None.

Invalid when: Does not match canonical_xml, algorithm omitted, or duplicates a prior version for the same artifact.

Source: qti.artifact_version.xml_hash

Source class: Platform gap fill

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: sha256:e8a86d190e6d8865c4562b8e8b2b1e299f8a8d37a58c0bb71b35ef28bb62ab31

rootElementcanonical root_element
Alpha rename and restriction Public version source with backstage internals

text

Required

Default: none

Root XML element for this version.

Constraints: Required text generated from bundled XSD root element catalog.

Relationship: None.

Invalid when: Not present in the bundled root catalog or inconsistent with source_xml.

Source: qti.artifact_version.root_element

Source class: 1EdTech pass-through

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: qti-assessment-item

rootTypecanonical root_type
Alpha rename and restriction Public version source with backstage internals

text

Nullable

Default: none

Generated XSD type name for the root element.

Constraints: Nullable for roots without generated type evidence; when present, must match bundled XSD generation.

Relationship: None.

Invalid when: Invented type, wrong schema namespace, or mismatch with root_element.

Source: qti.artifact_version.root_type

Source class: 1EdTech pass-through

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: AssessmentItemDType

schemaFilecanonical schema_file
Alpha rename and restriction Public version source with backstage internals

text

Required

Default: none

Bundled schema file used as validation authority.

Constraints: Required text. Must name a schema in the offline QTI source bundle.

Relationship: None.

Invalid when: Live network schema URL, missing local schema, or schema that does not define the root.

Source: qti.artifact_version.schema_file

Source class: 1EdTech pass-through

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: imsqti_itemv3p0p1_v1p0.xsd

objectGraphcanonical object_graph
Alpha cut Cut from public Alpha

jsonb

Required

Default: none

The internal generated object graph is storage truth for round trips. Alpha exposes studentView, editingDraft, and provenance summaries instead of this raw graph.

Constraints: Required JSON object. Must preserve element order, attributes, text, tail text, identifiers, namespaces, types, and source trace enough to rebuild canonical XML.

Relationship: None.

Invalid when: Null, non-object JSON, loses mixed-content tail text, loses namespace identity, or becomes a public delivery contract.

Source: qti.artifact_version.object_graph

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language

Example: {"element":"qti-assessment-item","identifier":"RESPONSE-001"}

studentViewcanonical delivery_json
Alpha rename Public version source with backstage internals

jsonb

Nullable

Default: none

Generated consumer-facing projection used by delivery applications and session snapshots.

Constraints: Nullable before projection. May omit only declared authoring-only or diagnostic detail; must preserve identifiers needed for responses, feedback, scoring, accessibility matching, and session replay.

Relationship: None.

Invalid when: Drops response identifiers, scoring dependencies, feedback links, accessibility references, or includes source traces not intended for delivery.

Source: qti.artifact_version.delivery_json

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, School Vocabulary Layer, Content Catalog Read Model, Lossless Authoring Commands, Alpha Provenance Requirements

Example: {"kind":"item","identifier":"RESPONSE-001","interactions":[...]}

editingDraftcanonical authoring_json
Alpha rename and restriction Public version source with backstage internals

jsonb

Nullable

Default: none

Generated authoring projection for editors that must preserve all spec-defined fields.

Constraints: Nullable before projection. Must round-trip to object_graph with no spec-defined field loss.

Relationship: None.

Invalid when: Lossy, missing extension payloads, missing source trace needed for edits, or used for delivery without declared lossiness.

Source: qti.artifact_version.authoring_json

Source class: Platform gap fill

Alpha ITDs: Lossless Authoring Commands, School Vocabulary Layer, Content Catalog Read Model, Activity Delivery Language, Alpha Provenance Requirements

Example: {"kind":"item","identifier":"RESPONSE-001","sourceTrace":{...}}

specTracecanonical spec_trace
Alpha rename and restriction Public version source with backstage internals

jsonb

Required

Default: '{}'::jsonb

Generated traceability from classes, fields, and components to XSD/spec anchors.

Constraints: Required JSON object. Must point back to the offline source bundle and generated model evidence.

Relationship: None.

Invalid when: Null, non-object JSON, live-only references, or links that cannot be reproduced from the bundle.

Source: qti.artifact_version.spec_trace

Source class: 1EdTech pass-through

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: {"rootElement":"qti-assessment-item","schemaFile":"imsqti_itemv3p0p1_v1p0.xsd"}

previousVersionIdcanonical supersedes_version_id
Alpha rename Public version source with backstage internals

uuid

Nullable

Default: none

Key: Foreign key

Previous version replaced by this version, when the save was an edit or replacement.

Constraints: Nullable. If present, must reference qti.artifact_version(artifact_version_id), normally for the same artifact.

Relationship: References zero or one earlier qti.artifact_version.

Invalid when: Points forward in time, points to another artifact without explicit migration evidence, or creates a cycle.

Source: qti.artifact_version.supersedes_version_id

Source class: Platform gap fill

Alpha ITDs: Lossless Authoring Commands, Content Catalog Read Model, Activity Delivery Language, Alpha Provenance Requirements

Example: a1f6b903-b26f-43ac-93ce-f6626ce3810d

createdAtcanonical created_at
Alpha rename and restriction Public version source with backstage internals

timestamptz

Required

Default: now()

Timestamp when this immutable version was created.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or mutated to reorder version history.

Source: qti.artifact_version.created_at

Source class: Platform gap fill

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: 2026-05-20T13:00:03Z

createdBycanonical created_by
Alpha rename and restriction Public version source with backstage internals

text

Nullable

Default: none

Principal or system actor that created the version.

Constraints: Nullable text. Must be a safe principal label; do not store raw JWTs or secrets.

Relationship: None.

Invalid when: Raw access token, raw JWT subject that identifies a learner, email address, or other direct learner PII.

Source: qti.artifact_version.created_by

Source class: Platform gap fill

Alpha ITDs: Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements

Example: system:package-ingest

Shared qti.* table

qti.component - QTI component

The lossless object-graph row projection used for QTI round trips, catalog extraction, and support traceability. Alpha does not expose a generic component tree as a customer object.

Generated from every content version and regenerated on new versions. Selected values may feed catalog summaries, but rows remain backstage.

Canonical table
qti.component
Primary key
component_id
1EdTech source
approved data dictionary section
Example row
{
  "component_id": "c09956ea-d444-42b7-9e36-37f948a8c4f7",
  "artifact_version_id": "efcf3561-3a66-4825-9588-e792ef20c312",
  "parent_component_id": null,
  "ordinal": 0,
  "element_name": "qti-assessment-item",
  "qualified_name": "{http://www.imsglobal.org/xsd/imsqtiasi_v3p0}qti-assessment-item",
  "namespace_uri": "http://www.imsglobal.org/xsd/imsqtiasi_v3p0",
  "type_name": "AssessmentItemDType",
  "qti_identifier": "RESPONSE-001",
  "component_path": "$",
  "attributes": {
    "identifier": "RESPONSE-001",
    "title": "Linear equations checkpoint"
  },
  "source_trace": {
    "schemaFile": "imsqti_itemv3p0p1_v1p0.xsd"
  }
}

Relationships

  • Belongs to one qti.artifact_version.
  • Self-references parent_component_id.
  • Parent of qti.variable_declaration and qti.processing_rule rows.

Integrity rules

  • Unique (artifact_version_id, component_path).
  • ordinal preserves sibling order.
  • component_identifier_idx supports identifier lookup when qti_identifier is present.

Invalid examples

  • Two nodes with the same component_path in one version.
  • Dropping tail_value for mixed content.
  • Parent link creates a cycle.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
componentIdcanonical component_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Primary key

Stable identifier for one generated object node row.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused.

Source: qti.component.component_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: c09956ea-d444-42b7-9e36-37f948a8c4f7

artifactVersionIdcanonical artifact_version_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Foreign key

Artifact version containing this component.

Constraints: Must reference qti.artifact_version(artifact_version_id). Cascades on version delete.

Relationship: Belongs to exactly one qti.artifact_version.

Invalid when: Missing version or cross-artifact projection.

Source: qti.component.artifact_version_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: efcf3561-3a66-4825-9588-e792ef20c312

parentComponentIdcanonical parent_component_id
Alpha cut Backstage upstream internal

uuid

Nullable

Default: none

Key: Self foreign key

Parent object node, preserving the XML/object hierarchy.

Constraints: Nullable for root node. If present, references qti.component(component_id) and cascades on parent delete.

Relationship: References zero or one parent qti.component.

Invalid when: Parent is in a different artifact_version, creates a cycle, or is missing for non-root nodes.

Source: qti.component.parent_component_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: null

ordinalcanonical ordinal
Alpha cut Backstage upstream internal

integer

Required

Default: none

Sibling order under parent_component_id.

Constraints: Required integer. Use zero-based or one-based consistently in the repository; order must be stable for XML canonicalization.

Relationship: None.

Invalid when: Null, negative by repository convention, duplicated among siblings without deterministic tie-break, or changed after hashing.

Source: qti.component.ordinal

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: 0

elementNamecanonical element_name
Alpha cut Backstage upstream internal

text

Required

Default: none

XML element name generated from the bundled XSD index.

Constraints: Required text. Must match the generated object node and source XML.

Relationship: None.

Invalid when: Unknown to the generated model, mismatched with qualified_name, or rewritten to an Alpha name.

Source: qti.component.element_name

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: qti-assessment-item

qualifiedNamecanonical qualified_name
Alpha cut Backstage upstream internal

text

Nullable

Default: none

Clark-notation qualified XML name used to preserve namespace identity.

Constraints: Nullable for nodes without namespace evidence; when present, must combine namespace_uri and element_name correctly.

Relationship: None.

Invalid when: Namespace does not match namespace_uri, prefix-only value loses URI, or generated from live schema outside the bundle.

Source: qti.component.qualified_name

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: {http://www.imsglobal.org/xsd/imsqtiasi_v3p0}qti-assessment-item

namespaceUricanonical namespace_uri
Alpha cut Backstage upstream internal

text

Nullable

Default: none

Namespace URI for this XML component, if any.

Constraints: Nullable text. Must be the actual XML namespace URI, not an arbitrary prefix.

Relationship: None.

Invalid when: Prefix instead of URI, wrong QTI namespace, or discarded for namespaced elements.

Source: qti.component.namespace_uri

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: http://www.imsglobal.org/xsd/imsqtiasi_v3p0

typeNamecanonical type_name
Alpha cut Backstage upstream internal

text

Nullable

Default: none

Generated XSD type name for this object node.

Constraints: Nullable. If present, must match generated type evidence from the bundled schema.

Relationship: None.

Invalid when: Invented type, type from the wrong namespace, or inconsistent with element_name.

Source: qti.component.type_name

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: AssessmentItemDType

qtiIdentifiercanonical qti_identifier
Alpha cut Backstage upstream internal

text

Nullable

Default: none

QTI identifier attribute on this component when present.

Constraints: Nullable. Preserve source value; identifier scope is QTI-defined and not always global.

Relationship: None.

Invalid when: Invented, coerced to UUID, or assumed globally unique across artifacts.

Source: qti.component.qti_identifier

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: RESPONSE

componentPathcanonical component_path
Alpha cut Backstage upstream internal

text

Required

Default: none

Key: Unique with artifact_version_id

Stable generated path from the root object to this component.

Constraints: Required and unique within artifact_version_id. Must be reproducible from the generated object graph.

Relationship: None.

Invalid when: Not stable across rehydration, duplicated, or encodes tenant/private data.

Source: qti.component.component_path

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: $.itemBody.choiceInteraction[0]

attributescanonical attributes
Alpha cut Backstage upstream internal

jsonb

Required

Default: '{}'::jsonb

Raw generated attribute projection for fields not promoted to typed query tables.

Constraints: Required JSON object. Must preserve QTI/XML attributes, including extension attributes, without changing names.

Relationship: None.

Invalid when: Null, non-object JSON, drops data-* extension attributes, or stores API auth headers.

Source: qti.component.attributes

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: {"identifier":"RESPONSE-001","title":"Linear equations checkpoint"}

textValuecanonical text_value
Alpha cut Backstage upstream internal

text

Nullable

Default: none

Text node value for text-bearing QTI and embedded content nodes.

Constraints: Nullable text. Preserve source text needed for canonical XML round trip.

Relationship: None.

Invalid when: Dropped for mixed content, normalized in a way that changes semantics, or used to store learner responses.

Source: qti.component.text_value

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: Solve for x.

tailValuecanonical tail_value
Alpha cut Backstage upstream internal

text

Nullable

Default: none

Tail text after this element, required for mixed-content XML round trips.

Constraints: Nullable text. Must be preserved when XML mixed content uses tail text.

Relationship: None.

Invalid when: Dropped because it is inconvenient, moved into text_value incorrectly, or included in delivery_json without declared lossiness.

Source: qti.component.tail_value

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: after the interaction.

sourceTracecanonical source_trace
Alpha cut Backstage upstream internal

jsonb

Required

Default: '{}'::jsonb

Generated trace to XSD and spec source for this component.

Constraints: Required JSON object. Must be reproducible from the offline source bundle and generated model.

Relationship: None.

Invalid when: Null, non-object JSON, live-only link, or not aligned with element_name/type_name.

Source: qti.component.source_trace

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Alpha Provenance Requirements, Content Catalog Read Model

Example: {"schemaFile":"imsqti_itemv3p0p1_v1p0.xsd","type":"AssessmentItemDType"}

Shared qti.* table

qti.variable_declaration - Answer and result declaration

QTI response, outcome, template, and context declarations used to validate Alpha answer payloads and explain result fields. Alpha exposes generated answer schemas, not standalone declaration rows.

Generated with a content version. submitAnswers reads response declarations before accepting an answer; getActivityResult reads outcome declarations for result explanation.

Canonical table
qti.variable_declaration
Primary key
variable_declaration_id
1EdTech source
approved data dictionary section
Example row
{
  "variable_declaration_id": "0c6f5271-9d9e-4df1-8d5d-2ad59dacde66",
  "artifact_version_id": "efcf3561-3a66-4825-9588-e792ef20c312",
  "component_id": "7293a5f9-55a9-42cb-b8e6-a2be7d166d35",
  "variable_kind": "response",
  "identifier": "RESPONSE",
  "cardinality": "single",
  "base_type": "identifier",
  "correct_response": {
    "values": [
      "choiceA"
    ]
  },
  "source_trace": {
    "element": "qti-response-declaration"
  }
}

Relationships

  • Belongs to one qti.artifact_version.
  • References the qti.component that declared the variable.

Integrity rules

  • Unique (artifact_version_id, variable_kind, identifier).
  • variable_kind must satisfy variable_kind_ck.
  • Cardinality and base_type must match QTI declaration semantics when present.

Invalid examples

  • Two response declarations with the same identifier in one version.
  • Cardinality value outside QTI cardinality vocabulary.
  • correct_response shape inconsistent with cardinality/base_type.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
variableDeclarationIdcanonical variable_declaration_id
Alpha restriction Derived schema source

uuid

Required

Default: none

Key: Primary key

Stable row identifier for one promoted variable declaration.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused.

Source: qti.variable_declaration.variable_declaration_id

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: 0c6f5271-9d9e-4df1-8d5d-2ad59dacde66

artifactVersionIdcanonical artifact_version_id
Alpha restriction Derived schema source

uuid

Required

Default: none

Key: Foreign key

Artifact version that declares the variable.

Constraints: Must reference qti.artifact_version(artifact_version_id). Cascades on version delete.

Relationship: Belongs to exactly one qti.artifact_version.

Invalid when: Missing version or mismatch with component_id artifact_version.

Source: qti.variable_declaration.artifact_version_id

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: efcf3561-3a66-4825-9588-e792ef20c312

componentIdcanonical component_id
Alpha restriction Derived schema source

uuid

Required

Default: none

Key: Foreign key

Component node that declared this variable.

Constraints: Must reference qti.component(component_id). Cascades on component delete.

Relationship: Belongs to exactly one qti.component.

Invalid when: Component is not in the same artifact_version or is not a variable declaration node.

Source: qti.variable_declaration.component_id

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: 7293a5f9-55a9-42cb-b8e6-a2be7d166d35

variableKindcanonical variable_kind
Alpha restriction Derived schema source

text

Required

Default: none

QTI variable category.

Constraints: Must satisfy variable_kind_ck.

Relationship: None.

Invalid when: Outside enum set or used to invent a platform-only variable category.

Allowed values: variable_kind

Source: qti.variable_declaration.variable_kind

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: response

identifiercanonical identifier
Alpha restriction Derived schema source

text

Required

Default: none

Key: Unique with artifact_version_id and variable_kind

QTI variable identifier.

Constraints: Required text. Unique with artifact_version_id and variable_kind.

Relationship: None.

Invalid when: Blank, duplicated within kind/version, rewritten to UUID, or mismatched with processing operands.

Source: qti.variable_declaration.identifier

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: RESPONSE

cardinalitycanonical cardinality
Alpha restriction Derived schema source

text

Nullable

Default: none

QTI cardinality for the variable value container.

Constraints: Nullable only when the source declaration allows absence. When present, use QTI cardinality values such as single, multiple, ordered, or record.

Relationship: None.

Invalid when: Outside QTI cardinality vocabulary, inconsistent with associated interaction, or inconsistent with JSON value shape.

Source: qti.variable_declaration.cardinality

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: single

baseTypecanonical base_type
Alpha restriction Derived schema source

text

Nullable

Default: none

QTI base-type for atomic values when the declaration has one.

Constraints: Nullable for record variables or declarations where QTI permits no base-type. Values should be QTI base types such as boolean, directedPair, duration, file, float, identifier, integer, pair, point, string, or uri.

Relationship: None.

Invalid when: Outside QTI base-type vocabulary, present for record in a way QTI forbids, or inconsistent with correct_response/default_value.

Source: qti.variable_declaration.base_type

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: identifier

defaultValuecanonical default_value
Alpha restriction Derived schema source

jsonb

Nullable

Default: none

Generated object value for qti-default-value.

Constraints: Nullable. JSON shape must match cardinality and base_type.

Relationship: None.

Invalid when: Shape does not match cardinality/base_type, contains unvalidated extension payload, or is used as candidate response state.

Source: qti.variable_declaration.default_value

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: {"values":[0]}

correctResponsecanonical correct_response
Alpha restriction Derived schema source

jsonb

Nullable

Default: none

Generated object value for qti-correct-response.

Constraints: Nullable. JSON shape must match cardinality and base_type and preserve mapped identifiers exactly.

Relationship: None.

Invalid when: Correct response values are coerced, ordered values are stored as unordered, or value type conflicts with base_type.

Source: qti.variable_declaration.correct_response

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: {"values":["choiceA"]}

mappingcanonical mapping
Alpha restriction Derived schema source

jsonb

Nullable

Default: none

Generated mapping, areaMapping, matchTable, or interpolationTable detail.

Constraints: Nullable. Must preserve QTI mapping values, bounds, default scores, and interpolation details needed by processing.

Relationship: None.

Invalid when: Drops default mapping value, loses area coordinates, changes scoring numeric precision, or omits source trace.

Source: qti.variable_declaration.mapping

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: {"defaultValue":0,"mapEntries":[{"mapKey":"choiceA","mappedValue":1}]}

sourceTracecanonical source_trace
Alpha restriction Derived schema source

jsonb

Required

Default: '{}'::jsonb

Generated trace to XSD and spec section for the variable declaration.

Constraints: Required JSON object and reproducible from the source bundle.

Relationship: None.

Invalid when: Null, non-object JSON, or not tied to the declaring component.

Source: qti.variable_declaration.source_trace

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, Alpha Provenance Requirements, Cut Raw QTI Internals From Public Alpha

Example: {"element":"qti-response-declaration","schemaFile":"imsqti_itemv3p0p1_v1p0.xsd"}

Shared qti.* table

qti.processing_rule - Grading rule

Executable response, outcome, template, and expression rows used by the QTI runtime. Alpha exposes safe grading explanations, not raw processing-rule trees.

Generated with a content version and executed when answers are submitted. Unsupported processing fails closed with a safe problem and trace evidence.

Canonical table
qti.processing_rule
Primary key
processing_rule_id
1EdTech source
approved data dictionary section
Example row
{
  "processing_rule_id": "74b1c279-e85f-407e-971e-16408ad792c0",
  "artifact_version_id": "efcf3561-3a66-4825-9588-e792ef20c312",
  "component_id": "913a57f5-98a5-4726-940b-d9610b721ccb",
  "parent_processing_rule_id": null,
  "rule_scope": "response",
  "rule_name": "qti-map-response",
  "sequence_number": 10,
  "operands": [
    {
      "variableIdentifier": "RESPONSE"
    }
  ],
  "source_trace": {
    "element": "qti-map-response"
  }
}

Relationships

  • Belongs to one qti.artifact_version.
  • References the qti.component backing the rule.
  • Self-references parent_processing_rule_id for nested rule/expression trees.

Integrity rules

  • rule_scope must satisfy processing_rule_scope_ck.
  • processing_rule_execution_idx orders rules by artifact_version_id, rule_scope, and sequence_number.

Invalid examples

  • sequence_number does not match object-graph order.
  • rule_name not generated from a QTI processing element.
  • unregistered custom operator treated as successful execution.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
processingRuleIdcanonical processing_rule_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Primary key

Stable row identifier for one promoted processing rule or expression node.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused.

Source: qti.processing_rule.processing_rule_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Results And Grading Explanations, Alpha Provenance Requirements

Example: 74b1c279-e85f-407e-971e-16408ad792c0

artifactVersionIdcanonical artifact_version_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Foreign key

Artifact version containing the processing rule.

Constraints: Must reference qti.artifact_version(artifact_version_id). Cascades on version delete.

Relationship: Belongs to exactly one qti.artifact_version.

Invalid when: Missing version or mismatch with component_id artifact_version.

Source: qti.processing_rule.artifact_version_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Results And Grading Explanations, Alpha Provenance Requirements

Example: efcf3561-3a66-4825-9588-e792ef20c312

componentIdcanonical component_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Foreign key

Component node backing this processing rule.

Constraints: Must reference qti.component(component_id). Cascades on component delete.

Relationship: Belongs to exactly one qti.component.

Invalid when: Component is not in the same artifact_version or is not a processing/expression node.

Source: qti.processing_rule.component_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Results And Grading Explanations, Alpha Provenance Requirements

Example: 913a57f5-98a5-4726-940b-d9610b721ccb

parentProcessingRuleIdcanonical parent_processing_rule_id
Alpha cut Backstage upstream internal

uuid

Nullable

Default: none

Key: Self foreign key

Parent processing rule for nested expression and rule trees.

Constraints: Nullable for root rules. If present, references qti.processing_rule(processing_rule_id). Cascades on parent delete.

Relationship: References zero or one parent qti.processing_rule.

Invalid when: Parent is in another artifact_version, creates a cycle, or changes execution semantics.

Source: qti.processing_rule.parent_processing_rule_id

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Results And Grading Explanations, Alpha Provenance Requirements

Example: null

ruleScopecanonical rule_scope
Alpha cut Backstage upstream internal

text

Required

Default: none

Processing scope used for query and execution grouping.

Constraints: Must satisfy processing_rule_scope_ck.

Relationship: None.

Invalid when: Outside enum set or used to claim QTI defines this SQL row scope.

Allowed values: processing_rule_scope

Source: qti.processing_rule.rule_scope

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Results And Grading Explanations, Alpha Provenance Requirements

Example: response

ruleNamecanonical rule_name
Alpha cut Backstage upstream internal

text

Required

Default: none

QTI processing rule or expression element/operator name.

Constraints: Required text generated from the object graph and bundled XSD model.

Relationship: None.

Invalid when: Not a QTI processing/expression element, renamed for Alpha, or mismatched with component.element_name.

Source: qti.processing_rule.rule_name

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Results And Grading Explanations, Alpha Provenance Requirements

Example: qti-map-response

sequenceNumbercanonical sequence_number
Alpha cut Backstage upstream internal

integer

Required

Default: none

Order within the parent processing scope.

Constraints: Required integer. Must preserve QTI processing order and be stable across rehydration.

Relationship: None.

Invalid when: Null, order differs from object graph, or ties cause nondeterministic execution.

Source: qti.processing_rule.sequence_number

Source class: Platform gap fill

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Results And Grading Explanations, Alpha Provenance Requirements

Example: 10

operandscanonical operands
Alpha cut Backstage upstream internal

jsonb

Required

Default: '[]'::jsonb

Generated operand references and literal values for execution.

Constraints: Required JSON array. Must preserve variable references, literal values, and expression child references needed by the runtime.

Relationship: None.

Invalid when: Null, non-array JSON, points to undeclared variables, loses numeric precision, or contains unredacted learner identity.

Source: qti.processing_rule.operands

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Results And Grading Explanations, Alpha Provenance Requirements

Example: [{"variableIdentifier":"RESPONSE"}]

sourceTracecanonical source_trace
Alpha cut Backstage upstream internal

jsonb

Required

Default: '{}'::jsonb

Generated trace to XSD and spec section for this processing rule.

Constraints: Required JSON object and reproducible from the source bundle.

Relationship: None.

Invalid when: Null, non-object JSON, or not tied to the rule_name/component.

Source: qti.processing_rule.source_trace

Source class: 1EdTech pass-through

Alpha ITDs: Cut Raw QTI Internals From Public Alpha, Results And Grading Explanations, Alpha Provenance Requirements

Example: {"element":"qti-map-response","schemaFile":"imsqti_responseprocessingv3p0_v1p0.xsd"}

Shared qti.* table

qti.delivery_session - Activity

A student's interaction with one immutable content version. Alpha calls it an activity and stores the exact student view snapshot used at start.

Created by startActivity, updated as a student works, and closed or voided by lifecycle rules. Deleting student test data removes activity rows for the scoped studentRef and leaves reusable content intact.

Canonical table
qti.delivery_session
Primary key
delivery_session_id
1EdTech source
approved data dictionary section
Example row
{
  "delivery_session_id": "e0b41369-3019-42a5-a419-d5da6e33904f",
  "tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
  "candidate_ref": "9c41d14e-d011-4517-927e-b9bf0b7d5df4",
  "root_artifact_version_id": "efcf3561-3a66-4825-9588-e792ef20c312",
  "status": "active",
  "delivery_json_snapshot": {
    "kind": "item",
    "identifier": "RESPONSE-001"
  },
  "session_state": {
    "navigation": "item"
  },
  "created_at": "2026-05-20T13:15:00Z",
  "updated_at": "2026-05-20T13:16:10Z"
}

Relationships

  • Belongs to one qti.tenant.
  • Pins one qti.artifact_version as root_artifact_version_id.
  • Parent of qti.attempt.

Integrity rules

  • candidate_ref must be opaque tenant-scoped pseudonymous UUID string.
  • status must satisfy delivery_session_status_ck.
  • delivery_json_snapshot is required and immutable for historical stability.

Invalid examples

  • candidate_ref contains a name, email, SIS ID, raw JWT subject, or access token.
  • delivery_json_snapshot does not match root_artifact_version_id projection at session start.
  • status outside enum set.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
activityIdcanonical delivery_session_id
Alpha rename Public runtime object

uuid

Required

Default: none

Key: Primary key

Stable session identifier exposed by delivery APIs.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID, reused, or guessable outside API authorization.

Source: qti.delivery_session.delivery_session_id

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: e0b41369-3019-42a5-a419-d5da6e33904f

workspaceIdcanonical tenant_id
Alpha rename Public runtime object

uuid

Required

Default: none

Key: Foreign key

Tenant boundary for the delivery session.

Constraints: Must reference qti.tenant(tenant_id).

Relationship: Belongs to exactly one qti.tenant.

Invalid when: Does not match authenticated tenant claim or root artifact tenant.

Source: qti.delivery_session.tenant_id

Source class: Platform gap fill

Alpha ITDs: Shared QTI Persistence, Alpha Facade, Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3

studentRefcanonical candidate_ref
Alpha rename and restriction Public runtime object

text

Required

Default: none

The Alpha student reference for this activity. It must be an opaque tenant-scoped pseudonymous UUID string, not a student's name, email, SIS ID, JWT subject, phone number, or parent contact detail.

Constraints: Required text. Reject direct PII, auth tokens, raw JWT subjects, SIS IDs, contact details, and values that are not scoped to the tenant.

Relationship: Indexed with tenant_id for candidate session history and deletion.

Invalid when: Contains direct learner or parent PII, can be joined outside the tenant without an identity service, or is reused as a QTI content identifier.

Source: qti.delivery_session.candidate_ref

Source class: Platform gap fill

Alpha ITDs: StudentRef Privacy Language, Activity Delivery Language, Alpha Provenance Requirements

Example: 9c41d14e-d011-4517-927e-b9bf0b7d5df4

contentVersionIdcanonical root_artifact_version_id
Alpha rename Public runtime object

uuid

Required

Default: none

Key: Foreign key

Immutable item, test, or section version delivered in this session.

Constraints: Must reference qti.artifact_version(artifact_version_id).

Relationship: Belongs to exactly one qti.artifact_version.

Invalid when: Missing version, version not owned by tenant, or changed after session start.

Source: qti.delivery_session.root_artifact_version_id

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, Content Catalog Read Model, StudentRef Privacy Language, Alpha Provenance Requirements

Example: efcf3561-3a66-4825-9588-e792ef20c312

statuscanonical status
Alpha rename Public runtime object

text

Required

Default: 'created'

Session lifecycle state.

Constraints: Must satisfy delivery_session_status_ck.

Relationship: None.

Invalid when: Outside enum set or inconsistent with attempts, submitted_at, or review workflow.

Allowed values: delivery_session_status

Source: qti.delivery_session.status

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: active

studentViewSnapshotcanonical delivery_json_snapshot
Alpha rename Public runtime object

jsonb

Required

Default: none

Snapshot of delivery_json at session start.

Constraints: Required JSON object. Must remain stable for the session even if the artifact later receives a new version.

Relationship: None.

Invalid when: Null, mismatched to root_artifact_version_id at start, mutated after attempts, or contains authoring-only trace without declared lossiness.

Source: qti.delivery_session.delivery_json_snapshot

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: {"kind":"item","identifier":"RESPONSE-001"}

activityStatecanonical session_state
Alpha rename and restriction Public runtime object

jsonb

Required

Default: '{}'::jsonb

Runtime state not modeled as QTI variables, such as navigation, item sequencing, resume information, or review flags.

Constraints: Required JSON object. Treat as learner-runtime data. Do not store direct PII, raw PNP records, tokens, IP addresses, or user agents.

Relationship: None.

Invalid when: Null, non-object JSON, auth headers, raw PNP records, direct learner identity, or state that contradicts delivery_json_snapshot.

Source: qti.delivery_session.session_state

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: {"navigation":"item","currentItem":"RESPONSE-001"}

createdAtcanonical created_at
Alpha rename Public runtime object

timestamptz

Required

Default: now()

Session creation timestamp.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or later than updated_at.

Source: qti.delivery_session.created_at

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:15:00Z

updatedAtcanonical updated_at
Alpha rename Public runtime object

timestamptz

Required

Default: now()

Last session state mutation timestamp.

Constraints: Required timestamp with time zone. Must be updated when status or session_state changes.

Relationship: None.

Invalid when: Null, earlier than created_at, or stale after status/session_state update.

Source: qti.delivery_session.updated_at

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:16:10Z

Shared qti.* table

qti.attempt - Answer submission

One submitted or in-progress set of student answers plus the resulting QTI response, template, outcome, and grading trace snapshots.

Created when a student starts or submits answers for an activity. Result and grading explanation views are derived from this table without creating a second score table.

Canonical table
qti.attempt
Primary key
attempt_id
1EdTech source
approved data dictionary section
Example row
{
  "attempt_id": "69e74a21-1190-492f-9f64-7557754d6eef",
  "delivery_session_id": "e0b41369-3019-42a5-a419-d5da6e33904f",
  "artifact_version_id": "efcf3561-3a66-4825-9588-e792ef20c312",
  "attempt_number": 1,
  "status": "submitted",
  "response_state": {
    "RESPONSE": "choiceA"
  },
  "template_state": {},
  "outcome_state": {
    "SCORE": 1,
    "completionStatus": "completed"
  },
  "processing_trace": [
    {
      "rule": "qti-map-response",
      "variable": "RESPONSE"
    }
  ],
  "started_at": "2026-05-20T13:16:20Z",
  "submitted_at": "2026-05-20T13:18:02Z"
}

Relationships

  • Belongs to one qti.delivery_session.
  • References the qti.artifact_version attempted.

Integrity rules

  • Unique (delivery_session_id, artifact_version_id, attempt_number).
  • status must satisfy attempt_status_ck.
  • processing_trace must be privacy-redacted.

Invalid examples

  • processing_trace includes JWTs, IP addresses, user agents, raw PNP records, or direct learner identity.
  • attempt_number duplicates within one session/artifact version.
  • outcome_state cannot be reproduced by the trace and runtime profile.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
submissionIdcanonical attempt_id
Alpha rename Public runtime object

uuid

Required

Default: none

Key: Primary key

Stable identifier for one attempt record.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused.

Source: qti.attempt.attempt_id

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 69e74a21-1190-492f-9f64-7557754d6eef

activityIdcanonical delivery_session_id
Alpha rename Public runtime object

uuid

Required

Default: none

Key: Foreign key

Owning delivery session.

Constraints: Must reference qti.delivery_session(delivery_session_id). Cascades on session delete.

Relationship: Belongs to exactly one qti.delivery_session.

Invalid when: Missing session or tenant mismatch through session.

Source: qti.attempt.delivery_session_id

Source class: Platform gap fill

Alpha ITDs: Activity Delivery Language, Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: e0b41369-3019-42a5-a419-d5da6e33904f

contentVersionIdcanonical artifact_version_id
Alpha rename Public runtime object

uuid

Required

Default: none

Key: Foreign key

Immutable item/test artifact version attempted.

Constraints: Must reference qti.artifact_version(artifact_version_id).

Relationship: Belongs to exactly one qti.artifact_version.

Invalid when: Does not belong to the delivery session snapshot or changes after processing.

Source: qti.attempt.artifact_version_id

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Content Catalog Read Model, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: efcf3561-3a66-4825-9588-e792ef20c312

attemptNumbercanonical attempt_number
Alpha rename and extension Public runtime object

integer

Required

Default: none

Key: Unique with delivery_session_id and artifact_version_id

Attempt count within a session and artifact version.

Constraints: Required integer and unique with delivery_session_id plus artifact_version_id. Should increase for repeated attempts.

Relationship: None.

Invalid when: Zero or negative by convention, duplicated, or reused after an adaptive attempt changes state.

Source: qti.attempt.attempt_number

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 1

statuscanonical status
Alpha rename and extension Public runtime object

text

Required

Default: 'active'

Attempt lifecycle state.

Constraints: Must satisfy attempt_status_ck.

Relationship: None.

Invalid when: Outside enum set or inconsistent with suspended_at/submitted_at.

Allowed values: attempt_status

Source: qti.attempt.status

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: submitted

answerscanonical response_state
Alpha rename and restriction Public runtime object

jsonb

Required

Default: '{}'::jsonb

Candidate response variables at the last processing point.

Constraints: Required JSON object. Keys should be QTI response variable identifiers; values must match declaration cardinality/base_type. Treat as learner data.

Relationship: None.

Invalid when: Null, values inconsistent with qti.variable_declaration, unnecessary learner PII copied from outside the response, or logged without redaction.

Source: qti.attempt.response_state

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, StudentRef Privacy Language, Results And Grading Explanations, Alpha Provenance Requirements

Example: {"RESPONSE":"choiceA"}

templateStatecanonical template_state
Alpha restriction Advanced provenance

jsonb

Required

Default: '{}'::jsonb

Template variables used for item cloning and stability.

Constraints: Required JSON object. Keys should be QTI template variable identifiers; values must match declarations.

Relationship: None.

Invalid when: Null, regenerated on read instead of persisted, inconsistent with template processing trace, or logged with learner identity.

Source: qti.attempt.template_state

Source class: 1EdTech pass-through

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: {"A":3,"B":5}

resultscanonical outcome_state
Alpha rename and extension Public runtime object

jsonb

Required

Default: '{}'::jsonb

Outcome variables after template, response, and outcome processing.

Constraints: Required JSON object. Keys should be QTI outcome variable identifiers; values must match declarations and processing results.

Relationship: None.

Invalid when: Null, cannot be reproduced by processing rules under the runtime profile, or includes unsupported outcomes without diagnostics.

Source: qti.attempt.outcome_state

Source class: 1EdTech pass-through

Alpha ITDs: Results And Grading Explanations, Declaration-Checked Answers, StudentRef Privacy Language, Alpha Provenance Requirements

Example: {"SCORE":1,"completionStatus":"completed"}

gradingExplanationcanonical processing_trace
Alpha rename and extension Public runtime object

jsonb

Required

Default: '[]'::jsonb

Privacy-redacted processing trace used to explain grading. Public Alpha exposes a safe explanation view, not raw tokens, headers, IP addresses, PNP records, or direct identity fields.

Constraints: Required JSON array. May include rule names, variable identifiers, before/after values, and diagnostics. Must exclude JWTs, headers, access tokens, IP addresses, user agents, raw PNP records, raw package bytes, and direct learner identity fields.

Relationship: None.

Invalid when: Null, non-array JSON, nondeterministic, lacks failed-closed diagnostics for unsupported operators, or contains auth/PII data.

Source: qti.attempt.processing_trace

Source class: Platform gap fill

Alpha ITDs: Results And Grading Explanations, StudentRef Privacy Language, Declaration-Checked Answers, Alpha Provenance Requirements

Example: [{"rule":"qti-map-response","variable":"RESPONSE","result":1}]

startedAtcanonical started_at
Alpha rename and extension Public runtime object

timestamptz

Required

Default: now()

Attempt start timestamp.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or after submitted_at.

Source: qti.attempt.started_at

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:16:20Z

suspendedAtcanonical suspended_at
Alpha rename and extension Public runtime object

timestamptz

Nullable

Default: none

Attempt suspension timestamp, if the attempt was suspended.

Constraints: Nullable timestamp with time zone. Should be set when status is suspended.

Relationship: None.

Invalid when: Set while status never suspended without lifecycle evidence, before started_at, or after submitted_at.

Source: qti.attempt.suspended_at

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:17:00Z

submittedAtcanonical submitted_at
Alpha rename and extension Public runtime object

timestamptz

Nullable

Default: none

Attempt submission timestamp, if the attempt was submitted.

Constraints: Nullable timestamp with time zone. Should be set when status is submitted or reviewed.

Relationship: None.

Invalid when: Before started_at, set while status remains active without evidence, or absent for submitted/reviewed attempts.

Source: qti.attempt.submitted_at

Source class: Platform gap fill

Alpha ITDs: Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements

Example: 2026-05-20T13:18:02Z

Shared qti.* table

qti.conformance_run - QTI trust run

Release evidence used by the read-only Alpha trust status. Alpha users can see whether current QTI evidence passed, failed, is running, or errored; they cannot trigger runs publicly.

Created by 1EdTech/internal release tooling, then summarized by getQtiTrustStatus for schools and app-builder LLMs.

Canonical table
qti.conformance_run
Primary key
conformance_run_id
1EdTech source
approved data dictionary section
Example row
{
  "conformance_run_id": "ed0065af-721c-4799-a48c-8ce0c5fdc7f2",
  "profile": "qti-3.0",
  "bundle_hash": "sha256:184e568a31e239c0b282e7e1926dd7e8756901826f4a91e9e5b1ad58369d9ef4",
  "runner_version": "qti-conformance-runner/2026-05-20",
  "started_at": "2026-05-20T14:00:00Z",
  "finished_at": "2026-05-20T14:04:30Z",
  "status": "passed",
  "summary": {
    "examples": 327,
    "assertions": 28292
  }
}

Relationships

  • Parent of qti.conformance_assertion.

Integrity rules

  • status must satisfy conformance_run_status_ck.
  • bundle_hash must identify the offline source bundle used by the run.

Invalid examples

  • Run claims passed while child assertions failed.
  • bundle_hash omitted or points to live network state.
  • summary includes secrets or learner-runtime data.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
conformanceRunIdcanonical conformance_run_id
Alpha extension Read-only trust source

uuid

Required

Default: none

Key: Primary key

Stable identifier for one conformance run.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused.

Source: qti.conformance_run.conformance_run_id

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: ed0065af-721c-4799-a48c-8ce0c5fdc7f2

profilecanonical profile
Alpha extension Read-only trust source

text

Required

Default: none

Targeted QTI 3.0 conformance profile or optional feature set.

Constraints: Required text. Must be a profile the runner understands.

Relationship: None.

Invalid when: Unsupported profile, Alpha-only label, or profile not represented by assertions.

Source: qti.conformance_run.profile

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: qti-3.0

bundleHashcanonical bundle_hash
Alpha extension Read-only trust source

text

Required

Default: none

Hash of the offline spec bundle used by the run.

Constraints: Required text with algorithm prefix and digest.

Relationship: None.

Invalid when: Missing, live network URL, or not reproducible from the bundle used.

Source: qti.conformance_run.bundle_hash

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: sha256:184e568a31e239c0b282e7e1926dd7e8756901826f4a91e9e5b1ad58369d9ef4

runnerVersioncanonical runner_version
Alpha extension Read-only trust source

text

Required

Default: none

Version or identity of the conformance runner.

Constraints: Required text. Must be specific enough to reproduce behavior.

Relationship: None.

Invalid when: Blank, vague, or points to unpinned code.

Source: qti.conformance_run.runner_version

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: qti-conformance-runner/2026-05-20

startedAtcanonical started_at
Alpha extension Read-only trust source

timestamptz

Required

Default: now()

Run start timestamp.

Constraints: Required timestamp with time zone.

Relationship: None.

Invalid when: Null or after finished_at.

Source: qti.conformance_run.started_at

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: 2026-05-20T14:00:00Z

finishedAtcanonical finished_at
Alpha extension Read-only trust source

timestamptz

Nullable

Default: none

Run finish timestamp, if complete.

Constraints: Nullable timestamp with time zone. Should be set for passed, failed, or error.

Relationship: None.

Invalid when: Before started_at, absent for completed terminal status without explanation, or set while still running.

Source: qti.conformance_run.finished_at

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: 2026-05-20T14:04:30Z

statuscanonical status
Alpha extension Read-only trust source

text

Required

Default: 'running'

Run lifecycle status.

Constraints: Must satisfy conformance_run_status_ck.

Relationship: None.

Invalid when: Outside enum set or inconsistent with child assertion statuses.

Allowed values: conformance_run_status

Source: qti.conformance_run.status

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: passed

summarycanonical summary
Alpha extension Read-only trust source

jsonb

Required

Default: '{}'::jsonb

Generated coverage and pass/fail summary.

Constraints: Required JSON object. Should include counts, profile facts, and links/keys to assertion evidence; must not include secrets or learner-runtime data.

Relationship: None.

Invalid when: Null, non-object JSON, contradicts assertion rows, or includes raw package bytes/secrets.

Source: qti.conformance_run.summary

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: {"examples":327,"assertions":28292,"failed":0}

Shared qti.* table

qti.conformance_assertion - QTI trust assertion

Per-assertion evidence behind QTI trust status. Raw assertion rows stay backstage because public Alpha needs a clear trust answer, not release-run internals.

Created by the conformance runner and summarized into read-only trust status. Raw details require the 1EdTech/internal view.

Canonical table
qti.conformance_assertion
Primary key
conformance_assertion_id
1EdTech source
approved data dictionary section
Example row
{
  "conformance_assertion_id": "40bdfcf0-b97b-4a38-b308-a5d271a75943",
  "conformance_run_id": "ed0065af-721c-4799-a48c-8ce0c5fdc7f2",
  "assertion_key": "roundtrip:items/response-001.xml",
  "artifact_ref": "examples/qtiv3-examples/items/response-001.xml",
  "spec_ref": "imsqti_itemv3p0p1_v1p0.xsd#qti-assessment-item",
  "status": "passed",
  "details": {
    "canonicalHashMatched": true
  }
}

Relationships

  • Belongs to one qti.conformance_run.

Integrity rules

  • Unique (conformance_run_id, assertion_key).
  • status must satisfy conformance_assertion_status_ck.
  • details must carry enough diagnostics for failed/error assertions.

Invalid examples

  • Duplicate assertion_key in one run.
  • failed assertion with empty details.
  • spec_ref points to a live-only reference that cannot be reproduced from the bundle.
Alpha / Canonical Field Type and Nullability Meaning and Constraints Provenance and Example
conformanceAssertionIdcanonical conformance_assertion_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Primary key

Stable identifier for one assertion result.

Constraints: Valid UUID and unique primary key.

Relationship: None.

Invalid when: Not a UUID or reused.

Source: qti.conformance_assertion.conformance_assertion_id

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: 40bdfcf0-b97b-4a38-b308-a5d271a75943

conformanceRunIdcanonical conformance_run_id
Alpha cut Backstage upstream internal

uuid

Required

Default: none

Key: Foreign key

Owning conformance run.

Constraints: Must reference qti.conformance_run(conformance_run_id). Cascades on run delete.

Relationship: Belongs to exactly one qti.conformance_run.

Invalid when: Missing parent run or status contradicts parent run summary.

Source: qti.conformance_assertion.conformance_run_id

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: ed0065af-721c-4799-a48c-8ce0c5fdc7f2

assertionKeycanonical assertion_key
Alpha cut Backstage upstream internal

text

Required

Default: none

Key: Unique with conformance_run_id

Stable key generated by the conformance runner for this assertion.

Constraints: Required text and unique within the run. Must be deterministic for the same assertion.

Relationship: None.

Invalid when: Duplicated in a run, nondeterministic across reruns, or so vague it cannot locate the assertion.

Source: qti.conformance_assertion.assertion_key

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: roundtrip:items/response-001.xml

artifactRefcanonical artifact_ref
Alpha cut Backstage upstream internal

text

Nullable

Default: none

Example, fixture, or artifact path covered by this assertion.

Constraints: Nullable when assertion is feature-level only. If present, should point to a bundled example, generated artifact, or artifact identifier.

Relationship: None.

Invalid when: Live-only URL, missing fixture, or reference to learner-runtime data.

Source: qti.conformance_assertion.artifact_ref

Source class: 1EdTech pass-through

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: examples/qtiv3-examples/items/response-001.xml

specRefcanonical spec_ref
Alpha cut Backstage upstream internal

text

Nullable

Default: none

Spec section, schema component, or generated trace reference covered by this assertion.

Constraints: Nullable when the assertion is implementation-only. If present, must be reproducible from the bundled source or generated traceability.

Relationship: None.

Invalid when: Points only to live network docs, wrong schema file, or cannot be followed by a future generator.

Source: qti.conformance_assertion.spec_ref

Source class: 1EdTech pass-through

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: imsqti_itemv3p0p1_v1p0.xsd#qti-assessment-item

statuscanonical status
Alpha cut Backstage upstream internal

text

Required

Default: none

Assertion result status.

Constraints: Must satisfy conformance_assertion_status_ck.

Relationship: None.

Invalid when: Outside enum set, contradicts details, or failed/error without diagnostics.

Allowed values: conformance_assertion_status

Source: qti.conformance_assertion.status

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: passed

detailscanonical details
Alpha cut Backstage upstream internal

jsonb

Required

Default: '{}'::jsonb

Assertion diagnostics, canonical hashes, processing outcomes, and failure details.

Constraints: Required JSON object. Failed or error assertions must explain enough for reproduction. Must not include secrets, raw JWTs, direct learner PII, or unrelated package bytes.

Relationship: None.

Invalid when: Null, non-object JSON, missing diagnostics for failure, or contains auth/PII data.

Source: qti.conformance_assertion.details

Source class: Platform gap fill

Alpha ITDs: Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements

Example: {"canonicalHashMatched":true}

Allowed Values

Alpha labels may be friendlier, but stored values remain the approved qti.* values unless a later ITD changes them. Every value below includes behavior, source field, and Alpha provenance.

Assessment package import status

Alpha field: assessmentPackage.importStatus
Canonical source: qti.content_package.import_status

Stored valueAlpha labelBehavior
importingcheckingThe package row has been created and validation or resource extraction is still in progress. Do not deliver artifacts from this package yet.
importedreadyValidation, resource extraction, artifact creation, and version projection succeeded. The package can be queried, delivered, and exported.
rejectedneedsFixValidation, package-closure checks, XSD/Schematron validation, or privacy validation failed. Keep diagnostics in metadata; do not create deliverable sessions from this package.
supersededreplacedA later package or version replaces this import for operational use while preserving this row for audit and reproducibility.

IMS/QTI package resource type

Alpha field: qti.package_resource.resource_type
Canonical source: qti.package_resource.resource_type

Stored valueAlpha labelBehavior
imsqti_test_xmlv3p0imsqti_test_xmlv3p0A QTI assessment test XML resource. The primary href should point to a test XML document.
imsqti_section_xmlv3p0imsqti_section_xmlv3p0A QTI assessment section XML resource. Use for sections managed independently from a test.
imsqti_item_xmlv3p0imsqti_item_xmlv3p0A QTI assessment item XML resource. Use for a candidate-facing item with interactions and response processing.
imsqti_resprocessing_xmlv3p0imsqti_resprocessing_xmlv3p0A QTI response-processing XML resource when response processing is represented as a separate package resource.
imsqti_outcomes_xmlv3p0imsqti_outcomes_xmlv3p0A QTI outcome-declaration XML resource, often used when outcomes are managed independently.
imsqti_stimulus_xmlv3p0imsqti_stimulus_xmlv3p0A QTI assessment stimulus XML resource that items can depend on for shared passage or stimulus content.
imsqti_fragment_xmlv3p0imsqti_fragment_xmlv3p0A managed QTI fragment resource used by item, section, or test content.
imsqti_rptemplate_xmlv3p0imsqti_rptemplate_xmlv3p0A response-processing template XML resource, including standard or custom templates packaged with items.
associatedcontent/learning-application-resourceassociatedcontent/learning-application-resourceA learning-application asset referenced by QTI content.
webcontentwebcontentGeneric web content asset, such as image, video, audio, HTML, or other supporting media.
imsbasiclti_xmlv1p3imsbasiclti_xmlv1p3An LTI tool resource referenced by packaged content.
controlfilecontrolfileA manifest control file or package control artifact.
resourcemetadata/xmlresourcemetadata/xmlMetadata XML associated with a package resource.
resourceextmetadata/xmlresourceextmetadata/xmlExternal metadata XML associated with a package resource.
qtiusagedata/xmlqtiusagedata/xmlA QTI usage-data XML resource carrying item or distractor statistics.
plsplsPronunciation lexicon resource used by speech or accessibility presentation.
css2css2CSS 2 stylesheet resource.
css3css3CSS 3 stylesheet resource.
extensionextensionAn extension resource. Preserve and export it, but do not treat it as a known QTI root without validation evidence.

Alpha content kind

Alpha field: content.kind
Canonical source: qti.artifact.artifact_kind

Stored valueAlpha labelBehavior
itemquestionLogical artifact whose root is a QTI assessment item.
testtestLogical artifact whose root is a QTI assessment test.
sectiontestSectionLogical artifact whose root is a QTI assessment section.
stimuluspassageLogical artifact whose root is a QTI assessment stimulus.
outcome-declarationoutcomeDefinitionLogical artifact whose root is a standalone QTI outcome declaration.
response-processingscoringRuleLogical artifact whose root is standalone QTI response processing or a response-processing template.
resultresultReportLogical artifact whose root is a QTI assessment result report.
usage-datausageDataLogical artifact whose root is QTI usage data.
metadatametadataLogical artifact for QTI or resource metadata XML.
manifest-resourcepackageResourceManifest-only resource that must remain addressable even when it is not a QTI root document.

Generated answer or result declaration kind

Alpha field: answerSchema.kind
Canonical source: qti.variable_declaration.variable_kind

Stored valueAlpha labelBehavior
responseanswerCandidate response variable declared by QTI and usually bound to an interaction.
outcomeresultScoring, feedback, or reporting variable set by default values or processing rules.
templatetemplateTemplate variable used to instantiate or clone a parameterized item.
contextcontextContextual variable available to template or response processing, including candidate, test, or system context when declared.

Backstage grading rule scope

Alpha field: gradingExplanation.source.ruleScope
Canonical source: qti.processing_rule.rule_scope

Stored valueAlpha labelBehavior
responseanswerScoringRule belongs to response processing and computes outcome variables from candidate responses.
outcomeresultAggregationRule belongs to outcome processing at test or section level.
templatetemplateSetupRule belongs to template processing and initializes template state before delivery.
expressionexpressionRow represents an expression subtree or operator nested inside response, outcome, or template processing.

Activity status

Alpha field: activity.status
Canonical source: qti.delivery_session.status

Stored valueAlpha labelBehavior
createdcreatedSession exists and has a delivery JSON snapshot but has not yet become the active learner experience.
activeinProgressCandidate may interact with delivered content and create or update attempts.
suspendedpausedCandidate work is paused and may be resumed with the same snapshot and session state.
submittedsubmittedCandidate has submitted the session; scoring and attempt records are complete enough for review.
reviewreviewSession is in review mode. Content and responses may be displayed, but interactions must not change response variables.
closedclosedSession is final for normal operations. Future edits to content do not affect it.
voidedvoidedSession is retained as an operational record but should not count toward reporting or outcomes.

Answer submission status

Alpha field: answerSubmission.status
Canonical source: qti.attempt.status

Stored valueAlpha labelBehavior
activeinProgressCandidate can still modify responses for this attempt.
suspendedpausedCandidate response state is saved for later continuation.
submittedsubmittedCandidate submitted responses and processing has produced outcome state.
reviewedreviewedAttempt has been reviewed by an authorized person or workflow.
voidedvoidedAttempt is retained for audit but excluded from reporting and outcomes.

QTI trust status

Alpha field: qtiTrustStatus.lastRunStatus
Canonical source: qti.conformance_run.status

Stored valueAlpha labelBehavior
runningcheckingThe conformance runner has started and assertions are not yet complete.
passedtrustedAll required assertions for the targeted profile passed.
failedfailedAt least one required assertion failed.
errorerrorThe runner could not complete because of tool, environment, or infrastructure failure.

QTI trust assertion status

Alpha field: qtiTrustStatus.assertions.status
Canonical source: qti.conformance_assertion.status

Stored valueAlpha labelBehavior
passedpassedThis assertion met the expected result.
failedfailedThis assertion ran and found behavior that violates the target profile or platform contract.
skippedskippedThis assertion was intentionally not run, usually because it is out of profile or unavailable in the current runner.
errorerrorThis assertion could not produce a valid pass/fail result because the runner or fixture failed.

Projection lossiness

Alpha field: studentView.lossiness / editingDraft.lossiness
Canonical source: API projection metadata

Stored valueAlpha labelBehavior
nonenoneThe projection must preserve all spec-defined fields needed to reconstruct the generated object graph and canonical XML.
declareddeclaredThe projection may omit only explicitly documented authoring-only or diagnostic detail, such as source trace or mixed-content tail detail.

Cuts and Restrictions

These are deliberate Alpha exclusions, not missing documentation. They remain available through the approved 1EdTech surface or internal release tooling when the audience and authority justify it.

  • runConformance as a public mutation
  • raw qti.package_file.content_bytes reads
  • generic qti.component row reads
  • generic qti.variable_declaration row reads
  • generic qti.processing_rule row reads
  • qti.artifact_version.object_graph reads
  • generic qti.conformance_assertion row browsing

Non-goals

  • No OneRoster identity, class roster, assignment, or gradebook model is invented in the QTI Alpha architecture.
  • No Caliper event stream is invented in the QTI Alpha architecture.
  • No new QTI XML semantics, root elements, response-processing behavior, or conformance profile is invented by Alpha.
  • No direct learner PII is stored in qti.delivery_session.candidate_ref.