workspace.workspaceId |
qti.tenant.tenant_id |
uuid Required |
Stable platform identifier for one tenant boundary. |
Must be a valid PostgreSQL UUID and unique as the primary key. |
Not parseable as UUID, reused by another tenant, or copied into QTI XML as assessment content. |
Alpha rename Public foundation |
Shared QTI Persistence, Alpha Facade, School Vocabulary Layer, Alpha Provenance Requirements |
workspace.workspaceKey |
qti.tenant.tenant_key |
text Required |
Human-stable lookup key for operations, logs, and local tooling. |
Unique across qti.tenant. SQL has no length or charset check; API and migrations should keep it short, stable, and non-secret. |
Duplicated, empty in API input, used for direct learner identity, or treated as a QTI identifier. |
Alpha rename Public foundation |
Shared QTI Persistence, Alpha Facade, School Vocabulary Layer, Alpha Provenance Requirements |
workspace.name |
qti.tenant.display_name |
text Required |
Operational display label for the tenant. |
Required text. SQL has no length check; do not use as an authorization key. |
Null, blank in API input, or used in place of tenant_id for joins. |
Alpha rename Public foundation |
School Vocabulary Layer, Shared QTI Persistence, Alpha Facade, Alpha Provenance Requirements |
workspace.createdAt |
qti.tenant.created_at |
timestamptz Required |
Timestamp when the tenant row was inserted. |
Required timestamp with time zone. Defaults to database now(). |
Null, manually backdated without migration evidence, or compared as local time without timezone normalization. |
Alpha rename Public foundation |
Shared QTI Persistence, Alpha Facade, School Vocabulary Layer, Alpha Provenance Requirements |
assessment-package.packageId |
qti.content_package.package_id |
uuid Required |
Stable identifier assigned to one package ingest record. |
Valid UUID and unique primary key. |
Not a UUID or reused across package rows. |
Alpha restriction Public import summary |
Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements |
assessment-package.workspaceId |
qti.content_package.tenant_id |
uuid Required |
Tenant that owns the package and all extracted resources. |
Must reference qti.tenant(tenant_id). |
References a missing tenant or disagrees with the tenant path in the API request. |
Alpha rename Public import summary |
Shared QTI Persistence, Alpha Facade, Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements |
assessment-package.sourceName |
qti.content_package.source_uri |
text Nullable |
Friendly file name, URI, or content-addressable label shown for the uploaded assessment package. It is diagnostic only and not a trusted package locator. |
Nullable text. It is diagnostic only and must not be used as a trusted package locator after ingest. |
Used as a primary identity, contains secrets, or points outside tenant authorization. |
Alpha rename Public import summary |
Restricted Assessment Package Import, School Vocabulary Layer, Plain-Language Problems, Alpha Provenance Requirements |
assessment-package.idempotencyKey |
qti.content_package.idempotency_key |
text Nullable |
Idempotency-Key from the package ingest API so retries return the same package instead of duplicating work. |
Unique with tenant_id. PostgreSQL allows multiple nulls; API ingest should provide a key for client retries. |
Same tenant reuses the key for different package bytes, or a secret/token is stored here. |
Alpha restriction Advanced request safety |
Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements |
assessment-package.packageHash |
qti.content_package.package_hash |
text Required |
Cryptographic hash of the normalized package payload used to identify repeated imports. |
Required text and unique with tenant_id. Store the algorithm prefix with the digest, such as sha256:<hex>. |
Missing, not reproducible from the normalized package, or reused for different bytes in one tenant. |
Alpha restriction Advanced provenance |
Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements |
assessment-package.manifestIdentifier |
qti.content_package.manifest_identifier |
text Nullable |
IMS manifest identifier copied from imsmanifest when the package has one. |
Nullable because loose XML ingest may not include imsmanifest. If present, preserve the source value without Alpha renaming. |
Invented when no manifest exists, changed to a platform name, or used as a database primary key. |
Alpha restriction Advanced provenance |
Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements |
assessment-package.qtiProfile |
qti.content_package.qti_profile |
text Required |
Conformance profile asserted for this import. |
Required text. Current default and target profile is qti-3.0; optional feature sets must be explicit and supported by conformance evidence. |
Unsupported profile string, null, or used to imply the live network spec changed the accepted bundle. |
Alpha restriction Public import summary |
Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements |
assessment-package.importStatus |
qti.content_package.import_status |
text Required |
Current lifecycle state of package ingest. |
Must satisfy content_package_import_status_ck. |
Outside the enum set or inconsistent with resource/artifact projection state. |
Alpha restriction Public import summary |
Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements |
assessment-package.contentCreated |
qti.content_package.metadata; qti.artifact.artifact_kind |
object Required |
Safe counts of questions, tests, passages, sections, and assets created from the package. |
Derived from qti.content_package.metadata plus qti.artifact rows. Counts must not include raw package bytes, secrets, or direct learner data. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Restricted Assessment Package Import, Content Catalog Read Model |
assessment-package.importEvidence |
qti.content_package.metadata |
jsonb Required |
Safe generated import evidence such as content counts, validation diagnostics, and package facts. Alpha summaries must not include package bytes or secrets. |
Required JSON object. Do not store package bytes or secrets here; store original bytes in qti.package_file. |
Null, non-object JSON, direct learner PII, access tokens, or duplicated source XML bytes. |
Alpha restriction Public import summary |
Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements |
assessment-package.importedAt |
qti.content_package.imported_at |
timestamptz Required |
Timestamp when the package row was inserted. |
Required timestamp with time zone. |
Null or used as the source of content version ordering instead of artifact_version.version_number. |
Alpha restriction Public import summary |
Restricted Assessment Package Import, Plain-Language Problems, Alpha Provenance Requirements |
content.contentId |
qti.artifact.artifact_id |
uuid Required |
Stable platform identity for one logical artifact across versions. |
Valid UUID and unique primary key. |
Not a UUID, reused, or derived from a mutable QTI identifier. |
Alpha rename Public catalog source |
School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements |
content.workspaceId |
qti.artifact.tenant_id |
uuid Required |
Tenant that owns this artifact. |
Must reference qti.tenant(tenant_id). |
Missing tenant or different from the owning package tenant. |
Alpha rename Public catalog source |
Shared QTI Persistence, Alpha Facade, Content Catalog Read Model, School Vocabulary Layer, Alpha Provenance Requirements |
content.packageId |
qti.artifact.package_id |
uuid Nullable |
Origin package for imported artifacts. |
Nullable for authored loose artifacts. If present, must reference qti.content_package(package_id). Set null if package is deleted. |
References a package owned by another tenant. |
Alpha rename Public catalog source |
School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements |
content.packageResourceId |
qti.artifact.resource_id |
uuid Nullable |
Origin manifest resource for imported artifacts. |
Nullable for generated or loose artifacts. If present, must reference qti.package_resource(resource_id). Set null if resource is deleted. |
Resource comes from another package or tenant. |
Alpha rename Advanced provenance |
School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements |
content.kind |
qti.artifact.artifact_kind |
text Required |
Repository category derived from QTI root element or manifest resource type. |
Must satisfy artifact_kind_ck. |
Outside enum set, inconsistent with root_element on versions, or changed for Alpha vocabulary. |
Alpha rename Public catalog source |
School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements |
content.qtiIdentifier |
qti.artifact.qti_identifier |
text Nullable |
QTI identifier attribute copied from the root object when present. |
Nullable because not every artifact has a root identifier. Preserve source spelling; do not use as a globally unique database key. |
Invented when absent, rewritten to a UUID, or assumed unique outside artifact scope. |
Alpha rename Advanced QTI identity |
School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements |
content.title |
qti.artifact.title |
text Nullable |
QTI title or generated display label when present. |
Nullable. Preserve QTI title when present; generated labels must be distinguishable in metadata/spec trace. |
Used as identity, translated without retaining source XML, or contains direct learner PII. |
Alpha rename Public catalog source |
School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements |
content.language |
qti.artifact.language |
text Nullable |
xml:lang or package-default language associated with the artifact. |
Nullable BCP 47 language tag when known. |
Not a language tag, invented without source/default evidence, or used to filter tenant access. |
Alpha rename Public catalog source |
School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements |
content.latestVersionId |
qti.artifact.latest_version_id |
uuid Nullable |
Newest immutable artifact version for convenience reads. |
Nullable until a version exists. Must point to a qti.artifact_version for this same artifact when populated. |
Points to another artifact's version or treated as authoritative history instead of the artifact_version table. |
Alpha rename Public catalog source |
Content Catalog Read Model, Lossless Authoring Commands, School Vocabulary Layer, Alpha Provenance Requirements |
content.summary |
qti.artifact.title; qti.artifact.language; qti.component.text_value; qti.content_package.metadata |
object Required |
Safe catalog summary extracted from selected QTI components and metadata so users can find content without reading XML. |
Derived only from content fields and selected component values. Must not include raw XML, package bytes, learner data, or processing traces. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Content Catalog Read Model, Cut Raw QTI Internals From Public Alpha |
content.createdAt |
qti.artifact.created_at |
timestamptz Required |
Logical artifact creation timestamp. |
Required timestamp with time zone. |
Null or used as version_number. |
Alpha rename Public catalog source |
School Vocabulary Layer, Content Catalog Read Model, Alpha Provenance Requirements |
content-version.contentVersionId |
qti.artifact_version.artifact_version_id |
uuid Required |
Stable identifier for one immutable artifact edition. |
Valid UUID and unique primary key. |
Not a UUID or reused. |
Alpha rename Public version source with backstage internals |
School Vocabulary Layer, Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements |
content-version.contentId |
qti.artifact_version.artifact_id |
uuid Required |
Logical artifact this version belongs to. |
Must reference qti.artifact(artifact_id). Cascades on artifact delete. |
Missing artifact or cross-tenant mismatch through artifact. |
Alpha rename Public version source with backstage internals |
School Vocabulary Layer, Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements |
content-version.versionNumber |
qti.artifact_version.version_number |
integer Required |
Forward-only per-artifact version number. |
Required integer and unique with artifact_id. Should increase by one for each saved edition. |
Zero or negative by convention, duplicated for an artifact, skipped without migration evidence, or reused after rollback. |
Alpha rename and restriction Public version source with backstage internals |
Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements |
content-version.studentView |
qti.artifact_version.delivery_json |
jsonb Nullable |
Generated consumer-facing projection used by delivery applications and session snapshots. |
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. |
Drops response identifiers, scoring dependencies, feedback links, accessibility references, or includes source traces not intended for delivery. |
Alpha rename Public version source with backstage internals |
Activity Delivery Language, School Vocabulary Layer, Content Catalog Read Model, Lossless Authoring Commands, Alpha Provenance Requirements |
content-version.editingDraft |
qti.artifact_version.authoring_json |
jsonb Nullable |
Generated authoring projection for editors that must preserve all spec-defined fields. |
Nullable before projection. Must round-trip to object_graph with no spec-defined field loss. |
Lossy, missing extension payloads, missing source trace needed for edits, or used for delivery without declared lossiness. |
Alpha rename and restriction Public version source with backstage internals |
Lossless Authoring Commands, School Vocabulary Layer, Content Catalog Read Model, Activity Delivery Language, Alpha Provenance Requirements |
content-version.sourceXml |
qti.artifact_version.source_xml |
xml Required |
Original XML accepted after bundled XSD/Schematron validation. |
Required PostgreSQL xml. Must validate before object creation and persistence. |
Malformed XML, not valid against the bundled schema, contains direct learner runtime PII, or differs from the persisted object graph without trace. |
Alpha restriction Advanced QTI portability |
Lossless Authoring Commands, Alpha Provenance Requirements, Content Catalog Read Model, Activity Delivery Language |
content-version.canonicalXml |
qti.artifact_version.canonical_xml |
text Required |
Canonicalized XML used for equivalence checks and stable export. |
Required text. Must round-trip from object graph to XML and hash to xml_hash. |
Not reproducible from object_graph, hash mismatch, or changed after delivery sessions point to this version. |
Alpha restriction Advanced QTI portability |
Lossless Authoring Commands, Alpha Provenance Requirements, Content Catalog Read Model, Activity Delivery Language |
content-version.xmlHash |
qti.artifact_version.xml_hash |
text Required |
Hash of canonical_xml used for idempotency and semantic preservation checks. |
Required text and unique with artifact_id. Store algorithm prefix with digest. |
Does not match canonical_xml, algorithm omitted, or duplicates a prior version for the same artifact. |
Alpha rename and restriction Advanced provenance |
Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements |
content-version.qtiRootElement |
qti.artifact_version.root_element |
text Required |
Root XML element for this version. |
Required text generated from bundled XSD root element catalog. |
Not present in the bundled root catalog or inconsistent with source_xml. |
Alpha rename and restriction Advanced provenance |
Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements |
content-version.schemaFile |
qti.artifact_version.schema_file |
text Required |
Bundled schema file used as validation authority. |
Required text. Must name a schema in the offline QTI source bundle. |
Live network schema URL, missing local schema, or schema that does not define the root. |
Alpha rename and restriction Advanced provenance |
Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements |
content-version.specTrace |
qti.artifact_version.spec_trace |
jsonb Required |
Generated traceability from classes, fields, and components to XSD/spec anchors. |
Required JSON object. Must point back to the offline source bundle and generated model evidence. |
Null, non-object JSON, live-only references, or links that cannot be reproduced from the bundle. |
Alpha rename and restriction Advanced provenance |
Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements |
content-version.previousVersionId |
qti.artifact_version.supersedes_version_id |
uuid Nullable |
Previous version replaced by this version, when the save was an edit or replacement. |
Nullable. If present, must reference qti.artifact_version(artifact_version_id), normally for the same artifact. |
Points forward in time, points to another artifact without explicit migration evidence, or creates a cycle. |
Alpha rename Public version source with backstage internals |
Lossless Authoring Commands, Content Catalog Read Model, Activity Delivery Language, Alpha Provenance Requirements |
content-version.createdAt |
qti.artifact_version.created_at |
timestamptz Required |
Timestamp when this immutable version was created. |
Required timestamp with time zone. |
Null or mutated to reorder version history. |
Alpha rename and restriction Public version source with backstage internals |
Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements |
content-version.createdBy |
qti.artifact_version.created_by |
text Nullable |
Principal or system actor that created the version. |
Nullable text. Must be a safe principal label; do not store raw JWTs or secrets. |
Raw access token, raw JWT subject that identifies a learner, email address, or other direct learner PII. |
Alpha rename and restriction Public version source with backstage internals |
Content Catalog Read Model, Lossless Authoring Commands, Activity Delivery Language, Alpha Provenance Requirements |
activity.activityId |
qti.delivery_session.delivery_session_id |
uuid Required |
Stable session identifier exposed by delivery APIs. |
Valid UUID and unique primary key. |
Not a UUID, reused, or guessable outside API authorization. |
Alpha rename Public runtime object |
Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements |
activity.workspaceId |
qti.delivery_session.tenant_id |
uuid Required |
Tenant boundary for the delivery session. |
Must reference qti.tenant(tenant_id). |
Does not match authenticated tenant claim or root artifact tenant. |
Alpha rename Public runtime object |
Shared QTI Persistence, Alpha Facade, Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements |
activity.studentRef |
qti.delivery_session.candidate_ref |
text Required |
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. |
Required text. Reject direct PII, auth tokens, raw JWT subjects, SIS IDs, contact details, and values that are not scoped to the tenant. |
Contains direct learner or parent PII, can be joined outside the tenant without an identity service, or is reused as a QTI content identifier. |
Alpha rename and restriction Public runtime object |
StudentRef Privacy Language, Activity Delivery Language, Alpha Provenance Requirements |
activity.contentVersionId |
qti.delivery_session.root_artifact_version_id |
uuid Required |
Immutable item, test, or section version delivered in this session. |
Must reference qti.artifact_version(artifact_version_id). |
Missing version, version not owned by tenant, or changed after session start. |
Alpha rename Public runtime object |
Activity Delivery Language, Content Catalog Read Model, StudentRef Privacy Language, Alpha Provenance Requirements |
activity.status |
qti.delivery_session.status |
text Required |
Session lifecycle state. |
Must satisfy delivery_session_status_ck. |
Outside enum set or inconsistent with attempts, submitted_at, or review workflow. |
Alpha rename Public runtime object |
Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements |
activity.studentViewSnapshot |
qti.delivery_session.delivery_json_snapshot |
jsonb Required |
Snapshot of delivery_json at session start. |
Required JSON object. Must remain stable for the session even if the artifact later receives a new version. |
Null, mismatched to root_artifact_version_id at start, mutated after attempts, or contains authoring-only trace without declared lossiness. |
Alpha rename Public runtime object |
Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements |
activity.activityState |
qti.delivery_session.session_state |
jsonb Required |
Runtime state not modeled as QTI variables, such as navigation, item sequencing, resume information, or review flags. |
Required JSON object. Treat as learner-runtime data. Do not store direct PII, raw PNP records, tokens, IP addresses, or user agents. |
Null, non-object JSON, auth headers, raw PNP records, direct learner identity, or state that contradicts delivery_json_snapshot. |
Alpha rename and restriction Public runtime object |
Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements |
activity.createdAt |
qti.delivery_session.created_at |
timestamptz Required |
Session creation timestamp. |
Required timestamp with time zone. |
Null or later than updated_at. |
Alpha rename Public runtime object |
Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements |
activity.updatedAt |
qti.delivery_session.updated_at |
timestamptz Required |
Last session state mutation timestamp. |
Required timestamp with time zone. Must be updated when status or session_state changes. |
Null, earlier than created_at, or stale after status/session_state update. |
Alpha rename Public runtime object |
Activity Delivery Language, StudentRef Privacy Language, Alpha Provenance Requirements |
answer-submission.submissionId |
qti.attempt.attempt_id |
uuid Required |
Stable identifier for one attempt record. |
Valid UUID and unique primary key. |
Not a UUID or reused. |
Alpha rename Public runtime object |
Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
answer-submission.activityId |
qti.attempt.delivery_session_id |
uuid Required |
Owning delivery session. |
Must reference qti.delivery_session(delivery_session_id). Cascades on session delete. |
Missing session or tenant mismatch through session. |
Alpha rename Public runtime object |
Activity Delivery Language, Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
answer-submission.contentVersionId |
qti.attempt.artifact_version_id |
uuid Required |
Immutable item/test artifact version attempted. |
Must reference qti.artifact_version(artifact_version_id). |
Does not belong to the delivery session snapshot or changes after processing. |
Alpha rename Public runtime object |
Declaration-Checked Answers, Content Catalog Read Model, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
answer-submission.attemptNumber |
qti.attempt.attempt_number |
integer Required |
Attempt count within a session and artifact version. |
Required integer and unique with delivery_session_id plus artifact_version_id. Should increase for repeated attempts. |
Zero or negative by convention, duplicated, or reused after an adaptive attempt changes state. |
Alpha rename and extension Public runtime object |
Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
answer-submission.status |
qti.attempt.status |
text Required |
Attempt lifecycle state. |
Must satisfy attempt_status_ck. |
Outside enum set or inconsistent with suspended_at/submitted_at. |
Alpha rename and extension Public runtime object |
Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
answer-submission.answers |
qti.attempt.response_state |
jsonb Required |
Candidate response variables at the last processing point. |
Required JSON object. Keys should be QTI response variable identifiers; values must match declaration cardinality/base_type. Treat as learner data. |
Null, values inconsistent with qti.variable_declaration, unnecessary learner PII copied from outside the response, or logged without redaction. |
Alpha rename and restriction Public runtime object |
Declaration-Checked Answers, StudentRef Privacy Language, Results And Grading Explanations, Alpha Provenance Requirements |
answer-submission.answerSchema |
qti.variable_declaration.variable_kind; qti.variable_declaration.identifier; qti.variable_declaration.cardinality; qti.variable_declaration.base_type |
object Required |
Generated schema of answer slots, cardinality, base type, correct-response availability, and mapping rules used to validate answers before processing. |
Derived from qti.variable_declaration rows where variable_kind is response. Alpha must reject undeclared answer slots and wrong cardinality/base-type values. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Declaration-Checked Answers |
answer-submission.templateState |
qti.attempt.template_state |
jsonb Required |
Template variables used for item cloning and stability. |
Required JSON object. Keys should be QTI template variable identifiers; values must match declarations. |
Null, regenerated on read instead of persisted, inconsistent with template processing trace, or logged with learner identity. |
Alpha restriction Advanced provenance |
Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
answer-submission.results |
qti.attempt.outcome_state |
jsonb Required |
Outcome variables after template, response, and outcome processing. |
Required JSON object. Keys should be QTI outcome variable identifiers; values must match declarations and processing results. |
Null, cannot be reproduced by processing rules under the runtime profile, or includes unsupported outcomes without diagnostics. |
Alpha rename and extension Public runtime object |
Results And Grading Explanations, Declaration-Checked Answers, StudentRef Privacy Language, Alpha Provenance Requirements |
answer-submission.gradingExplanation |
qti.attempt.processing_trace |
jsonb Required |
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. |
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. |
Null, non-array JSON, nondeterministic, lacks failed-closed diagnostics for unsupported operators, or contains auth/PII data. |
Alpha rename and extension Public runtime object |
Results And Grading Explanations, StudentRef Privacy Language, Declaration-Checked Answers, Alpha Provenance Requirements |
answer-submission.startedAt |
qti.attempt.started_at |
timestamptz Required |
Attempt start timestamp. |
Required timestamp with time zone. |
Null or after submitted_at. |
Alpha rename and extension Public runtime object |
Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
answer-submission.suspendedAt |
qti.attempt.suspended_at |
timestamptz Nullable |
Attempt suspension timestamp, if the attempt was suspended. |
Nullable timestamp with time zone. Should be set when status is suspended. |
Set while status never suspended without lifecycle evidence, before started_at, or after submitted_at. |
Alpha rename and extension Public runtime object |
Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
answer-submission.submittedAt |
qti.attempt.submitted_at |
timestamptz Nullable |
Attempt submission timestamp, if the attempt was submitted. |
Nullable timestamp with time zone. Should be set when status is submitted or reviewed. |
Before started_at, set while status remains active without evidence, or absent for submitted/reviewed attempts. |
Alpha rename and extension Public runtime object |
Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
activity-result.resultId |
qti.attempt.attempt_id |
uuid Required |
Stable public identifier for the result view. It is the same value as the underlying answer submission ID. |
Must be a valid qti.attempt.attempt_id for the same activity and workspace. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Results And Grading Explanations |
activity-result.activityId |
qti.attempt.delivery_session_id |
uuid Required |
Owning delivery session. |
Must reference qti.delivery_session(delivery_session_id). Cascades on session delete. |
Missing session or tenant mismatch through session. |
Alpha rename Public runtime object |
Activity Delivery Language, Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
activity-result.contentVersionId |
qti.attempt.artifact_version_id |
uuid Required |
Immutable item/test artifact version attempted. |
Must reference qti.artifact_version(artifact_version_id). |
Does not belong to the delivery session snapshot or changes after processing. |
Alpha rename Public runtime object |
Declaration-Checked Answers, Content Catalog Read Model, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
activity-result.status |
qti.attempt.status |
text Required |
Attempt lifecycle state. |
Must satisfy attempt_status_ck. |
Outside enum set or inconsistent with suspended_at/submitted_at. |
Alpha rename and extension Public runtime object |
Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
activity-result.score |
qti.attempt.outcome_state; qti.variable_declaration.identifier |
number | null Nullable |
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. |
Derived from qti.attempt.outcome_state and QTI outcome declarations. Must not invent a score if no outcome variable supports it. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Results And Grading Explanations |
activity-result.feedback |
qti.attempt.outcome_state; qti.artifact_version.delivery_json |
object | null Nullable |
Student- or parent-readable feedback derived from outcome variables and delivery content when QTI exposes feedback state. |
Must preserve QTI visibility and privacy rules. Do not reveal correct answers or hidden feedback before the activity permits review. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Results And Grading Explanations, Activity Delivery Language |
activity-result.gradingExplanation |
qti.attempt.processing_trace |
jsonb Required |
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. |
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. |
Null, non-array JSON, nondeterministic, lacks failed-closed diagnostics for unsupported operators, or contains auth/PII data. |
Alpha rename and extension Public runtime object |
Results And Grading Explanations, StudentRef Privacy Language, Declaration-Checked Answers, Alpha Provenance Requirements |
activity-result.submittedAt |
qti.attempt.submitted_at |
timestamptz Nullable |
Attempt submission timestamp, if the attempt was submitted. |
Nullable timestamp with time zone. Should be set when status is submitted or reviewed. |
Before started_at, set while status remains active without evidence, or absent for submitted/reviewed attempts. |
Alpha rename and extension Public runtime object |
Declaration-Checked Answers, Results And Grading Explanations, StudentRef Privacy Language, Alpha Provenance Requirements |
qti-trust-status.profile |
qti.conformance_run.profile |
text Required |
Targeted QTI 3.0 conformance profile or optional feature set. |
Required text. Must be a profile the runner understands. |
Unsupported profile, Alpha-only label, or profile not represented by assertions. |
Alpha extension Read-only trust source |
Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements |
qti-trust-status.bundleHash |
qti.conformance_run.bundle_hash |
text Required |
Hash of the offline spec bundle used by the run. |
Required text with algorithm prefix and digest. |
Missing, live network URL, or not reproducible from the bundle used. |
Alpha extension Read-only trust source |
Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements |
qti-trust-status.runnerVersion |
qti.conformance_run.runner_version |
text Required |
Version or identity of the conformance runner. |
Required text. Must be specific enough to reproduce behavior. |
Blank, vague, or points to unpinned code. |
Alpha extension Read-only trust source |
Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements |
qti-trust-status.lastRunStatus |
qti.conformance_run.status |
text Required |
Run lifecycle status. |
Must satisfy conformance_run_status_ck. |
Outside enum set or inconsistent with child assertion statuses. |
Alpha extension Read-only trust source |
Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements |
qti-trust-status.startedAt |
qti.conformance_run.started_at |
timestamptz Required |
Run start timestamp. |
Required timestamp with time zone. |
Null or after finished_at. |
Alpha extension Read-only trust source |
Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements |
qti-trust-status.finishedAt |
qti.conformance_run.finished_at |
timestamptz Nullable |
Run finish timestamp, if complete. |
Nullable timestamp with time zone. Should be set for passed, failed, or error. |
Before started_at, absent for completed terminal status without explanation, or set while still running. |
Alpha extension Read-only trust source |
Cut Public Conformance Runner, Read-Only QTI Trust Status, Alpha Provenance Requirements |
qti-trust-status.assertionSummary |
qti.conformance_assertion.status; qti.conformance_assertion.details |
object Required |
Counts and notable failures derived from qti.conformance_assertion rows without exposing raw assertion diagnostics as a public Alpha row browser. |
Failed, skipped, and error counts must remain visible. Alpha must not turn failed evidence into green status copy. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Read-Only QTI Trust Status, Cut Public Conformance Runner |
qti-trust-status.surfaceQcUrl |
1edtech/surface_qc.canonical_url |
url Required |
Canonical approved 1EdTech surface QC URL used as public trust provenance. |
Must be the driver-approved deployment URL, not the shared project alias. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Read-Only QTI Trust Status, Alpha Provenance Requirements |
problem.type |
Alpha API boundary; qti validation/runtime source |
url Required |
Stable machine-readable problem type for this rejection class. |
Must be stable across wording edits and must not contain tenant secrets or learner data. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Plain-Language Problems |
problem.title |
Alpha API boundary |
text Required |
Short human-readable summary a teacher, student, parent, or app-builder LLM can act on. |
Must not expose package bytes, tokens, headers, IP addresses, raw PNP records, or direct learner identity fields. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Plain-Language Problems, StudentRef Privacy Language |
problem.status |
Alpha API boundary |
integer Required |
HTTP status code for the rejected Alpha operation. |
Must preserve the real rejection status; Alpha wording must not downgrade a failed validation to a warning. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Plain-Language Problems |
problem.detail |
qti.content_package.metadata; qti.variable_declaration; qti.processing_rule; qti.attempt.processing_trace |
text Required |
Safe explanation of what failed and what the caller can change. |
Must be privacy-redacted and safe for customer display. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Plain-Language Problems, StudentRef Privacy Language |
problem.invalidParams |
Alpha request schema; qti.variable_declaration |
array<object> Nullable |
Input paths and reasons for field-level validation failures. |
Paths use Alpha names first and may include canonical QTI names in advanced metadata. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Plain-Language Problems, Declaration-Checked Answers |
problem.upstreamTrace |
qti.artifact_version.spec_trace; qti.variable_declaration.source_trace; qti.processing_rule.source_trace |
object | null Nullable |
Safe link to QTI schema, architecture ITD, data dictionary field, or validation source for support. |
May include QTI identifiers, variable names, schema file names, and docs links; must not include secrets or raw learner identity. |
The value cannot be traced to the listed upstream fields or Alpha ITD, includes direct learner PII, or contradicts the shared qti.* source. |
Alpha extension Public derived field |
Plain-Language Problems, Alpha Provenance Requirements |