What EduOps is
Link to section “What EduOps is”In 30 seconds
Link to section “In 30 seconds”EduOps, as this page uses it, is learning operations: the work of running the platforms, integrations, assessments and records through which learners are enrolled, taught, assessed and credentialed. Its output is not “courses delivered” but results that can be trusted: the right people in the right courses, accessible learning, assessments whose scores mean what they claim, grades that reach the gradebook, and certificates that a third party can verify.
In one line: EduOps keeps the evidence chain from enrolment to credential correct, accessible and auditable.
The label is not standardised (what EduOps is not); the practices rest on established foundations: learning management systems (LMS), 1EdTech, ADL and IEEE interoperability standards, professional testing standards and W3C accessibility guidelines.
For LMS administrators, instructional designers, assessment leads, training or academic operations managers, and edtech engineers, in universities, schools, corporate academies and certification bodies. Legal points are flagged by jurisdiction, not settled.
At a glance
Link to section “At a glance”| Item | Summary |
|---|---|
| Term status | Ambiguous. No standard, body, certification or peer-reviewed use of “EduOps” was found (October 2026). Competing uses are product and company names and one blog proposal.[1][2][3] |
| Editorial emphasis | Learning operations for any learner, student or employee: LMS, course lifecycle, standards, assessment quality, analytics, accessibility, enrolment to certification. |
| Goals | Correct enrolments; accessible delivery; valid, reliable assessment; grades and credentials that are accurate, on time and verifiable. |
| Out of scope | The learning-and-development programme (needs, budget, mandatory-training policy) → PeopleOps; general content production → ContentOps; hosting → WebOps and SysOps; learner-data law → PrivacyOps. |
| Prerequisites | None. Helpful: basic web concepts (single sign-on, APIs) and basic statistics (mean, correlation). |
| Key outputs | Term-start readiness record, integration register, assessment blueprint, item review log, release and regrade decisions, credential policy, accessibility defect log. |
The problem EduOps solves
Link to section “The problem EduOps solves”Learning systems fail quietly. A learner in the wrong section studies for weeks unnoticed; a tool sends scores the gradebook rejects; an answer key is wrong and the pass list is published; a timed quiz has no extra-time override for a student with an approved accommodation; a certificate cannot be verified two years later because the issuing course was deleted. None of these is a server outage. Each damages the one thing education sells: trust in the result.
A public example: in August 2020 England’s exam regulator replaced model-calculated AS, A level and GCSE grades with the grades schools had estimated (or the calculated grade, if higher) after admitting that the approach “caused real anguish and damaged public confidence”; the chair’s statement added, “For all of that, we are extremely sorry.”[4] Most failures are smaller, but the pattern is the same: the cost lands on learners first and on the institution’s credibility second.
| Operating reality | Without learning operations | With learning operations |
|---|---|---|
| Enrolment | Manual lists, late fixes | Roster sync reconciled before term start |
| Integrations | Each tool configured ad hoc | Register of tools, standard, owner, data shared |
| Assessment | Quiz settings copied forward | Blueprint, reviewed items, item analysis after each sitting |
| Accommodations | Remembered by individual staff | Applied as overrides before the first timed attempt |
| Credentials | PDF e-mailed, no verification | Issued from records, verifiable, revocable |
What EduOps is not
Link to section “What EduOps is not”- Not a recognised profession or framework. The only explanatory use found is a Linux Handbook piece (updated 2023) that expands EduOps as “Educational Operations” and defines it as “the application of DevOps inspired principles, coupled with effective DocOps and HumanOps strategies” to bring academia and industry closer.[1] That is a proposal about curricula, not an operating practice with a body of work.
- Not a product category, although products use the name. EduOps is a school ERP for Indian schools[2] and a Notion consultancy.[3] EdOps, a US firm founded in 2009, states its mission as “to minimize the financial, operational, and compliance demands of running a school”;[5] there “education operations” means the school’s back office, which this page does not cover.
- Not the same as “LearnOps”. Cognota writes “LearnOps® is a philosophy and framework for creating efficient Learning Operations” and says the term “was coined by Cognota”.[6] Practitioner writing on learning operations covers request intake, technology administration, vendors, compliance and analytics for corporate L&D.[7] This page overlaps with it but adopts no vendor framework.
- Not the L&D programme or HR. Deciding who must be trained, on what budget, and keeping mandatory-training policy belongs to PeopleOps. EduOps delivers and measures the learning. This split is an editorial distinction of this Atlas.
Where EduOps comes from and where it sits
Link to section “Where EduOps comes from and where it sits”Origins and evolution
Link to section “Origins and evolution”The label has no history; the practices do, and their dates explain today’s constraints.
| Year | Milestone | Why it matters operationally |
|---|---|---|
| 1975 | Florida State University’s Interservice Procedures for Instructional Systems Development for the US armed forces, usually treated as ADDIE’s source; the acronym’s own origin “is obscure”[8] | Staged course design with evaluation |
| 2001–2009 | SCORM 1.2 (October 2001), then SCORM 2004 editions up to the 4th Edition (March 2009)[9] | Packaged content still runs on these versions |
| 2016 | cmi5 “Quartz” 1st Edition, a profile of xAPI for LMS-launched content[10] | A modern packaging path |
| 2019 | LTI 1.3 issued (16 April) with OpenID Connect, signed JWTs and OAuth 2.0[11] | Tool launches with standard security |
| 2022 | 1EdTech ends all support for LTI 1.0 to 2.0 (30 June)[12] | Legacy tool links are a risk register item |
| 2023 | IEEE 9274.1.1-2023 (published 6 October), known as xAPI 2.0: a revised standardisation of xAPI 1.0.3[13][14][15] | Learning records outside the LMS; two versions now in use |
| 2025–2026 | W3C Verifiable Credentials 2.0 (May 2025); Open Badges 3.0 document version 1.4.5 (June 2026)[16][17] | Signed, portable credentials |
Glossary and mental model
Link to section “Glossary and mental model”| Term | Meaning on this page |
|---|---|
| LMS | Learning management system: courses, enrolments, activities, gradebook (Moodle, Canvas and others). |
| SIS / HRIS | Student or HR information system: the system of record for who the learner is and what they are enrolled in. |
| LTI 1.3 / LTI Advantage | 1EdTech standard to launch external tools from a platform; Advantage adds grade return (AGS), rosters (NRPS) and content selection (Deep Linking).[18] |
| SCORM, cmi5 | Standards for packaged self-paced content and its runtime data; cmi5 does this with xAPI.[19][10] |
| xAPI, LRS | Experience API statements (“actor – verb – object”) stored in a Learning Record Store.[20] |
| QTI | 1EdTech format for exchanging items, tests and results.[21] |
| Item, form, blueprint | One question; one assembled test; the plan of what a test must sample and in what proportion. |
| Facility (p) | Share of available marks learners earned on an item; higher means easier.[22] |
| Discrimination | Correlation between an item score and the rest-of-test score; low or negative values call for a check of key and wording.[22] |
| Reliability, SEM | Consistency of scores (here Cronbach’s alpha); standard error of measurement, which Moodle’s documentation calls “an estimate of the luck factor”.[22] |
| Cut score | The score that separates pass from fail. |
| Accommodation | A change to setting, timing or presentation that removes a barrier unrelated to what is measured.[23] |
Mental model: the evidence chain. Every credential rests on seven links: enrolment → access → attempt → score → grade → credential → record. A certificate is only as good as the weakest link. Most EduOps work is making each link correct (right person, right version), accessible (the barrier is not what you are measuring) and auditable (you can show how a result was produced and change it under control).
Diagram source (Mermaid)
flowchart LR P["PeopleOps: who must learn what"] --> E C["ContentOps: content assets"] --> E I["IdentityOps: accounts, SSO"] --> E V["PrivacyOps: retention, lawful basis"] --> E W["WebOps, SysOps: running platform"] --> E E["EduOps: enrolment to credential"] E --> CO["ComplianceOps: completion records"] E --> A["AnalyticsOps: learning measures"] E --> R["PeopleOps: results, credentials"] classDef core fill:#e8f3f2,stroke:#16756f,color:#122029 classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029 class E core class P,C,I,V,W,CO,A,R neutral
Text equivalent: PeopleOps sends EduOps the training requirement (who must learn what) and receives results and credentials; ContentOps supplies content assets; IdentityOps, accounts and sign-on; PrivacyOps, retention and lawful-basis rules; WebOps and SysOps run the platform. EduOps sends completion records to ComplianceOps and learning measures to AnalyticsOps.
How EduOps relates to other Ops
Link to section “How EduOps relates to other Ops”The boundaries below are editorial distinctions of this Atlas, chosen so that each page teaches one thing.
| Neighbour | Shared scope | Its unique focus | EduOps’s unique focus |
|---|---|---|---|
| PeopleOps | Employee training | Who needs which training, budget, training-record policy | Delivering, assessing and recording it |
| ContentOps | Producing course material | Content lifecycle, workflow, reuse | Content as a course with learners and assessments |
| KnowledgeOps | Onboarding know-how | Knowledge captured from work | Structured learning with evidence of mastery |
| PrivacyOps | Learner data | Lawful basis, rights, retention policy | Applying those rules in rosters, analytics and proctoring |
| AnalyticsOps | Dashboards | Analytics delivery and metric governance | Learning-specific measures and their ethics |
| WebOps, SysOps | Running the LMS | Hosting, performance, patching | Term calendars, exam peaks, assessment integrity |
| IdentityOps | Accounts and sign-on | Directories, SSO, lifecycle | Enrolment as an access decision; LTI identity claims |
| ComplianceOps | Mandatory training evidence | Proving obligations are met | Producing the completion records that prove it |
Principles and operating model
Link to section “Principles and operating model”A proposed charter and principles
Link to section “A proposed charter and principles”No EduOps charter exists; this one is this Atlas’s proposal. Mission: every result we issue can be explained, reproduced and defended to the learner, the institution and a third party.
- Validity first. The 2014 testing Standards define validity as the degree to which evidence and theory support score interpretations for proposed uses: “It is the interpretations of test scores for proposed uses that are evaluated, not the test itself.”[23] Write down what a pass is meant to show before building the quiz.
- Fairness is part of validity. In the Standards’ words, “Fairness is a fundamental validity issue”; accommodations exist to remove “construct-irrelevant barriers” (Standard 3.9).[23]
- Records are append-only. xAPI makes this explicit: “Statements are immutable”, and voiding “does not destroy a Statement”.[20] Apply the same rule to grades and credentials: correct by a recorded change, never by silent edits.
- Standards at the boundary, choice inside. Use open standards where data crosses a system boundary; keep freedom inside.
- Calendar-aware change. Learning has hard dates (term start, exam windows, grade deadlines). Change freezes follow them.
- Least data. Share with tools only the learner data the task needs; cmi5 says the LMS “SHOULD create” the launch actor “with an object … that does NOT include sensitive PII”.[10]
Non-goals: maximising completion rates for their own sake; automating judgement about individual learners without review.
Building blocks
Link to section “Building blocks”| Block | Typical artefact |
|---|---|
| Course catalogue (versioned courses with owners and review dates) | Course register |
| Enrolment and roster sync from the system of record | Reconciliation report |
| Content packages and tool integrations | Package inventory, integration register |
| Assessment system (question bank, quizzes, rubrics, overrides) | Blueprint, item review log |
| Gradebook, release and credentials | Release checklist, credential policy |
| Learning records and analytics (LMS logs, LRS, warehouse) | Metric definitions, data map |
Roles, ownership and RACI
Link to section “Roles, ownership and RACI”Titles vary by sector (a university’s “learning technologist”, a company’s “LMS administrator”); the roles matter more.
| Activity | LMS / platform owner | Instructional designer | Assessment lead | Course owner (faculty, SME) | Data protection lead |
|---|---|---|---|---|---|
| Term-start enrolment reconciliation | A/R | I | I | C | I |
| Add or change an LTI tool | A/R | C | C | C | C |
| Assessment blueprint and cut score | I | C | A/R | R | I |
| Item review and item analysis | C | C | A/R | R | I |
| Accommodation overrides | R | I | A | C | C |
| Grade release and regrade | R | I | A | R | I |
| Credential issue and revocation | R | I | A | C | C |
| Learner-analytics model in production | A/R | C | C | C | C |
R = responsible, A = accountable, C = consulted, I = informed. Small teams combine roles, but nobody should be the only reviewer of their own items. The data protection lead is consulted, not accountable: in GDPR jurisdictions a data protection officer’s tasks are to advise and to monitor compliance (Article 39),[24] and Article 38(6) requires that other duties “do not result in a conflict of interests”.[25] Where a data protection impact assessment is required, make it a gate before the model goes live.
Lifecycle: design, run, close
Link to section “Lifecycle: design, run, close”- Day 0, design: analysis of needs (often from PeopleOps or a curriculum committee), blueprint, content, items, accessibility review, integration tests, course readiness sign-off.
- Day 1, run: enrolment sync, access, delivery, support, assessment windows with overrides, monitoring of passback and load.
- Day 2, close and improve: grade release, item analysis, regrade decisions, credential issue, records retention, course review.
ADDIE (analysis, design, development, implementation, evaluation) names the same arc;[8] SAM (“an iterative process model”) shortens it with prototypes.[26] Either way, the close phase must feed evidence back into design.
Operating model and governance
Link to section “Operating model and governance”- Change calendar with freezes around term start and exam windows; emergency changes need the assessment lead’s consent.
- Assessment board (or a named assessment lead in small settings) decides cut scores, regrades and item retirement, and records the reasons. Standard 5.21: “When proposed score interpretations involve one or more cut scores, the rationale and procedures used for establishing cut scores should be documented clearly.”[23]
- Integration review before any tool receives learner data: standard, data shared, owner, exit plan.
- Ceremonies: term-start readiness review, exam-window stand-ups, post-sitting item review, termly course review.
- Escalation: learner-impacting faults (wrong grade, missing accommodation, credential error) go to the assessment lead the same day; platform faults follow the hosting team’s incident process (IncidentOps).
Architecture and workflow
Link to section “Architecture and workflow”Reference architecture
Link to section “Reference architecture”The architecture is a hub (the LMS) with standard-shaped edges. The standard on each edge is the thing to get right; products change, edges last.
Diagram source (Mermaid)
flowchart TB SIS["System of record: SIS or HRIS"] PKG["Content packages"] LMS["LMS: courses, gradebook, question bank"] TOOL["External tools"] LRS["Learning Record Store"] CRED["Credential issuer"] WH["Analytics warehouse"] WAL["Learner wallet"] SIS <-->|"OneRoster: rosters, grades"| LMS PKG -->|"SCORM or cmi5"| LMS LMS <-->|"LTI 1.3 launch, AGS scores"| TOOL LMS -->|"xAPI, often plug-in"| LRS LMS -->|"issue request"| CRED LRS --> WH CRED -->|"Open Badges 3.0"| WAL classDef core fill:#e8f3f2,stroke:#16756f,color:#122029 classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029 class LMS core class SIS,TOOL,PKG,LRS,CRED,WAL,WH neutral
Text equivalent: The system of record (SIS or HRIS) and the LMS exchange rosters and grades through OneRoster. The LMS launches external tools with LTI 1.3; tools return scores with Assignment and Grade Services. Content packages run as SCORM or cmi5. The LMS sends xAPI statements, often through a plug-in, to a Learning Record Store that feeds an analytics warehouse. An issue request goes to a credential issuer (an LMS feature or a separate service), which delivers an Open Badges 3.0 credential to the learner’s wallet.
Two edges are often not built in: Moodle sends statements to an external LRS only through third-party plug-ins such as logstore xAPI,[27] and the Open Badges version an LMS issues must be checked per product (no claim is made here for Moodle).
Trust boundaries. Each edge carries personal data. LTI 1.3 tools MUST validate the platform’s token signature, an exact issuer, their client ID in the audience, expiry and the presence of a nonce; rejecting reused nonces is a SHOULD.[28] Feeds should use service accounts limited to their courses. Vendor support channels are part of the boundary: in the PowerSchool incident of December 2024, one district reported that an intruder with “a compromised credential” used “maintenance access channels” and took records “dating back to 2005”.[29]
Alternatives. A single vendor suite can replace several edges with proprietary links; it is simpler to run and harder to leave. For an LMS-logs warehouse instead of an LRS, see deep comparisons.
End-to-end workflow
Link to section “End-to-end workflow”Diagram source (Mermaid)
flowchart TB
A["Enrolment synced and reconciled"] --> B["Access set: groups, dates, overrides"]
B --> C["Learner attempts assessment"]
C --> D["Scores recorded, tool scores passed back"]
D --> E{"Item analysis and checks pass?"}
E -->|yes| F["Grades released"]
E -->|no| X["Hold release, assessment lead decides"]
X --> Y["Fix key or item, dry-run regrade, record decision"]
Y --> F
F --> G["Credential issued, verifiable"]
G --> Q{"Learner queries result?"}
Q -->|no| H["Record retained, change history kept"]
Q -->|yes| RQ["Review query; correct grade and credential under a recorded decision"]
RQ --> H
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
class A,B,C,D,F,G,H core
class X,Y,RQ risk
class E,Q decision
Text equivalent: Enrolment is reconciled; access is set with groups, dates and overrides; the learner attempts the assessment; scores are recorded and passed back. If checks fail, release is held while the assessment lead decides, the item is fixed and a dry-run regrade checked. Then grades are released and a verifiable credential issued. A later learner query is reviewed, and any correction to grade or credential made under a recorded decision. The record is retained with its change history.
Practices, standards and tools
Link to section “Practices, standards and tools”Core practices and playbooks
Link to section “Core practices and playbooks”| Practice | Trigger | Owner | Output | Verification |
|---|---|---|---|---|
| Term-start readiness | Four weeks before term or cohort start | Platform owner | Readiness record (template below) | Reconciliation within tolerance; test learner walks the course |
| Integration onboarding | New tool requested | Platform owner | Register entry, data map, test launch | Launch, roster and grade passback tested in a sandbox course |
| Assessment blueprinting | New or revised assessment | Assessment lead | Blueprint and cut-score rationale | Peer review signed off |
| Item review | Before first use; after each sitting | Assessment lead and course owner | Item review log | Key checked by a second reviewer; statistics reviewed |
| Accommodation set-up | Approved accommodation received | Platform owner | User or group override | Override visible before the first timed attempt |
| Grade release | Assessment window closes | Course owner | Released grades | Passback complete; holds cleared |
| Credential issue | Release complete | Assessment lead | Certificate or badge with verification | Sample checked as a third party would |
Item quality loop. Items are the smallest unit that can make a result wrong, so they get their own cycle. Standard 4.10 asks that the psychometric model be documented and that the sample used to estimate item properties be “of adequate size and diversity”.[23] With small cohorts, treat statistics as prompts for expert review rather than verdicts.
Diagram source (Mermaid)
flowchart TB
B["Blueprint: what to sample, how much"] --> W["Write items to the blueprint"]
W --> R["Peer review: key, wording, bias, accessibility"]
R --> U["First live use"]
U --> S["Item analysis: facility, discrimination, reliability"]
S --> D{"Evidence and expert view"}
D -->|"sound"| K["Keep in bank"]
D -->|"fixable"| V["Revise: new version"]
D -->|"faulty or exposed"| T["Retire"]
V --> R
K --> U
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
class B,W,R,U,S,K,V core
class T risk
class D decision
Text equivalent: Items are written to a blueprint, peer-reviewed (key, wording, bias, accessibility), used live and analysed. Evidence plus expert judgement keeps an item, revises it as a new version that returns to review, or retires it if faulty or exposed.
Methods, standards and frameworks
Link to section “Methods, standards and frameworks”Interoperability standards (normative specifications; check what your platform actually supports):
| Standard | Moves what | Current state (as of October 2026) | Operational note |
|---|---|---|---|
| LTI 1.3 + Advantage (1EdTech) | Tool launch with sign-on; scores (AGS), rosters (NRPS), content selection (Deep Linking)[18] | LTI 1.3 issued 2019;[11] support for LTI 1.0–2.0 ended 30 June 2022[12] | Inventory and migrate legacy 1.1 links |
| SCORM 1.2 / 2004 | Packaged content and runtime data[19] | 1.2 from 2001; 2004 4th Edition 2009[9] | Moodle: “SCORM 2004 is not supported”; SCORM 1.2 passes ADL’s 1.2.7 conformance suite[27] |
| cmi5 | LMS-launched content that reports via xAPI[10] | Quartz 1st Edition, 2016 | Needs an LMS (or plug-in) that implements it |
| xAPI | Learning statements to an LRS[20] | xAPI 2.0 = IEEE 9274.1.1-2023;[13][14] vendors expect to support 1.0.x alongside it for years[30] | Agree verbs and IDs first, or data will not join up; record which version each system speaks |
| QTI 3.0 | Items, tests, results[21] | Current 1EdTech version | Lets you keep item banks when you change platform |
| OneRoster 1.2 | Rosters, gradebook, resources; CSV or REST[31] | Current version | SIS-to-LMS rosters and grades |
| Caliper 1.2 | Learning events via metric profiles[32] | Listed specification | An alternative event model to xAPI |
| Open Badges 3.0 | Verifiable achievement claims[17] | Aligns with W3C VC 2.0 (W3C Recommendation, 15 May 2025)[16] | Signed credentials; plan issuer keys and revocation |
Assessment standards (professional, not legal): the open-access Standards for Educational and Psychological Testing (2014) of AERA, APA and NCME.[23] A practice quiz needs less evidence than a licensing exam; scale evidence to the stakes.
Design and quality frameworks (optional): ADDIE and SAM;[8][26] the Quality Matters Higher Education Rubric, Seventh Edition, built around “Alignment” of objectives, assessment, materials, activities and technology;[33] CAST’s UDL Guidelines 3.0 (July 2024).[34] Evaluation: Kirkpatrick’s four levels (reaction, learning, behaviour, results), with the advice that “it is critical to start with Level 4: Results”.[35] So design starts from the Level 4 result the programme owner (PeopleOps) or faculty defines; EduOps then measures levels 1 and 2 and supplies data for 3 and 4, which that owner interprets. This split is an editorial distinction of this Atlas.
Tooling landscape
Link to section “Tooling landscape”Vendor-neutral categories first; products are examples verified on 2026-10-23, not recommendations.
| Category | Job | Examples | Selection criteria | Lock-in and risk |
|---|---|---|---|---|
| LMS | Courses, enrolment, gradebook, quizzes | Moodle (GPLv3);[36] Canvas LMS (AGPLv3, also hosted by Instructure)[37] | Standards support, accessibility, release and support cadence, hosting model | Item banks and gradebooks in proprietary formats |
| LRS | Store and query xAPI | Learning Locker (open source, GPL-3.0)[38]; commercial LRSs | Conformance, query API, retention controls | Statements without agreed verbs are hard to migrate |
| Assessment and proctoring | High-stakes delivery, invigilation | LMS quiz engines; specialist platforms | Item analysis, accommodation support, data minimisation | Legal and ethical exposure (see quality and compliance) |
| Credentials | Certificates, badges, verification | LMS plug-ins; Open Badges 3.0 issuers | Verifiability, revocation, longevity | Certificates that live only as PDFs |
| Analytics | Dashboards, early-warning models | LMS analytics, warehouse and BI | Explainability, bias checks, consent | Models acting on biased data |
Release cadence is a constraint. Moodle’s release table (updated 4 October 2026) gives 4.5 LTS security fixes until 4 October 2027 and 5.3 LTS (released 5 October 2026) until 1 October 2029.[39] Advisories arrive between releases, for example MSA-26-0044, “Missing access checks on H5P content files” (15 October 2026, Serious).[40]
Hosted LMS operations differ. On a vendor-hosted LMS the vendor sets the calendar: an Instructure post (2023) described new Canvas features arriving monthly, with a beta environment overwritten from production every Saturday and LTI testing listed as not available there.[41] The institution cannot freeze releases, so it tests them in beta before exam windows (treating beta as holding real learner data) and checks tool launches in a production test course. This page’s examples use self-hosted Moodle; the duties are the same.
Automation and AI
Link to section “Automation and AI”Automation that clearly helps: roster sync with reconciliation, scheduled reminders, automatic overrides from an accommodations list, passback monitoring, item-statistics reports after each sitting, certificate issue on release. Keep a human decision on anything that changes a learner’s result.
- Regulation (EU, not legal advice). The AI Act lists as high-risk AI systems used to determine admission, to “evaluate learning outcomes”, to assess the level of education a person will receive, and “for monitoring and detecting prohibited behaviour of students during tests” (Annex III, point 3).[42] Its Article 5 bans AI used “to infer emotions of a natural person in the areas of workplace and education institutions”, except for medical or safety reasons, which has applied since 2 February 2025.[43][44] After the 2026 “AI Omnibus”, the high-risk (Chapter III) requirements for Annex III systems apply from 2 December 2027 instead of 2 August 2026.[45] Article 6(3) lets a listed system escape the high-risk class if it does not materially influence decisions, for example a narrow procedural or preparatory task, but never when it profiles people.[46]
- Bias. A review of the field found evidence of algorithmic bias in education by race and ethnicity, gender and nationality, with less-studied evidence for socioeconomic status, disability and military-connected status.[47] Moodle’s built-in “Students at risk of dropping out” model “must be trained on a site with data”, and Moodle advises that models “should also be monitored for performance and accuracy”.[48]
- Generative AI. UNESCO warns that, without national regulation, institutions are largely unprepared to validate such tools.[49] AI-drafted items still pass the item quality loop; AI grades are suggestions. For integrity, publish which AI use each assessment permits, and do not treat a detector’s score as proof: a 2023 study found that GPT detectors “consistently misclassify non-native English writing samples as AI-generated”.[50] Suspected misconduct goes to the assessment board with other evidence (drafts, a viva).
EduOps in practice
Link to section “EduOps in practice”Reference implementation
Link to section “Reference implementation”Assumptions: a self-hosted Moodle 4.5 LTS site on Linux with PostgreSQL, a nightly roster feed, three LTI 1.3 tools, vendor packages and quizzes that lead to certificates. Other platforms need other commands. 4.5 is shown because it has security support until 4 October 2027 and the commands were checked against its source; a new site should normally start on 5.3 LTS (released 5 October 2026).[39]
1. Integration register entry. One entry per tool; the review in operating model and governance fills it in before any learner data flows.
Example status: YAML syntax-checked; illustrative values.
tool: "Example Coding Labs"
owner: "platform-team@example.edu"
standard: "LTI 1.3 with AGS and NRPS" # never a new LTI 1.1 link
deployment_id: "deployment-01"
data_shared:
claims: [sub, roles, context] # no name or e-mail unless needed
nrps_roster: false
grade_passback: true
courses: ["course-101", "course-102"]
contract:
dpa_signed: true
data_location: "EU"
retention_after_exit_days: 30
tests:
sandbox_launch: "2026-10-20"
passback_verified: "2026-10-20"
exit_plan: "Export scores via AGS line items; download learner work"
review_due: "2027-04-01"
2. Change-window runbook for the LMS. The commands and options below are those of Moodle 4.5’s command-line scripts; run them as the web-server user, as Moodle’s documentation advises.[51][52][53] Schedule the window outside exam periods.
Example status: syntax-checked with bash -n; control flow executed on 2026-10-23 with stub commands (forced failures in
checks.php, the dump and upgrade.php); not run against Moodle. Exit codes and directory and maintenance-mode behaviour were
read in the 4.5 source. Paths, user and course names are placeholders.
#!/usr/bin/env bash
# Change window for a self-hosted Moodle 4.5 site. Run as root. Stop at the first error.
set -Eeuo pipefail # -E: the ERR trap also fires inside functions
umask 077 # dumps and backups readable by owner only
MOODLE_DIR="/var/www/moodle"
PHP_BIN="/usr/bin/php"
WEB_USER="www-data"
BACKUP_DIR="/srv/moodle-backups/$(date +%Y%m%d%H%M)"
run() { # log the step, then run it as the web user
echo "== $*" >&2
sudo -u "$WEB_USER" "$PHP_BIN" "$MOODLE_DIR/admin/cli/$1" "${@:2}"
}
checks() { # exit 0 OK, 1 warning; 2 or 3 stops
local rc=0
run checks.php -v || rc=$?
[ "$rc" -le 1 ] || { echo "== check result $rc: stop and investigate" >&2; return 1; }
}
trap 'echo "FAILED: $BASH_COMMAND; site may still be in maintenance mode" >&2' ERR
[ "$(id -u)" -eq 0 ] || { echo "run as root" >&2; exit 1; }
# backup.php runs as the web user and refuses a directory it cannot write to.
install -d -m 700 -o "$WEB_USER" -g "$WEB_USER" "$BACKUP_DIR"
checks # warnings are printed; critical stops here
run maintenance.php --enable # no new attempts after this point
# Database dump (PostgreSQL shown). It holds every learner's grades and personal data.
echo "== pg_dump moodle | gzip" >&2 # not via run(); on failure FAILED names gzip
sudo -u postgres pg_dump moodle | gzip > "$BACKUP_DIR/moodle-db.sql.gz"
# Course backups for courses with live assessments (by shortname).
for course in course-101 course-102; do
run backup.php --courseshortname="$course" --destination="$BACKUP_DIR"
done
# ... deploy the new code or plugin version here ...
run upgrade.php --non-interactive
run purge_caches.php
run maintenance.php --disable
run scheduled_task.php --list | sed -n '1,20p' # tasks listed (sed reads all: no SIGPIPE)
checks # compare with the first run
Maintenance mode comes before the backups, so no attempt is lost on rollback (CLI scripts still run; web requests get the
maintenance page). The backup directory is private and owned by the web user, because backup.php refuses a directory it cannot
write to.[52] checks.php exits 1 on a warning and 2 on an error or critical result,[53] so checks continues on
warnings and stops on worse. The dump holds learner personal data: copy it off the host, encrypted, and delete it when retention
ends. With set -E the ERR trap also fires inside run: a failed step prints FAILED after its == line, and the site stays
in maintenance mode until someone decides to roll back or continue.
Not covered: restore (restore_backup.php --file=… --categoryid=…), file-store backups and upgrade-specific migrations. A move
from 4.5 to 5.x migrates question banks: course-level questions go to automatically created shared banks, category-level ones to a
new course, and Moodle Docs list known migration issues and role capabilities to fix afterwards.[54] Rehearse it on a copy
before an exam season.
Hands-on labs
Link to section “Hands-on labs”Lab 1 (beginner): item analysis after a sitting
Link to section “Lab 1 (beginner): item analysis after a sitting”Objective: compute facility, discrimination and reliability for one quiz and find the item that is hurting the result. Prerequisites: Python 3.8 or later; no LMS, cost or risk; 30 minutes. Status: executed by the author on 2026-10-23 with the synthetic data below.
- Save the responses as
responses.csv(20 synthetic learners, 8 items scored 0 or 1). - Save the script as
item_analysis.pyand runpython3 item_analysis.py responses.csv. - Read the flags. Then assume a reviewer confirms Q6’s key was wrong: re-key by flipping every Q6 value (0↔1), save as
responses-rekeyed.csv, and run again. - With a cut score of 6 out of 8, list who passes before and after.
learner,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8
L01,1,1,1,1,1,0,1,1
L02,1,1,1,1,1,0,1,1
L03,1,1,1,1,0,0,1,1
L04,1,1,1,0,1,0,1,1
L05,1,1,1,1,1,0,0,1
L06,1,0,1,1,1,0,1,0
L07,1,1,1,0,1,0,1,0
L08,0,1,1,1,0,0,1,1
L09,1,0,1,1,0,1,0,1
L10,1,1,1,0,0,0,1,0
L11,0,1,1,1,0,1,0,0
L12,1,0,1,0,1,1,0,0
L13,0,0,1,1,0,1,1,0
L14,1,0,1,0,0,1,0,0
L15,0,1,1,0,0,1,0,0
L16,0,0,1,0,1,1,0,0
L17,0,0,1,0,0,1,0,1
L18,0,0,1,0,0,1,0,0
L19,0,0,1,0,0,0,0,0
L20,0,0,1,0,0,1,0,0
Example status: verified by execution (Python 3, standard library), 2026-10-23.
"""Classical item analysis for one dichotomously scored test (0/1 per item).
Usage: python3 item_analysis.py responses.csv
Columns: learner id, then one column per item. Standard library only.
"""
import csv
import math
import sys
from statistics import mean, pstdev
def pearson(xs, ys):
"""Pearson correlation; returns None when either list has no variance."""
sx, sy = pstdev(xs), pstdev(ys)
if sx == 0 or sy == 0:
return None
mx, my = mean(xs), mean(ys)
cov = sum((x - mx) * (y - my) for x, y in zip(xs, ys)) / len(xs)
return cov / (sx * sy)
def load(path):
with open(path, newline="", encoding="utf-8") as fh:
rows = list(csv.reader(fh))
items = rows[0][1:]
scores = [[int(v) for v in r[1:]] for r in rows[1:] if r]
return items, scores
def analyse(items, scores):
n, k = len(scores), len(items)
totals = [sum(r) for r in scores]
report = []
for j, name in enumerate(items):
col = [r[j] for r in scores]
rest = [t - c for t, c in zip(totals, col)] # rest-of-test score
p = mean(col)
d = pearson(col, rest)
band = "easy" if p >= 0.85 else "hard" if p <= 0.50 else "moderate"
flags = []
if d is None:
flags.append("no variance: cannot discriminate")
elif d < 0:
flags.append("NEGATIVE: check key")
elif d < 0.10:
flags.append("poor discrimination")
report.append((name, p, band, d, flags))
item_var = sum(pstdev([r[j] for r in scores]) ** 2 for j in range(k))
total_var = pstdev(totals) ** 2
alpha = (k / (k - 1)) * (1 - item_var / total_var)
sem = pstdev(totals) * math.sqrt(1 - alpha) if alpha < 1 else 0.0
return n, k, totals, report, alpha, sem
def main(path):
items, scores = load(path)
n, k, totals, report, alpha, sem = analyse(items, scores)
print(f"learners={n} items={k} mean_total={mean(totals):.2f} "
f"sd_total={pstdev(totals):.2f}")
print(f"{'item':<5}{'p':>6} {'band':<9}{'r_rest':>7} review flags")
for name, p, band, d, flags in report:
dtxt = "n/a" if d is None else f"{d:.2f}"
print(f"{name:<5}{p:6.2f} {band:<9}{dtxt:>7} {', '.join(flags)}")
print(f"alpha={alpha:.2f} sem={sem:.2f} (raw-score points)")
if n < 100:
print(f"note: n={n} is small; treat statistics as signals for review")
return 1 if any("NEGATIVE" in " ".join(r[-1]) for r in report) else 0
if __name__ == "__main__":
sys.exit(main(sys.argv[1]))
Expected output (step 2, from the author’s run; exit code 1 because an item is negative):
learners=20 items=8 mean_total=4.25 sd_total=1.64
item p band r_rest review flags
Q1 0.55 moderate 0.47
Q2 0.50 hard 0.40
Q3 1.00 easy n/a no variance: cannot discriminate
Q4 0.45 hard 0.43
Q5 0.40 hard 0.30
Q6 0.50 hard -0.74 NEGATIVE: check key
Q7 0.45 hard 0.43
Q8 0.40 hard 0.47
alpha=0.41 sem=1.26 (raw-score points)
note: n=20 is small; treat statistics as signals for review
Step 3 (re-keyed): Q6 becomes 0.74, alpha rises from 0.41 to 0.79, the standard deviation from 1.64 to 2.36, SEM 1.08, exit
code 0. Step 4: at a cut of 6, 5 learners pass before and 8 after; L06, L07 and L08 move from 5 to 6 points.
How to read it. The bands follow the University of Washington’s ScorePak conventions (difficulty “easy” at 85 % or above, “hard” at 50 % or below; discrimination “good” above .30, “poor” below .10; reliability .70–.80 “Good for a classroom test”), one institution’s practice, with its caveat: “Item analysis data are tentative.”[55] Discrimination is computed against the rest-of-test score, as in Moodle.[22] Q3 carries no information; a negative item means a wrong key or an ambiguous question, and only an expert reading tells you which, so step 3 is a decision, not an automatic fix.
Validation: on a real export, set the report’s “Calculate statistics from” option to the attempts you exported (in Moodle 4.5
it defaults to the quiz’s grading method, not the first attempt[56]), and compare Moodle’s percentages with this
script’s values × 100.[22] They should then match within rounding. Troubleshooting: ValueError: invalid literal for int() means a
non-numeric cell (blank or partial credit); this script handles 0/1 only. ZeroDivisionError means every learner scored the same
total. Teardown: delete the files; they contain no real data. If you export real responses, pseudonymise learner IDs first.
Lab 2 (intermediate): pre-flight checks for an xAPI statement and an LTI launch
Link to section “Lab 2 (intermediate): pre-flight checks for an xAPI statement and an LTI launch”Objective: catch structural and privacy faults in two interoperability artefacts before a vendor test. Prerequisites: Python 3.8 or later; no network, cost or risk. Status: executed by the author on 2026-10-23.
- Save the statement, the decoded launch payload and the script below.
- Run
python3 interop_check.py statement statement.jsonandpython3 interop_check.py launch launch.json. - Break them: replace the statement’s
accountwith"mbox": "mailto:learner@example.edu"; in the launch, delete thedeployment_idclaim and set the version claim to"1.1". Run both again.
Example status: JSON syntax-checked; both files passed the script below.
{
"id": "3f9d2c1e-8a47-4b6e-9f0a-2d1c5e7b8a90",
"actor": {
"objectType": "Agent",
"account": {"homePage": "https://lms.example.edu", "name": "learner-7f3a"}
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/passed",
"display": {"en-US": "passed"}
},
"object": {
"objectType": "Activity",
"id": "https://lms.example.edu/xapi/activities/course-101/final-quiz",
"definition": {"name": {"en-US": "Course 101 final quiz"}}
},
"result": {
"score": {"scaled": 0.8, "raw": 20, "min": 0, "max": 25},
"success": true,
"completion": true,
"duration": "PT34M12S"
},
"context": {
"registration": "6c1d8e2f-4b3a-4f9e-8d7c-1a2b3c4d5e6f",
"platform": "Example LMS"
},
"timestamp": "2026-10-23T09:41:00Z"
}
{
"iss": "https://lms.example.edu",
"aud": "tool-client-id-123",
"sub": "a6d5c443-1f51-4783-ba1a-7686ffe3b54a",
"exp": 1792750000,
"iat": 1792749700,
"nonce": "n-0S6_WzA2Mj",
"https://purl.imsglobal.org/spec/lti/claim/message_type": "LtiResourceLinkRequest",
"https://purl.imsglobal.org/spec/lti/claim/version": "1.3.0",
"https://purl.imsglobal.org/spec/lti/claim/deployment_id": "deployment-01",
"https://purl.imsglobal.org/spec/lti/claim/target_link_uri":
"https://tool.example.com/launch",
"https://purl.imsglobal.org/spec/lti/claim/resource_link":
{"id": "rl-200417"},
"https://purl.imsglobal.org/spec/lti/claim/roles": [
"http://purl.imsglobal.org/vocab/lis/v2/membership#Learner"
],
"https://purl.imsglobal.org/spec/lti/claim/context":
{"id": "course-101", "title": "Course 101"}
}
Example status: verified by execution (Python 3), 2026-10-23.
"""Pre-flight checks for two interoperability artefacts (structure only).
python3 interop_check.py statement statement.json # xAPI Statement
python3 interop_check.py launch launch.json # decoded LTI 1.3 launch
Does NOT verify signatures, nonces or expiry: the receiving system must.
"""
import json
import sys
LTI = "https://purl.imsglobal.org/spec/lti/claim/"
LTI_REQUIRED = ["message_type", "version", "deployment_id",
"target_link_uri", "resource_link", "roles"]
ACTOR_IFIS = ["mbox", "mbox_sha1sum", "openid", "account"]
def check_statement(s):
problems = []
for prop in ("actor", "verb", "object"):
if prop not in s:
problems.append(f"missing required property: {prop}")
actor = s.get("actor", {})
ifis = [i for i in ACTOR_IFIS if i in actor]
if len(ifis) != 1:
problems.append(f"actor needs exactly one identifier, found {ifis}")
if "mbox" in ifis:
problems.append("privacy: actor exposes an e-mail; prefer account")
if not str(s.get("verb", {}).get("id", "")).startswith(("http://", "https://")):
problems.append("verb.id must be an IRI")
scaled = s.get("result", {}).get("score", {}).get("scaled")
if scaled is not None and not -1 <= scaled <= 1:
problems.append("result.score.scaled must be between -1 and 1")
return problems
def check_launch(c):
problems = [f"missing claim: {n}" for n in LTI_REQUIRED if LTI + n not in c]
if c.get(LTI + "version") != "1.3.0":
problems.append("version claim must be 1.3.0")
if not c.get(LTI + "resource_link", {}).get("id"):
problems.append("resource_link.id is required")
if "sub" not in c:
problems.append("no sub: anonymous launch, grades cannot be returned")
return problems
def main(kind, path):
with open(path, encoding="utf-8") as fh:
doc = json.load(fh)
problems = check_statement(doc) if kind == "statement" else check_launch(doc)
for p in problems:
print("FAIL", p)
print("OK" if not problems else f"{len(problems)} problem(s)")
return 1 if problems else 0
if __name__ == "__main__":
sys.exit(main(sys.argv[1], sys.argv[2]))
Expected output (author’s run): step 2 prints OK twice, exit 0. Step 3 prints FAIL privacy: actor exposes an e-mail; prefer account (exit 1), then FAIL missing claim: deployment_id and FAIL version claim must be 1.3.0 (exit 1).
Where the rules come from. The xAPI 1.0.3 text requires actor, verb and object, one identifier per Agent, and a scaled
score between -1 and 1.[20] An xAPI vendor’s summary of 2.0 says the requirements did not change
significantly (MUST became SHALL);[30] check these rules against the 2.0 text if your LRS uses it. The e-mail rule is this page’s privacy choice, after cmi5’s advice against sensitive PII in the launch
actor.[10] The LTI checks are the required claims of an LtiResourceLinkRequest.[11] Validation: the script is a pre-flight, not a conformance test. Real tools must also verify the token’s
signature, issuer, audience, expiry and nonce,[28] and an LRS can be tested with ADL’s conformance suite, which its README says
“should also not run against a production LRS endpoint because the data is persisted and never voided”.[57]
Troubleshooting: json.decoder.JSONDecodeError usually means a trailing comma. Teardown: delete the files.
Lab 3 (advanced): accommodation and regrade drill in a sandbox LMS
Link to section “Lab 3 (advanced): accommodation and regrade drill in a sandbox LMS”Objective: prove, before a real sitting, that the team can apply an accommodation and correct a key without corrupting results. Prerequisites: a non-production Moodle 4.5 (or equivalent) site with three test accounts; teacher and admin rights; two hours. Risk: none if the site is a sandbox; never run this drill in a live course. Status: not executed for this page; the steps follow Moodle 4.5 documentation.
- Create a course and a 10-minute timed quiz with five auto-marked questions; deliberately set one wrong key.
- Add a user override giving one learner 25 minutes; user overrides take precedence over group overrides.[58]
- Attempt the quiz as all three learners; only the overridden learner should see 25 minutes.
- Open the statistics report and find the faulty item (low or negative discrimination; Moodle highlights low values in red).[59]
- Fix the key, run a dry-run regrade, compare, then regrade.[60]
- Record the decision in the regrade decision record.
Expected output (not executed): only the overridden learner had 25 minutes; the dry run previews the grade changes; afterwards
the gradebook matches the preview. Validation: a second person re-derives one grade by hand. Troubleshooting: a missing
override usually means wrong group membership;[58] if nothing changes, “Regrading isn’t always possible”, for example
after the number of answers changed.[60] Teardown: delete the course, for example with
sudo -u www-data /usr/bin/php admin/cli/delete_course.php --courseid=<id> --disablerecyclebin on the sandbox (without the flag, an
enabled recycle bin keeps a course backup),[61] and delete the test accounts.
Use cases and scenarios
Link to section “Use cases and scenarios”Scenarios 1–3 are illustrative; 4 and 5 are sourced public events.
| Scenario | Context | Method | Trade-off | Success measure |
|---|---|---|---|---|
| 1. University term start | 300 courses, SIS feed, four LTI tools, students with timing accommodations | Reconcile rosters two weeks out; register tools; generate overrides from approvals | Freeze blocks late changes | No accommodation missing at first timed attempt |
| 2. Corporate compliance academy | Vendor courses; audits need proof; HR owns the programme | SCORM 1.2 where the LMS lacks cmi5; completions mapped to policy IDs; expiring certificates | SCORM 1.2 reports little detail | Every sampled completion traces to an attempt |
| 3. Certification exam | Paid exam, public credential | Blueprint, documented cut score, QTI item bank, item analysis per window, Open Badges 3.0 | Item exposure versus reuse | Few regrades; credentials verify |
| 4. National model-based grading (sourced) | England, 2020, exams cancelled | Calculated grades replaced after public loss of confidence[4] | Statistical consistency versus individual fairness | Appeals and reversals |
| 5. Vendor access to student records (sourced) | US districts on PowerSchool SIS, December 2024 | A district reported a compromised credential and maintenance channels, then closed the back channel[29] | Support convenience versus exposure | No standing vendor access |
Pitfalls. (1) Reusing a small bank until items circulate; Standard 6.7 makes protecting test materials the test user’s responsibility “at all times”.[23] (2) A statistically defensible method can still fail individuals; plan appeals capacity.
Measuring, securing and paying for learning operations
Link to section “Measuring, securing and paying for learning operations”Metrics and KPIs
Link to section “Metrics and KPIs”| KPI | Formula | Data source | Pitfall | Cadence |
|---|---|---|---|---|
| Enrolment accuracy | correct enrolments ÷ enrolments expected by the system of record | Roster reconciliation | Counting only additions, not removals | Daily in week 1, then weekly |
| Grade passback success | scores accepted by the gradebook ÷ scores sent by tools | Tool and LMS logs | Retries hide failures | Daily during windows |
| Time to release | median hours from window close to release | Gradebook history | Mean hides long tails | Per sitting |
| Accommodation fulfilment | overrides in place before first timed attempt ÷ approved accommodations | Override list vs approvals | Approvals after the deadline | Per sitting |
| Item review rate | items flagged (negative or < 0.10 discrimination) ÷ items with enough responses | Item analysis | Tiny cohorts | Per sitting |
| Reliability and SEM | Cronbach’s alpha; SEM = SD × √(1 − alpha) | Item analysis | Alpha rises with length, not only quality | Per form |
| Learners near the cut | learners within ± 1 SEM of the cut ÷ learners | Scores | Ignored when pass rate looks normal | Per sitting |
| Credential verification success | successful verifications ÷ verification attempts | Verification logs | Testing only new credentials | Monthly |
| Accessibility defects | open WCAG A/AA defects in active courses; oldest age (counting rule below) | Defect log | Counting audits, not fixes | Termly |
| Completion rate | completions ÷ enrolments | LMS | Vanity metric without assessment | Termly |
Leading and lagging. Enrolment, passback and accommodation measures lead complaints and appeals; regrades, appeals and revocations lag.
Targets: set from your own baseline and stakes; we found no published benchmarks. Investigate every accommodation miss.
Quality, security, privacy and compliance
Link to section “Quality, security, privacy and compliance”Jurisdiction matters and this section is not legal advice; detailed privacy work belongs to PrivacyOps.
- Accessibility. WCAG 2.2 (a W3C Recommendation since 5 October 2023; current edition 12 December 2024) Success Criterion 2.2.1 requires that time limits can be turned off, adjusted or extended, with exceptions including “Essential Exception: The time limit is essential and extending it would invalidate the activity”.[62] For a timed exam, document why time is essential and still apply individual extra time. In the US, the Justice Department’s rule covering “Public schools, community colleges, and public universities” requires WCAG 2.1 AA from 26 April 2027 for public entities with a total population of 50,000 or more, or 26 April 2028 for smaller ones, dates set by a 20 April 2026 interim final rule. A school district is not a special district: it uses the population of its city or county, or, if independent, the most recent Small Area Income and Poverty Estimates.[63]
- Privacy. In the US, FERPA applies to educational agencies and institutions that receive funds under programmes the Secretary of Education administers.[64] Operationally: share minimal claims with tools, pseudonymise analytics exports, set retention per record type, and log access to grades.
- Proctoring. In Ogletree v. Cleveland State University (N.D. Ohio, August 2022) a pre-exam room scan of a student’s bedroom was held an unreasonable Fourth Amendment search; the Future of Privacy Forum notes it is one fact-dependent district ruling and “it is too soon to tell whether other courts will follow suit”.[65] For the EU, see automation and AI.
- Security. Apply platform advisories promptly;[40] review plug-ins before installing; time-box vendor support access; protect item banks as confidential (Standard 6.7).[23]
Accessible learning in operation
Link to section “Accessible learning in operation”Accessibility is a release criterion for each course run, not a one-off audit. The checks cite WCAG 2.2 success criteria (Level A unless marked AA);[62] at design time, UDL 3.0 helps.[34]
| Content type | Check before launch | Usually fixed by |
|---|---|---|
| Recorded video and audio | Captions (1.2.2); audio description or media alternative (1.2.3; AA 1.2.5); audio-only: transcript (1.2.1) | Course owner |
| Images, diagrams, formulae shown as images | A text alternative that serves the same purpose (1.1.1) | Course owner or instructional designer |
| Documents and slides | Real headings and structure (1.3.1); for PDFs, a tagged document with heading tags;[66] contrast (AA 1.4.3) | Author of the source file |
| Questions and activities | Keyboard operation (2.1.1); drag-and-drop also possible without dragging (AA 2.5.7); adjustable time limits (2.2.1) | Assessment lead, choosing question types |
| Platform, theme, plug-ins, tools | The same criteria across the interface | Platform owner; the vendor, under contract |
When. Run the content checks in the course launch readiness review and when a course is revised. Run the tool checks before procurement: ask for an Accessibility Conformance Report, the report format built on a completed ITI VPAT, in its WCAG, Section 508, EU (EN 301 549) or international edition,[67] and test the parts learners will use.
How. Checkers assist but do not decide: tools “can not determine accessibility, they can only assist in doing so”.[68] Moodle 4.5 ships an Accessibility toolkit that checks content in core activities once the site registers with Brickfield;[69] add a manual keyboard and screen-reader pass on assessment pages.
Counting the KPI. Log one defect per failed success criterion per content item; close it only when fixed and re-checked. A defect that blocks an assessment is escalated like a wrong grade.
Cost, capacity and sustainability
Link to section “Cost, capacity and sustainability”- Peaks are predictable: term start, deadlines, exam windows. Load-test a timed quiz with the expected simultaneous starts before the window; capacity engineering belongs to WebOps and SysOps.
- Cost drivers: hosting or subscription (check how the contract counts users), tool licences, proctoring, item writing and review, accessibility remediation. A reviewed item is a durable asset until exposure makes it worthless.
- Lifecycle costs: each integration adds review, upgrade testing and an exit cost. Moodle LTS releases get 36 months of security fixes,[39] which lowers upgrade frequency but not the need to rehearse upgrades.
- Sustainability: mainly hosting, video and media retention; GreenOps covers the method.
Assurance of the operating model
Link to section “Assurance of the operating model”- Reconciliations: roster vs system of record; gradebook vs passback logs; credentials issued vs grades released.
- Sampling: each term, trace a random sample of credentials back through every link of the evidence chain.
- Item review evidence: every live item has a reviewer, a version and statistics after use.
- Exception monitoring: overrides created after a sitting began; grades edited after release; credentials revoked.
- Audit trail: who changed which result, when and why; append-only (principle 3).
When things go wrong
Link to section “When things go wrong”Common failures and troubleshooting
Link to section “Common failures and troubleshooting”| Symptom | Likely cause | Diagnosis | Remediation | Prevention |
|---|---|---|---|---|
| Learners missing from a course | Roster feed failed or mapping changed | Compare feed file and LMS enrolments for one learner | Re-run sync; enrol manually with a ticket | Daily reconciliation report |
| Tool scores absent from gradebook | Passback token or line-item error | Tool logs vs LMS logs for one attempt | Re-send scores; fix deployment | Passback check in integration tests |
| A tool stops launching | Legacy LTI 1.1 link or key rotation | Which LTI version; platform keys | Migrate to LTI 1.3 | Integration register with versions[12] |
| Package will not track | SCORM 2004 package in an LMS that lacks it | Package manifest version | Re-export as SCORM 1.2 or use a supported player | Check support first[27] |
| Item with negative discrimination | Wrong key or ambiguous item | Expert reading plus statistics | Runbook below | Second-reviewer key check |
| Extra time missing | Override not created, or group membership wrong | Override list vs approvals | Grant a new attempt with correct timing | Overrides created from approvals list |
| Certificate does not verify | Course or template deleted; wrong ID | Verification log; record of issue | Re-issue from records; keep old ID valid | Credentials independent of course lifecycle |
Worked runbook: wrong answer key after a certification quiz
Link to section “Worked runbook: wrong answer key after a certification quiz”Diagram source (Mermaid)
flowchart TB
S["Signal: negative discrimination or learner reports"] --> H["Hold grade release and certificates"]
H --> J{"Expert review: key wrong or item ambiguous?"}
J -->|"key wrong"| K["Fix key as a new question version"]
J -->|"ambiguous"| A["Board decides: credit all or remove item"]
K --> D["Dry-run regrade, compare with expectations"]
A --> D
D --> R["Regrade, recompute pass and fail"]
R --> C["Issue, re-issue or withdraw credentials"]
C --> N["Tell affected learners what changed and why"]
N --> L["Record decision; add review step to prevent repeat"]
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
class S,H risk
class J decision
class K,A,D,R,C,N,L core
Text equivalent: the numbered steps below as a flow. A negative item or learner reports trigger a hold; a wrong key is fixed as a new question version, an ambiguous item goes to the board (credit all or remove); then dry run, regrade, credentials, learners told, decision recorded.
- Detect. A negative item (Lab 1: Q6 at −0.74), or several learners report the same question.
- Contain. Hold release and automatic certificates; certificates already sent are marked under review, not deleted.
- Diagnose. Two subject experts read the item independently; statistics say where to look, not what is wrong.
- Decide. Re-key, credit all answers, or remove the item and rescale; record the rationale, as Standard 5.21 expects for cut-score procedures.[23]
- Dry run. Preview the regrade[60] and check it matches the decision. In Lab 1, re-keying moved three learners across a cut of 6.
- Apply. Regrade; recompute pass and fail; issue new credentials and revoke any that no longer hold.
- Communicate with every affected learner, including anyone told a different result earlier.
- Learn. Add the missing control (usually a second-reviewer key check) and log the incident.
Rollback: keep the pre-regrade export; if the decision is overturned on appeal, the earlier state can be restored under a new recorded decision.
Anti-patterns and myths
Link to section “Anti-patterns and myths”- “The LMS is the assessment strategy.” A quiz engine produces numbers, not validity. Without a blueprint and cut-score rationale, a pass mark is a guess.
- “Completion equals competence.” Completion shows exposure; only assessment evidence supports a competence claim.
- “More proctoring, more integrity.” Surveillance adds legal, privacy and accessibility risk; assessment design (item pools, applied open-book tasks) often protects integrity better.
- “xAPI will fix our data.” Without agreed verbs, activity IDs and identifiers, an LRS collects statements that do not join up.
- “Analytics should flag at-risk students automatically.” Models trained on biased history can repeat it;[47] use them to prompt human contact, and audit them.
Deciding and adopting
Link to section “Deciding and adopting”When to use and when not to use
Link to section “When to use and when not to use”Use a deliberate learning-operations function when results carry consequences (grades, certificates, compliance), when several systems exchange learner data, or when cohorts are large enough that manual fixes stop scaling.
Do not build one when learning is informal and unassessed (good onboarding and KnowledgeOps may suffice), when one course runs once on default settings, or when the gap is the programme itself (PeopleOps). Hidden costs: item writing and review, integration upkeep, and the discipline of change freezes.
Decision framework
Link to section “Decision framework”How much rigour. This tree (this Atlas’s proposal) maps when to use and when not to use onto the maturity model.
Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 120, "nodeSpacing": 30}}}%%
flowchart TB
Q0(["Is the gap what to teach, to whom, on what budget?"])
Q0 -->|no| Q1(["Consequential results, linked systems or large cohorts?"])
Q0 -->|yes| P["Programme decision: PeopleOps or curriculum committee"]
Q1 -->|no| N["Do not build a function: onboarding, KnowledgeOps"]
Q1 -->|yes| Q2(["Do results carry consequences?"])
Q2 -->|yes| Q3(["Do third parties rely on the result?"])
Q2 -->|no| M["Level 2: integration register, reconciliations"]
Q3 -->|no| EV["Level 3: blueprints, cut scores, item analysis"]
Q3 -->|yes| AS["Level 4: add verifiable credentials, sampled audits"]
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
class Q0,Q1,Q2,Q3 decision
class M,EV,AS core
class P,N neutral
Text equivalent: A gap in what to teach, to whom or on what budget is a programme decision for PeopleOps or a curriculum committee. Without consequential results, linked systems or large cohorts, do not build a function: onboarding and KnowledgeOps suffice. Linked systems or large cohorts alone call for level 2 (integration register, reconciliations); consequential results for level 3 (blueprints, cut scores, item analysis); results third parties rely on for level 4 (verifiable credentials, sampled audits).
Which standard at which boundary. Answer every question; one integration may need several standards.
| Boundary question | If yes, use (notes in the standards table) |
|---|---|
| Is a tool launched from the LMS? | LTI 1.3; AGS for grades, NRPS for rosters |
| Is it a self-paced content package? | cmi5 if supported, else the LMS’s SCORM version (Moodle: 1.2) |
| Does learning happen outside the LMS? | xAPI and an LRS |
| Is an item bank moving platform? | QTI 3.0 |
| Do rosters or grades come from an SIS? | OneRoster 1.2 |
| Must a third party check the proof? | Open Badges 3.0 |
The LTI resource-link launch is defined without any grade service; grade return is an optional Advantage service.[11][18] If no question applies, no standard is needed.
Assumptions: the standard is supported in the versions you run (verify with the vendor’s conformance listing, such as 1EdTech’s TrustEd Apps directory[18]); and someone will own the integration after launch.
Maturity model
Link to section “Maturity model”This is this Atlas’s model, not an industry standard.
| Level | Observable behaviour | Evidence to exit the level |
|---|---|---|
| 1. Ad hoc | Courses copied forward; enrolments fixed by hand; quiz settings unchecked | A named owner for platform and for assessment |
| 2. Managed | Term-start checklist with accessibility checks; integration register; overrides from an approvals list | Two terms with reconciliations recorded |
| 3. Evidenced | Blueprints, reviewed items, item analysis after each sitting, documented cut scores | Regrade and credential decisions all recorded |
| 4. Assured | Evidence-chain sampling, KPIs reviewed termly, accessibility defects tracked to closure, verifiable credentials | A sampled audit passes without rework |
| 5. Adaptive | Data and learner feedback change design each cycle; analytics audited for bias | Improvements traceable to evidence |
Accessibility checks start at level 2: where the law requires them, they are a baseline.
Adoption roadmap: 30/60/90 days
Link to section “Adoption roadmap: 30/60/90 days”| Window | Actions | Milestone |
|---|---|---|
| Days 1–30 | Name owners; inventory courses, tools (with LTI version), packages (with SCORM version) and certificates; run the first roster reconciliation | Integration register and risk list |
| Days 31–60 | Term-start and exam-day checklists; overrides generated from approvals; item analysis on the highest-stakes assessment; plan migration of any LTI 1.1 links | One sitting run with the checklists |
| Days 61–90 | Blueprint and cut-score rationale for top assessments; regrade decision record in use; first KPI review; accessibility triage of top courses | First termly review with metrics |
Toolkit
Link to section “Toolkit”Checklists
Link to section “Checklists”Term or cohort start (two weeks before)
- Roster reconciliation within tolerance; exceptions ticketed
- Every LTI tool in the register launches, and returns a test grade, in a sandbox course
- Packages tested in the production LMS version
- Accommodation overrides created and checked against approvals
- Change freeze dates published
Exam window
- Load test done for expected simultaneous starts
- Support rota and escalation to the assessment lead
- Release and certificates held until item analysis is reviewed
Credential issue
- Grades released and no holds open
- Credential carries a verifiable identifier and does not depend on the course existing
- Revocation path tested
Termly governance review
- KPIs reviewed; accessibility defects triaged; integration reviews due; retention applied
Templates
Link to section “Templates”Assessment blueprint and cut-score rationale
ASSESSMENT BLUEPRINT
Assessment: ____________ Version: ___ Owner (assessment lead): __________
Purpose (what a pass is meant to show): ____________________________________
Stakes: low / medium / high Learners per sitting (expected): ______
Outcome / topic Weight % Items Item types Cognitive level
------------------------ -------- ----- -------------- ---------------
________________________ ____ ___ ______________ _______________
Cut score: ___ / ___ Method and panel (names, date): _____________________
Rationale (why this score separates the groups that matter): ________________
Accommodations allowed: ____________ Time limit essential? yes/no, why: ____
Review: items peer-reviewed by ______ Item analysis after each sitting: yes
Regrade decision record
REGRADE DECISION RECORD ID: RG-____ Date: __________
Assessment and version: ______________ Sitting: ______________
Signal: negative discrimination / learner reports / other: ________________
Item(s) and expert findings (two reviewers): _____________________________
Decision: re-key / credit all / remove item and rescale / no change
Rationale: ______________________________________________________________
Dry run checked by: ______ Learners affected: ___ Pass/fail changes: ___
Credentials issued / re-issued / withdrawn: ______________________________
Learners informed on: __________ Prevention step: _______________________
Approved by (assessment lead or board): _____________
Course launch readiness record
COURSE LAUNCH READINESS Course: ________ Run: ______
Owner: ________ Platform version: ________ Launch date: __________
[ ] Enrolment source and reconciliation result: ____________________
[ ] Tools (standard, version, passback tested): ____________________
[ ] Packages (standard, tested in this LMS version): _______________
[ ] Accessibility check (WCAG level, defects open): ________________
[ ] Assessments: blueprint ref ____, overrides ____, release date ____
[ ] Credential template and verification tested: ___________________
Sign-off: platform ________ assessment ________ course owner ________
Deep comparisons
Link to section “Deep comparisons”| Choice | Option A | Option B | Choose A when | Choose B when |
|---|---|---|---|---|
| Learning records | LMS logs and warehouse | xAPI with an LRS | All learning happens in the LMS | Simulators, apps or workplace activity must be recorded |
| Exam integrity | Remote proctoring | Assessment redesign | Identity and closed-book conditions are essential and lawful | Applied, open-book or project tasks can show the outcome |
| Credential | PDF certificate with a verification page | Open Badges 3.0 | Low stakes, internal use | Third parties must check a signed, portable credential |
Who owns mandatory training: HR or EduOps? In this Atlas, PeopleOps owns who must take what and when; EduOps delivers it and produces the completion records that ComplianceOps uses as evidence.
Do small cohorts make item analysis useless? No, but noisy: with 20 learners, statistics choose which items experts re-read (see the item quality loop).
Should we still accept SCORM? Yes, where it is the format your LMS and vendors support well; SCORM 1.2 is the safe choice on Moodle.[27] Plan cmi5 where your platforms support it.
Is a timed exam an accessibility violation? Not in itself. WCAG 2.2 allows an essential time limit,[62] and the testing Standards expect accommodations that remove construct-irrelevant barriers.[23] Document both.
Can AI grade essays for us? It can draft scores, but in the EU systems that evaluate learning outcomes are high-risk (Annex III), with requirements from 2 December 2027;[42][45] everywhere, keep human review and monitor for bias.
Going further
Link to section “Going further”Advanced topics and emerging direction
Link to section “Advanced topics and emerging direction”- Verifiable credentials. Open Badges 3.0 packages achievements as W3C verifiable credentials;[17][16] issuer key management and revocation become operational duties.
- Two xAPI versions, and cmi5. xAPI 2.0 (IEEE 9274.1.1-2023) is the current version;[14][13] expect LRSs and content to speak 1.0.x and 2.0 side by side for years.[30] Wider cmi5 support would reduce reliance on SCORM.
- Learning analytics. SoLAR’s 2026 definition stresses “theoretically relevant and actionable insights”:[70] analytics tied to a teaching action, with known error rates.
Learning path
Link to section “Learning path”| Stage | Do this |
|---|---|
| 1-day primer | Read this page’s mental model, Lab 1, and the validity chapter of the 2014 Standards[23] |
| 1 week | Run Lab 2; map your platform’s edges onto the reference architecture; draft an integration register |
| 30 days | Run Lab 3 in a sandbox; blueprint one real assessment; run item analysis after its next sitting |
| Advanced | Psychometrics beyond classical test theory, standard-setting methods, credential infrastructure, analytics ethics |
| Portfolio | A term-start readiness record, an item analysis report with decisions, and a regrade decision record |
Wrap-up
Link to section “Wrap-up”Executive recap and cheat sheet
Link to section “Executive recap and cheat sheet”| Area | Remember |
|---|---|
| Term | “EduOps” is ambiguous; teach and staff learning operations |
| Core idea | Evidence chain: enrol → access → attempt → score → grade → credential → record |
| Standards | LTI 1.3 tools · cmi5 or supported SCORM packages · xAPI + LRS · QTI items · OneRoster rosters · Open Badges 3.0 |
| Assessment | Purpose and cut-score rationale first; review items; analyse after every sitting; experts decide |
| Metrics | Enrolment accuracy, passback success, accommodation fulfilment, item review rate, SEM near the cut |
| Watch-outs | Legacy LTI 1.1; SCORM 2004 on Moodle; proctoring and AI rules; standing vendor access; deleting courses that back credentials |
| Next actions | Integration register, reconciliation report, override routine, regrade decision record |
A judgement call: proctor the online exam or redesign it?
Link to section “A judgement call: proctor the online exam or redesign it?”Assumptions: about 400 candidates a year in several countries; the credential matters to employers; budget allows either option; some candidates need extra time.
Why A is attractive: it looks like the paper exam, keeps the existing items, and the vendor promises integrity.
Why A can be wrong here: a US district court found a pre-exam room scan unconstitutional at a public university, with uncertain reach;[65] in the EU, AI that monitors students during tests is high-risk and emotion inference is banned;[42][43] recordings become a retention liability; and closed-book recall may be weak evidence for a profession that works with references open. B’s costs are real: new items, a new cut-score study, assessor time.
Decision process: write down what a pass must show, since validity belongs to that interpretation;[23] list threats (impersonation, collusion, item exposure); pick the cheapest control per threat (identity check, large pool, applied tasks, viva sample); only then ask whether monitoring is still needed and lawful where candidates sit. Uncertainty: whether B reduces misconduct is not established; pilot one sitting and compare item statistics, appeals and candidate feedback.
Learning objectives and mastery check
Link to section “Learning objectives and mastery check”After this page you can: explain the evidence chain; choose standards per boundary; set accessibility checks; run and interpret a classical item analysis; design a regrade under control; set and calculate learning-operations KPIs; and recognise legal and ethical limits on proctoring and AI.
1. A quiz has an alpha of 0.41 and one item with discrimination −0.74. What do you do before releasing grades?
Hold release and certificates; have two experts read the item to decide whether the key is wrong or the item ambiguous; record the decision; dry-run the regrade; then release. Do not flip the key just because the statistic is negative.
2. A vendor offers a course as SCORM 2004 for your Moodle site. What is the risk?
Moodle Docs state that SCORM 2004 is not supported, though parts may appear to work. Ask for SCORM 1.2 or cmi5 (if your platform supports it), or a supported third-party player.
3. Which standard returns scores from an external tool to the gradebook?
LTI Advantage’s Assignment and Grade Services, used with an LTI 1.3 launch.
4. Your SEM is 1.1 points and the cut is 30 out of 40. A learner scores 29. What does that imply?
The learner is within one SEM of the cut, so the fail decision is uncertain. Policy might offer a re-sit or extra evidence; at minimum, report the share of learners near the cut.
5. An accommodation was approved but the learner sat the timed quiz without extra time. Which KPI moved, and what next?
Accommodation fulfilment fell. Treat it as an incident: offer a fresh attempt with the correct override, check why the override was missing, and generate overrides from the approvals list.
6. Why should an xAPI statement use an account identifier instead of an e-mail?
An LMS-specific account avoids exposing personal data to every statement consumer; cmi5 advises against sensitive PII in the actor.
Conclusion
Link to section “Conclusion”“EduOps” is a weak label for an important job. Learning operations decides whether a grade, a certificate or a completion record can be trusted, and that trust is built link by link: the right learner, an accessible experience, an assessment whose scores support the claim made for them, a grade that arrived, a credential that verifies, and a record that changes only under control. The standards are mature enough to connect the systems; the hard part is the judgement in the middle: what a pass should mean, when a statistic is a fault, and when surveillance costs more than it protects. Keep those decisions human, written down and reviewable.
Sources and further reading
Link to section “Sources and further reading”Sources were opened on 2026-10-23. Product, version and legal facts are time-sensitive; the evidence ledger records support strength and sources that could not be fetched.
Term status and naming
Interoperability standards
Platforms and tools
Assessment, design and analytics
Law, accessibility and policy (not legal advice)
Cases
Further reading
- Standards for Educational and Psychological Testing (2014), PDF, chapters 1 (validity), 3 (fairness), 4 (test design) and 6 (administration).
Changelog
- 2026-10-23: first draft by the managing author; labs executed.
- 2026-10-23: revision after review r1 (
reviews/eduops-r1-response.md): xAPI 2.0, runbook, decision tree, accessible learning, ADA threshold, Moodle defaults, RACI, diagrams, AI Act, hosted LMS, generative-AI integrity. - 2026-10-23: revision after the final QA score (
reviews/eduops-r2-response.md): runbook error handling, workflow query branch, decision framework (adoption tree, standards table), Canvas beta LTI note. - 2026-10-23, post-score polish: maturity levels aligned with the tree and accessibility law; dump step logged; UNESCO and Baker–Hawn re-checked.
EduOps: Applying DevOps To Bring the Academia and Industry Together — Avimanyu Bandyopadhyay, Linux Handbook, updated 2023-09-28. Checked 2026-10-23. ↩︎ ↩︎
EduOps: school management software for Indian schools — Witness Technologies OPC Pvt Ltd, undated. Checked 2026-10-23. ↩︎ ↩︎
EduOps — Your Organization, Systematized — EduOps, undated. Checked 2026-10-23. ↩︎ ↩︎
Statement from Roger Taylor, Chair, Ofqual — Ofqual, GOV.UK, 2020-08-17. Checked 2026-10-23. ↩︎ ↩︎
EdOps company profile — Built In, undated. Checked 2026-10-23. ↩︎
What is LearnOps? — Cognota, undated. Checked 2026-10-23. ↩︎
Your L&D Team Needs a Learning Operations Strategy: Here’s Why — Adam Weisblatt, Learning Guild, 2023-06-13. Checked 2026-10-23. ↩︎
ADDIE model — Wikipedia (secondary; primary 1975 reports could not be fetched). Checked 2026-10-23. ↩︎ ↩︎ ↩︎
SCORM Versions — Rustici Software, undated. Checked 2026-10-23. ↩︎ ↩︎
cmi5 Specification Profile for xAPI (Quartz, 1st Edition) — AICC and ADL, 2016-06-01. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Learning Tools Interoperability Core Specification 1.3 — 1EdTech, 2019-04-16. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
LTI Security Announcement and Deprecation Schedule — 1EdTech, updated June 2021. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
IEEE 9274.1.1-2023, JSON Data Model Format and RESTful Web Service for Learner Experience Data Tracking and Access — IEEE SA, published 2023-10-06 (xAPI 2.0). Checked 2026-10-23. ↩︎ ↩︎ ↩︎
adlnet/xAPI-Spec README: current version xAPI 2.0 — ADL, GitHub. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
What happened in 2023, and what’s next for eLearning standards — Tara Morey, Rustici Software, 2024-02-02. Checked 2026-10-23. ↩︎
Verifiable Credentials Data Model v2.0 — W3C Recommendation, 2025-05-15. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Open Badges Specification v3.0 — 1EdTech, document version 1.4.5, 2026-06-29. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Learning Tools Interoperability (LTI) — 1EdTech, undated. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
SCORM Explained — Rustici Software, 2026. Checked 2026-10-23. ↩︎ ↩︎
xAPI Specification 1.0.3 (Data and Communication parts) — ADL, GitHub, version 1.0.3 (superseded by xAPI 2.0). Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
Question & Test Interoperability (QTI) — 1EdTech, undated. Checked 2026-10-23. ↩︎ ↩︎
Quiz statistics calculations — Moodle Docs (developer, archived), last edited 2013-09-25. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Standards for Educational and Psychological Testing (2014), open-access edition — AERA, APA and NCME, 2014. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Art. 39 GDPR: Tasks of the data protection officer — Regulation (EU) 2016/679, text via gdpr-info.eu. Checked 2026-10-23. ↩︎
Art. 38 GDPR: Position of the data protection officer — Regulation (EU) 2016/679, text via gdpr-info.eu. Checked 2026-10-23. ↩︎
SAM: Successive Approximation Model — Allen Interactions, undated. Checked 2026-10-23. ↩︎ ↩︎
SCORM FAQ — Moodle Docs 4.5. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
1EdTech Security Framework 1.0, section 5.1.3 — 1EdTech. Checked 2026-10-23. ↩︎ ↩︎
Bonneville Joint School District 93: notice to the Idaho Attorney General on the PowerSchool cybersecurity incident — 2025-01-08. Checked 2026-10-23. ↩︎ ↩︎
What vendors can do to prepare for xAPI 2.0 — Brian Miller, Rustici Software (xapi.com), 2023-10-24. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Caliper Analytics — 1EdTech, undated. Checked 2026-10-23. ↩︎
Higher Ed Rubric, Seventh Edition — Quality Matters, undated. Checked 2026-10-23. ↩︎
UDL Guidelines 3.0 — CAST, 2024-07-30. Checked 2026-10-23. ↩︎ ↩︎
The Kirkpatrick Model — Kirkpatrick Partners, undated. Checked 2026-10-23. ↩︎
Moodle README (licence) — Moodle HQ, GitHub. Checked 2026-10-23. ↩︎
instructure/canvas-lms — Instructure, GitHub. Checked 2026-10-23. ↩︎
LearningLocker/learninglocker — Learning Locker, GitHub. Checked 2026-10-23. ↩︎
Releases — Moodle Developer Resources, updated 2026-10-04. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Security announcements — moodle.org, list as of 2026-10-23. Checked 2026-10-23. ↩︎ ↩︎
Differences between Production & Beta Environments — Danielle Lentz, Instructure Community (Canvas LMS Blog), 2023-08-18. Checked 2026-10-23. ↩︎
EU AI Act, Annex III: High-Risk AI Systems — Regulation (EU) 2024/1689, text via artificialintelligenceact.eu. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
EU AI Act, Article 5: Prohibited AI Practices — via artificialintelligenceact.eu. Checked 2026-10-23. ↩︎ ↩︎
EU AI Act, Article 113: Entry into Force and Application — via artificialintelligenceact.eu. Checked 2026-10-23. ↩︎
The AI Act implementation timeline: What changes under the AI Omnibus? — Future of Privacy Forum, 2026-07-28, updated 2026-08-05. Checked 2026-10-23. ↩︎ ↩︎
EU AI Act, Article 6: Classification Rules for High-Risk AI Systems — via artificialintelligenceact.eu. Checked 2026-10-23. ↩︎
Algorithmic Bias in Education (author preprint) — Ryan S. Baker and Aaron Hawn; published in the International Journal of Artificial Intelligence in Education, vol. 32, no. 4, pp. 1052–1092 (2022), doi:10.1007/s40593-021-00285-9. Checked 2026-10-23. ↩︎ ↩︎
Guidance for generative AI in education and research — UNESCO, 2023-09-07, updated 2026-01-16. Checked 2026-10-23. ↩︎
GPT detectors are biased against non-native English writers — Weixin Liang, Mert Yuksekgonul, Yining Mao, Eric Wu and James Zou, arXiv 2304.02819, v3 2023-07-10. Checked 2026-10-23. ↩︎
Administration via command line — Moodle Docs 4.5. Checked 2026-10-23. ↩︎
admin/cli/backup.php (MOODLE_405_STABLE) — Moodle source, GitHub. Checked 2026-10-23. ↩︎ ↩︎
admin/cli/checks.php (MOODLE_405_STABLE) — Moodle source, GitHub. Checked 2026-10-23. ↩︎ ↩︎
Question banks in upgraded sites — Moodle Docs 5.0. Checked 2026-10-23. ↩︎
Understanding Item Analyses — University of Washington, Office of Educational Assessment, undated. Checked 2026-10-23. ↩︎
mod/quiz/report/statistics/report.php (MOODLE_405_STABLE), line 81 — Moodle source, GitHub (
whichattemptsdefaults to the quiz’s grading method). Checked 2026-10-23. ↩︎LRS Conformance Test Suite — ADL, GitHub. Checked 2026-10-23. ↩︎
Quiz settings — Moodle Docs 4.5. Checked 2026-10-23. ↩︎ ↩︎
Quiz statistics report — Moodle Docs 4.5. Checked 2026-10-23. ↩︎
Quiz grades report — Moodle Docs 4.5. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
admin/cli/delete_course.php (MOODLE_405_STABLE) — Moodle source, GitHub (
--disablerecyclebin). Checked 2026-10-23. ↩︎Web Content Accessibility Guidelines (WCAG) 2.2 — W3C Recommendation, first published 2023-10-05; current edition 2024-12-12. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Fact Sheet: New Rule on the Accessibility of Web Content and Mobile Apps — US Department of Justice, 2024-04-08, updated for the 2026-04-20 interim final rule. Checked 2026-10-23. ↩︎
FERPA — US Department of Education, Student Privacy Policy Office. Checked 2026-10-23. ↩︎
Federal Court deems university’s use of room scans within the home unconstitutional — Lauren Merk, Future of Privacy Forum, 2022-10-28. Checked 2026-10-23. ↩︎ ↩︎
PDF9: Providing headings by marking content with heading tags in PDF documents — W3C WAI, WCAG 2.2 Techniques. Checked 2026-10-23. ↩︎
VPAT — Information Technology Industry Council (ITI), VPAT 2.5Rev (April 2025). Checked 2026-10-23. ↩︎
Selecting Web Accessibility Evaluation Tools — W3C WAI, updated 2024-05-13. Checked 2026-10-23. ↩︎
Accessibility toolkit — Moodle Docs 4.5. Checked 2026-10-23. ↩︎
What is Learning Analytics? — Society for Learning Analytics Research, 2026. Checked 2026-10-23. ↩︎