platform.tenant.tenant_id |
Stable database identifier for one customer/workspace boundary. This is the value module tables reference and tenant-scoped JWTs must match. |
uuid Required, default gen_random_uuid() |
Not parseable as UUID, reused by another tenant, copied into learner-facing content as identity text, or replaced by tenant_key in foreign keys. |
Inherited platform table PITD-003 required tenant_id in platform.tenant. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.tenant.tenant_key |
Human-stable lookup key for routes, local tooling, logs, and examples. It is a convenience key, not an authorization secret. |
text Required |
Blank, uppercase, contains spaces, contains an email/domain secret, duplicates another tenant, or is used as proof of authorization. |
Inherited platform table QTI's qti.tenant.tenant_key pattern promoted into platform tenant lookup. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.tenant.display_name |
Customer-facing label shown in admin tools and documentation examples. |
text Required |
Null, blank, over 160 characters, used as an authorization key, or copied into module records instead of joining to platform.tenant. |
Inherited platform table PITD-003 required display_name in platform.tenant. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.tenant.status |
Tenant lifecycle state that tells modules whether ordinary tenant-scoped writes may proceed. |
text Required, default 'provisioning' |
Outside tenant_status, null, or manually changed without an audit row explaining the administrative action. |
Inherited platform table PITD-003 left status to the data dictionary; PITD-005 and PITD-009 require auditable tenant scope. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.tenant.metadata |
Small redacted operational facts about the tenant that do not deserve first-class columns yet. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, stores a student email/phone/name/SIS ID, stores credentials, or becomes the only place a required module relationship is recorded. |
Inherited platform table PITD-003 required metadata; PITD-008 limits PII in shared tables. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.tenant.created_at |
Timestamp when the tenant row was inserted. |
timestamptz Required, default now() |
Null, manually backdated without migration evidence, or compared as local wall time. |
Inherited platform table PITD-017 requires DDL comments and lifecycle timestamps. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.tenant.updated_at |
Timestamp when the tenant row was last changed. |
timestamptz Required, default now() |
Null, earlier than created_at, or left unchanged after a tenant status or metadata mutation. |
Inherited platform table PITD-017 requires forward-only migrations and observable shared state. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.idempotency_key_id |
Stable identifier for the retry ledger row. Audit rows refer to this value rather than repeating replay internals. |
uuid Required, default gen_random_uuid() |
Not a UUID, reused across rows, or exposed as the customer Idempotency-Key header value. |
Inherited platform table PITD-007 requires a shared retry ledger. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.tenant_id |
Tenant that owns the retry scope and the mutation being protected. |
uuid Required |
Null, not found in platform.tenant, or different from the tenant_id claim in the Bearer JWT for a tenant-scoped route. |
Inherited platform table PITD-007 defines tenant_id as part of idempotency scope. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.module |
Module namespace whose operation claimed the idempotency key. |
text Required |
Null, outside module_key, used to store a route group instead of the module namespace, or used by /platform/modules as a release-status substitute. |
Inherited platform table PITD-002 requires module schemas and shared platform operational tables. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.surface |
Surface whose API contract produced the retryable operation. |
text Required |
Null, outside surface_code, or used to hide whether an Alpha divergence changed operation behavior. |
Inherited platform table PITD-015 defines platform, 1EdTech, and Alpha surfaces. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.method |
HTTP method for the mutation protected by the key. |
text Required |
Null, GET, lowercase if the implementation normalizes to uppercase, or method does not match the documented endpoint. |
Inherited platform table PITD-007 defines retryable create, upload, import, export-job, and command operations. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.route_template |
Stable route pattern from the customer website or OpenAPI operation, with variable path segments expressed as braces. |
text Required |
Contains concrete UUIDs, query strings, raw learner refs, access tokens, or an undocumented internal route. |
Inherited platform table PITD-006 requires endpoint-local contracts and PITD-007 requires route template scope. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.operation_id |
Stable operation identifier used by docs, OpenAPI, logs, audit, and idempotency middleware. |
text Required |
Blank, generated from a localized title, contains spaces, or changes without a customer-site and implementation update. |
Inherited platform table PITD-010 and PITD-009 require shared operation_id fields. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.idempotency_key |
Opaque customer-supplied Idempotency-Key header value for one retryable operation. |
text Required |
Blank, reused for different request_hash in the same scope, contains credentials or direct learner PII, or exceeds the documented length. |
Inherited platform table QTI package ingest used Idempotency-Key; PITD-007 promotes the rule. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.request_hash |
Digest of the canonical replay identity for the first request. It lets middleware distinguish a safe retry from key reuse with different content. |
text Required |
Missing algorithm prefix, not sha256, uppercase/malformed hex, computed from non-canonical JSON, or includes raw secrets in a way that would be logged. |
Inherited platform table PITD-007 requires request hash conflict detection. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.status |
Replay lifecycle state of the idempotency row. |
text Required, default 'in_progress' |
Outside idempotency_status, null, or incompatible with response_status/locked_until, such as completed with no final status. |
Inherited platform table PITD-007 requires original outcome replay and conflict behavior. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.response_status |
HTTP status originally returned for a final replayable outcome. |
integer Nullable |
Present while status is in_progress, outside 100-599, or does not match the Problem/status or resource creation outcome. |
Inherited platform table PITD-006 defines HTTP status policy and PITD-007 defines replay. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.response_body |
Redacted JSON body safe to replay to the same tenant for completed or failed_permanent outcomes. |
jsonb Nullable |
Stores raw request body, file bytes, secrets, PII, non-JSON text, or a body that cannot be returned to the authenticated tenant. |
Inherited platform table PITD-006 requires redacted Problem/errors; PITD-007 requires replayable outcomes. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.resource_type |
Optional type of resource created, imported, deleted, or accepted by the operation. |
text Nullable |
Contains a display title, localized wording, raw URL, or path with tenant/resource IDs. |
Inherited platform table PITD-009 uses resource_type in audit and replay support. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.resource_id |
Optional identifier of the primary resource associated with the replayable outcome. |
text Nullable |
Contains a student name, email, phone number, raw package path, or ID outside the tenant. |
Inherited platform table PITD-009 requires resource identifiers for operational traceability. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.first_request_id |
Request identifier of the first request that claimed this key. |
text Required |
Null, blank, regenerated on replay, or includes sensitive request details. |
Inherited platform table PITD-010 requires request_id in structured operational evidence. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.locked_until |
Temporary lock deadline used while an in-progress operation is executing. |
timestamptz Nullable |
Expired while status remains in_progress without takeover logic, set on completed rows, or earlier than created_at. |
Inherited platform table PITD-007 centralizes replay and conflict behavior. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.expires_at |
Timestamp after which the key is no longer promised to replay the original response. |
timestamptz Required |
Null, before created_at, shorter than the customer website promises, or extended without retention/audit reason. |
Inherited platform table PITD-007 requires a shared idempotency policy rather than per-module drift. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.created_at |
Timestamp when the first request claimed the idempotency key. |
timestamptz Required, default now() |
Null, changed after insert, or compared without timezone normalization. |
Inherited platform table PITD-017 requires lifecycle timestamps. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.idempotency_key.updated_at |
Timestamp when the row last changed status, replay body, lock, or expiry. |
timestamptz Required, default now() |
Null, earlier than created_at, or left unchanged after finalizing the row. |
Inherited platform table PITD-017 requires DDL discipline and auditability. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.audit_log_id |
Stable identifier for one append-only audit event. |
uuid Required, default gen_random_uuid() |
Not a UUID, reused, or generated outside the database without collision safeguards. |
Inherited platform table PITD-009 required audit_log_id. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.tenant_id |
Tenant affected by the audited action. |
uuid Required |
Null, not found, copied from an untrusted path without JWT tenant validation, or used to record a resource outside the tenant. |
Inherited platform table PITD-009 required tenant_id and PITD-005 requires tenant scope enforcement. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.module |
Module responsible for the operation being audited. |
text Required |
Null, outside module_key, set to platform for module resource changes, or used by support tooling as proof that the module surface is approved. |
Inherited platform table PITD-002 defines module boundaries and PITD-009 requires module in audit rows. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.surface |
Surface through which the action was initiated or exposed. |
text Required |
Null, outside surface_code, or set to alpha for expert-only conformance mutation. |
Inherited platform table PITD-015 defines surface model and derivation. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.operation_id |
Stable operation identifier from the customer website, OpenAPI, or platform maintenance command. |
text Required |
Blank, derived from localized prose, inconsistent with the endpoint that produced the event, or changed without docs and tests. |
Inherited platform table PITD-009 and PITD-010 require operation_id for audit and observability. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.actor_subject |
Pseudonymous actor identifier for the user, service, or release process that attempted the action. |
text Required |
Contains @, phone-like text, direct student/parent/teacher name, raw JWT sub, Bearer token, or service credentials. |
Inherited platform table PITD-008 requires pseudonymous learner/customer data in logs and audit rows. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.actor_roles |
Roles or scopes that justified the action or explain why authorization failed. |
text[] Required, default '{}'::text[] |
Null, contains raw JWT claims with PII, includes access tokens, or omits the service-role scope for privileged operations. |
Inherited platform table PITD-005 requires explicit roles/scopes for privileged operations. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.resource_type |
Stable resource class affected by the action. |
text Required |
Blank, localized title, raw URL, or includes tenant/resource IDs. |
Inherited platform table PITD-009 required resource_type. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.resource_id |
Identifier of the primary resource affected by the action, or a documented sentinel when authorization failed before resource resolution. |
text Required |
Blank, direct learner PII, access token, raw path with query secrets, or an ID from another tenant. |
Inherited platform table PITD-009 required resource_id. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.action |
Behavioral category of the audited action. |
text Required |
Null, outside audit_action, or too vague to distinguish import from create, delete from runtime_delete, or read from read_privileged. |
Inherited platform table PITD-009 defines action semantics. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.outcome |
Final result category for the action. |
text Required |
Null, outside audit_outcome, inconsistent with http_status, or hides authorization failure as validation failure. |
Inherited platform table PITD-009 requires outcome and PITD-006 defines status/error policy. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.http_status |
HTTP status returned for the request or the HTTP-equivalent status assigned to a background/service operation. |
integer Required |
Null, outside 100-599, or inconsistent with outcome. |
Inherited platform table PITD-006 defines HTTP status policy; PITD-009 requires http_status. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.request_id |
Per-request identifier exposed in Problem responses and support logs. |
text Required |
Null, blank, contains request headers/secrets, or changes within the same request flow. |
Inherited platform table PITD-006 requires requestId in Problem errors and PITD-010 requires structured logs. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.trace_id |
Trace identifier that links logs, metrics, audit rows, and downstream spans for one request or job. |
text Required |
Null, blank, contains auth tokens, or is regenerated per row inside the same request flow. |
Inherited platform table PITD-010 requires trace_id in structured logs and audit evidence. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.idempotency_key_id |
Optional link to the idempotency row that governed the audited operation. |
uuid Nullable |
Not a UUID, points to a different tenant, or stores the customer-supplied header value instead of the internal row id. |
Inherited platform table PITD-007 and PITD-009 connect retry behavior to audit. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.occurred_at |
Timestamp when the audited action reached the recorded outcome. |
timestamptz Required, default now() |
Null, manually backdated without maintenance evidence, or compared as local time. |
Inherited platform table PITD-009 required occurred_at. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
platform.audit_log.redacted_metadata |
Small, safe, structured context that helps explain the audit event without storing raw sensitive data. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, stores secrets/PII/raw bodies, or becomes the only place a required relationship is stored. |
Inherited platform table PITD-008 and PITD-009 require redacted audit metadata. Inherited into QTI by ITD-025; do not redefine this field in qti.*. |
Platform shared, ITD-025 Platform Substrate Inheritance |
qti.tenant.tenant_id |
Stable platform.tenant identifier exposed through the legacy qti.tenant shape. |
uuid Required |
Not parseable as UUID, absent from platform.tenant, generated independently by QTI, or copied into QTI XML as assessment content. |
QTI compatibility view Compatibility projection of platform.tenant.tenant_id. |
ITD-008 Tenant Boundary, ITD-025 Platform Substrate Inheritance |
qti.tenant.tenant_key |
Human-stable platform.tenant lookup key exposed through the legacy QTI projection. |
text Required |
Duplicated, empty, uppercase, contains spaces, treated as an authorization secret, treated as a QTI identifier, or confused with the route-level demo tenantId alias. |
QTI compatibility view Compatibility projection of platform.tenant.tenant_key. |
ITD-008 Tenant Boundary, ITD-025 Platform Substrate Inheritance |
qti.tenant.display_name |
Customer-facing platform.tenant label exposed for older QTI tools. |
text Required |
Null, blank, over 160 characters, used as authorization, or used in place of tenant_id for joins. |
QTI compatibility view Compatibility projection of platform.tenant.display_name. |
ITD-008 Tenant Boundary, ITD-025 Platform Substrate Inheritance |
qti.tenant.created_at |
Timestamp when the backing platform.tenant row was inserted. |
timestamptz Required |
Null, manually backdated without platform audit evidence, or compared as local time without timezone normalization. |
QTI compatibility view Compatibility projection of platform.tenant.created_at. |
ITD-022 Operational DDL Discipline, ITD-025 Platform Substrate Inheritance |
qti.content_package.package_id |
Stable identifier assigned to one package ingest record. |
uuid Required |
Not a UUID or reused across package rows. |
Platform gap fill Platform package identity. |
ITD-009 Package Resource And File Ingest |
qti.content_package.tenant_id |
Tenant that owns the package and all extracted resources. |
uuid Required |
References a missing tenant or disagrees with the tenant path in the API request. |
Platform gap fill Tenant boundary inherited from Platform. |
ITD-008 Tenant Boundary, ITD-009 Package Resource And File Ingest, ITD-025 Platform Substrate Inheritance |
qti.content_package.source_uri |
Original filename, URI, or content-addressable reference supplied by the ingest caller. |
text Nullable |
Used as a primary identity, contains secrets, or points outside tenant authorization. |
Platform gap fill Operational ingest evidence. |
ITD-009 Package Resource And File Ingest |
qti.content_package.idempotency_key |
Package-specific copy of the customer-supplied Idempotency-Key, retained for explainable QTI package rows while replay ownership lives in platform.idempotency_key. listPackages exposes this value so a caller who lost the original ingest response can recover the key needed for same-key replay. |
text Nullable |
Same tenant reuses the key for different package bytes, it differs from the referenced platform.idempotency_key.idempotency_key, the public API omits it on ingest, listPackages hides it when present, or a secret/token is stored here. |
Platform gap fill QTI package evidence for inherited platform idempotency behavior. |
ITD-010 Idempotency And Hashes, ITD-018 API Boundary, ITD-025 Platform Substrate Inheritance, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.content_package.platform_idempotency_key_id |
Reference to the shared Platform retry ledger row that claimed the package-ingest Idempotency-Key and can replay the original response when the caller persisted the key. |
uuid Nullable |
References a missing platform idempotency row, references another tenant/module/surface/operation, is null for public package ingest, or contradicts idempotency_key/request_hash. |
Platform gap fill Inherited Platform idempotency linkage required by QTI ITD-010 and ITD-025. |
ITD-010 Idempotency And Hashes, ITD-018 API Boundary, ITD-025 Platform Substrate Inheritance, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.content_package.package_hash |
Cryptographic hash of the normalized package payload used to identify repeated imports. |
text Required |
Missing, not reproducible from the normalized package, or reused for different bytes in one tenant. |
Platform gap fill Idempotent persistence and audit. |
ITD-010 Idempotency And Hashes, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.content_package.manifest_identifier |
IMS manifest identifier copied from imsmanifest when the package has one. |
text Nullable |
Invented when no manifest exists, changed to a platform name, or used as a database primary key. |
1EdTech pass-through IMS content package manifest identifier. |
ITD-009 Package Resource And File Ingest, ITD-007 Provenance Labels |
qti.content_package.qti_profile |
Conformance profile asserted for this import. |
text Required, default 'qti-3.0' |
Unsupported profile string, null, or used to imply the live network spec changed the accepted bundle. |
Platform gap fill Platform conformance profile label tied to the offline QTI 3.0 bundle. |
ITD-001 Offline 1EdTech Source Bundle, ITD-017 Conformance Evidence |
qti.content_package.import_status |
Current lifecycle state of package ingest. |
text Required, default 'imported' |
Outside the enum set or inconsistent with resource/artifact projection state. |
Platform gap fill Platform package import lifecycle. |
ITD-009 Package Resource And File Ingest, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.content_package.metadata |
Generated package-level import evidence such as manifest facts, QTI metadata summaries, counts, validation diagnostics, and vocabulary projections. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, direct learner PII, access tokens, or duplicated source XML bytes. |
Platform gap fill Generated import evidence envelope. |
ITD-009 Package Resource And File Ingest, ITD-020 Validation And Rejection Policy |
qti.content_package.imported_at |
Timestamp when the package row was inserted and the timestamp component of the stable listPackages ordering. |
timestamptz Required, default now() |
Null or used as the source of content version ordering instead of artifact_version.version_number. |
Platform gap fill Import audit metadata. |
ITD-022 Operational DDL Discipline, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.package_resource.resource_id |
Stable identifier for this manifest resource row. |
uuid Required |
Not a UUID or reused by another package_resource row. |
Platform gap fill Platform row identity. |
ITD-009 Package Resource And File Ingest |
qti.package_resource.package_id |
Owning content package. |
uuid Required |
Missing package, cross-tenant package/resource mixture, or null. |
Platform gap fill Package ownership boundary. |
ITD-009 Package Resource And File Ingest |
qti.package_resource.resource_identifier |
IMS manifest resource identifier copied from imsmanifest. |
text Required |
Duplicated within a package, rewritten to a platform UUID, or missing when the manifest resource has an identifier. |
1EdTech pass-through IMS manifest resource identifier. |
ITD-009 Package Resource And File Ingest, ITD-007 Provenance Labels |
qti.package_resource.resource_type |
IMS/QTI resource type from the package manifest. |
text Required |
Blank, invented by Alpha naming, or used to bypass validation. |
1EdTech pass-through IMS/QTI package resource type value. |
ITD-009 Package Resource And File Ingest, ITD-007 Provenance Labels |
qti.package_resource.href |
Package-relative path to the resource's primary file. |
text Nullable |
Absolute URL for a packaged file, path traversal, unnormalized slashes, or missing package_file for a required primary file. |
1EdTech pass-through IMS package resource href. |
ITD-009 Package Resource And File Ingest, ITD-020 Validation And Rejection Policy |
qti.package_resource.dependencies |
Manifest dependency references and variant resource links generated from the package manifest. |
jsonb Required, default '[]'::jsonb |
Null, non-array JSON, unresolved dependency, or cross-package dependency not represented as allowed external metadata. |
1EdTech pass-through IMS package resource dependency references. |
ITD-009 Package Resource And File Ingest, ITD-020 Validation And Rejection Policy |
qti.package_resource.metadata |
Manifest-derived metadata, file list, and resource facts generated at ingest. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, direct learner PII, auth tokens, or package bytes. |
1EdTech pass-through IMS manifest resource metadata projection when copied from manifest; generated file inventory remains gap-fill metadata. |
ITD-009 Package Resource And File Ingest, ITD-007 Provenance Labels |
qti.package_file.package_file_id |
Stable identifier for one original package file row. |
uuid Required |
Not a UUID or reused. |
Platform gap fill Platform file row identity. |
ITD-009 Package Resource And File Ingest |
qti.package_file.package_id |
Owning content package. |
uuid Required |
References a missing package or mixes tenants. |
Platform gap fill Package ownership boundary. |
ITD-009 Package Resource And File Ingest |
qti.package_file.resource_id |
Manifest resource that first listed this file, when applicable. |
uuid Nullable |
References a resource from a different package or tenant. |
Platform gap fill Platform linkage from manifest resource to file preservation, including PCI interaction-module files. |
ITD-009 Package Resource And File Ingest, ITD-030 Portable Custom Interaction Persistence And Execution Boundary |
qti.package_file.package_path |
Normalized package-relative path for this file. |
text Required |
Contains ../ escape, backslash ambiguity, an absolute scheme, duplicate normalized path, or a path not present in the uploaded package. |
1EdTech pass-through IMS package-relative file path. |
ITD-009 Package Resource And File Ingest, ITD-020 Validation And Rejection Policy |
qti.package_file.media_type |
Detected or declared media type used for export, diagnostics, and content serving. |
text Required, default 'application/octet-stream' |
Null, unparseable as a media type, or trusted more than validation of the actual content. |
Platform gap fill Generated file metadata for platform serving and diagnostics. |
ITD-009 Package Resource And File Ingest |
qti.package_file.byte_length |
Original byte length of content_bytes. |
integer Required |
Negative, null, or mismatched with content_bytes. |
Platform gap fill Generated package file evidence. |
ITD-009 Package Resource And File Ingest |
qti.package_file.content_hash |
Cryptographic hash of the original file bytes. |
text Required |
Missing, digest does not match content_bytes, or algorithm is not recorded. |
Platform gap fill File-level audit and export integrity evidence. |
ITD-010 Idempotency And Hashes |
qti.package_file.content_bytes |
Original bytes exactly as accepted from the package for this path, including QTI XML, media, and Portable Custom Interaction JavaScript module files. |
bytea Required |
Null, replaced by parsed text only, mutated after ingest, contains a file that failed package-closure validation, or loaded into the server runtime as executable PCI code. |
1EdTech pass-through Original package file bytes. |
ITD-009 Package Resource And File Ingest, ITD-004 XML Authority And Canonical Hashes, ITD-030 Portable Custom Interaction Persistence And Execution Boundary |
qti.package_file.metadata |
Generated evidence about the file, such as manifest listing flags, validation role, and extracted diagnostics. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, auth tokens, direct learner PII, or raw file bytes duplicated as JSON. |
Platform gap fill Generated file-preservation evidence. |
ITD-009 Package Resource And File Ingest, ITD-020 Validation And Rejection Policy |
qti.package_file.created_at |
Timestamp when the file row was inserted. |
timestamptz Required, default now() |
Null or used as a proxy for QTI content versioning. |
Platform gap fill Package-file audit metadata. |
ITD-022 Operational DDL Discipline |
qti.artifact.artifact_id |
Stable platform identity for one logical artifact across versions. |
uuid Required |
Not a UUID, reused, or derived from a mutable QTI identifier. |
Platform gap fill Platform logical artifact identity. |
ITD-011 Artifact Versioning |
qti.artifact.tenant_id |
Tenant that owns this artifact. |
uuid Required |
Missing tenant or different from the owning package tenant. |
Platform gap fill Tenant ownership boundary inherited from Platform. |
ITD-008 Tenant Boundary, ITD-011 Artifact Versioning, ITD-025 Platform Substrate Inheritance |
qti.artifact.package_id |
Origin package for imported artifacts. |
uuid Nullable |
References a package owned by another tenant. |
Platform gap fill Package origin evidence. |
ITD-009 Package Resource And File Ingest, ITD-011 Artifact Versioning |
qti.artifact.resource_id |
Origin manifest resource for imported artifacts. |
uuid Nullable |
Resource comes from another package or tenant. |
Platform gap fill Manifest origin evidence. |
ITD-009 Package Resource And File Ingest, ITD-011 Artifact Versioning |
qti.artifact.artifact_kind |
Repository category derived from QTI root element or manifest resource type. |
text Required |
Outside enum set, inconsistent with root_element on versions, changed for Alpha vocabulary, or used to create a QTI-owned Caliper event/result primitive. |
Platform gap fill Gap-fill classification derived from QTI roots and package resources. ITD-032 pins result and usage-data as stock QTI document homes, not new platform result/statistics tables. |
ITD-012 Artifact Kind Allowed Values, ITD-032 QTI Results Reporting And Caliper Boundary |
qti.artifact.qti_identifier |
QTI identifier attribute copied from the root object when present. listArtifacts returns it as qtiIdentifier so a caller can recover an artifact by source QTI identity after a lost ingest response. |
text Nullable |
Invented when absent, rewritten to a UUID, or assumed unique outside artifact scope. |
1EdTech pass-through QTI identifier attribute. |
ITD-004 XML Authority And Canonical Hashes, ITD-007 Provenance Labels, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.artifact.title |
QTI title or generated display label when present. listArtifacts returns it as title so a caller can recover and display an artifact without maintaining a client-side mirror. |
text Nullable |
Used as identity, translated without retaining source XML, or contains direct learner PII. |
1EdTech pass-through QTI title or package display metadata when copied from source. |
ITD-004 XML Authority And Canonical Hashes, ITD-007 Provenance Labels, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.artifact.language |
xml:lang or package-default language associated with the artifact. |
text Nullable |
Not a language tag, invented without source/default evidence, or used to filter tenant access. |
1EdTech pass-through xml:lang or package default language. |
ITD-004 XML Authority And Canonical Hashes |
qti.artifact.latest_version_id |
Newest immutable artifact version for convenience reads, including the latest authoring_json projection returned by getAuthoringJson and the latestArtifactVersionId returned by listArtifacts. |
uuid Nullable |
Points to another artifact's version, lags the highest version_number without repair evidence, listArtifacts surfaces a stale latestArtifactVersionId, or is treated as authoritative history instead of the artifact_version table. |
Platform gap fill Platform version lookup convenience. |
ITD-011 Artifact Versioning, ITD-018 API Boundary, ITD-020 Validation And Rejection Policy, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.artifact.created_at |
Logical artifact creation timestamp and the timestamp component of the stable listArtifacts ordering. |
timestamptz Required, default now() |
Null or used as version_number. |
Platform gap fill Artifact audit metadata. |
ITD-022 Operational DDL Discipline, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.artifact_version.artifact_version_id |
Stable identifier for one immutable artifact edition. |
uuid Required |
Not a UUID or reused. |
Platform gap fill Platform version identity. |
ITD-011 Artifact Versioning |
qti.artifact_version.artifact_id |
Logical artifact this version belongs to; the join path that proves tenant ownership for listArtifactVersions and raw artifact-version reads. |
uuid Required |
Missing artifact or cross-tenant mismatch through artifact. |
Platform gap fill Version belongs to logical artifact identity. |
ITD-011 Artifact Versioning, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery, ITD-008 Tenant Boundary |
qti.artifact_version.version_number |
Forward-only per-artifact version number returned by listArtifactVersions as versionNumber. |
integer Required |
Zero or negative by convention, duplicated for an artifact, skipped without migration evidence, or reused after rollback. |
Platform gap fill Immutable version sequencing. |
ITD-011 Artifact Versioning, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.artifact_version.source_xml |
Original XML accepted after bundled XSD/Schematron validation. |
xml Required |
Malformed XML, not valid against the bundled schema, contains direct learner runtime PII, or differs from the persisted object graph without trace. |
1EdTech pass-through Original QTI XML accepted from the 1EdTech source format. |
ITD-004 XML Authority And Canonical Hashes, ITD-020 Validation And Rejection Policy |
qti.artifact_version.canonical_xml |
Canonicalized XML used for equivalence checks and stable export. |
text Required |
Not reproducible from object_graph, hash mismatch, or changed after delivery sessions point to this version. |
1EdTech pass-through Canonical QTI XML derived from source XML under platform canonicalization rules. |
ITD-004 XML Authority And Canonical Hashes |
qti.artifact_version.xml_hash |
Hash of canonical_xml used for idempotency and semantic preservation checks; returned by listArtifactVersions as xmlHash. |
text Required |
Does not match canonical_xml, algorithm omitted, or duplicates a prior version for the same artifact. |
Platform gap fill Platform equivalence and idempotency evidence over QTI XML. |
ITD-004 XML Authority And Canonical Hashes, ITD-010 Idempotency And Hashes, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.artifact_version.root_element |
Root XML element for this version; returned by listArtifactVersions as rootElement. |
text Required |
Not present in the bundled root catalog or inconsistent with source_xml. |
1EdTech pass-through QTI root element from bundled schemas. |
ITD-004 XML Authority And Canonical Hashes, ITD-002 Generated Object Model Hub, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.artifact_version.root_type |
Generated XSD type name for the root element. |
text Nullable |
Invented type, wrong schema namespace, or mismatch with root_element. |
1EdTech pass-through Generated XSD root type from bundled QTI schemas. |
ITD-002 Generated Object Model Hub, ITD-004 XML Authority And Canonical Hashes |
qti.artifact_version.schema_file |
Bundled schema file used as validation authority. |
text Required |
Live network schema URL, missing local schema, or schema that does not define the root. |
1EdTech pass-through Bundled QTI XSD file. |
ITD-001 Offline 1EdTech Source Bundle, ITD-020 Validation And Rejection Policy |
qti.artifact_version.object_graph |
Canonical generated object-model graph serialized as JSONB for internal persistence. |
jsonb Required |
Null, non-object JSON, loses mixed-content tail text, loses namespace identity, or becomes a public delivery contract. |
Platform gap fill Generated internal object graph for persistence; QTI defines XML, not this JSONB envelope. |
ITD-002 Generated Object Model Hub, ITD-005 Lossless Relational Projection |
qti.artifact_version.delivery_json |
Generated consumer-facing projection used by delivery applications and session snapshots. |
jsonb Nullable |
Drops response identifiers, scoring dependencies, feedback links, accessibility references, test-navigation declarations, PCI markup/module references, template body references, or includes source traces not intended for delivery. |
Platform gap fill Generated delivery projection; QTI defines source XML, not this public JSON view. The projected QTI constructs remain stock pass-through values; runtime ownership is scoped by ITD-027 through ITD-032. |
ITD-006 JSON Projection Boundaries, ITD-015 Delivery Session Snapshots, ITD-027 Server-Authoritative Timed Delivery And Time-Conditioned Outcome Processing, ITD-028 Test-Level Sequencing, Branching, And Adaptive Selection, ITD-029 Catalog And PNP Accessibility Activation, ITD-030 Portable Custom Interaction Persistence And Execution Boundary, ITD-031 Item Template Declaration, Processing, And Cloning, ITD-032 QTI Results Reporting And Caliper Boundary |
qti.artifact_version.authoring_json |
Generated authoring projection returned by GET /tenants/{tenantId}/qti/artifacts/{artifactId}/authoring-json for editors that must preserve all spec-defined fields. |
jsonb Nullable |
Lossy, missing extension payloads, missing PCI/template/source trace needed for edits, built from delivery_json, stale relative to the selected latest version, or used for delivery without declared lossiness. |
Platform gap fill Generated authoring projection; QTI defines XML, not this editor JSON view. ITD-018 ships this operation-specific read because delivery_json may be declared-lossy. |
ITD-006 JSON Projection Boundaries, ITD-011 Artifact Versioning, ITD-018 API Boundary, ITD-020 Validation And Rejection Policy, ITD-030 Portable Custom Interaction Persistence And Execution Boundary, ITD-031 Item Template Declaration, Processing, And Cloning |
qti.artifact_version.spec_trace |
Generated traceability from classes, fields, and components to XSD/spec anchors. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, live-only references, or links that cannot be reproduced from the bundle. |
1EdTech pass-through Generated traceability to bundled XSD/spec sources. |
ITD-001 Offline 1EdTech Source Bundle, ITD-007 Provenance Labels |
qti.artifact_version.supersedes_version_id |
Previous version replaced by this version, when the save was an edit or replacement. |
uuid Nullable |
Points forward in time, points to another artifact without explicit migration evidence, or creates a cycle. |
Platform gap fill Platform version history link. |
ITD-011 Artifact Versioning |
qti.artifact_version.created_at |
Timestamp when this immutable version was created and the timestamp component of the stable listArtifactVersions ordering. |
timestamptz Required, default now() |
Null or mutated to reorder version history. |
Platform gap fill Version audit metadata. |
ITD-022 Operational DDL Discipline, ITD-026 Tenant-Owned Enumeration And Lost-Response Recovery |
qti.artifact_version.created_by |
Principal or system actor that created the version. |
text Nullable |
Raw access token, raw JWT subject that identifies a learner, email address, or other direct learner PII. |
Platform gap fill Platform audit metadata. |
ITD-019 Security Boundary, ITD-024 Candidate And Learner Data Privacy |
qti.component.component_id |
Stable identifier for one generated object node row. |
uuid Required |
Not a UUID or reused. |
Platform gap fill Platform row identity. |
ITD-005 Lossless Relational Projection |
qti.component.artifact_version_id |
Artifact version containing this component. |
uuid Required |
Missing version or cross-artifact projection. |
Platform gap fill Projection belongs to immutable version. |
ITD-005 Lossless Relational Projection, ITD-011 Artifact Versioning |
qti.component.parent_component_id |
Parent object node, preserving the XML/object hierarchy. |
uuid Nullable |
Parent is in a different artifact_version, creates a cycle, or is missing for non-root nodes. |
Platform gap fill Relational hierarchy projection. |
ITD-005 Lossless Relational Projection |
qti.component.ordinal |
Sibling order under parent_component_id. |
integer Required |
Null, negative by repository convention, duplicated among siblings without deterministic tie-break, or changed after hashing. |
Platform gap fill Relational ordering needed for round trip. |
ITD-005 Lossless Relational Projection, ITD-004 XML Authority And Canonical Hashes |
qti.component.element_name |
XML element name generated from the bundled XSD index, including feature-scope constructs such as qti-selection, qti-ordering, qti-branch-rule, qti-pre-condition, qti-adaptive-selection, qti-catalog-info, qti-portable-custom-interaction, qti-template-processing children, qti-printed-variable, assessmentResult, and usageData. |
text Required |
Unknown to the generated model, mismatched with qualified_name, rewritten to an Alpha name, or omitted because the platform delegates that construct's runtime behavior. |
1EdTech pass-through QTI/XML element name from bundled XSD index. |
ITD-002 Generated Object Model Hub, ITD-005 Lossless Relational Projection, ITD-028 Test-Level Sequencing, Branching, And Adaptive Selection, ITD-029 Catalog And PNP Accessibility Activation, ITD-030 Portable Custom Interaction Persistence And Execution Boundary, ITD-031 Item Template Declaration, Processing, And Cloning, ITD-032 QTI Results Reporting And Caliper Boundary |
qti.component.qualified_name |
Clark-notation qualified XML name used to preserve namespace identity. |
text Nullable |
Namespace does not match namespace_uri, prefix-only value loses URI, or generated from live schema outside the bundle. |
1EdTech pass-through Qualified XML name preserving namespace identity. |
ITD-004 XML Authority And Canonical Hashes, ITD-005 Lossless Relational Projection |
qti.component.namespace_uri |
Namespace URI for this XML component, if any. |
text Nullable |
Prefix instead of URI, wrong QTI namespace, or discarded for namespaced elements. |
1EdTech pass-through Namespace URI from QTI/XML content. |
ITD-004 XML Authority And Canonical Hashes |
qti.component.type_name |
Generated XSD type name for this object node. |
text Nullable |
Invented type, type from the wrong namespace, or inconsistent with element_name. |
1EdTech pass-through Generated XSD type name. |
ITD-002 Generated Object Model Hub, ITD-005 Lossless Relational Projection |
qti.component.qti_identifier |
QTI identifier attribute on this component when present. |
text Nullable |
Invented, coerced to UUID, or assumed globally unique across artifacts. |
1EdTech pass-through QTI identifier attribute. |
ITD-004 XML Authority And Canonical Hashes, ITD-007 Provenance Labels |
qti.component.component_path |
Stable generated path from the root object to this component. |
text Required |
Not stable across rehydration, duplicated, or encodes tenant/private data. |
Platform gap fill Platform traceability and diff path. |
ITD-005 Lossless Relational Projection |
qti.component.attributes |
Raw generated attribute projection for fields not promoted to typed query tables, including navigation, CAT engine refs, catalog refs, PCI module refs, template rendering refs, and result/usage-data attributes. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, drops data-* extension attributes, drops qti-adaptive-selection/qti-catalog-info/PCI/template/result attributes, or stores API auth headers. |
1EdTech pass-through Raw QTI/XML attributes not promoted to query columns. |
ITD-004 XML Authority And Canonical Hashes, ITD-005 Lossless Relational Projection, ITD-028 Test-Level Sequencing, Branching, And Adaptive Selection, ITD-029 Catalog And PNP Accessibility Activation, ITD-030 Portable Custom Interaction Persistence And Execution Boundary, ITD-031 Item Template Declaration, Processing, And Cloning, ITD-032 QTI Results Reporting And Caliper Boundary |
qti.component.text_value |
Text node value for text-bearing QTI and embedded content nodes. |
text Nullable |
Dropped for mixed content, normalized in a way that changes semantics, or used to store learner responses. |
1EdTech pass-through Text node value from QTI or permitted embedded content. |
ITD-004 XML Authority And Canonical Hashes, ITD-005 Lossless Relational Projection |
qti.component.tail_value |
Tail text after this element, required for mixed-content XML round trips. |
text Nullable |
Dropped because it is inconvenient, moved into text_value incorrectly, or included in delivery_json without declared lossiness. |
1EdTech pass-through Mixed-content XML tail text needed for round trips. |
ITD-004 XML Authority And Canonical Hashes, ITD-005 Lossless Relational Projection |
qti.component.source_trace |
Generated trace to XSD and spec source for this component, including the ITD-pinned QTI feature construct that made this node important when applicable. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, live-only link, not aligned with element_name/type_name, or missing evidence for a preserved navigation, PNP, PCI, template, result, or usage-data node. |
1EdTech pass-through Generated traceability to bundled XSD/spec sources. |
ITD-001 Offline 1EdTech Source Bundle, ITD-007 Provenance Labels, ITD-028 Test-Level Sequencing, Branching, And Adaptive Selection, ITD-029 Catalog And PNP Accessibility Activation, ITD-030 Portable Custom Interaction Persistence And Execution Boundary, ITD-031 Item Template Declaration, Processing, And Cloning, ITD-032 QTI Results Reporting And Caliper Boundary |
qti.variable_declaration.variable_declaration_id |
Stable row identifier for one promoted variable declaration. |
uuid Required |
Not a UUID or reused. |
Platform gap fill Platform projection row identity. |
ITD-013 Variable Declaration Projection |
qti.variable_declaration.artifact_version_id |
Artifact version that declares the variable. |
uuid Required |
Missing version or mismatch with component_id artifact_version. |
Platform gap fill Variable projection belongs to immutable content version. |
ITD-013 Variable Declaration Projection, ITD-011 Artifact Versioning |
qti.variable_declaration.component_id |
Component node that declared this variable. |
uuid Required |
Component is not in the same artifact_version or is not a variable declaration node. |
Platform gap fill Projection link back to object graph component. |
ITD-005 Lossless Relational Projection, ITD-013 Variable Declaration Projection |
qti.variable_declaration.variable_kind |
QTI variable category. |
text Required |
Outside enum set, used to invent a platform-only variable category, or fails to mark qti-template-declaration as template. |
1EdTech pass-through QTI variable declaration category. ITD-031 makes qti-template-declaration queryable as variable_kind=template for server-side realization. |
ITD-013 Variable Declaration Projection, ITD-007 Provenance Labels, ITD-031 Item Template Declaration, Processing, And Cloning |
qti.variable_declaration.identifier |
QTI variable identifier. |
text Required |
Blank, duplicated within kind/version, rewritten to UUID, or mismatched with processing operands. |
1EdTech pass-through QTI variable identifier value. |
ITD-013 Variable Declaration Projection, ITD-004 XML Authority And Canonical Hashes |
qti.variable_declaration.cardinality |
QTI cardinality for the variable value container. |
text Nullable |
Outside QTI cardinality vocabulary, inconsistent with associated interaction, or inconsistent with JSON value shape. |
1EdTech pass-through QTI cardinality value. |
ITD-013 Variable Declaration Projection, ITD-021 Runtime Execution Profile |
qti.variable_declaration.base_type |
QTI base-type for atomic values when the declaration has one. |
text Nullable |
Outside QTI base-type vocabulary, present for record in a way QTI forbids, or inconsistent with correct_response/default_value. |
1EdTech pass-through QTI base-type value. |
ITD-013 Variable Declaration Projection, ITD-021 Runtime Execution Profile |
qti.variable_declaration.default_value |
Generated object value for qti-default-value. |
jsonb Nullable |
Shape does not match cardinality/base_type, contains unvalidated extension payload, or is used as candidate response state. |
1EdTech pass-through Generated value for qti-default-value. |
ITD-013 Variable Declaration Projection, ITD-004 XML Authority And Canonical Hashes |
qti.variable_declaration.correct_response |
Generated object value for qti-correct-response. |
jsonb Nullable |
Correct response values are coerced, ordered values are stored as unordered, value type conflicts with base_type, or a templated correct response is realized by the client instead of the server. |
1EdTech pass-through Generated value for qti-correct-response. For templated items, server-side realization binds the effective correct response from template state before scoring. |
ITD-013 Variable Declaration Projection, ITD-021 Runtime Execution Profile, ITD-031 Item Template Declaration, Processing, And Cloning |
qti.variable_declaration.mapping |
Generated mapping, areaMapping, matchTable, or interpolationTable detail. |
jsonb Nullable |
Drops default mapping value, loses area coordinates, changes scoring numeric precision, or omits source trace. |
1EdTech pass-through Generated QTI mapping/detail payload. |
ITD-013 Variable Declaration Projection, ITD-021 Runtime Execution Profile |
qti.variable_declaration.source_trace |
Generated trace to XSD and spec section for the variable declaration. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, or not tied to the declaring component. |
1EdTech pass-through Generated trace to XSD and spec section. |
ITD-001 Offline 1EdTech Source Bundle, ITD-007 Provenance Labels |
qti.processing_rule.processing_rule_id |
Stable row identifier for one promoted processing rule or expression node. |
uuid Required |
Not a UUID or reused. |
Platform gap fill Platform projection row identity. |
ITD-014 Processing Rule Projection |
qti.processing_rule.artifact_version_id |
Artifact version containing the processing rule. |
uuid Required |
Missing version or mismatch with component_id artifact_version. |
Platform gap fill Processing projection belongs to immutable content version. |
ITD-014 Processing Rule Projection, ITD-011 Artifact Versioning |
qti.processing_rule.component_id |
Component node backing this processing rule. |
uuid Required |
Component is not in the same artifact_version or is not a processing/expression node. |
Platform gap fill Projection link back to generated component. |
ITD-005 Lossless Relational Projection, ITD-014 Processing Rule Projection |
qti.processing_rule.parent_processing_rule_id |
Parent processing rule for nested expression and rule trees. |
uuid Nullable |
Parent is in another artifact_version, creates a cycle, or changes execution semantics. |
Platform gap fill Relational processing-tree hierarchy. |
ITD-014 Processing Rule Projection |
qti.processing_rule.rule_scope |
Processing scope used for query and execution grouping. |
text Required |
Outside enum set, used to claim QTI defines this SQL row scope, or stores qti-template-processing under response/outcome scope. |
Platform gap fill Repository classification for persisted processing rows. ITD-031 requires qti-template-processing to use template scope and be executed server-side at delivery-session start. |
ITD-014 Processing Rule Projection, ITD-031 Item Template Declaration, Processing, And Cloning |
qti.processing_rule.rule_name |
QTI processing rule or expression element/operator name, including qti-set-template-value, qti-template-constraint, and qti-template-default for item-template realization. |
text Required |
Not a QTI processing/expression element, renamed for Alpha, mismatched with component.element_name, or drops template-processing rules because realization is server-side. |
1EdTech pass-through QTI processing rule or expression element name. |
ITD-014 Processing Rule Projection, ITD-021 Runtime Execution Profile, ITD-031 Item Template Declaration, Processing, And Cloning |
qti.processing_rule.sequence_number |
Order within the parent processing scope. |
integer Required |
Null, order differs from object graph, or ties cause nondeterministic execution. |
Platform gap fill Execution ordering aid. |
ITD-014 Processing Rule Projection, ITD-021 Runtime Execution Profile |
qti.processing_rule.operands |
Generated operand references and literal values for execution. |
jsonb Required, default '[]'::jsonb |
Null, non-array JSON, points to undeclared variables, loses numeric precision, loses template-variable operands, or contains unredacted learner identity. |
1EdTech pass-through Generated QTI operand references and literal values, including template variable bindings used by qti-template-processing. |
ITD-014 Processing Rule Projection, ITD-021 Runtime Execution Profile, ITD-031 Item Template Declaration, Processing, And Cloning |
qti.processing_rule.source_trace |
Generated trace to XSD and spec section for this processing rule. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, or not tied to the rule_name/component. |
1EdTech pass-through Generated trace to XSD and spec section. |
ITD-001 Offline 1EdTech Source Bundle, ITD-007 Provenance Labels |
qti.delivery_session.delivery_session_id |
Stable session identifier exposed by delivery APIs. |
uuid Required |
Not a UUID, reused, or guessable outside API authorization. |
Platform gap fill Platform delivery session identity. |
ITD-015 Delivery Session Snapshots |
qti.delivery_session.tenant_id |
Tenant boundary for the delivery session. |
uuid Required |
Does not match authenticated tenant claim or root artifact tenant. |
Platform gap fill Tenant-scoped learner runtime boundary inherited from Platform. |
ITD-008 Tenant Boundary, ITD-015 Delivery Session Snapshots, ITD-025 Platform Substrate Inheritance |
qti.delivery_session.candidate_ref |
Opaque tenant-scoped pseudonymous UUID string for the candidate and the selector used by GET/DELETE /tenants/{tenantId}/qti/candidates/{candidateRef}/runtime-data. |
text Required |
Contains direct learner or parent PII, raw JWT subject, auth token, SIS ID, or is not tenant-scoped. |
Platform gap fill Platform learner privacy boundary. QTI_CONTEXT candidateIdentifier uses this value only when runtime context needs it. |
ITD-024 Candidate And Learner Data Privacy, ITD-019 Security Boundary |
qti.delivery_session.root_artifact_version_id |
Immutable item, test, or section version delivered in this session. |
uuid Required |
Missing version, version not owned by tenant, or changed after session start. |
Platform gap fill Session pins immutable content version. |
ITD-015 Delivery Session Snapshots, ITD-011 Artifact Versioning |
qti.delivery_session.status |
Session lifecycle state. |
text Required, default 'created' |
Outside enum set or inconsistent with attempts, submitted_at, or review workflow. |
Platform gap fill Platform delivery lifecycle. |
ITD-015 Delivery Session Snapshots |
qti.delivery_session.delivery_json_snapshot |
Snapshot of delivery_json at session start. |
jsonb Required |
Null, mismatched to root_artifact_version_id at start, mutated after attempts, contains authoring-only trace without declared lossiness, omits timeLimits for content that declared qti-time-limits, or treats client countdown state as authoritative timing. |
Platform gap fill Generated delivery projection snapshot for historical stability. The timeLimits values are pass-through QTI semantics; storing the snapshot is a platform gap fill. |
ITD-006 JSON Projection Boundaries, ITD-015 Delivery Session Snapshots, ITD-027 Server-Authoritative Timed Delivery And Time-Conditioned Outcome Processing |
qti.delivery_session.session_state |
Runtime state not modeled as QTI variables, such as navigation, item sequencing, resume information, or review flags. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, auth headers, raw PNP records, direct learner identity, or state that contradicts delivery_json_snapshot. |
Platform gap fill Platform runtime state outside QTI variable declarations. |
ITD-015 Delivery Session Snapshots, ITD-024 Candidate And Learner Data Privacy |
qti.delivery_session.window_started_at |
Server timestamp at which the timed delivery window started for this session. |
timestamptz Nullable |
Client supplied, null for a max-time session, after window_expires_at, before created_at without migration evidence, or compared as local wall time. |
Platform gap fill Server-authoritative timing-window persistence for stock QTI qti-time-limits. |
ITD-027 Server-Authoritative Timed Delivery And Time-Conditioned Outcome Processing, ITD-015 Delivery Session Snapshots |
qti.delivery_session.window_expires_at |
Derived server timestamp at which the effective max-time window closes. |
timestamptz Nullable |
Present without window_started_at, earlier than window_started_at, inconsistent with effective_max_time_seconds, or manually extended after the session starts without documented PNP/administrative evidence. |
Platform gap fill Derived timing-window persistence authorized by ITD-027; QTI supplies max-time seconds, not a platform timestamp. |
ITD-027 Server-Authoritative Timed Delivery And Time-Conditioned Outcome Processing, ITD-015 Delivery Session Snapshots |
qti.delivery_session.effective_max_time_seconds |
Effective maximum time window in seconds after applying any QTI Personal Needs & Preferences extended-time accommodation. |
double precision Nullable |
Negative, NaN, copied from a client request, differs from the timeLimits/PNP calculation without evidence, or non-null on an untimed session. |
Platform gap fill QTI defines max-time as seconds; the platform persists the effective value actually enforced for this session. |
ITD-027 Server-Authoritative Timed Delivery And Time-Conditioned Outcome Processing, ITD-015 Delivery Session Snapshots |
qti.delivery_session.created_at |
Session creation timestamp. |
timestamptz Required, default now() |
Null or later than updated_at. |
Platform gap fill Runtime audit metadata. |
ITD-022 Operational DDL Discipline |
qti.delivery_session.updated_at |
Last session state mutation timestamp. |
timestamptz Required, default now() |
Null, earlier than created_at, or stale after status/session_state update. |
Platform gap fill Runtime audit metadata. |
ITD-022 Operational DDL Discipline |
qti.attempt.attempt_id |
Stable identifier for one attempt record. |
uuid Required |
Not a UUID or reused. |
Platform gap fill Platform attempt identity. |
ITD-016 Attempt State And Processing Trace |
qti.attempt.delivery_session_id |
Owning delivery session. |
uuid Required |
Missing session or tenant mismatch through session. |
Platform gap fill Attempt belongs to learner runtime session. |
ITD-015 Delivery Session Snapshots, ITD-016 Attempt State And Processing Trace |
qti.attempt.artifact_version_id |
Immutable item/test artifact version attempted. |
uuid Required |
Does not belong to the delivery session snapshot or changes after processing. |
Platform gap fill Attempt pins content version for reproducible processing. |
ITD-011 Artifact Versioning, ITD-016 Attempt State And Processing Trace |
qti.attempt.attempt_number |
Attempt count within a session and artifact version. |
integer Required |
Zero or negative by convention, duplicated, or reused after an adaptive attempt changes state. |
Platform gap fill Platform attempt sequencing. |
ITD-016 Attempt State And Processing Trace |
qti.attempt.status |
Attempt lifecycle state. |
text Required, default 'active' |
Outside enum set or inconsistent with suspended_at/submitted_at. |
Platform gap fill Platform attempt lifecycle. |
ITD-016 Attempt State And Processing Trace |
qti.attempt.response_state |
Candidate response variables at the last processing point. |
jsonb Required, default '{}'::jsonb |
Null, values inconsistent with qti.variable_declaration, unnecessary learner PII copied from outside the response, or logged without redaction. |
1EdTech pass-through QTI response variable state bound to learner runtime. |
ITD-016 Attempt State And Processing Trace, ITD-024 Candidate And Learner Data Privacy |
qti.attempt.template_state |
Template variables used for item cloning and stability. |
jsonb Required, default '{}'::jsonb |
Null, client-realized, regenerated on read instead of persisted, inconsistent with template processing trace, omitted for a templated item, or logged with learner identity. |
1EdTech pass-through QTI template variable state bound to session stability. ITD-031 requires the platform to realize qti-template-processing server-side before scoring. |
ITD-016 Attempt State And Processing Trace, ITD-021 Runtime Execution Profile, ITD-024 Candidate And Learner Data Privacy, ITD-031 Item Template Declaration, Processing, And Cloning, ITD-032 QTI Results Reporting And Caliper Boundary |
qti.attempt.outcome_state |
Outcome variables after template, response, and outcome processing, including declared time-conditioned outcomes when the test uses duration in outcome processing. |
jsonb Required, default '{}'::jsonb |
Null, cannot be reproduced by processing rules under the runtime profile, includes unsupported outcomes without diagnostics, returns only raw/max when the QTI declared richer outcomes, uses client-supplied timing to compute a time-conditioned outcome, or diverges from the assessmentResult projection. |
1EdTech pass-through QTI outcome variable state. ITD-027 requires declared QTI outcome processing server-side for timed tests; ITD-031 requires scoring against server-realized template values; ITD-032 uses these variables in the generated assessmentResult projection. |
ITD-016 Attempt State And Processing Trace, ITD-021 Runtime Execution Profile, ITD-024 Candidate And Learner Data Privacy, ITD-027 Server-Authoritative Timed Delivery And Time-Conditioned Outcome Processing, ITD-031 Item Template Declaration, Processing, And Cloning, ITD-032 QTI Results Reporting And Caliper Boundary |
qti.attempt.processing_trace |
Deterministic trace of server-side template realization, response processing, outcome processing, assessmentResult projection evidence, and timed-enforcement operations. |
jsonb Required, default '[]'::jsonb |
Null, non-array JSON, nondeterministic, lacks failed-closed diagnostics for unsupported operators or template constraints, or contains auth/PII/Caliper data. |
Platform gap fill Implementation trace of QTI processing execution; QTI defines processing semantics, not this stored audit trail. |
ITD-016 Attempt State And Processing Trace, ITD-021 Runtime Execution Profile, ITD-024 Candidate And Learner Data Privacy, ITD-027 Server-Authoritative Timed Delivery And Time-Conditioned Outcome Processing, ITD-031 Item Template Declaration, Processing, And Cloning, ITD-032 QTI Results Reporting And Caliper Boundary |
qti.attempt.timing_status |
Server-measured classification of this attempt against the owning delivery session's QTI time-limit window. |
text Required, default 'untimed' |
Outside enum set, computed from a client-supplied elapsed value, in_window after the server window expired, late_accepted when allowLateSubmission=false, or untimed while the session has an enforceable max-time. |
Platform gap fill Platform enforcement state over stock QTI qti-time-limits. |
ITD-027 Server-Authoritative Timed Delivery And Time-Conditioned Outcome Processing, ITD-016 Attempt State And Processing Trace, ITD-020 Validation And Rejection Policy |
qti.attempt.effective_duration_seconds |
Server-measured QTI duration value in seconds for this attempt. |
double precision Nullable |
Negative, NaN, rounded from a client-submitted timer, includes suspended time, absent for a submitted timed attempt, or contradicts started_at/submitted_at/session-window evidence. |
Gap fill row with 1EdTech pass-through values QTI defines duration as seconds; ITD-027 pins that the platform computes it from server timestamps and persists the effective value used by outcome processing. |
ITD-027 Server-Authoritative Timed Delivery And Time-Conditioned Outcome Processing, ITD-016 Attempt State And Processing Trace, ITD-021 Runtime Execution Profile |
qti.attempt.started_at |
Attempt start timestamp. |
timestamptz Required, default now() |
Null or after submitted_at. |
Platform gap fill Runtime audit metadata. |
ITD-022 Operational DDL Discipline |
qti.attempt.suspended_at |
Attempt suspension timestamp, if the attempt was suspended. |
timestamptz Nullable |
Set while status never suspended without lifecycle evidence, before started_at, or after submitted_at. |
Platform gap fill Runtime lifecycle audit metadata. |
ITD-016 Attempt State And Processing Trace |
qti.attempt.submitted_at |
Attempt submission timestamp, if the attempt was submitted. |
timestamptz Nullable |
Before started_at, set while status remains active without evidence, or absent for submitted/reviewed attempts. |
Platform gap fill Runtime lifecycle audit metadata. |
ITD-016 Attempt State And Processing Trace |
qti.conformance_run.conformance_run_id |
Stable identifier for one conformance run. |
uuid Required |
Not a UUID or reused. |
Platform gap fill Platform evidence row identity. |
ITD-017 Conformance Evidence |
qti.conformance_run.profile |
Targeted QTI 3.0 conformance profile or optional feature set. |
text Required |
Unsupported profile, Alpha-only label, or profile not represented by assertions. |
Platform gap fill Platform conformance profile label tied to the QTI bundle. |
ITD-017 Conformance Evidence, ITD-001 Offline 1EdTech Source Bundle |
qti.conformance_run.bundle_hash |
Hash of the offline spec bundle used by the run. |
text Required |
Missing, live network URL, or not reproducible from the bundle used. |
Platform gap fill Release evidence ties to immutable local source bundle. |
ITD-001 Offline 1EdTech Source Bundle, ITD-017 Conformance Evidence |
qti.conformance_run.runner_version |
Version or identity of the conformance runner. |
text Required |
Blank, vague, or points to unpinned code. |
Platform gap fill Release evidence metadata. |
ITD-017 Conformance Evidence |
qti.conformance_run.started_at |
Run start timestamp. |
timestamptz Required, default now() |
Null or after finished_at. |
Platform gap fill Conformance audit metadata. |
ITD-022 Operational DDL Discipline |
qti.conformance_run.finished_at |
Run finish timestamp, if complete. |
timestamptz Nullable |
Before started_at, absent for completed terminal status without explanation, or set while still running. |
Platform gap fill Conformance lifecycle audit metadata. |
ITD-017 Conformance Evidence |
qti.conformance_run.status |
Run lifecycle status. |
text Required, default 'running' |
Outside enum set or inconsistent with child assertion statuses. |
Platform gap fill Release evidence lifecycle. |
ITD-017 Conformance Evidence |
qti.conformance_run.summary |
Generated coverage and pass/fail summary. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, contradicts assertion rows, or includes raw package bytes/secrets. |
Platform gap fill Generated release-gate summary. |
ITD-017 Conformance Evidence |
qti.conformance_assertion.conformance_assertion_id |
Stable identifier for one assertion result. |
uuid Required |
Not a UUID or reused. |
Platform gap fill Platform assertion row identity. |
ITD-017 Conformance Evidence |
qti.conformance_assertion.conformance_run_id |
Owning conformance run. |
uuid Required |
Missing parent run or status contradicts parent run summary. |
Platform gap fill Assertion belongs to release evidence run. |
ITD-017 Conformance Evidence |
qti.conformance_assertion.assertion_key |
Stable key generated by the conformance runner for this assertion. |
text Required |
Duplicated in a run, nondeterministic across reruns, or so vague it cannot locate the assertion. |
Platform gap fill Generated assertion identity. |
ITD-017 Conformance Evidence |
qti.conformance_assertion.artifact_ref |
Example, fixture, or artifact path covered by this assertion. |
text Nullable |
Live-only URL, missing fixture, or reference to learner-runtime data. |
1EdTech pass-through QTI example or artifact reference covered by conformance evidence. |
ITD-001 Offline 1EdTech Source Bundle, ITD-017 Conformance Evidence |
qti.conformance_assertion.spec_ref |
Spec section, schema component, or generated trace reference covered by this assertion. |
text Nullable |
Points only to live network docs, wrong schema file, or cannot be followed by a future generator. |
1EdTech pass-through 1EdTech spec, schema, or generated traceability reference. |
ITD-001 Offline 1EdTech Source Bundle, ITD-007 Provenance Labels, ITD-017 Conformance Evidence |
qti.conformance_assertion.status |
Assertion result status. |
text Required |
Outside enum set, contradicts details, or failed/error without diagnostics. |
Platform gap fill Generated assertion result lifecycle. |
ITD-017 Conformance Evidence |
qti.conformance_assertion.details |
Assertion diagnostics, canonical hashes, processing outcomes, and failure details. |
jsonb Required, default '{}'::jsonb |
Null, non-object JSON, missing diagnostics for failure, or contains auth/PII data. |
Platform gap fill Generated release-gate diagnostics; QTI defines conformance expectations, not this evidence payload. |
ITD-017 Conformance Evidence, ITD-024 Candidate And Learner Data Privacy |