SIGN IN SIGN UP

docs(m170): add spec — zero-trust lease sandbox

A Fleet declaring `tools: []` currently receives every tool in the
registry, including shell. Two lines cause it: child_exec_input.zig
collapses a present-but-empty array to absent, and runner_helpers
reads absent as "no preference" and grants the default set. The
operator's declaration widens access instead of narrowing it.

Found while investigating why every dev lease died under M136_001.
The runner host carries a public address and a private-network
interface, so a Fleet reached by prompt injection on a no-tools
bundle can read host files and reach other machines.

Three fail-closed changes, one boundary: subtractive tool resolution,
a hosted allowlist this repository owns with a comptime subset proof,
and a baseline bind set narrowed to the four paths a lease needs. The
runner binary is statically linked, so removing the library and
executable trees costs nothing and leaves no executable in the sandbox.

Migration cost is zero — all six shipped bundles declare only
http_request and memory_*, proven by Dimension 2.3 before the
fallback is removed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
K
Kishore Kumar committed
24600d270a358b378eef2f6308acc5e766e3b40d
Parent: b95e0aa