← Knowledge Verification Gating
Feature Proposal

Knowledge Verification Gating

Prevent quiz failure from being treated as course completion — for compliance, badge integrity, and learner clarity.

Client: Teleflex Origin: Migration from ACTO Updated: August 2026 Scope: Quiz · Course · Badge · SCORM Decision: Teleflex has selected Capability 1

The Challenge

When a learner exhausts all quiz attempts and fails, Allego currently marks the content item as "completed". This triggers a cascade:

Quiz fails → Item completes → Course completes → Badge issued

For regulated industries like life sciences, "completed" must mean "demonstrated competence." A badge or certificate issued to someone who failed the knowledge check is a compliance risk under FDA 21 CFR Part 11 and GxP training requirements.

Three interconnected problems

How Other Platforms Handle This

ACTO Teleflex's prior LMS

  • Completion and certification are separate systems
  • Content (ActionPacks) always completes — no blocked state
  • Pass/fail gating happens through a separate Certifications layer with its own states: Pending, In Progress, Certified, Unsuccessful
  • Journeys use quiz score conditions to branch learners to remediation content — failure is a routing event, not a dead end
  • Admins see failure indirectly via journey progress reports, not an explicit "failed" status on courses

Absorb LMS

  • "Until Passed" mode: quiz stays open with unlimited retries until the learner passes
  • "Allow Failure" mode: finite attempts, course status changes to Failed (not "In Progress")
  • Admin can enable "Allow Consecutive Enrollments" for re-enrollment after failure
  • Absorb's own docs warn that finite retries without Allow Failure leads to "suspended course access" and "inconsistent completion states"

Moodle

  • "Require passing grade" option on quiz activities
  • Failed quiz marks activity as "Completed (did not achieve pass grade)"
  • A distinct completed-but-failed state visible to both learner and instructor

Industry pattern

  • "Require pass for completion" is a standard, expected feature across LMS platforms
  • Every platform provides an explicit escape hatch — unlimited retries, a visible Failed state, or re-enrollment
  • No platform leaves learners in ambiguous "In Progress" limbo

Escape Hatch: Grant Additional Attempt

Allego already has a "Grant Additional Attempt" mechanism that works for both standalone and in-course quizzes, from the My Team's Tasks and Manage Tasks tabs. This is the recovery path when completion is blocked.

Admin grants attempt → Quiz → Redo Required → Learner retakes → Pass → Course completes cleanly

Gated on advancedQuizQptionsEnabled role. Available to managers and admins. No equivalent currently exists for SCORM or Allego Lessons — see Capability 4.


Four Capabilities

This feature is composed of four independent capabilities. Clients can adopt any combination. Teleflex is implementing Capabilities 1, 2, and 3.

1 Quiz Completion Block

Per-quiz option that prevents a failed, attempts-exhausted quiz from marking the content item complete. Course stays open. Badge naturally blocked.

2 Composite Course Status

A composite label on the course task communicates the failed quiz to learners, managers, and admins — regardless of whether Capability 1 is in use.

3 Badge Issuance Protection

Default behavior change: badge issuance is deferred if any required quiz component in the awarding course is in a failed state. No client toggle required.

4 SCORM Completion Block

Per-SCORM option equivalent to Capability 1, using the content item's successStatus field. Separate story; team to size and schedule.


Capability 1: Quiz Completion Block Teleflex

How it works

A new per-quiz toggle (requirePassForComplete) prevents timeCourseComplete from being set when the learner exhausts attempts with a failing score. The content item genuinely does not complete, so the course stays incomplete and badge issuance is naturally prevented.

When the toggle is shown

Only in the quiz properties dialog when max attempts is set to a finite value. Unlimited-attempt quizzes already never mark complete on fail — the toggle is not relevant for them.

Quiz item

timeCourseComplete is NOT set. State shows as Failed (9).

Course

Stays incomplete. Composite label displayed: "In Progress - Quiz Not Passed" (see Capability 2).

Badge

Naturally blocked — course never reaches state 6. No badge logic changes required for this option.

LP

Naturally blocked — course is incomplete.

