You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SubprocessRunner (0.1.x #4) is fine for development but insufficient for reproducibility. the framework's replication package must pin the execution environment by container digest. DockerRunner fills that need: users supply a Dockerfile, AgentAnvil pins the built image by sha256:... digest, and every run records the digest it actually used.
Three concrete requirements:
1. User-supplied Dockerfile. AgentAnvil does not generate Dockerfiles (explicit non-goal, the planning notes). The user gives AgentAnvil a path to a Dockerfile or a pre-built image reference.
2. Digest pinning. On first run, AgentAnvil resolves the image to its digest (docker inspect --format='{{.Id}}') and stores it in the RunnerResult. Subsequent runs verify the digest matches; mismatch is fatal.
3. Mount points for recordings and replay. A ./recordings/ directory inside the container is mountable from outside so RecordingBackend can persist.
Description
SubprocessRunner(0.1.x #4) is fine for development but insufficient for reproducibility. the framework's replication package must pin the execution environment by container digest.DockerRunnerfills that need: users supply aDockerfile, AgentAnvil pins the built image bysha256:...digest, and every run records the digest it actually used.Three concrete requirements:
1. User-supplied Dockerfile. AgentAnvil does not generate Dockerfiles (explicit non-goal, the planning notes). The user gives AgentAnvil a path to a Dockerfile or a pre-built image reference.
2. Digest pinning. On first run, AgentAnvil resolves the image to its digest (
docker inspect --format='{{.Id}}') and stores it in theRunnerResult. Subsequent runs verify the digest matches; mismatch is fatal.3. Mount points for recordings and replay. A
./recordings/directory inside the container is mountable from outside soRecordingBackendcan persist.Proposal
1.
DockerRunnerclass:2. Digest verification:
3. Integration with
RunRecord:RunnerResult.image_digestflows intoRunRecord.metadata.container_digest. Replay uses that digest by default.Scope
src/agentanvil/runner/docker.py— new.src/agentanvil/runner/__init__.py— exportDockerRunner.tests/runner/test_docker.py— integration tests (optional nightly CI).tests/fixtures/docker_agents/echo/Dockerfile— toy fixture.docs/runner-docker.md— user guide.Regression tests
test_docker_runner_builds_from_dockerfile_and_resolves_digesttest_docker_runner_uses_prebuilt_image_reftest_docker_runner_verify_digest_fails_on_drifttest_docker_runner_records_digest_in_resulttest_docker_runner_honours_timeouttest_docker_runner_mounts_recordings_directorytest_docker_runner_network_none_by_defaultNotes
agentanvil[docker]installsdocker>=7.0.network=none— reproducible runs should not depend on outbound network. Users override per run if needed.