Skip to content

Arbiter Academy

Learn governed delivery by doing the work.

Build codeArbiter habits through bounded, verifiable practice in a safe fork you own.

  • 19 hands-on lessons
  • 3 progressive tracks
  • Self-paced practice
  • Learner-owned proof

Required setup

Complete these five setup steps before F01

Prepare your own fork and local clone before you begin the first lesson.

  1. Create your practice fork

    YouBrowser

    Open the Academy fork page, choose your GitHub account as the owner, keep the repository name arbiter-academy, and create the fork.

    Expected result: GitHub opens a repository named arbiter-academy under your account and identifies it as a fork of arbiterForge/arbiter-academy.

    If that does not happen

    If GitHub shows the official repository or another owner, return to the fork page and choose your own account before continuing.

  2. Clone it to your computer

    You

    Run the variant for your operating system in a Native terminal after replacing <your-account> with the owner of your fork.

    Windows

    git clone https://github.com/<your-account>/arbiter-academy.git

    macOS

    git clone https://github.com/<your-account>/arbiter-academy.git

    Linux

    git clone https://github.com/<your-account>/arbiter-academy.git

    Expected result: Git creates an arbiter-academy folder and reports that the clone completed.

    If that does not happen

    If GitHub asks for access or Git says the repository was not found, confirm the account name and that the fork exists before retrying.

  3. Enter the cloned repository

    You

    Run the variant for your operating system in the same Native terminal that created the clone.

    Windows

    Set-Location -LiteralPath .\arbiter-academy

    macOS

    cd -- ./arbiter-academy

    Linux

    cd -- ./arbiter-academy

    Expected result: The Native terminal prompt is inside the cloned arbiter-academy repository.

    If that does not happen

    If the folder is not found, list the current folder and confirm where Git created arbiter-academy before trying again.

  4. Verify and install the Academy tools

    You

    In a Native terminal whose current directory is the clone, run the command for your operating system. It fetches the canonical release tag with Git, extracts the installer locally, verifies its reviewed SHA-256 digest, then executes that local file.

    Windows

    $releaseTag = "preview-0.32"
    $expectedInstallerSha256 = "{{INSTALL_PS1_SHA256}}"
    $source = Join-Path ([IO.Path]::GetTempPath()) ("arbiter-academy-" + [guid]::NewGuid())
    $installer = Join-Path $source "install.ps1"
    New-Item -ItemType Directory -Path $source | Out-Null
    git -C $source init --quiet
    git -C $source remote add origin https://github.com/arbiterForge/arbiter-academy.git
    git -C $source fetch --depth 1 origin "refs/tags/$releaseTag"
    $git = (Get-Command git -ErrorAction Stop).Source
    $command = "`"$git`" -C `"$source`" show `"FETCH_HEAD:install/install.ps1`" > `"$installer`""
    & $env:ComSpec /d /s /c $command
    if ($LASTEXITCODE -ne 0) { throw "could not extract the tagged installer" }
    $actualInstallerSha256 = (Get-FileHash -LiteralPath $installer -Algorithm SHA256).Hash.ToLowerInvariant()
    if ($actualInstallerSha256 -cne $expectedInstallerSha256) { throw "installer digest did not match Preview 0.32" }
    & $installer

    macOS

    set -eu
    release_tag='preview-0.32'
    expected_installer_sha256='{{INSTALL_SH_SHA256}}'
    workdir=$(mktemp -d)
    git -C "$workdir" init --quiet
    git -C "$workdir" remote add origin https://github.com/arbiterForge/arbiter-academy.git
    git -C "$workdir" fetch --depth 1 origin "refs/tags/$release_tag"
    git -C "$workdir" show FETCH_HEAD:install/install.sh > "$workdir/install.sh"
    actual_installer_sha256=$(python3 -c 'import hashlib, pathlib, sys; print(hashlib.sha256(pathlib.Path(sys.argv[1]).read_bytes()).hexdigest())' "$workdir/install.sh")
    [ "$actual_installer_sha256" = "$expected_installer_sha256" ] || { printf '%s\n' 'installer digest did not match Preview 0.32' >&2; exit 1; }
    sh "$workdir/install.sh"

    Linux

    set -eu
    release_tag='preview-0.32'
    expected_installer_sha256='{{INSTALL_SH_SHA256}}'
    workdir=$(mktemp -d)
    git -C "$workdir" init --quiet
    git -C "$workdir" remote add origin https://github.com/arbiterForge/arbiter-academy.git
    git -C "$workdir" fetch --depth 1 origin "refs/tags/$release_tag"
    git -C "$workdir" show FETCH_HEAD:install/install.sh > "$workdir/install.sh"
    actual_installer_sha256=$(python3 -c 'import hashlib, pathlib, sys; print(hashlib.sha256(pathlib.Path(sys.argv[1]).read_bytes()).hexdigest())' "$workdir/install.sh")
    [ "$actual_installer_sha256" = "$expected_installer_sha256" ] || { printf '%s\n' 'installer digest did not match Preview 0.32' >&2; exit 1; }
    sh "$workdir/install.sh"

    Expected result: The installer reports the installed Academy preview and the path of the installed arbiter-academy executable.

    If that does not happen

    If the tag fetch, extraction, or installation stops, do not substitute a branch or a different remote URL. Preserve the complete message and the temporary source folder, compare the linked immutable source, and ask in Academy Discussions before retrying.

  5. Run readiness checks

    You

    Run the installed Academy Doctor command from the clone, read every reported boundary, and continue to F01 when any failures are limited to the expected fresh-clone remote findings.

    Windows

    $academy = "$env:LOCALAPPDATA\ArbiterAcademy\preview-0.32\Scripts\arbiter-academy.exe"
    & $academy --repository (Get-Location).Path doctor

    macOS

    academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.32/bin/arbiter-academy"
    "$academy" --repository "$PWD" doctor

    Linux

    academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.32/bin/arbiter-academy"
    "$academy" --repository "$PWD" doctor

    Expected result: Doctor reports Python and Git versions, the repository root, worktree and branch state, remotes and effective push routing, upstream push protection, and codeArbiter activation and initialization without changing the repository.

    If that does not happen

    If Doctor reports only missing upstream or related fresh-clone remote evidence, continue to F01. If origin is not your fork, main is dirty, or another prerequisite is unavailable, stop and correct only that setup boundary before Prepare.

Start with Foundation

Fork, clone, and doctor safety

Prove origin is your fork, upstream is the official Academy, and push routing cannot target upstream.

30 minutes · Practice in your own fork

Start F01

Curriculum

Progress from safe foundations to advanced operation.

Foundation

Establish safe repository boundaries and learn the evidence-first delivery loop.

4 lessons · 105 minutes

Show 3 more Foundation lessons

Start a task with its work

Start the prepared docs task and co-locate its in-progress board transition with the bounded documentation correction.

20 minutes

Fix with evidence

Preserve a failing claimant-label regression in Git before a later minimal production repair.

30 minutes

Practitioner

Apply governed workflows to realistic features, fixes, reviews, and decisions.

8 lessons · 315 minutes

Show 7 more Practitioner lessons

Record an accepted ADR

Choose and record the Workshop Queue summary-format boundary in accepted ADR-0004 and its matching append-only decision-log entry.

35 minutes

Review a dependency without installing it

Review python-dateutil 2.9.0.post0 against frozen evidence, select the bounded standard-library alternative for finite legacy date formats, and preserve a no-install rejection record.

35 minutes

Remediate a checkpoint finding

Reproduce a genuine blocked-ticket summary defect and prove it with ordered test-only RED and code-only GREEN commits.

45 minutes

Power user

Diagnose enforcement, tune governance, and operate advanced delivery paths with proof.

7 lessons · 290 minutes

Show 6 more Power user lessons

Complete a bounded feature capstone

Use the real codeArbiter feature lane to repair one known defect, preserve its local evidence, and open the resulting feature branch as a hosted pull request.

60 minutes

How practice works

A small loop, repeated with evidence.

  1. Fork safely. Work in a repository copy you own and verify its boundaries.
  2. Follow a bounded scenario. Make only the change the lesson asks you to make.
  3. Keep the proof. Run the checkpoint and preserve the evidence it verifies.