Tradeoff: The course task stays in the learner's Open/Active list — a "zombie task" that cannot be completed without admin intervention (Grant Additional Attempt). The composite label mitigates confusion but does not eliminate the friction of an open task with no self-serve resolution path.

Capability 2: Composite Course Status

A composite label on the course task surfaces the failed quiz outcome to all audiences — the learner, manager, and admin — using the established "Cancelled - Exempt" pattern for rendering composite status modifiers.

The label applies only to required course components. A failed optional quiz does not affect the course-level composite label.

"In Progress - Quiz Not Passed" With Capability 1

Shown when Capability 1 is active and the learner has exhausted attempts on a required quiz. The course remains in an Open/Active state. Tooltip on the label: "Contact your manager for next steps."

"Finished - Quiz Not Passed" Without Capability 1

Shown when a course reaches the Finished state but contains a required quiz that was not passed. Provides visibility for admins and managers without blocking the task. Applies to all clients — even those not using Capability 1.

Design note: "Quiz Not Passed" is intentionally neutral — it communicates the factual outcome without implying that action must be taken, which is appropriate since some clients want visibility only while others will take action (grant attempt). It is shown to learners, managers, and admins alike.

Capability 3: Badge Issuance Protection

A default behavior change to badge issuance logic: when evaluating whether to award a badge, the system checks whether any required quiz component in the awarding course is in a Failed state. If so, badge issuance is deferred until the state resolves.

How it works

The sp_assignBadgesToUserV2 stored procedure is updated to check the failed-quiz condition before issuing a badge. This is a system-level default — no client-facing toggle or badge template setting is added.

Scope

  • Required quiz components only — failed optional quizzes do not block badge issuance
  • Prospective only — badges already issued are not revoked
  • When an admin grants an additional attempt and the learner passes, the badge evaluation is triggered again and the badge is issued at that point

Why a default, not a toggle

Issuing a badge to a learner who failed a required knowledge check is an integrity problem regardless of whether a client has explicitly opted in. Making this a default closes a gap that most clients are unaware exists. The behavior is consistent with the intent of badge issuance — recognizing demonstrated competence.

Open item: Many clients may be unaware that failing a required quiz currently does not block badge issuance. A default behavior change will affect them. Whether and how to communicate this change to existing clients — particularly compliance-sensitive verticals — is a CS strategy decision. See Open Items.

Capability 4: SCORM Completion Block Future story

Allego Lesson SCORMs report two values to Allego's content item layer: completionStatus (completed / incomplete) and successStatus (passed / failed / unknown). Currently, Allego marks the content item complete based on completionStatus alone — so a learner who exhausts attempts with a failing score gets the content item marked complete.

How it works

A new "Require passing to complete" option on the SCORM content item properties page (alongside passing threshold and attempts) instructs Allego to additionally require successStatus = passed before marking the item complete. If successStatus = failed and no attempts remain, the item stays incomplete — mirroring Capability 1 for quizzes.

Option location

SCORM content item properties page — same location as passing threshold and max attempts. Only shown when max attempts is set to a finite value.

Open questions before scoping:
  • No grant-attempt equivalent: Unlike quizzes, there is no "Grant Additional Attempt" mechanism for SCORMs. A learner blocked by this option has no self-serve or manager-driven path to unblock without admin intervention beyond standard reassignment. This gap must be resolved — either by scoping a grant-attempt mechanism for SCORMs alongside this story, or by explicitly accepting the constraint in V1.
  • successStatus = unknown: Some SCORM packages do not reliably set successStatus. When the option is enabled and successStatus is unknown but completionStatus is completed, the recommended default is to allow completion (do not block on ambiguous data) — but this needs team confirmation.

Outcome by Client Configuration

Concern With Capability 1 Block Without Capability 1
Quiz itemDoes not completeCompletes (as today)
Course status label"In Progress - Quiz Not Passed""Finished - Quiz Not Passed"
Learner task listStays in Open/ActiveMoves to Completed
LP completionBlockedCounts as complete
Badge (Capability 3)Naturally blockedDeferred by default
Compliance strengthStrongestModerate
Zombie task riskYes — mitigated by label + tooltipNone
Admin action to recoverRequired (grant attempt)Optional, judgment-based
Closest to ACTONo — ACTO always completesCloser — separate competency gate

