GitHub assignment submission and public feedback
This page describes the earlier fourteen-week layout and is being rewritten; where it differs, the syllabus applies.
Use this guide to submit an assignment at a fixed commit, locate feedback and retry,
practicing LO2, LO5 and LO9. Feedback is labeled public_only: it checks that the
submission can be located and required files are present. It does not assess program
correctness and is not a formal grade. The teaching team provides a GitHub submission
repository containing only public student material and a reviewed checker. Do not
request access to the instructor source repository. Use least privilege: the assignment
repository should expose only the files and actions needed for your submission.
Create the submission, then verify it
- Fork the submission repository using the access route provided by the teaching team,
then create
submit/p1in your own fork. Students have no write permission for the course submission repository; do not create branches there directly. For other assignments, use the announcedsubmit/<assignment_id>. Submit one assignment per PR. - Complete the code, verification evidence and independent reflection required by the lab. Follow Week 0 setup and your lab's launcher commands when executing agent-generated code, commands or dependency scripts. This public entry point reads data only and provides no alternative route for executing code.
- Maintain one artifact note in the repository-root
README.md: locate the current assignment's artifact, verification results and short explanation, and assign the record an evidence ID. Add AI use once in that same record: either no AI use, or the tool/model and its purpose. You may reference an existing artifact note or compatible disclosure file by path and the same evidence ID, without copying its contents or submitting another disclosure file.README.mdmust be a nonempty regular file of at most 64 KiB, never a symbolic link. Redact attachments first. Do not include raw interviews, real names, credentials, instructor answers or hidden tests in the PR. - Commit the verified submission files to the branch. Record the full 40-character
commit SHA with
git rev-parse HEAD, push to your own fork, and open a PR targeting the instructor-designated protected default branch of the submission repository. State the assignment ID, SHA and artifact-note evidence ID in the PR, without repeating the AI-use note. PR titles and bodies are for readers; the machine locates the submission using the GitHub event's head SHA. - Open the PR's
Course public feedbackActions run. First check thatsubmission.commit_shamatches your submitted SHA. Then read the summary or downloadfeedback.jsonfrom thepublic-feedback-*artifact. This template retains feedback for 7 days. For longer-term evidence, save a redacted file and reference it by ID.
For example, the artifact note can be these few lines. This is a course-created example; replace paths, commands and results with your actual records:
Evidence ID: p1-e1
Artifact: src/agent.py; this change stops the loop after a tool failure.
Verification: run P1's specified checks in the course launcher; record the command, expected and actual output, and reference the saved results.
Short explanation: the stop condition prevents repeated calls; the timeout boundary still needs testing.
AI-use note: no AI used.
If you used AI, replace the final line with the actual tool/model and purpose; follow
the lab's red/yellow/green rules. Reflection written without AI may be included in the
same note. Submit trajectories only when the lab explicitly specifies the learning
objective, required excerpts and verification method. Generic conversation exports,
commit trailers and additional reflection files are not required. When logs are not
required, their absence does not trigger a request for more evidence or pending_human.
The public entry point checks only the existence, type and size of README.md; the
relevant lab's verification and human review check the artifact, evidence and note contents.
Later changes require a new commit and updates to the changed purposes and evidence in the same record. Feedback for a historical SHA describes only that submission; moving the branch does not replace the record. The formal submission is the full SHA collected by the instructor. Assignment rules determine deadlines and late submissions; the public entry point does not decide late penalties.
Reproduce the same check locally
Use the trusted public_check.py supplied by the teaching team, with Python 3.12.13 and
Git, and keep it outside the student submission directory. github-event.json is a
redacted copy of the same PR event, supplied through the teaching team's trusted entry
point. Do not use a self-edited event as formal identity evidence. Your local Git clone
must already contain the commit. This command reads Git objects only; it does not
execute submission files:
python3 -I /path/to/course-tools/public_check.py \
--event /path/to/github-event.json --repository course-org/submissions \
--assignment p1 --expected-sha FULL_40_CHARACTER_COMMIT_SHA \
--snapshot /path/to/student-clone --ledger /path/to/local-feedback.sqlite
Replace the paths, repository and SHA with actual values. Actions invokes the same
script with the same options. The instructor template pins the checker's SHA-256;
versions must match. The local and Actions feedback objects should be identical.
delivery describes the first receipt (recorded) or a repeat (duplicate) in this
ledger and is not part of the feedback contents or any grade. You retain the local
ledger for debugging only; it cannot be submitted as the instructor's ledger or
authoritative grading evidence.
Understand failures and retries
| Exit code / state | Meaning and next step |
|---|---|
0 / accepted |
Commit located; the artifact-note entry README.md passes existence, type and size checks. Continue checking lab behavior and test evidence. |
1 / checks_failed |
Inspect failed files in checks, fix them, commit and push again, then verify the new SHA. |
2 / rejected |
The event format, repository, branch or SHA does not match, or Git cannot find the commit. Check the full SHA and event and contact a TA to collect it again. |
3 / infrastructure_error |
A read, ledger or timeout failure. Keep the SHA; after the environment is repaired, an authorized person reruns Actions. |
| No feedback artifact | Checkout or the base environment may have failed first. Inspect the failed run step and ask a TA to rerun it; absence of an artifact does not mean acceptance. |
Retrying the same event in the same ledger retains one record. Failed feedback remains
failed on retry; it does not turn into success or a student score of zero. Each Actions
run uses a temporary ledger. A stable idempotency_id identifies repeats across runs;
the teaching team deduplicates by that ID when collecting feedback, rather than counting
several artifacts as several submissions. If a checker-version change causes a ledger
conflict, the TA preserves old evidence and revalidates with a ledger for the new version,
without manually editing old feedback.
GitHub student identification uses a repository-scoped student pseudonym derived from the numeric repository ID and PR author's numeric ID. Login names, real names and PR bodies are not written to feedback. A pseudonym can still be linked to a person; share feedback only within the course-authorized scope. For account changes or submissions on another person's behalf, TAs verify identities and membership records. This entry point does not infer individual contribution.
Formal grades
Labs provide practice and feedback. Selected evidence contributes to the portfolio or project under the current assessment rules. Formal scores require the registered grading unit and isolated runner, a trusted attestation, actual merging of the human-scored component and admission of its source. You can view and retain a valid component receipt without waiting for future assessments; future items remain missing rather than being entered as zero.
A local ledger, a green Actions check or JSON manually relabeled authoritative cannot
be imported as a formal grade. If grading is not yet available or execution fails, wait
for valid grading; the result is not recorded as zero.