Single, end-to-end guide for deploying a new Git Going with GitHub workshop cohort. Covers everything from creating the classroom through post-workshop teardown. This is the only deployment document you need.
Before sharing invite links with students, complete the Go-Live QA Guide. It is the final release gate for content, workflows, Classroom setup, podcasts, accessibility, and human test coverage.
If you need one practical execution script from registration through full student challenge completion (podcast work excluded), use admin/LEARNING-ROOM-E2E-QA-RUNBOOK.md.
Before creating assignments, sync and validate the latest template deployment using
scripts/classroom/Prepare-LearningRoomTemplate.ps1andscripts/classroom/Test-LearningRoomTemplate.ps1.
Each student gets their own private repository created by GitHub Classroom from the learning-room-template. Inside that repo, three automation systems guide the student through all 21 challenges without facilitator intervention:
- Gandalf (the PR Validation Bot) -- welcomes first-time contributors, validates PR structure, responds to
@gandalf-bothelp requests, and provides real-time feedback on every push - Student Progression Bot -- creates the first challenge when triggered by a facilitator script, then creates the next challenge issue whenever a student closes the current challenge issue
- Autograders -- automated tests that verify objective evidence of challenge completion (branch exists, conflict markers removed, template file valid, agent file structured correctly)
No shared student repository. Students do not clone the template or configure permissions. The facilitator's deployment work is creating the classroom and two assignments in the GitHub Classroom web UI, then running the seeding scripts after each student repo is created.
Students only need a GitHub account. They do not need to create an organization, become members of Community-Access, or change GitHub Actions settings. Organization and repository workflow permissions are facilitator responsibilities.
Community-Access/learning-room-template (template repo)
|
+--> GitHub Classroom creates one private repo per student
| learning-room-student-a
| learning-room-student-b
| ...
|
+--> Each student repo contains:
| Gandalf (pr-validation-bot.yml) -- PR feedback and help responses
| Student Progression Bot -- Unlocks challenges sequentially
| Autograders -- Validates specific challenges
| Issue templates (16 core + 5 bonus) -- Challenge definitions
| Feedback PR (created by Classroom) -- Facilitator async comments
|
+--> Student flow:
| Accept invite --> repo created --> facilitator seeds Challenge 1
| --> complete challenge --> close issue --> next challenge unlocked
| --> repeat through all challenges
|
+--> Capstone (Challenge 16):
Student chooses Accessibility Agents, GLOW, or another meaningful project
Opens a PR or prepares review-ready contribution evidence
| Path | Who it is for | Assignment | Entry point |
|---|---|---|---|
| Day 1 + Day 2 | Participants starting from scratch | Assignment 1 (Day 1) then Assignment 2 (Day 2) | Day 1 Agenda |
| Day 2 only | Participants with GitHub fundamentals | Assignment 2 only | Day 2 Quick Start then Day 2 Agenda |
Day-2-only participants skip Assignment 1 entirely. They verify readiness using the Day 2 Quick Start self-assessment, then accept only the Day 2 invite link.
| File | Purpose |
|---|---|
| assignment-day1-you-belong-here.md | Assignment description for Day 1 (paste into Classroom UI) |
| assignment-day2-you-can-build-this.md | Assignment description for Day 2 (paste into Classroom UI) |
| grading-guide.md | Facilitator rubric for all 21 challenges |
| roster-template.csv | Starter CSV for importing student roster |
| student-progression.yml | Reference copy of the progression bot workflow |
| HUMAN_TEST_MATRIX.md | End-to-end human walkthrough for all 16 core and 5 bonus challenges |
| teardown-checklist.md | Post-workshop cleanup steps |
| ../GO-LIVE-QA-GUIDE.md | Final release-readiness guide and checklist |
| ../admin/LEARNING-ROOM-E2E-QA-RUNBOOK.md | Single operator runbook from registration to student completion (podcast excluded) |
Before starting, confirm the following:
- You have Owner or Admin access to the Community-Access GitHub organization
- Your facilitator GitHub account has a verified email address
- The
Community-Access/learning-room-templaterepository exists and is public (or the classroom org has read access) - The template repo has GitHub Actions enabled with Read and write permissions for
GITHUB_TOKEN(Settings > Actions > General) -- Gandalf needs this to post comments - "Allow GitHub Actions to create and approve pull requests" is checked in the template repo
- You have the student list (GitHub usernames required; real names optional)
- You have confirmed dates for Day 1 and Day 2
Use separate accounts for facilitator and student testing.
- Keep your facilitator account (for example,
accesswatch) as classroom admin/instructor only - Use a dedicated test-student account to accept invite links and complete challenge flow
- Avoid using the facilitator account as a student for validation runs - admin permissions can hide real student experience issues
This keeps grading data clean, avoids permission edge cases, and gives you an accurate end-to-end student test.
- Go to classroom.github.com and sign in with your facilitator account
- Click New classroom
- Select the Community-Access organization (if you do not see it, accept the GitHub Classroom invitation from your org admin)
- Name the classroom using this pattern:
Git Going - [Cohort Name] - [Month Year]- Example:
Git Going - Spring Cohort - March 2026 - Example:
Git Going - Seattle Accessibility Bootcamp - June 2026
- Example:
- Skip the TA / co-teacher setup -- facilitators use organization-level permissions instead
- Click Create classroom
The roster links GitHub usernames to student identities so facilitators can track progress on the classroom dashboard.
- Open the classroom you just created
- Go to Settings (gear icon) then Roster Management
- Click Import from CSV
- Upload a completed version of roster-template.csv:
identifier,name,email
octocat,The Octocat,octocat@example.com
student-a,Alice Student,alice@example.com- The
identifiercolumn must match the student's exact GitHub username nameandemailare optional but helpful for facilitator reference- Students not on the roster can still accept; they appear as "unidentified"
- Verify all expected students appear in the roster list
- Students can be added later -- the roster is not locked
This assignment covers Challenges 1 through 9. When a student accepts the invite link, GitHub Classroom creates their private repo from the template. After acceptance, facilitators run scripts/classroom/Seed-LearningRoomChallenge.ps1 to trigger the Student Progression Bot and create Challenge 1. As the student closes each challenge issue, the bot unlocks the next one.
Day-2-only participants skip this assignment entirely.
From the classroom dashboard, click New assignment and fill in the assignment settings:
| Setting | Value |
|---|---|
| Title | You Belong Here |
| Type | Individual |
| Visibility | Private (student repos visible only to the student and facilitators) |
| Template repository | Community-Access/learning-room-template |
| Grant students admin access | No |
| Enable feedback pull requests | Yes |
| Deadline | End of Day 1 (deadline is soft -- late work is still accepted) |
Then complete the remaining fields:
- Assignment description: Open assignment-day1-you-belong-here.md, copy everything below the HTML metadata comment, and paste it into the description field
- Autograding tests: Leave this section empty. Day 1 autograded checks (Challenges 2, 5, 6, 7) run as GitHub Actions workflows inside the template repo, so no Classroom test cases are required. See admin/classroom/autograding-setup.md for the full list of workflows.
- Click Create assignment -- this generates your Day 1 invite link
- Student clicks the invite link
- GitHub Classroom creates their private repo (30-60 seconds)
- Facilitator seeds Challenge 1 (Find Your Way Around) using
student-progression.yml - Student completes the challenge, posts evidence, closes the issue
- Progression Bot creates Challenge 2 issue with full instructions
- Student repeats through Challenge 9 (Merge Day)
- Gandalf provides real-time feedback on every PR along the way
- Autograders validate Challenges 4, 5, 6, 7, and 9 automatically
This assignment covers Challenges 10 through 16 plus the 5 bonus challenges. Both full-workshop and Day-2-only participants accept this assignment.
Day-2-only participants will not have completed Assignment 1, but Assignment 2 does not depend on Assignment 1 artifacts.
Click New assignment again and fill in the settings:
| Setting | Value |
|---|---|
| Title | You Can Build This |
| Type | Individual |
| Visibility | Private |
| Template repository | Community-Access/learning-room-template |
| Grant students admin access | No |
| Enable feedback pull requests | Yes |
| Deadline | One week after Day 2 (gives students time for the capstone and bonus challenges) |
Then complete the remaining fields:
- Assignment description: Use assignment-day2-you-can-build-this.md
- Autograding tests: Leave this section empty. Day 2 autograded checks (Challenges 10, 14, 16) run as GitHub Actions workflows inside the template repo. See admin/classroom/autograding-setup.md.
- Click Create assignment -- this generates your Day 2 invite link
- Student clicks the Day 2 invite link
- GitHub Classroom creates a new private repo for Day 2
- Facilitator seeds Challenge 10 (Go Local) using
student-progression.yml - Student clones the repo, works locally, pushes, and closes the issue
- Progression Bot unlocks Challenges 11 through 16 sequentially
- Challenge 16 (Capstone) has the student choose Accessibility Agents, GLOW, or another meaningful project and prepare a PR, branch, issue, or contribution plan
- Bonus challenges (A through E) are available via issue templates for students who finish early
Each assignment generates a unique invite URL.
- Copy the Day 1 invite URL from the assignment page
- In the
git-going-with-githubrepository, openDAY1_AGENDA.mdand replace the[INVITE_LINK]placeholder - Copy the Day 2 invite URL
- Open
DAY2_AGENDA.mdand replace its[INVITE_LINK]placeholder - Optionally, email the invite links directly to students before the workshop
- GitHub shows a "Join classroom" page if they are not already on the roster
- If on the roster, they see "Accept this assignment"
- After accepting, GitHub creates their private repo within 30-60 seconds
- The student's repository URL follows the pattern:
github.com/<classroom-org>/<assignment-slug>-<github-username>(example:you-belong-here-accesswatch).
| Participant type | Send Day 1 link | Send Day 2 link |
|---|---|---|
| Full workshop (Day 1 + Day 2) | Yes | Yes |
| Day-2-only | No | Yes |
Run this verification with a test account before the workshop. Do not skip this step.
- Accept the Day 1 invite with a test GitHub account
- Verify a student repository was created under the classroom org
- Verify the learning-room template files are present (
docs/welcome.md,docs/keyboard-shortcuts.md,docs/setup-guide.md) - Verify Challenge 1 issue was created by the Progression Bot after running
Seed-LearningRoomChallenge.ps1 - Open a test PR with a trivial change
- Verify Gandalf (PR validation bot) comments within 60 seconds
- Verify autograding runs and reports a score
- Verify a feedback pull request was created by Classroom
- Close Challenge 1 and verify Challenge 2 is created by the Progression Bot
- Accept the Day 2 invite with the same test account
- Verify Challenge 10 issue appears in the Day 2 repo
- Repeat the PR test for the Day 2 repository
- Delete the test student repositories when done
After a student accepts the assignment, seed the first challenge from this repository:
scripts/classroom/Seed-LearningRoomChallenge.ps1 -Repository Community-Access-Classroom/learning-room-studentname -Challenge 1 -Assignee studentnameFor Day 2, use -Challenge 10.
Because each GitHub Classroom repository is private, students cannot automatically see a classmate's issues or pull requests. To preserve realistic collaboration without exposing private student repos, seed peer-simulation artifacts into each student's repository:
scripts/classroom/Seed-PeerSimulation.ps1 -Repository Community-Access-Classroom/learning-room-studentname -StudentUsername studentnameThis creates two peer-simulation issues and one peer-simulation pull request. Challenges that ask students to comment, react, review, compare, or practice peer collaboration can use those seeded artifacts. If facilitators intentionally provision real buddy access, students may use real buddy repositories instead.
Challenge 7 needs a real conflict. After the student has edited docs/welcome.md on their challenge branch and opened a pull request, run:
scripts/classroom/Start-MergeConflictChallenge.ps1 -Repository Community-Access-Classroom/learning-room-studentname -StudentBranch learn/studentnameThe script changes the same TODO area on main, which should cause the student's pull request to report a merge conflict if they edited that TODO on their branch.
All autograded checks now run as GitHub Actions workflows inside each student repo (not as Classroom test cases). To verify they work:
- In the test student repo, create a branch and make a change that should pass a check
- Open a PR
- Go to the Actions tab and verify the relevant
autograder-*workflow ran - On the PR (or relevant issue) confirm a comment was posted reporting pass or fail
- Push a change that should fail a check and verify the comment updates in place
- Open a PR without a
Closes #XXreference - Verify Gandalf posts a comment asking for an issue link
- Comment
@gandalf-bot I have a merge conflict, can you explain this? - Verify the comment responder replies with guidance
- Verify the classroom dashboard loads at classroom.github.com
- Have both invite links ready to share (on-screen, in chat, or printed on cards)
- Open the grading-guide.md for reference during the day
- Have the Challenge Hub open in a browser tab
Monitor the classroom dashboard: It shows accepted assignments, recent commits, and autograding results in real time.
Common student issues and fixes:
| Issue | What to Do |
|---|---|
| "I cannot find the invite link" | Reshare the link; post it in the workshop chat channel |
| "My next challenge did not appear" | The student may not have closed the previous issue; check their Issues tab |
| "The autograder bot says I failed" | Open the Actions tab in the student repo and read the failing autograder-* workflow log; the bot comment links to the run |
| "I do not see the feedback PR" | It appears after the first push; have them make any commit and push |
| "Gandalf did not comment on my PR" | Check the Actions tab in the student repo; workflows may need to be enabled |
| "Assignment not showing my work" | Student may have pushed to the wrong branch; check their repo's branches |
The feedback pull request is Classroom's built-in channel for async facilitator comments:
- Open a student's repository from the classroom dashboard
- Go to the Pull Requests tab
- Open the feedback PR (titled "Feedback")
- Leave comments, encouragement, and guidance here
- Students receive email notifications for your comments
The Student Progression Bot manages the entire challenge sequence. Each student works through challenges independently in their own repo:
| Challenge | Title | How it completes | Gandalf validates | Autograded |
|---|---|---|---|---|
| 1 | Find Your Way Around | Close issue | -- | -- |
| 2 | File Your First Issue | Close issue | -- | -- |
| 3 | Join the Conversation | Close issue | -- | -- |
| 4 | Branch Out | Close issue | -- | Yes (branch exists) |
| 5 | Make Your Mark | Close issue | -- | Yes (file edited) |
| 6 | Open Your First Pull Request | Close issue | Yes (PR structure) | Yes (issue reference) |
| 7 | Survive a Merge Conflict | Close issue | Yes (PR feedback) | Yes (no conflict markers) |
| 8 | The Culture Layer | Close issue | -- | -- |
| 9 | Merge Day | Close issue | Yes (merge) | Yes (PR merged) |
| Challenge | Title | How it completes | Gandalf validates | Autograded |
|---|---|---|---|---|
| 10 | Go Local | Close issue | -- | Yes (local commit) |
| 11 | Open a Day 2 PR | Close issue | Yes (PR structure) | Yes (local push) |
| 12 | Review Like a Pro | Close issue | -- | Yes (review comment) |
| 13 | AI as Your Copilot | Close issue | -- | -- |
| 14 | Template Remix | Close issue | -- | Yes (YAML valid) |
| 15 | Meet the Agents | Close issue | -- | -- |
| 16 | Capstone Project | Close issue | -- | Yes for Accessibility Agents path; facilitator review for GLOW or another project |
| A-E | Bonus challenges | Close issue | -- | -- |
Challenges 1, 2, 3, 8, 13, and 15 are evaluated manually using the grading-guide.md. The Progression Bot still unlocks the next challenge when the student closes the issue -- the facilitator reviews evidence in the issue comments.
Follow the teardown-checklist.md for complete post-workshop steps. The key actions:
- Export grades from the classroom dashboard
- Archive the classroom in the Classroom UI (this preserves student repos as read-only portfolio pieces)
- Review feedback and update facilitation notes for next cohort
- Route ongoing learner support to Community-Access/support
Edit the assignment deadline in the Classroom UI at any time. Students who already accepted will see the updated deadline.
Modify tests in the Classroom UI:
- Open the assignment
- Scroll to Autograding
- Add, edit, or remove individual tests
- Changes apply to all future student pushes (not retroactively)
The point values in the JSON files are suggestions. Adjust them in the Classroom UI to match your grading approach. The grading-guide.md has recommended completion thresholds.
If you prefer manual-only grading, skip adding the autograding tests when creating the assignment. Gandalf and the Progression Bot still work independently of autograding.
Previous versions of this workshop used a shared "multi-player sandbox" repository model where a facilitator manually provisioned challenge issues for each student using PowerShell scripts (create_all_challenges.ps1 and create_student_issues.ps1). That approach required:
- Creating a per-cohort
learning-room-[cohort]repository from the template - Inviting all students to the GitHub organization
- Running batch scripts to create challenge issues per student via the GitHub API (the scripts split chapters into sub-challenges like 04.1, 04.2, 04.3, totaling 26 issues per student)
- Updating curriculum links with find-and-replace across all Markdown files
The current model replaces all of that with GitHub Classroom. Each student gets their own private repo automatically when they accept the invite link, and the Student Progression Bot handles challenge delivery. The legacy scripts are preserved in the repository's Git history for reference but are no longer needed for deployment.
Key decisions preserved from the legacy scripts:
- The scripts defined 26 sub-challenges across chapters 4-16, which the current system consolidates into 16 core challenges + 5 bonus challenges (21 total)
- Challenges used two submission types: issue comment (evidence-based) and PR with
Closes #XX(code-based) - The script was idempotent -- safe to rerun for late-joining students
- Labels followed the pattern:
challenge,challenge: [level],skill: [tag],day: [1 or 2]
See teardown-checklist.md for the complete post-workshop cleanup process, including:
- Exporting grades from the classroom dashboard
- Archiving the classroom
- Cleaning up student repositories
- Documenting facilitator notes for the next cohort
- GitHub Classroom documentation
- Autograding documentation
- Facilitator Guide -- workshop-level facilitation reference
- Challenge Hub -- all 21 challenges with instructions
- Solutions Directory -- reference solutions for facilitator use
- Grading Guide -- per-challenge rubric and completion levels
- Support Hub Operations -- operating model for async support after the workshop
Use these official references when you need the current source of truth for facts in this chapter.
- GitHub Docs, home
- GitHub Changelog
- About Git
- GitHub flow
- About pull requests
- About issues
- Contributing to a project
Use this map to verify facts for each major section in this file.
- How the Workshop Works: GitHub Docs, home, GitHub Changelog, About Git, GitHub flow, About pull requests
- Prerequisites: GitHub Docs, home, GitHub Changelog, About Git, GitHub flow, About pull requests
- How Challenges Flow Through the System: GitHub Docs, home, GitHub Changelog, About Git, GitHub flow, About pull requests
- Post-Workshop: GitHub Docs, home, GitHub Changelog, About Git, GitHub flow, About pull requests
- Customization Options: GitHub Docs, home, GitHub Changelog, About Git, GitHub flow, About pull requests
- Legacy Notes: GitHub Docs, home, GitHub Changelog, About Git, GitHub flow, About pull requests
- After the Workshop: GitHub Docs, home, GitHub Changelog, About Git, GitHub flow, About pull requests
- Reference Links: GitHub Docs, home, GitHub Changelog, About Git, GitHub flow, About pull requests