refactor(registration): remove Classroom org-invite API automation#203
Conversation
Replaces the CLASSROOM_ORG_ADMIN_TOKEN + Classroom org-invite API path with a simpler 'post the assignment URLs only' flow. The registration workflow remains responsible for capacity checks, duplicate detection, waitlist handling, label management, and CSV export -- it just stops trying to drive the GitHub org membership API. What changes - .github/workflows/registration.yml: drop the org-invite job, keep the welcome comment with Day 1 and Day 2 assignment URLs - .github/workflows/day2-release.yml: drop org-API dependency - .github/workflows/instructor-dashboard-sync.yml: drop org-API dependency and simplify the dashboard build - .github/scripts/__tests__/registration-workflow-readiness.test.js: update the assertion to match the new flow - scripts/classroom/Initialize-WorkshopSetup.ps1: remove the CLASSROOM_ORG_ADMIN_TOKEN bootstrap - admin/REGISTRATION-QUICKSTART.md, QUICK_START_SETUP.md, FINE_GRAINED_TOKEN_SETUP.md, CLASSROOM_INTEGRATION_GUIDE.md, ENROLLMENT_SETUP_CHECKLIST.md, GITHUB_CLASSROOM_ARCHITECTURE.md, IMPLEMENTATION_SUMMARY.md: drop org-admin token setup sections, document the new URL-only flow, and remove now-irrelevant architecture diagrams - admin/qa-bundle/.github/workflows/registration.yml: sync the qa-bundle copy of the new registration workflow Why Maintaining a fine-grained admin token with org invitation scope added a fragile setup step, an extra secret to rotate, and a class of failures (token expiry, scope drift, org rename) that broke registration for every cohort. Posting two assignment URLs in a welcome comment is equivalent for the student, requires zero secrets, and cannot break in production. Rollback If the new flow needs to be disabled, clear repository variables CLASSROOM_DAY1_ASSIGNMENT_URL and CLASSROOM_DAY2_ASSIGNMENT_URL. The rest of the registration workflow (capacity, duplicates, waitlist, CSV) continues running unchanged.
Peer Review AssignedHi @accesswatch! Your PR has been automatically paired with @taylorarndt for peer review. For @taylorarndt:This is a great opportunity to practice code review skills! Here's what to look for: Content Quality:
Accessibility:
Documentation:
Review Guidelines:
Resources: Pairing by Learning Room Grouping Engine |
There was a problem hiding this comment.
Pull request overview
This PR refactors the registration/enrollment automation to remove GitHub Classroom organization-invite API usage (and the associated admin token), replacing it with a simpler flow that delivers Day 1/Day 2 assignment invite URLs via issue comments and uses issue signals for Day 2 release and dashboard status.
Changes:
- Removes org-invite automation from
registration.yml,day2-release.yml, andinstructor-dashboard-sync.yml, relying on assignment URLs + issue labels/comments instead. - Updates facilitator/admin documentation and setup scripts to drop
CLASSROOM_ORG_ADMIN_TOKENand org-related variables. - Updates the automation readiness test to assert the new welcome/onboarding comment shape.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/classroom/Initialize-WorkshopSetup.ps1 | Removes org-admin token setup; keeps variable + label setup and template prep/validation. |
| admin/REGISTRATION-QUICKSTART.md | Updates quickstart to variable-only setup and new rollback guidance. |
| admin/QUICK_START_SETUP.md | Rewrites quick start for assignment-link-based registration/enrollment flow. |
| admin/qa-bundle/.github/workflows/registration.yml | Syncs QA bundle registration workflow to remove org-invite step. |
| admin/IMPLEMENTATION_SUMMARY.md | Replaces prior org-invite-focused summary with the new interaction/credential model. |
| admin/GITHUB_CLASSROOM_ARCHITECTURE.md | Updates architecture doc to describe the new issue-signal + link-posting model. |
| admin/FINE_GRAINED_TOKEN_SETUP.md | Replaces token guide with current secrets/variables and verification/rotation guidance. |
| admin/ENROLLMENT_SETUP_CHECKLIST.md | Removes org/token steps; documents the Day 2 release signal approach. |
| admin/CLASSROOM_INTEGRATION_GUIDE.md | Updates guide to focus on assignment links + dashboard triage, not org invites. |
| .github/workflows/registration.yml | Removes org-invite and classroom join link; keeps welcome comments and labeling. |
| .github/workflows/instructor-dashboard-sync.yml | Removes classroom org scanning; computes status from enrollment issues/comments/labels. |
| .github/workflows/day2-release.yml | Removes classroom repo inspection; releases Day 2 based on labels/comments. |
| .github/scripts/tests/registration-workflow-readiness.test.js | Updates assertions to match the new onboarding messaging. |
Comments suppressed due to low confidence (1)
admin/REGISTRATION-QUICKSTART.md:52
- Rollback instructions say clearing either
CLASSROOM_DAY1_ASSIGNMENT_URLorCLASSROOM_DAY2_ASSIGNMENT_URLwill “disable assignment-link posting,” but the workflow will still post whichever link remains set. If the intent is to disable link posting entirely, the rollback should instruct clearing both variables (or update the wording to match the actual behavior).
If anything behaves unexpectedly, disable assignment-link posting without stopping registration:
1. Clear `CLASSROOM_DAY1_ASSIGNMENT_URL`, or
2. Clear `CLASSROOM_DAY2_ASSIGNMENT_URL`
| '- GitHub notification bell', | ||
| '- Email notifications for this issue thread', | ||
| '', | ||
| 'Please reply `ack` on this issue after you confirm your Day 1 link works.', | ||
| '', | ||
| `${orgStatusSection}If you get stuck at any step, open support:`, | ||
| 'If you get stuck at any step, open support:', |
| # --------------------------------------------------------------------------- | ||
| # Step 2: Set repository variables | ||
| # --------------------------------------------------------------------------- | ||
| Write-Step "Setting repository variables on $Repo" | ||
|
|
||
| $variablesToSet = @( |
| 1. Student opens enrollment or registration issue. | ||
| 2. `registration.yml` validates submission and posts assignment links. | ||
| 3. Student replies `ack` after Day 1 link verification. | ||
| 4. Student replies `day1-complete` after Day 1 milestone. | ||
| 5. `day2-release.yml` posts Day 2 assignment link when completion signal is present. |
| ## Fast Verification Checklist | ||
|
|
||
| - [ ] Test user received or already had organization invite | ||
| - [ ] Confirmation comment includes assignment links | ||
| - [ ] Duplicate submission closes automatically with duplicate message | ||
| - [ ] Waitlist behavior still works when capacity is full | ||
| - [ ] Student can reply `ack`, then `day1-complete`, and receive Day 2 release comment | ||
|
|
Summary
Removes the
CLASSROOM_ORG_ADMIN_TOKEN+ Classroom org-invite API automation from the registration pipeline. Replaces it with the simpler 'post the Day 1 and Day 2 assignment URLs in the welcome comment' flow.The registration workflow keeps everything else: capacity checks, duplicate detection, waitlist handling, label management, CSV export, and the welcome comment itself. Day 2 release gate and instructor dashboard sync drop their org-API dependencies for the same reason.
Why
Maintaining a fine-grained admin token with org invitation scope added:
Posting two assignment URLs in a welcome comment is equivalent for the student, requires zero secrets, and cannot break in production.
What changes
.github/workflows/registration.yml-- drop the org-invite job, keep welcome comment with Day 1/Day 2 URLs.github/workflows/day2-release.yml-- drop org-API dependency.github/workflows/instructor-dashboard-sync.yml-- drop org-API dependency, simplify dashboard build.github/scripts/__tests__/registration-workflow-readiness.test.js-- update assertion to match new flowscripts/classroom/Initialize-WorkshopSetup.ps1-- remove theCLASSROOM_ORG_ADMIN_TOKENbootstrap stepadmin/qa-bundle/.github/workflows/registration.yml-- sync qa-bundle copyRollback
Clear repository variables
CLASSROOM_DAY1_ASSIGNMENT_URLandCLASSROOM_DAY2_ASSIGNMENT_URL. The rest of the registration workflow (capacity, duplicates, waitlist, CSV) keeps running unchanged.Test plan
npm run test:automation(the updated readiness test now asserts the new welcome-comment shape)registrationlabel is appliedRelationship to other PRs
Independent of #202 (autograding workflows migration). Either can land first; rebasing the other on top of main afterward is a clean
git rebase.