Trust & security
Nothing runs until the sixth stage
An uploaded bundle is a stranger's code. The first five stages read it, measure it and refuse it without executing any of it — and that is a property with a test behind it rather than a promise in a document.
The six intake stages
Stage 6 is the first that executes an uploaded byte. The five before it do not.
- 01 · Receive
- Oversized bundles, and git URLs pointing at private or metadata addresses.
- 02 · Unpack
- Path traversal, symlink escape, setuid entries, zip bombs, duplicate members.
- 03 · Structure
- A bundle missing instruction.md, task.toml, tests/test.sh or a Dockerfile.
- 04 · Normalise
- A verifier the agent could reach, and resources above the tier.
- 05 · Scan
- Docker sockets, credential reads, remote code loads, tests leaked into the agent image.
- 06 · Build — first execution
- Anything that will not build rootless, behind an allowlist, pinned by digest.
The claim has a test, not a paragraph
`intake-no-exec.test.ts` walks the import graph of stages 1 to 5 and fails if anything reachable from them can reach child_process, vm, eval or a dynamic import. A property asserted by a test is one that cannot quietly stop being true.
- Why it is a graph walk
- Reading the five stages by eye proves nothing about the twentieth module they import. The test follows every edge, so a dependency added later is caught by the test rather than by an incident.
- What that buys a lab
- A bundle that is refused was never executed. The cheapest place to learn a task is unusable is before anything has run, and that is where most refusals happen.
Where it runs once it does run
Stage 6 and every trial after it.
- Rootless builds
- Images are built without a privileged daemon, on an isolated pool, from a context that is the task's own directory and not the repository root.
- Egress denied by default
- A trial reaches nothing it was not granted. The build is the one stage allowed network access by design, and it is restricted to a registry allowlist.
- Pinned by digest
- Every image a trial uses is addressed by sha256, so what ran is identifiable after the fact rather than inferred from a tag.
- The verifier is separate
- The container that writes the reward is not the container the agent worked in, so an agent cannot rewrite the thing that scores it.