Repository navigation
REQ 103
A lane guest shall run its workload with no GitHub Actions runner configured or registered in it, driven only by the engine's lane executor from outside the guest.
This is option 3 of decision D-2 (VITechnologies/projectbuddy#165). It keeps the workload declared as data (REQ-090), lets the dispatching job's token reach the guest only if declared (REQ-093), and lets the executor switch the guest network between phases (VITechnologies/projectbuddy#182). A persistent runner attached to a public repository can run fork pull-request code; a guest with no runner offers no such target (challenge ledger row CH-04 in VITechnologies/projectbuddy#159).
The lane box receipt records a readiness scan, run in the guest before the packaged snapshot is taken and identified by the guest's boot ID, that found no runner configuration (a .runner or a .credentials file, as config.sh writes them) anywhere in the image's file system and no runner service unit (actions.runner.*). The packager refuses a readiness receipt that reports a runner or an incomplete scan. The check runs before the snapshot because a runner enabled in the image would start at each clone's first boot, before any clone check. The lane clone check repeats the service-unit check before the workload starts. No lane code path requests a runner registration or removal token. Rejected: a guest with a .runner or a .credentials file, or with an actions.runner.* unit, fails the readiness scan, and the packager refuses to package it, so it gets no box receipt; a clone whose guest shows an actions.runner.* unit is refused before the workload starts and torn down; an offline test with a stubbed GitHub API layer fails if any lane command reaches a registration-token or remove-token endpoint.
Planned, TEST-105; not yet performed live. Offline fixture tests show that a .runner file, a .credentials file, or an actions.runner.* unit fails the readiness scan, and that the packager refuses such a readiness receipt. Under a refuse clone profile, an actions.runner.* unit fails the clone check before anything runs in the guest. The lane plan, teardown, and teardown verifier run as real processes with no GitHub request, and a mutant that requests a token is caught. Tearing down a refused clone waits for the lane executor.
Software-Requirements-Specification
High
scripts/tests/test_lane_box.py readiness and packaging cases, scripts/tests/test_vagrant_clone.py runner-unit cases, scripts/tests/test_lane_plan.py TEST-105 cases, and scripts/tests/test_lane_channel.py runner-unit cases
scripts/lane_box/readiness.py, scripts/lane_box/receipt.py, scripts/vagrant_clone/core.py and scripts/vagrant_clone/live.py (runner units), scripts/lane/plan.py (the check-runner-units step), and scripts/lane/channel.py (check_runner_units, the same unit check run over the lane's SSH session)
Planned; offline fixture tests pass, no live proof yet