Quasa
Use QUASA App
Join the pioneer of Web3 crypto freelancing today!
Open
Practical Guides

GitHub Classroom Is Closed—Recover the Records Repositories Do Not Preserve

|Author: QUASA Editorial Team|6 min read| 5
GitHub Classroom Is Closed—Recover the Records Repositories Do Not Preserve

GitHub Classroom closed on August 28, 2026. Its repositories remain on GitHub, but recovering a course now requires a separate search for previously downloaded Classroom exports, LMS records and teaching files before the records can be reconciled and moved to a replacement.

Start by preserving any local JSON or CSV export unchanged. Then match its classrooms, assignments, accepted submissions and grades to the surviving repositories and the institution’s roster or gradebook; a repository can preserve code and commit history without preserving the complete administrative record that connected a learner to a course and assignment.

Separate surviving repositories from Classroom records

Accessible GitHub repositories are separated from Classroom-specific assignments, tests, submission history and roster records.

GitHub’s Classroom closure announcement says the website was decommissioned on August 28, 2026, while GitHub accounts, organizations and repositories were unaffected. It identifies classroom and assignment names, tests defined outside repositories, historical test-run data, submissions and LTI-integrated rosters as Classroom-specific data scheduled for final deletion on September 4, 2026.

Build two inventories. For repositories, record the organization, URL, visibility, owner or team, default branch and whether authorized teaching staff can open the repository. For Classroom records, list the expected courses, assignments, learners or teams, roster identifiers, deadlines, submission records, grades, external tests and test-run history.

Do not treat a complete repository list as a complete course archive. Repositories may show submitted code, commits and workflows, but they may not establish which institutional learner accepted an assignment, which score became the official grade or which tests and roster relationships existed only in Classroom.

Recover and preserve every available export

GitHub Classroom JSON and CSV exports are preserved as immutable originals before verification.

GitHub’s export guidance required GitHub CLI, the GitHub Classroom extension and the Classroom Export Utility, followed by verification that JSON or CSV files existed locally. The same page directed educators to export before retirement, so after August 28 the dependable recovery sources are exports already saved locally and records retained in companion systems—not a new Classroom export.

  1. Search instructor computers, approved shared storage and backup systems for every earlier export. Preserve multiple dated exports rather than assuming the newest is complete.
  2. Copy each export into an archive that will not be edited. Record its creation time when available, its original location and the GitHub account or organization it appears to cover.
  3. Create a separate working copy for validation, transformation and import.
  4. Record file sizes and, if institutional tooling supports them, checksums so later processing can be distinguished from the archived original.
  5. Store exports containing grades, usernames or roster identifiers under the institution’s access and retention rules for student records.

If JSON is malformed or a CSV has been altered by spreadsheet software, do not repair the archival copy. Preserve the defective file as received and normalize only a duplicate, documenting every change.

Verify JSON and CSV as one connected dataset

Classroom, assignment, submission and grade exports are reconciled by identifiers with exceptions clearly flagged.

The Classroom Export Utility documentation describes classroom JSON, assignment JSON, accepted-assignment JSON and a grades CSV for each assignment. Its documented fields include assignment titles, types and deadlines; submission status, student information and repository URLs; and grade rows containing GitHub usernames, roster identifiers, submission timestamps and points awarded and available.

Follow that hierarchy during validation. Confirm that each expected classroom has a record, each expected assignment appears beneath the correct classroom and each assignment directory contains the applicable accepted-assignment and grade files. Join records by stable identifiers where possible, because assignment titles and learner display names can be reused or changed.

  • JSON integrity: parse every file, confirm its expected record type and flag empty files where known activity should exist.
  • CSV integrity: verify headers and column counts, check that timestamps were not reformatted, and preserve leading zeros in institutional identifiers.
  • Repository linkage: open each exported repository URL using an authorized staff account. Do not assign an orphaned repository to a learner solely from a similar name.
  • Grade reconciliation: compare exported grades with the authoritative LMS or registrar-approved record. Retain both values and log the discrepancy instead of silently selecting one.

Maintain an exception log for missing classrooms, assignments without expected submissions, duplicate learner matches, grade rows without roster identifiers and inaccessible repositories. Record an owner, evidence and disposition for each exception.

Reconstruct what the export does not establish

The utility’s documented output does not list separate files for external test definitions, complete test-run histories or a full LTI roster. Look for those records in the LMS, enrollment snapshots, instructor-maintained test files, CI configuration, approved course storage and earlier Classroom downloads. Absence from one export is not proof that a record never existed.

For each assignment, create a reconciliation row containing the stable assignment identifier, title, source or starter repository, deadline, expected learners or teams, accepted submissions, repository URLs and grade status. Add an external-test location or historical-run result only when a surviving record supports it; otherwise mark the field unavailable.

A repository’s current default branch is not automatically the historical submission. Use an exported submission timestamp and any surviving commit reference to identify the relevant state. If neither exists, document that the original submission state cannot be established rather than presenting the current branch as recovered history.

Map and verify the replacement before full import

Select a replacement according to the workflow the course still needs: repository distribution, team assignments, roster matching, grading, LMS integration or autograding. Before uploading student records, confirm whether repositories remain on GitHub, whether existing repositories can be attached, how teams are represented and which identifier the destination uses to match learners.

  1. Create a field map from every verified source field to a destination field, including an explicit “not imported” result where no equivalent exists.
  2. Test the mapping with a non-sensitive or institutionally approved course copy before importing a full cohort.
  3. Compare source and destination totals for assignments, learners, teams, accepted submissions and grade rows.
  4. Inspect representative migrated records, including late and team submissions and a learner whose GitHub username differs from the roster identifier when those cases exist.
  5. Retain the source archive, field map, exception log and import report under the institution’s retention policy.

Recovery is complete only when the surviving repositories and reconstructed course records agree—or every unresolved difference is documented. Keep repositories as the code record, preserved exports as historical evidence and the LMS or other authoritative institutional system as the basis for closing gaps the repositories cannot fill.

Also read:

Share:

Subscribe to our newsletter

Get the latest Web3, AI, and crypto news delivered straight to your inbox.

0