Release-note fact check — anthropic-experimental/sandbox-runtime

v0.0.64 → v0.0.65 · 31 commits · 26 files · +3142/−346 · judge: claude-cli/haiku
76minor gaps
100
correctness
claims supported
27
completeness
churn documented
80
risk
100 − flag penalties
repo: TypeScript 99% · JavaScript 1% · Shell 0% · 1.6 MB code
release cadence ~6 d
baseline (5 rel.): median churn ±7797 Churn per release (oldest → newest) v0.0.60: 70 v0.0.61: 4451 v0.0.62: 7797 v0.0.63: 10552 v0.0.64: 14212 · coverage 41% Note coverage % per release (oldest → newest) v0.0.60: 50 v0.0.61: 23 v0.0.62: 43 v0.0.63: 17 v0.0.64: 41

Score derivation — components, flag penalties and the hard cap, per SCORING.md

0255075100perfect releaseperfect release100correctness 100 × 0.45 weighted share of claims the diff supportscorrectness 100 × 0.450completeness 27 × 0.25 churn-weighted share of commits the notes covercompleteness 27 × 0.25−18.3risk 80 × 0.3 0 critical × −25 · 2 warn × −10risk 80 × 0.3−676/100 minor gaps76/100 minor gaps76

Claims at a glance

verified 7partial 0no-evidence 0contradicted 0skipped 0

Risk flags

WARN Undocumented changes in dependencies paths
package.json
commits: ebd5c4b4, a27c1a5c, e61eb723, 8d844ea8
WARN First-time author(s) changing sensitive paths (not seen in the last 5 releases): @dylan-conway
commits: a73e2abe, ebd5c4b4

Diff map — tile = file, size = changed lines, color = documentation status, amber border = sensitive path, click opens the diff

vendor/seccomp-src/apply-seccomp.c ±581 lines · evidence fns: main (click to open the compare view)apply-seccomp.ctest/sandbox/credential-mask-env.test.ts ±576 lines · covered (click to open the compare view)credential-mask-env.test.tstest/sandbox/symlinked-deny-paths.test.ts ±275 lines · covered (click to open the compare view)symlinked-deny-paths.test.tstest/sandbox/linux-violation-monitor.test.ts ±241 lines · covered (click to open the compare view)linux-violation-monitor.test.tssrc/sandbox/linux-violation-monitor.ts ±212 lines · evidence (click to open the compare view)linux-violation-monitor.tssrc/sandbox/linux-sandbox-utils.ts ±207 lines · evidence fns: LinuxSandboxParams, findSymlinkInPath, generateFilesystemArgs, wrapCommandWithSandboxLinux (click to open the compare view)linux-sandbox-utils.tssrc/sandbox/windows-sandbox-utils.ts ±207 lines · evidence fns: WindowsSandboxUserStatus, WindowsSandboxParams, wrapCommandWithSandboxWindows (click to open the compare view)windows-sandbox-utils.tstest/sandbox/winsrt.test.ts ±177 lines · evidence fns: describe, describe.if (click to open the compare view)winsrt.test.tssrc/sandbox/credential-extract.ts ±154 lines · covered (click to open the compare view)credential-extract.tssrc/sandbox/credential-mask-files.ts ±147 lines · covered (click to open the compare view)credential-mask-files.tssrc/sandbox/credential-mask-env.ts ±145 lines · covered (click to open the compare view)credential-mask-env.tstest/config-validation.test.ts ±133 lines · covered fns: describe (click to open the compare view)config-validation.test.tsrc/sandbox/sandbox-manager.ts ±78 lines · evidence fns: initialize, checkDependencies, getCredentialRestrictions, wrapWithSandbox, wrapWithSandboxArgv, reset, ISandboxManager (click to open the compare view)sandbox-manager.tsvendor/srt-win-src/src/cli.rs ±75 lines · evidence fns: read_ca_der, Drop, run (click to open the compare view)cli.rstest/sandbox/mandatory-deny-paths.test.ts ±66 lines · covered fns: describe.if (click to open the compare view)mandatory-deny-pathsrc/sandbox/mitm-ca.ts ±64 lines · evidence fns: caSubjectKeyId, writeTrustBundle, generateEmptyCrl, loadCA, generateEphemeralCA (click to open the compare view)mitm-ca.tssrc/sandbox/sandbox-config.ts ±51 lines · covered fns: z.object (click to open the compare view)sandbox-conftest/sandbox/mitm-ca.test.ts ±43 lines · covered fns: describe (click to open the compare view)vendor/srt-win-src/src/self_protect.rs ±25 lines · evidence (click to open the compare view)self_protect.rvendor/srt-win-src/src/logon.rs ±17 lines · covered fns: pump, spawn_runner (click to open the compare view)src/sandbox/mitm-leaf.ts ±5 lines · covered fns: mintLeafCert (click to open the compare view)package.json ±2 lines · undocumented · sensitive: dependencies (click to open the compare view)src/index.ts ±2 lines · evidence (click to open the compare view)test/sandbox/credential-mask-files.test.ts ±2 lines · covered (click to open the compare view)vendor/srt-win-src/ci/smoke-aces.ps1 ±2 lines · evidence (click to open the compare view)vendor/srt-win-src/src/install.rs ±1 lines · covered fns: trust_ca (click to open the compare view)
cited as evidence in documented commit undocumented unknown sensitive path (border)

