Store completion records in a private maintainer-controlled repository or approved system, not in the public/student-facing handbook.
Schema#
{
"schema_version": 2,
"github_user_id": 42,
"github_user": "example-user",
"curriculum_version": "2.0.0",
"endorsements": {
"core": "2026-08-29",
"git": null,
"python": null,
"ai_agents": null,
"euler_cpu": null,
"euler_gpu": null
},
"reviewer_id": 84,
"reviewer": "example-reviewer",
"head_sha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"assessment_reference": "soheylm-passport-sandbox/passport-exercises#1"
}
Do not store grades, passwords, tokens, private keys, protected research data, or unnecessary personal information.
The JSON schema is
curriculum/schemas/completion-record.schema.json.
The immutable writer is implemented in
passport_system/registry.py. A second
write for the same user and curriculum version fails instead of silently
replacing history.
Archive And Reactivation#
Offboarding does not delete a completion record or submitted learning record. Write a separate append-only lifecycle event with only username, state, date, actor, reason category, and assessment reference. Then revoke unrelated lab access; the learner-owned public fork is not administered by the lab.
The lifecycle schema is
curriculum/schemas/lifecycle-event.schema.json.
Do not place departure explanations, performance information, project data, or
credentials in that event.
Versioning#
- Patch: wording or checks change without changing competencies.
- Minor: competency/evidence is added without invalidating existing passes.
- Major: required competency or pass meaning changes materially.
Use Conventional Commits for repository history and semantic versions for released curriculum/assessment contracts. These are related but not identical.
Renewal#
Require a short refresher after one year or after a significant policy/security change. Do not force an experienced user to repeat unchanged practical work; assess changed competencies and current lab policy.