Play / The map / The mandates / A CI job on a hosted runner
A CI job on a hosted runner
Check out the code, build it, run the tests, fetch what it needs, and — when a release is cut — push the tag. I did not want it reading credentials beyond its own token.
Status: starting-point · authored 2026-09-09 · the site, as a starting point — not measured, not surveyed; the first thing to argue with · edit this mandate
The delta
Against every profile this mandate applies to. ▲ is authority you did not ask for; ▼ is something you were counting on that is not there. The tally is at the bottom.
▲ excess — it can, and you did not want it to▼ shortfall — it cannot, and you wanted it to✓ aligned — it can, and you wanted it to– aligned — it cannot, and you did not want it to? it can, and the mandate does not say· it cannot, and the mandate does not say
In words
- GitHub Actions — hosted runner: no excess. Shortfall — Push to a code host (any branch it can reach).
The mandate, row by row
| Capability | Position | Note |
|---|---|---|
| Read the project it is working on | want | |
| Change the project it is working on | want | |
| Run programs as the account | want | |
| Reach any host on the internet | want | |
| Push to a code host (any branch it can reach) | want | deliberately in the mandate: most release workflows push a tag, and this profile's token is contents:read — so this row is a shortfall, and the kind the game calls ‘a gap you were counting on’ |
| Read credentials stored where it runs | do not want | |
| Delete files anywhere the account can reach | unstated | unstated: the runner is destroyed after the job |
You cannot deny the excess rows. The agent already has the access. What is left is how long you are prepared to live with each one and who says so — what to do next.