Acceptance scenarios
S008 Acceptance Scenarios
S008-AS-001 Create: agent container with all constraints [P1]
Given the outcalld daemon is running and outcall-default network exists
And the image my-agent:latest is available locally
When the user runs outcall container create --image my-agent:latest
Then outcalld creates and starts a Docker container with:
- name:
outcall-<8-hex>(e.g.outcall-a3f7b201) - network:
outcall-default - bind mount:
agent.sockat/run/outcall/agent.sock(read-only) - bind mount: shim at
/usr/local/bin/outcall(read-only) - env:
HTTP_PROXY=http://<proxy-addr>,HTTPS_PROXY=http://<proxy-addr> - DNS: set to DNS filter address
- Docker network mode:
outcall-default - init: enabled
- label:
managed-by=outcalldAnd the CLI printsContainer "outcall-a3f7b201" created and started.And the command exits with code 0.
S008-AS-002 Create: host socket in bind mounts rejected [P1]
Given the outcalld daemon is running
When an API call attempts to bind the host API socket, Docker socket, a symlink to either, or a parent directory exposing either
Then outcalld rejects the request before calling the Docker API
And the error identifies the bind source and protected path
And no container is created.
S008-AS-003 List: running containers [P1]
Given the outcalld daemon is running
And two agent containers are running: outcall-a3f7b201 and outcall-c4d8e502
When the user runs outcall container list
Then the CLI prints a table of all outcall-managed containers with name, image, state, network, and creation time
And the command exits with code 0.
S008-AS-004 Stop: running container [P1]
Given the outcalld daemon is running
And container outcall-a3f7b201 is running
When the user runs outcall container stop --name outcall-a3f7b201
Then outcalld sends SIGTERM and waits up to 10 seconds
And the CLI prints Container "outcall-a3f7b201" stopped.
And the command exits with code 0.
S008-AS-005 Remove: stopped container [P1]
Given the outcalld daemon is running
And container outcall-a3f7b201 is stopped
When the user runs outcall container remove --name outcall-a3f7b201
Then outcalld removes the container
And the CLI prints Container "outcall-a3f7b201" removed.
And the command exits with code 0.
S008-AS-006 Create: network not ready [P1]
Given the outcalld daemon is running
And no outcall-managed network exists
When the user runs outcall container create --image my-agent:latest
Then the API returns an error identifying the missing or invalid network
And the command exits with code 1.
S008-AS-007 Inspect: container details [P2]
Given the outcalld daemon is running
And container outcall-a3f7b201 is running
When the user runs outcall container inspect --name outcall-a3f7b201
Then the CLI prints the container's ID, name, image, state, network, IP address, bind mounts, environment variable names with redacted values, and creation time
And the command exits with code 0.
S008-AS-008 Pull: image from registry [P2]
Given the outcalld daemon is running
And the image my-agent:latest is not available locally
When the user runs outcall container pull --image my-agent:latest
Then outcalld pulls the image from the registry
And the CLI prints Image "my-agent:latest" pulled.
And the command exits with code 0.
S008-AS-009 Daemon not running [P1]
Given the outcalld daemon is not running
When the user runs any outcall container subcommand
Then the CLI prints Error: cannot connect to outcalld at <socket> -- is it running?
And the command exits with code 1.
S008-AS-010 Docker not available [P1]
Given the outcalld daemon is running
And the Docker Engine is not reachable
When the user runs outcall container create --image my-agent:latest
Then the API returns an error indicating Docker is unavailable
And the command exits with code 1.
S008-AS-011 Graceful shutdown: containers survive [P1]
Given the outcalld daemon is running
And three agent containers are running
When outcalld receives SIGTERM
Then outcalld shuts down without stopping or removing agent containers
And all three containers remain running
And when outcalld restarts, it rediscovers them by managed-by=outcalld label.
S008-AS-012 Create: container with resource limits [P1]
Given the outcalld daemon is running and outcall-default network exists
When the user runs outcall container create --image my-agent:latest --memory 256m --cpu-shares 512
Then the container is created with a 256 MiB memory limit and 512 CPU shares
And the command exits with code 0.
S008-AS-013 Verify: bind mounts inside container [P1]
Given an agent container created with helper mounts enabled is running
When a process inside the container checks /usr/local/bin/outcall
Then the shim binary is present and executable
And when a process checks /run/outcall/agent.sock
Then the agent socket is present
And there is no path to the host socket from inside the container.
S008-AS-014 Verify: env vars inside container [P1]
Given an agent container created by outcalld is running
When a process inside the container reads HTTP_PROXY
Then it contains the HTTP proxy address
And when a process reads HTTPS_PROXY
Then it contains the HTTP proxy address
And when a process reads the DNS resolver configuration
Then it points at the DNS filter address.
S008-AS-015 Create: protected container destination rejected [P1]
Given helper mounts or daemon-managed DNS are enabled
When a caller-provided mount targets a control path or a parent directory covering it
Then outcalld rejects the request before calling Docker
And the existing shim, agent socket, and resolver configuration cannot be shadowed.
S008-AS-016 Lifecycle: unmanaged container rejected [P1]
Given a Docker container exists without managed-by=outcalld
When an operator calls Outcall inspect, stop, or remove for its name
Then the operation is rejected
And the unmanaged container remains unchanged.
S008-AS-017 Startup: Docker client exists but engine hangs [P1]
Given the Docker endpoint can be opened but _ping does not finish
When outcalld initializes the Docker Manager
Then initialization waits no more than 3 seconds
And the manager reports degraded mode
And the policy daemon continues running.
S008-AS-018 Create: partial container rollback [P1]
Given Docker creates a container but start or identity registration fails
When the create request completes
Then outcalld force-removes the partial container and anonymous volumes
And returns the original failure
And includes any rollback failure in the same error.
S008-AS-019 Pull: registry port and digest [P2]
Given an image uses registry.example:5000/team/agent:dev or an OCI digest
When the image is pulled
Then the registry port, repository, tag, and digest are sent to Docker without misparsing.