Implementation Summary

Capability 1 — Quiz Completion Block

LayerChangeRisk
DB schemaNew column Content.requirePassForComplete (BIT, default 0)Low
JavaContentMetaData + content create/update APIs — wire new fieldLow
Quiz properties UINew toggle in quiz properties dialog — shown only when max attempts is finiteLow
SPsp_updateUserContentCourseCompleteV8 — do not set isComplete when failed + flag setMed
SPsp_calcScorableContentState_Quizzes — output Failed state without timeCourseCompleteMed

Capability 2 — Composite Course Status

LayerChangeRisk
JSP / Java / JSThree rendering paths for the composite label — follows Cancelled-Exempt pattern; only surfaces for required course componentsLow
i18nNew locale keys: "In Progress - Quiz Not Passed" and "Finished - Quiz Not Passed"Low
TooltipInfo icon on the composite label: "Contact your manager for next steps." (generic; not client-customizable in V1)Low

Capability 3 — Badge Issuance Protection

LayerChangeRisk
SPsp_assignBadgesToUserV2 — defer issuance if any required quiz component in the awarding course is in Failed stateMed
Re-evaluation triggerConfirm badge re-evaluation fires after grant attempt + pass (no new mechanism needed if existing trigger covers this)Low

Capability 4 — SCORM Completion Block

LayerChangeRisk
DB schemaNew column on SCORM content item for requirePassForComplete flagLow
SCORM properties UINew toggle on content item properties page — shown only when max attempts is finiteLow
SP / SCORM handoffWhen flag set: require successStatus = passed before marking content item complete. Handle successStatus = unknown gracefully (TBD — see Open Items).Med
Composite labelExtend Capability 2 label logic to cover SCORM items (label wording TBD — may differ from quiz variant)Low

No changes needed (all capabilities)

Grant Additional Attempt flow · LRS tracking · Existing learners in Failed state · Already-issued badges

Scope Boundaries

Additional Surfaces to Decide

These areas are affected by the feature but need further investigation before scoping. Listed here so they are not overlooked.

SurfaceIssueApplies to
Congratulations screen After course completion, a congratulations screen is shown (web, iOS, Android — possibly separate implementations). Under Capability 1 the trigger may not fire (verify: is it state-6-driven or client-side on quiz submit?). For courses that do complete, the message should acknowledge the failed quiz rather than congratulating unconditionally. 1 2
Certificate screen When a course is tagged with a Badge tag, the completion screen shows the certificate. With Capability 3, the badge is withheld but the screen may render optimistically before the server confirms issuance. Needs to handle the deferred-badge case gracefully. 3
Completion notifications Course completion emails and push notifications. Under Capability 1 no email fires (naturally suppressed). For completing courses, emails may say "You've completed [Course]" without caveats. Badge-earned notifications may fire before badge deferral logic runs. 1 3
Reporting & transcripts Admin completion exports and learner transcripts need to surface the failed-quiz flag. Compliance customers like Teleflex will pull these for audits — the composite label only helps real-time task views. 1 2
CRM / Salesforce sync Allego's CRM integration syncs completion status. A "Completed" sync record for a course with a failed required quiz would propagate the same compliance gap into Salesforce. 2
xAPI / LRS If Allego reports completion to an external Learning Record Store, the xAPI statement would say completed: true for a course that has a failed required quiz but no Capability 1 block. 2
Grant Attempt after completion For courses that complete (no Capability 1), does the "Grant Additional Attempt" entry point remain accessible in the course component view? Managers should be able to grant an attempt even after course completion, so the learner can retake and eventually receive the badge. 2 3

Open Items

Feature Name

Knowledge Verification Gating — communicates the core concept (verified competence is required to pass through the gate) without being tied to a specific content type. Works across all four capabilities and leaves room to extend to other assessment types in the future.