Progress tracking

The app records exercise progress locally after every verify run, and can optionally sync it to a GitHub-hosted progress repository.

Local progress

gitmastery setup creates a progress/ folder inside the Git-Mastery root with an empty progress.json.

After each gitmastery verify, the app appends a new entry:

{
  "exercise_name": "branch-bender",
  "started_at": 1700000000.0,
  "completed_at": 1700000010.0,
  "comments": ["Great work!"],
  "status": "Completed"
}

The status field maps from GitAutograderStatus:

GitAutograderStatus Written as
SUCCESSFUL "Completed"
UNSUCCESSFUL "Incomplete"
ERROR "Error"

If the exercise already has a Completed entry, subsequent attempts are not recorded.

gitmastery progress show displays the latest entry per exercise.

Remote sync

flowchart TD
    A(["gitmastery progress sync on"]) --> B["Check Git and GitHub CLI"]
    B --> C["Fork git-mastery/progress"]
    C --> D["Clone fork into progress/"]
    D --> E["Merge local and remote entries"]
    E --> F["Push to fork"]
    F --> G{"PR exists?"}
    G -- No --> H["Open PR to git-mastery/progress"]
    G -- Yes --> I(["Done"])
    H --> I

Once sync is on, every subsequent verify run pushes the new progress entry to the fork. progress reset also removes the exercise entry from the fork.

gitmastery progress sync off removes the fork from GitHub, switches .gitmastery.json back to local-only mode, and recreates a plain local progress/ folder preserving existing entries.

Reset

gitmastery progress reset removes the current exercise’s entries from progress.json and recreates the exercise workspace.

See Download and verification flow for how progress is updated during the verify step.