5. Labs and Activities
Where: sidebar → Course Content → Labs
(/courseware/course/{courseId}/content/labs)
A lab is a container with a schedule. Inside it sit activities — the things students actually do:
Activity type |
What it is |
|---|---|
Programming Activity |
Write code, run against testcases, auto-graded |
Quiz Activity |
Questions, file uploads, subjective answers. Students see this as “lab quiz” |
Virtual Lab Activity |
A containerised lab environment, opened in the desktop app |
Turning on Is an Exam makes a lab an exam — see Chapter 6.
5.1 The labs list
Counters across the top (all / visible / hidden / exams) and matching tabs. The button row gives you New Lab, Proctor, Export, Import, Repository, Recycle Bin, and — with two or more labs — Reorder.
Selecting rows raises a bulk bar with Show and Hide.
Your search, sort, filter, and page-size choices are remembered per course.

5.2 Creating a lab
New Lab opens a dialog:
Title — required
Instructions — click to edit, rich text
Is an Exam toggle
For a normal lab you then set:
Field |
Notes |
|---|---|
Available From / Available Till |
From must be before Till |
Submission Grace Period |
Default |
Leave the grace period alone unless you have a reason. It exists so a student who hits submit on the deadline is not failed by network lag.
New labs are created hidden. Make the lab visible when you are ready for students to see it.
5.3 Programming activities
From a lab, Create Activity ▾ → Programming Activity.
Basic setup
Title (required) and Description
Files to Submit — space-separated file names, or
anyfor no restrictionInstructor Solution and Documents file uploads
Languages — C, C++, Python3, Simplecpp, Java
Advanced configuration
Linker Flags, Header Files, and per-language Additional Files for C, C++ and Simplecpp. Additional files are bundled automatically and appear in the student’s editor read-only.
Instructor-provided files are capped at 20 KB each, as are student submissions.
Testcases
The testcase table is edited inline — click to edit a row, or add a row directly. Each testcase has a Name, Input, Expected Output, Visibility, and Marks.
Visibility is the key decision:
Visible testcases appear to students as Practice Testcases, and they can download them
Hidden testcases appear as Evaluation Testcases
Actions ▾ offers Delete Selected, Bulk Upload Test Case, Configure Resource Limit, Expose Hidden Testcases / Hide Exposed Testcases, and Download All.
Bulk Upload takes a .zip package, with Visible to students and Marks per
case applied to the whole batch. You must save the activity first — “Please save the
activity first before importing testcases”.
⚠️ Testcase reordering is not implemented. The button exists; its tooltip reads “Re-order: not implemented”.
Resource limits
Configure Resource Limit sets execution limits per language group:
Setting |
Range |
|---|---|
Wall clock / CPU time |
1–240 seconds |
Virtual memory |
15 MB – 256 MB |
Stack size |
8 MB – 64 MB |
CPU time must be ≤ wall clock time, and stack ≤ memory. Defaults are in §10.2.
Child processes are limited to zero. Code that forks or spawns threads will fail whatever time limit you set.
Autograding
Option |
Effect |
|---|---|
Indentation percentage |
Weight given to indentation |
Ignore extra white spaces |
Whitespace-insensitive comparison |
Compare only numbers |
Extract and compare numbers only — adds an error bound and Order is not important |
Case sensitive |
Case-sensitive comparison |
⚠️ “Allow varied delimiters” and the Tab delimiter are permanently on. Both checkboxes render ticked and disabled — you cannot turn them off, despite appearing to be choices.
Submission limits
Max Submissions (default 100), Max Run Without Submit (default 100), and a toggle for the Run without submit button.
Students see their remaining attempts, and the banner turns red at 3 or fewer.
Rubrics for subjective grading
The Subjective Grading Configuration table holds Criteria, each with Ratings carrying names, descriptions, and marks. Save the activity before configuring rubrics.
Clicking + Rubric for the first time requests AI-suggested rubrics based on the activity; you can accept, edit, or replace them. You can also import rubrics from a CSV.
5.4 Quiz activities (lab quizzes)
Create Activity ▾ → Quiz Activity.
Questions
Upload a .odt question file — the format is documented in
§10.5, and a Sample
Question File is downloadable from the dialog.
⚠️ Replacing a question file destroys student work. Uploading a new file over existing questions warns:
“Uploading a new question file will permanently delete all existing questions in this quiz activity. This will also delete all student responses and submissions for this activity.”
This is the most destructive action in the authoring interface. If a quiz is live, edit questions individually instead.
You can also build a quiz without any file and add questions by hand through Edit Questions, which supports Single Correct, Multiple Correct, Numerical, Fill Blanks, Descriptive/Paper, Text, and File Upload questions, plus Modules that group questions together.
Questions inside a module can only be edited from the Module Editor, not from the flat list.
Settings
Setting |
Effect on students |
|---|---|
Allow students to see their marks on quiz submission |
Marks visible, or replaced with |
Reveal correct answers to students |
Answers shown after submission |
Allow students to resubmit until deadline |
Turns a one-shot submission into an editable one |
The resubmission setting changes the submit dialog fundamentally. Off, students
must type the word SUBMIT to confirm a final submission. On, they get a soft confirm
and can keep editing.
The marks/resubmit combination is subtle. With resubmission on and marks on, marks stay hidden until the deadline passes, then appear. This is deliberate — it stops students from using marks as an answer oracle while resubmitting.
Required files
Set No. of Files and their names. Use any for no restriction. The count must
match the names you list, and every name needs an extension — otherwise
“‘helper’ is missing a file extension (e.g., helper.py)”.
Students cannot submit until they have attached the required number of files.
5.5 Virtual lab activities
Container-based labs with Docker images, evaluation scripts, and up to four containers with custom networking. There is an option to monitor the activity, collecting file history, UI interactions, and terminal commands — intended for exams.
Virtual labs open in the desktop application, not the browser. Students click through to a
clab://link.⚠️ Exam enforcement does not apply to virtual activities. The exam gate for virtual labs was designed but never implemented. Do not rely on exam mode to restrict one.
Virtual labs are not part of every BodhiTree deployment. If you do not see these options, your installation does not include them.
5.6 Managing activities
Inside a lab, the Activities card lists everything with per-row View Submissions, Edit, Delete, and a ⋮ menu offering Clone Activity, Push to Repository, and Export Activity.
Actions ▾ gives Recycle Bin, Submissions, Leaderboard, and Repository. Reorder works as elsewhere — drag, then Save Order.
The Repository
Push to Repository saves an activity for reuse across labs and courses. The Repository has tabs for programming and virtual activities, and you import from it when creating new activities.
The Recycle Bin
Deleted activities go to the Recycle Bin, from which you can Restore or Delete Permanently, individually or in bulk.
⚠️ The Recycle Bin only protects Programming activities. Quiz and Virtual activities are deleted permanently and immediately with no recovery. Check what you are deleting.
If a restore fails because the parent lab is itself in the bin, restore the lab first.
5.7 Import and export
Exporting
Export on the labs list lets you tick individual labs, with an option to include submissions. Single-activity export is on the activity’s ⋮ menu.
⚠️ Export covers Programming activities only. Quiz and Virtual activities are not included in a lab export. Do not assume an exported lab is complete.
Importing
Import accepts a .zip, either a single lab or several. A sample archive
structure is downloadable from the dialog.
What you must fix after importing:
Imported as |
You should |
|---|---|
Every activity unpublished |
Review and publish |
Every lab hidden |
Make visible when ready |
Available from = now |
Set your real start date |
Available till = now + 365 days |
Set your real deadline |
Timing is never exported, by design. Always re-set dates after an import.
Duplicate titles get (1), (2) suffixes rather than overwriting. Each lab imports in
its own transaction, so one bad lab does not abort the rest.
5.8 Viewing submissions
Lab-level submissions show one column per activity, with bulk download and CSV export.
Activity submissions add:
Run ▾ and Force Run ▾ — against Visible, Hidden, or All testcases
Filters ▾ — submission status, evaluation status, rubric status, validity
View ▾ — toggle columns, including one per testcase
More ▾ — download as ZIP or CSV, Bulk Submission, plagiarism checks, and grading requests
Submission statuses are Submitted, Compilation Error, Runtime Error, Time Limit Exceeded, and Not Uploaded.
Grading with rubrics
Open a student’s submission to get a split view: their code read-only on the left, your rubric on the right. Apply ratings and comments per criterion.
JTAs can grade here but cannot change the activity or its testcases.
Submitting on a student’s behalf
Submit As lets you upload for a student who could not. JTAs cannot do this — the action is blocked for them.
Known limitations
Recycle Bin covers Programming activities only — Quiz and Virtual are deleted permanently
Export covers Programming activities only
Testcase reordering is not implemented
“Allow varied delimiters” and Tab cannot be switched off
Bulk Upload Testcases, Import Testcases, and Configure Resource Limit dialogs are partially built — if one does not open, that is why
Import Lab covers programming activities only — quiz and virtual activities are not imported
Labs Performance in the sidebar shows “Lab Performance coming soon”
Labs are unusable for students on screens under 768px
Previous: 4. Course Content · Next: 6. Exams and Proctoring