Showing learners a criteria breakdown
Evaluation is off by default. With evaluation on and "Show feedback in chat" turned on, learners see their overall result after the simulation ends: the written feedback, and in voice simulations a Passed or Not Passed badge with the score. Turning on "Show learners how they did on each criterion" (the Evaluation tab in the simulation editor, with a learner preview of the layout) adds a per-criterion view: each criterion's description, its rating label, the points earned, a one-line reason from the evaluation, and any deductions on a "Points lost for:" line. The breakdown is its own setting, so it also appears when "Show feedback in chat" is off.
Two things stay hidden no matter what:
- Feedback-only mode. The criteria breakdown isn't available in feedback-only mode, because feedback-only evaluations don't keep per-criterion ratings. Learners see the overall written feedback only. This applies whenever a simulation runs in feedback-only mode, including when the whole workspace is forced into it because workspace settings disallow scored evaluations. The editor dims the breakdown setting and shows a note explaining this for a feedback-only simulation.
- Judge-only guidance. Designers can attach guidance text to a criterion that only the AI judge sees, to steer how it grades. That text is never shown to a learner, in the breakdown or anywhere else.
In other languages. When a learner does the simulation in a language you added (Additional languages, ?lang= on the link), the breakdown is in that language: the AI judge is instructed to write its reasons in it, and the criterion descriptions, rating labels, and "Points lost for:" items are machine-translated when you add or retranslate the language. They are translated automatically; there is no separate editor for the translated criteria. After you change the criteria (or turn the breakdown on for a simulation that already has languages), the language shows "Criteria not translated" in the editor with a Translate criteria button, which translates only the criteria and uses credits. Until then, any criterion that isn't translated yet shows in the simulation's primary language, never blank.
The breakdown setting is editable in the app and over MCP (feedback_settings.show_criteria_results). Updates merge into the existing settings rather than replacing them.
Showing learners what they'll be scored on
Two settings in the Evaluation tab, both off by default. They need evaluation turned on:
- Show learners what they'll be scored on before they start: learners see the criteria on your start screen. If the simulation has no start screen, they see a short criteria screen with a Begin button.
- Show learners what they'll be scored on during the simulation: a small Criteria link at the top of the chat (and in the voice widget) opens the same list.
The list shows each criterion's description and points, anything learners can lose points for, and the pass threshold. Rating levels and your judge-only guidance are never shown. In feedback-only mode learners see the criteria without points, deductions, or a pass threshold.
In a language added under Additional languages, the criteria are machine-translated. After you edit a criterion, use Translate criteria so learners in that language see the new wording; until then they see it in the primary language.
Over MCP, the settings are feedback_settings.show_criteria_before_start and feedback_settings.show_criteria_during_sim.
Attempt limits
"Limit attempts per learner" in the Evaluation tab (feedback_settings.max_attempts over MCP) caps how many attempts a learner gets on a simulation, from 1 to 20, or left unlimited (the default). An attempt is counted once the learner sends at least one message, or once a voice session actually connects. Just opening the simulation doesn't count. Resuming a dropped voice session continues the same attempt. Designer test runs inside the editor never count toward the limit and are never blocked by it.
The scope (feedback_settings.attempt_limit_scope) decides whose identity the count is tied to:
- Per browser (default). The count resets if the learner clears browser data or switches device or browser.
- Per learner (uses the learner identifier). Only applies when the simulation collects learner identity and the learner supplied an identifier; otherwise it falls back to per browser automatically. Identifiers match ignoring case and surrounding spaces, so "Jane Doe" and "jane doe " count as the same learner.
While a limit is set, learners see their progress ("Attempt 2 of 3") during and after each attempt, and the Try Again button does not appear on the last attempt. A learner who is out of attempts and tries to start another sees "You've used all N attempts for this simulation." and "If you need another attempt, contact your course administrator.", instead of a way to restart.
Attempt limits are a practice and credit guardrail, not an exam lock: a per-browser count resets in a new browser, and a per-learner count trusts whatever identifier the learner enters. If the learner cannot be identified at all, or the count cannot be read, the simulation lets the attempt through instead of blocking. The bridge writes the number of attempts left to the Sim_AttemptsRemaining variable when an attempt starts (and 0 when a start is blocked), so a course can branch on how many attempts a learner has left. The variable name is fixed.
Attempt limits are a devlin.ai feature and are independent of the host course. If a simulation is wrapped for SCORM or placed in another LMS, any attempt rules the LMS has apply separately; the two systems don't share attempt counts, so set both if the course needs a combined limit.