The Passport measures observable research-computing behavior through structured answers, bounded real actions, and trusted checks on one exact submitted version. It is open-book and iterative; it does not reward memorizing commands.
Four-Repository Model#
| Repository | Visibility | Purpose |
|---|---|---|
IDEALLab/onboarding-IT |
lab handbook policy | Curriculum, site, generator source |
soheylm-passport-sandbox/passport-exercises |
public | Fictional exercises and public learning records |
soheylm-passport-sandbox/gh-passport |
public | Cross-platform GitHub CLI extension releases |
soheylm-passport-sandbox/onboarding-control |
private | Enrollments, assignments, controller, operations, registry |
Each learner owns username/passport-exercises. Students do not join either
organization and receive no repository-creation permission there. The launcher
manages the transport branch and central draft PR in the background; a separate
practice PR is created manually only in the Git mission.
Assessment Flow#
local mission action and bounded check
-> generated sanitized submission
-> background commit and push
-> signed GitHub App webhook
-> Cloudflare Worker validates and dispatches PR number + exact SHA
-> private controller verifies identity and exact SHA
-> isolated deterministic assessment without credentials or network
-> trusted Check Run and actionable feedback
-> retry or continue
-> minimal private completion record
Public Content Boundary#
The public learning record may contain only structured choices, fictional scenarios, bounded synthetic code, and safe Slurm fixtures. It must never contain credentials, ETH or other private identifiers, real logs, screenshots, AI transcripts, research data, datasets, checkpoints, results, or confidential project details.
A secret scan stops before parsing or execution. A real incident uses the lab's private incident route, not the public exercise repository.
Authority#
- The learner remains responsible for every answer, command, diff, and result.
- The local browser remembers drafts and navigation; it cannot award a pass.
- The public GitHub record is an auditable source, not pass authority.
- The trusted controller App publishes status for one exact SHA.
- The private registry stores only the minimal completion record.
- A named operational owner decides real access, classification, or ownership; that decision is separate from the training score.
A merge, label, learner workflow, local checkbox, similarly named Check Run, or AI response cannot award completion.
Submission Loop#
Every mission uses the same browser loop: Do -> Check my work -> Submit mission -> Fix or continue. The launcher commits only the generated submission and mission-declared synthetic artifact. Students use Git themselves only when Git is the skill being taught.
A signed webhook normally dispatches the controller immediately. A sparse cron is recovery only. The learner must not resubmit an unchanged attempt. If no status appears after 30 minutes, the dashboard opens one public non-secret help request that can be handled asynchronously.
Implementation Map#
| Concern | Canonical source |
|---|---|
| Curriculum and routes | curriculum/ |
| Public exercise export | passport_system/exercises_export.py |
| Local launcher and verifiers | tools/passport-cli/ |
| Fork registration | passport_system/fork_registration.py |
| Deterministic/security checks | passport_system/controller.py |
| Trusted dispatch and status | passport_system/scheduler.py |
| Cloudflare signature bridge | platform/cloudflare-worker/ |
| Private consolidated deployment | platform/onboarding-control/ |
| Synthetic/adversarial tests | tests/ |
See completion records, the rubric, and the deployment runbook.