Operations
CI gate (.github/workflows/ci.yml)
CI runs on ubuntu-latest for every push/PR to main:
python -m py_compile agent/poll_once.py
python -c "import agent.poll_once"
python -m unittest discover -v
There is no --cov-fail-under or branch-coverage percentage gate configured in ci.yml as of
this writing — the CI gate is syntax check, import check, and unit-test pass/fail, not a
coverage threshold.
Local run
# Prerequisites: Python 3.12 and authenticated GitHub CLI
$env:GH_TOKEN = gh auth token
python -m agent.poll_once
Runner service control
cd C:\actions-runner
$serviceName = Get-Content .\.service
Get-Service -Name $serviceName
Start-Service -Name $serviceName
Stop-Service -Name $serviceName
Restart-Service -Name $serviceName
Runner health
Runner Health Monitorruns every 15 minutes on GitHub-hosted runners; if the self-hosted runner is offline it opens or updates an issue labeledrunner-offline, and sends an email alert ifSMTP_*/EMAIL_*secrets are configured.- If the health monitor cannot list runners with the default
GITHUB_TOKEN, add a repo secretRUNNER_PATwithrepoandworkflowscopes (plusread:orgfor org repos).
Other CI workflows
| Workflow | Purpose |
|---|---|
autopilot-failure-intake.yml |
Intake on workflow_run failure |
autopilot-create-issue.yml |
Issue creation via actions/github-script |
fixer.yml |
Runs the read-only queue-inventory agent on the self-hosted runner |
runner-smoke-test.yml |
On-demand runner smoke test |
runner-health.yml |
Scheduled + on-demand runner health check |
codeql.yml |
CodeQL static analysis |
pr-lint.yml |
PR metadata/title linting |
stale.yml |
Stale issue/PR sweep |
pages.yml |
Publishes docs to GitHub Pages |
Runbook path
- docs/control-plane.md — issue-queue contract with
autopilot-core. - docs/runner-setup.md — provision the worker host.
- docs/operations.md and docs/troubleshooting.md — day-2 support.