One Time Setup#
To set up lucy you should follow the installation instructions
Once you have cloned and set up your python environment, you will need to add the gitlab marker user token to the secrets file.
You can do this by copying the data/templates/secrets.yml file to data/secrets.yml. Then fill out the copied file, for gitlab you will need to paste the token that has been given to you in the token: key (make sure you put a space after the :). Save the file and you’re good to go.
Standard Marking Process#
Open a CLI and navigate to the lucy folder.
Cloning#
To clone the assignments for marking, find the name of the lab group you want to
clone (e.g. wed3pm) and clone all repos from that group. As an example, here’s
the invocation to clone all the assignment 1 submission repos for the wed3pm
lab group:
poetry run ./lucy.py clone ass1 --group wed3pm
note: all assignments have short names, e.g. ass1, ass2, ass3
Alternatively, if there is an allocation file in data/assignments/assX-allocations.yml, then you can clone using your name to clone all students assigned to you and nothing extra.
eg. If I see this line in the allocations file
# Brent has 23 students to mark
Then I can run the clone command with the --tutor or -T flag to clone all 23 repos
poetry run ./lucy.py clone ass1 --tutor Brent
If you follow this method and have only the repos you will be changing, then you can use the labname all for the following commands to refer to all of your repos.
If you want to clone a single assignment, you can use the clone command with the --uid or -U flag.
poetry run ./lucy.py clone ass1 --uid u1234567
This flag use to distinguish between groups, tutor allocations and individual uids applies to most commands.
Filling out the marking.md (or other) file#
After cloning you will need to actually mark the assignments. To do this you will need to fill out the marking file(s). Here is a template below
Note:
- you may already have some deductions present if auto deductions have been run
- this is just an example, the marking files provided for you may differ
---
# The given mark should not include the standard deductions
mark:
# If there are standard deductions, include them here, they will be validated
# against lucy/data/assignments/___-guide.md and then **subtracted** from mark to give
# the final score
# deductions:
# - name:
# weight:
marker_comment: |-
multi-line comment which **does not** go to student
in general there's no real need put stuff in this field, but it's here if
you need it
# Does the submission contain Possible Academic Misconduct?
# If true, please also fill out the associated pam.md file
PAM: false
# Feedback: Everything below the --- goes to the student
---
Feedback here!
There isn’t too much tricks here, the main things you need to know are this:
- The mark is the RAW mark, that means that whatever you write there should not include any deductions that will be listed in deductions
- The deductions section needs to match the listed deductions in the corresponding assignment guide, located at
data/assignments/assX-guide.md, this means that the weight needs to equal or lie within the range specified. The name also needs to match the name in the guide exactly.
As an example, If the assignment guide lists this:
standard_deductions:
- name: poor code quality
min: 1
max: 5
- name: ddoc format
weight: 5
then a valid marking.md deduction section would look like this:
deductions:
- name: poor code quality
weight: 3
- name: ddoc format
weight: 5
- The deductions will be subtracted from the raw mark at the end, this also means that the deductions need to be positive values. To get the final mark for the student the formula would look like so:
Final Mark = Raw Mark - SUM(deductions) - If the student has engaged in Potential Academic Misconduct (note the word potential, the final call is up to the lecturer), then the
PAMkey should be set totrueand thepam.mdfile will need to be filled out.
Once you have finished filling out your file make sure to save it!
Check the bottom of the page for some examples
Adding and Committing#
Next you need to add and commit the files
If you are doing it individually for each repo (with the CLI pointing at
the individual folder), then it is the same as the normal git command
Note: marking.md is just an example, your marking files may have a different name
git add marking.md
git commit -m "Some message"
If you are wanting to commit the files for multiple repos at once, then you can use the lucy commit command which will add and commit the marking.md and pam.md files
poetry run ./lucy.py commit assX (--group labname | --tutor Brent | --uid u1234567)
Or if you want a message
poetry run ./lucy.py commit assX --group labname -m "Some message"
Checking out branches#
WARNING: Make sure you have committed all changes before checking out to another branch.
This can be done individually for a given submission repo:
git checkout branch-name
or as a batch command
poetry run ./lucy.py git-batch assX (--group labname | --tutor Brent | --uid u1234567) -- checkout branch-name
Pushing#
If you want to push your current marking (what has been commited), then you simply run:
poetry run ./lucy.py push assX (--group labname | --tutor Brent | --uid u1234567)
There’s no harm to doing this—you can make (and push!) as many “marking” commits as you like. So do this regularly; don’t wait till the end, or you may risk losing your marking if something bad happens.
Checking#
If you want to make sure you’ve done things correctly (lmao if you haven’t), then you can check the status with the check command, this will tell you what repo is broke and what is wrong with it, this is done (after pushing ALL changes) with
poetry run ./lucy.py check assX (--group labname | --tutor Brent | --uid u1234567)
Happy marking! 😊
Checking repo status#
To see the git status of all repos at once without running check:
poetry run ./lucy.py status assX (--group labname | --tutor Brent | --uid u1234567)
Updating your GitLab token#
If your GitLab token expires mid-marking, update data/secrets.yml with the new token.
That’s all: lucy reads the token from there every time, and doesn’t store it in your
cloned repos.
Repos cloned with an older version of lucy have the old token written into their remote URLs. To scrub it out (no re-clone needed):
poetry run ./lucy.py update-token assX (--group labname | --tutor Brent | --uid u1234567)
Filling out PAM#
The PAM section is a structured way to record information about potential academic integrity cases.
To fill out the PAM section you need to first make sure that you have set the PAM key in the marking.md file to true.
Once you have done that, you can start filling in the pam.md file.
---
instances:
- # This is a yaml list, to add a second instance, copy this section again (starting from the -)
source: # either "student", "web" or "other"
url: # is there a _specific_ URL where the code has come from? (can be moss link)
associated_uids:
- # only for "copied from another student" plagiarism (remove otherwise)
confidence: # how confident [0-100] are you that this is academic misconduct?
# Please list all evidence below (code segments etc.) and include references to files etc. where possible
---
Evidence here!
If there is more than one instance then you can add another item. The following is an example:
---
instances:
- # Item 1
source: student
url: https://moss.com/example-url
associated_uids:
- u1234567
confidence: 80
- # Item 2
source: web
url: http://epic-assembly.com/sin-wave.S
confidence: 100
---
The student appears to have copied a large amount of code from the epic assembly website, specifically lines 102 -> 160
Here is the code from the site-
`Some Code`
and here is the code from their submission-
`Some Similar Code`
They have also appeared to collaborate with u1234567 ... blah blah
Example marking file:#
---
mark: 65
deductions:
- name: statement of originality
weight: 5
marker_comment: |-
High use of images instead of p5 functions, seems uncomfortable using them to draw
PAM: false
---
The work does a good job of ...
I like how you did ...
Some areas of improvement are ...
Something I'd like to see is ...
The Student will then receive the following feedback.md file:
---
mark: 60
---
The work does a good job of ...
I like how you did ...
Some areas of improvement are ...
Something I'd like to see is ...