Claims in detail

Notes

verified #322: feat(linux): passive seccomp USER_NOTIF observer for sandbox violations 0.99
The diff introduces a complete passive seccomp USER_NOTIF observer for Linux: (1) new `linux-violation-monitor.ts` creates a filesystem unix-socket listener that processes observed write-intent syscalls as JSON lines; (2) `linux-sandbox-utils.ts` integrates the monitor by binding its socket into the sandbox and setting SRT_OBSERVE_SOCK env var; (3) `apply-seccomp.c` implements the core observer with explicit SECCOMP_RET_USER_NOTIF filter (build_observe_bpf, send_fd/recv_fd, worker-side installat
src/sandbox/linux-sandbox-utils.ts, src/sandbox/linux-violation-monitor.ts, vendor/seccomp-src/apply-seccomp.c
fns: LinuxSandboxParams, wrapCommandWithSandboxLinux, initialize, wrapWithSandbox, reset, main
commits: 72596ff9
verified #386: mitm-ca: use native crypto.sign() instead of node-forge pure-JS RSA sign 0.99
The diff shows import of Node's native `crypto.sign` (line `import { sign as cryptoSign } from 'node:crypto'`) and two new functions—`signCertificateNative()` and `rsaSha256SignNative()`—that explicitly replace node-forge's pure-JS RSA signing with native crypto. The `generateEmptyCrl()` change replaces `key.sign(digest)` with `rsaSha256SignNative(...)`, and a test verifies byte-for-byte equivalence between the native and forge paths, confirming the claim's implementation.
src/sandbox/mitm-ca.ts
fns: caSubjectKeyId, writeTrustBundle, generateEmptyCrl, loadCA, generateEphemeralCA, mintLeafCert, describe
commits: 63b28d07
verified #375: Add extract for structured masking of env var values 0.95
The diff adds new `credential-extract.ts` implementing regex-based extraction via `extractAndSubstitute()` (lines 87-154), and `credential-mask-env.ts` integrating it into env-var masking with structured capture support (lines 99-113), plus comprehensive tests verifying the feature works for DATABASE_URL password masking and other scenarios.
fns: z.object, checkDependencies, getCredentialRestrictions, describe
commits: e36bcaf5
verified #392: Resolve symlinks in deny paths before computing bwrap masks 0.97
New function resolveSymlinkedDenyPath() (src/sandbox/linux-sandbox-utils.ts:129–200) explicitly canonicalizes deny paths through symlinks before computing masks. Integration in generateFilesystemArgs() applies this resolved path to all bwrap bind operations (line 1007: const normalizedPath = resolveSymlinkedDenyPath(rawPath)), with comments stating 'resolve-before-mask' intention. Comprehensive test suite in symlinked-deny-paths.test.ts validates symlink resolution across relative/absolute/dangl
fns: findSymlinkInPath, generateFilesystemArgs, describe.if
commits: 00da2a8d
verified #387: fix(windows): drop NO_PROXY from proxy env overlay 0.98
Code explicitly deletes both `generated.NO_PROXY` and `generated.no_proxy` from the Windows sandbox environment overlay (windows-sandbox-utils.ts lines 1263–1264), with a detailed comment explaining the Windows WFP fence behavior. The test suite verifies both variables are absent from the --env overlay (winsrt.test.ts lines 319–320), confirming the fix works as claimed.
src/sandbox/windows-sandbox-utils.ts, test/sandbox/winsrt.test.ts
fns: wrapCommandWithSandboxWindows, describe
commits: d9e28f3c
verified #388: srt-win: --quiet on exec, broker share-locks current_exe, kill-chain regression test 0.95
All three elements of the claim are directly supported by the diff: (1) `--quiet` flag parsing for exec is tested and implemented (cli.rs test `exec_quiet_flag_parses()` and winsrt.test.ts integration test); (2) broker share-locks current_exe via new `share_lock_current_exe()` function in self_protect.rs, integrated into cli.rs exec path with `--quiet` gating warnings; (3) kill-chain regression test `H-kill-chain: taskkill /F on the broker reaps the sandboxed child` comprehensively validates Job
src/sandbox/windows-sandbox-utils.ts, test/sandbox/winsrt.test.ts, vendor/srt-win-src/ci/smoke-aces.ps1, vendor/srt-win-src/src/cli.rs, vendor/srt-win-src/src/self_protect.rs
fns: WindowsSandboxParams, wrapCommandWithSandboxWindows, describe, describe.if, read_ca_der, Drop, run, trust_ca
commits: 36eb7664
verified #389: windows: collapse WindowsBinShell to {exe, args} 0.96
The diff shows WindowsBinShell changed from a discriminated union (kind: 'cmd'|'powershell'|'pwsh'|'bash'+path) to a simple two-field object {exe: string, args: readonly string[]}. This is reflected in the type definition (lines 145–149), parseWindowsBinShell refactored to return the new shape (lines 160–234), wrapCommandWithSandboxWindows simplified from a switch on sh.kind to argv.push(sh.exe, ...sh.args, p.command) (lines 1359–1360), and all tests updated to expect {exe, args} structure. The
src/index.ts, src/sandbox/sandbox-manager.ts, src/sandbox/windows-sandbox-utils.ts, test/sandbox/winsrt.test.ts
fns: wrapWithSandbox, wrapWithSandboxArgv, ISandboxManager, WindowsSandboxUserStatus, WindowsSandboxParams, wrapCommandWithSandboxWindows, describe, describe.if
commits: 6757f265

Undocumented commits

commitsubjectchurnfiles
a27c1a5cMerge main (63b28d0) into elhajj/credential-mask-env-extract+4525/−851747
3aa1c16bMove extractAndSubstitute to shared credential-extract module+156/−1473
1e714ab5Add extract and onExtractNoMatch to credential env var schema+184/−02
1ca79d4bRevert signal re-raise exit relay; keep 128+signal exit codes+28/−493
3fde8e0dDrop the disableViolationMonitoring config option+3/−313
1eefbf72test(linux): update pid-namespace-isolation for WIFSIGNALED relay+12/−41
a73e2abeci: drop chmod for a binary the build no longer produces+1/−11
e61eb723chore: bump version to 0.0.65+1/−11