sprawling-runtime 0.0.12

One run of a sprawling resident, from dispatch to freeze: turns, tools, replay and the sandbox that executes code.
Documentation
[package]
name = "sprawling-runtime"
version.workspace = true
edition.workspace = true
license.workspace = true
rust-version.workspace = true
repository.workspace = true
homepage.workspace = true
publish.workspace = true
description = "One run of a sprawling resident, from dispatch to freeze: turns, tools, replay and the sandbox that executes code."

[lib]
name = "runtime"

[dependencies]
# An MCP image block carries its picture base64-encoded, and the
# connector step decodes it once to store the bytes (8-27-10).
base64.workspace = true
# Every process exec starts is configured by `child::command`: off the
# city's console, in a process group of its own, without the city's
# secrets (`crates/runtime/spec/Tools/Exec.lean` D96).
child = { workspace = true }
kernel = { workspace = true }
storage = { workspace = true }
# A picture a tool answers with travels only if its sides are read from
# its own bytes; the same decoder the browser's screenshots are measured
# with (8-27-10).
png.workspace = true
# File identity (volume and file index on Windows, device and inode
# elsewhere): `read` compares the handle it opened with the file now at
# the judged location, which std exposes only on unstable APIs.
same-file = "1"
serde.workspace = true
serde_json.workspace = true
# The sieve's filter table is a TOML file in the reserved
# subtree, and its shape has one reader.
toml.workspace = true
# Execution boundary, on the 48 LTS line (upstream supports every twelfth
# release for 24 months and the others for two), no older than 48.0.6:
# 48.0.3 cleared RUSTSEC-2026-0314, -0315 and -0316, and 48.0.6 clears the
# advisories RustSec published on 2026-10-16 against the 48 line; the line
# already carries the path_open TRUNCATE bypass fix (GHSA-2r75-cxrj-cmph)
# and the hard-link/rename FilePerms bypass fix (CVE-2026-58494). The
# floor is stated here rather than left to the lockfile, so no update can
# step back below it (`crates/runtime/Spec.lean` §8-13). wasip1 only - there is no
# socket host implementation, which is the Python arm's mechanical proof
# that it cannot reach the network.
wasmtime = { version = "48.0.6", optional = true, default-features = false, features = ["cranelift", "runtime", "std"] }
wasmtime-wasi = { version = "48.0.6", optional = true }

# One Job Object per run, so a run's whole process tree can be read
# (`crates/runtime/Spec.lean` §8-13-3); the crate's public surface is safe.
[target.'cfg(windows)'.dependencies]
win32job = { workspace = true }
# Each run's job takes a weighted CPU share through the one FFI seam
# (`crates/runtime/spec/Tools/Exec.lean` D29).
desktop_ffi = { workspace = true }
# The MSVC discovery rustc and cc use, run outside the AppContainer that
# cannot read Visual Studio's instance state; already in the lock beneath
# cc (`crates/runtime/spec/Tools/Exec/NativeWindows.lean` D60).
find-msvc-tools = "0.1.14"

[features]
wasm = ["dep:wasmtime", "dep:wasmtime-wasi"]
conformance = ["kernel/conformance"]

[dev-dependencies]
insta.workspace = true
proptest.workspace = true
tempfile.workspace = true
trybuild.workspace = true
# A10's three assertions are pinned with hand-written WAT so the gate
# needs no CPython artifact to run.
wat = "1"

[lints]
workspace = true