Skip to content

Session and telemetry model

Status: accepted

The unit that all psychometrics, DIF, experiments, and reproducibility read from is the Item Session, modelled on QTI’s itemSession / testSession.

  • Item Session — the atomic record: one learner’s engagement with one item-version-rendition. Carries the response, score, QTI sessionStatus, timing, and all axis coordinates + provenance: item_version_id, construct_id, locale, variant, condition, selection_policy_version, params_snapshot_ref, assignment seed, prior_state.
  • Test Session — a container for a sequenced test; the existing assessment_attempt takes this role (≈ QTI testSession).
  • Practice Session — a lightweight container for standalone drills / CAT, so every Item Session has a sync root and owner even with no test wrapper.

Telemetry: state + append-only event log (not event-sourced)

Section titled “Telemetry: state + append-only event log (not event-sourced)”

Two records, on the two sync lanes the topology already defines:

  • Item Session state — sync category 4 (strong integrity, deterministic commit). The canonical current/final state.
  • Interaction Event log — sync category 5 (append-only, idempotency keys). Fine -grained process data: response latency, answer revisions, hint use, time-on-task. Verbosity is configurable per Delivery Profile (offline-complete practice may log lightly; research/experiment deliveries log richly).

State is canonical; the event log is additive, not the source of truth — full event-sourcing was rejected because it fights the state/shape-based sync stack (PGlite/Electric/pgxsinkit). Capturing process data from day one is deliberate: it cannot be reconstructed retroactively, and it is the substrate for engagement, cognitive-load, and DIF research.

  • New tables: item_session, practice_session, interaction_event; assessment_attempt is reframed as the Test Session container.
  • Secure deliveries withhold keys/provenance from the client via the existing clientProjection.omitColumns lever.
  • The event log adds sync volume; its verbosity must be governed by the Delivery Profile so offline-complete content stays light.