Skip to content

Delivery Profile: unified scoring/selection loci and offline regime

Status: accepted

Scoring locus (ADR-0003), selection locus (ADR-0005), and offline behaviour are not independent flags — incoherent combinations are possible and dangerous. They are unified into one declared Delivery Profile per assessment/activity, with two coherent presets.

Everything needed — content, interactions, answer keys, selection parameters, assets — ships in the synced module package. Scoring and selection run client-side in the headless core; completion is fully autonomous. No dependency on the learner’s connection or our servers; never blocks. Covers module content, drills, and low-stakes “learning quizzes” (e.g. unlimited tries, full marks on mastery). This is the default: anything that can be fully offline should be.

Server-authoritative scoring and/or selection (secure grading, cross-learner adaptive state). Still local-first for capture, but server-required steps block and wait for connectivity rather than proceeding on stale state (“move closer to the wifi”).

When present, timing is wall-clock (start + X, or a fixed window) and does not pause for connectivity. Connectivity is the candidate’s responsibility (like bringing working pens to a written exam); not pausing is also the anti-gaming property — a candidate cannot tank their network to buy time. The lone legitimate exception (a timed research questionnaire on a flaky transit network, where pausing the clock is fair) is a future explicit flag, not catered for now.

  • The module package becomes a first-class architectural unit: the offline-complete sync bundle (item-versions + keys + selection params + assets, scoped to a module). This is the most likely place pgxsinkit needs enrichment (package-shaped sync / bundle integrity); acceptable, since we control pgxsinkit.
  • ADR-0003 scoring locus and ADR-0005 selection locus become projections of the Delivery Profile, not separately-set knobs.
  • Selection executes client-side, deterministic given (learner state, parameter snapshot, policy version) → offline-capable and exactly replayable. Cross-learner aggregates (bandit posteriors, recalibrated IRT item params) are computed server-side and synced down as slowly-changing inputs; server-anchored deliveries block when those are required and unavailable.