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.
Offline-complete (default)
Section titled “Offline-complete (default)”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-anchored (opt-in)
Section titled “Server-anchored (opt-in)”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”).
Timing is orthogonal
Section titled “Timing is orthogonal”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.
Consequences
Section titled “Consequences”- 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.