6. Exams and Proctoring

An exam in BodhiTree is a lab with exam mode turned on. It gains a fixed duration, a start window, IP restrictions, a live proctoring dashboard, and the ability for you to start and end it for everyone at once.

Who can use this: Course owner, INSTRUCTOR, and STA — these two roles have identical exam powers. JTAs cannot start, end, approve, or proctor an exam.


6.1 Creating an exam

  1. Go to Course Content → Labs and click to create a lab.

  2. Give it a title (required — “Lab title is required”).

  3. Turn on Is an Exam.

Turning on exam mode hides the date pickers and replaces them with:

Field

Default

Minimum

Meaning

Duration

30 min

30 min

How long each student gets

Buffer time

5 min

5 min

How late a student may start without being flagged

IP range

0.0.0.0-255.255.255.255

Which machines may sit the exam

Below the minimums you get “Exam duration must be at least 30 minutes” and “Buffer time must be at least 5 minutes”.

⚠️ The 30-minute and 5-minute minimums are enforced only in the browser form. They are not enforced by the server. Do not treat them as a safety net if you are scripting anything against the API.

If you leave the IP range blank it defaults to “everywhere” — every address from 0.0.0.0 to 255.255.255.255. That is not a restriction; set a real range if you intend to lock the exam to a lab room.

Create Lab modal with exam mode enabled

Other settings that matter

Setting

Default

Effect

Enforce IP address

On

IP checks are active

Enable live dashboard

Off

Turns on the real-time proctoring view

Additional time

0

Extra time granted to everyone

Visible for all

Off

⚠️ Bypasses every proctoring and IP check. See the warning below

⚠️ “Visible for all” disables proctoring entirely. With it on, no IP check or proctor log applies. It exists to release an exam’s content after the fact. Be aware that saving a lab edit can reset this flag — if an ended exam’s content suddenly disappears for students, this is the setting to check first.


6.2 Running the exam

Starting

Students cannot begin until you start the exam. Before you do, a student pressing Start just gets the toast “Exam is not started yet”.

Once you start it, each student presses Start, confirms, and their individual timer begins.

The start buffer

A student who starts within buffer time of the exam start is treated as normal. A student who starts after that is flagged LATE_START and lands in your approval queue — they see “Access not granted. Please contact your instructor.” until you act.

Ending

Ending the exam ends it for everyone immediately. Every connected student gets a live notification — “The instructor has ended the exam. No further submissions are allowed.” — with no page reload needed.

Once an exam is ended you cannot approve any more students. Approval returns an error. End the exam only when you are finished handling the approval queue.


6.3 The proctoring dashboard

The dashboard lists every student with their IP, approval state, start time, duration, and any flag.

Flag reasons

Flag

What happened

IP_COLLISION

This IP is already in use by another active student

IP_CHANGED

The student moved machines, but stayed inside the allowed range

IP_OUT_OF_RANGE

The student connected from outside your IP range

LATE_START

They started after the buffer expired

MANUAL_FLAG

You flagged them yourself

When more than one applies, the priority is IP_COLLISION → IP_OUT_OF_RANGE → LATE_START.

Each flag carries a detail line you can read directly, for example:

  • “IP 10.2.3.4 already in use by student@example.com

  • “Changed from 10.2.3.4 to 10.2.3.9”

  • “Accessed from 8.8.8.8 (OUTSIDE allowed range). Original IP: 10.2.3.4. Allowed range: 10.2.0.0-10.2.255.255”

  • “Started 7 minutes after buffer expired”

Live proctoring dashboard with flagged students


6.4 Approving a flagged student

Approving is the action that lets a flagged student into the exam. When the flag involves a changed IP, you must decide which machine is the real one:

Choice

Effect

Accept new IP (default)

The new machine becomes the student’s machine. The old machine’s session is killed.

Keep original IP

The original machine stays. The new machine’s session is killed.

In both cases the rejected machine is forcibly logged out — its login tokens are deleted and its browser is disconnected immediately. This is the correct response to a suspected impersonation: whichever machine you reject stops working at once.

Flags are kept after approval. Approving does not erase the record — the flag, timestamp, and detail text remain for your audit afterwards.

How much time do they get?

Option

Time granted

Full time

The full exam duration plus any additional time

Remaining time

Buffer + duration + additional time, minus the time already elapsed since the exam started

Use remaining time for a late arrival you do not wish to advantage; use full time when the delay was not their fault.


6.5 Mark as Left — freeing a machine

When a student finishes early and leaves, or abandons the exam, use Mark as Left.

This does three things:

  1. Frees their IP immediately so another student can use that machine without triggering an IP collision. You will see “Student x@y.com marked as left. Their IP is now free.”

  2. Blocks that student from re-entering. If they try, they get “You have been marked as left by the instructor.”

  3. Is fully reversible with Undo, which reports “Student x@y.com unmarked. Their IP is locked again.”

This is the tool for running an exam in shifts through a lab with fewer machines than students.

Manual flag lets you flag a student with your own free-text reason; it un-approves them and records “Manually flagged: {your reason}”.


6.6 Adjusting time mid-exam

You can add or subtract minutes:

  • For everyone — adjusts the shared additional time plus each student’s end time

  • For one student — same, for a single person

Negative results are clamped to zero. If you add time to an exam that has already expired, the new end time is calculated from now.

Students’ countdowns update live, with no reload required.

You cannot modify time after you have ended the exam — you get “Exam has already been ended by instructor.”


6.7 Exporting the proctor log

Download the proctor log as a CSV. The columns are exactly:

Student_email, Student_Name, Roll_No, Exam_name, ipaddress, newipadd,
is_approved, start_time, duration, given_duration, flag_reason,
flagged_at, flag_details

Both the original IP (ipaddress) and the changed IP (newipadd) are included, along with the granted duration, so this file is sufficient evidence for an academic integrity case.


6.8 What students experience

Summarised here because you will be asked; the full list is in Appendix A.

  • All block and end screens arrive live over a WebSocket — students do not need to refresh, and cannot avoid them by not refreshing.

  • Each block screen names its reason, so a student telling you “it says IP address conflict” is quoting the system accurately.

  • Their submission status is shown live as it is saved.


Known limitations

  • Duration and buffer minimums are browser-side only — not enforced by the server

  • Virtual (CLab) activities have no exam enforcement. The exam gate for virtual labs was designed but never built on the BodhiTree side. Do not rely on exam mode to restrict a virtual lab activity

  • “Visible for all” bypasses all proctoring, and can be reset by editing the lab

  • Ending the exam permanently closes the approval queue


Previous: 5. Labs and Activities · Next: 7. Grades and the Gradebook