v2.71.0
Released 2026-10-01.
Binaries and the merged-pull-request list are on the GitHub releases page.
The plan names its runners
Every plan job now carries index: its position in the plan, dense and
0-based, and the same every time the same intent is planned (the
topological sort is now a function of the graph alone, not of map order).
CI turns it into a runner label that pins a runner to one lane:
runs-on: [self-hosted, linux, x64, orun, "ghr-orun-job:${{ github.run_id }}-${{ matrix.index }}"]
orun plan --github-output adds index to every matrix entry, and the plan
the platform receives carries each job's index, runsOn and labels, so
the platform can map a GitHub lane back to its plan job. This is the first
milestone of
orun-managed-runners:
the gate that releases a lane only when its dependencies are done.
orun run init
orun run init --plan plan.json --exec-id "$GITHUB_RUN_ID" --remote-state
Creates (or idempotently joins) the remote run for a plan and exits without
claiming a job. A CI plan job runs it before the matrix fans out, so the
run's coordinator exists before the first lane is queued; every lane's
orun run --job … --exec-id <same id> then joins it, exactly as today when
the first lane creates it. Nothing changes for workflows that do not call
it.