tamperward 2.10.8 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +28 -5
  2. package/dist/cli/index.js +997 -118
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -207,8 +207,11 @@ request would need the verify label; the self-gate stays a diff-time gate.
207
207
 
208
208
  This guarantee depends on a protected and immutable base, required status checks, a
209
209
  pinned Tamperward version, and label permissions restricted to trusted humans.
210
- Tamperward provides no OS isolation, no network confinement, no secret isolation,
211
- and no semantic-correctness oracle.
210
+ The default local verifier is checkpointed same-host execution, not OS isolation.
211
+ An optional digest-pinned container backend isolates final verification with no network,
212
+ host dependency tree, HOME, temp, credential or socket sharing. Tamperward still is not a
213
+ semantic-correctness oracle, and `tamperward run` does not pretend that a same-identity
214
+ host agent is isolated from the Docker daemon.
212
215
 
213
216
  Full assumptions and residual risks: [SPEC.md](./SPEC.md),
214
217
  [SECURITY-ENVELOPE.md](./SECURITY-ENVELOPE.md), and the
@@ -246,11 +249,26 @@ verify:
246
249
  command: npm test
247
250
  budget: 300
248
251
  inputs: ['scripts/**'] # what the command DELEGATES to
252
+ # Optional stronger final-verification boundary:
253
+ # backend: container
254
+ # image: ghcr.io/acme/verifier@sha256:<64-hex-digest>
249
255
  ```
250
256
 
257
+ `backend: local` is the default and is reported as `checkpointed-local`. With
258
+ `backend: container`, the image must be digest-pinned and already present on the fixed
259
+ local Docker daemon; Tamperward never pulls during adjudication. The materialised
260
+ candidate/pristine tree is mounted read-only, the image owns runtime/dependencies,
261
+ network is disabled, HOME/tmp are private, and optional suite output belongs in
262
+ `$TAMPERWARD_OUTPUT_DIR` (`/workspace-out`). Images that declare Dockerfile
263
+ `VOLUME` paths are refused: Docker mounts those paths writable even with
264
+ `--read-only`, which would undermine the immutable verifier-image boundary. Image
265
+ `ENTRYPOINT` is also overridden; the pinned image supplies the runtime/dependencies,
266
+ while the trusted policy's `verify.command` remains the command that is adjudicated.
267
+
251
268
  That block is itself a guarded surface: changing the command, lowering the budget,
252
- narrowing `inputs`, or removing it is flagged as policy weakening — a verifier an
253
- agent can point at `true` is no verification at all.
269
+ narrowing `inputs`, removing `backend: container`, or changing its pinned image is
270
+ flagged as policy weakening — a verifier an agent can redirect is no verification at
271
+ all.
254
272
 
255
273
  `inputs` names the files the command *executes*, so the pristine run gets the
256
274
  base's copy of them too. A command token that names a file present at the base is
@@ -266,9 +284,14 @@ The four primitives:
266
284
  npx tamperward check --staged # pre-commit view
267
285
  npx tamperward check --diff "main...HEAD" # CI view over the PR's commit range
268
286
  npx tamperward verify --base main # pristine-suite re-execution
269
- npx tamperward run -- <agent command...> # the outer envelope around an agent
287
+ npx tamperward run -- <agent command...> # same-host envelope (local verifier only)
270
288
  ```
271
289
 
290
+ The isolated backend is a **frozen-artifact final verifier**. `tamperward run`
291
+ deliberately refuses `backend: container` before launching the agent because the agent
292
+ would share the host identity that controls Docker. Use isolated `tamperward verify`
293
+ from trusted CI, or after an externally isolated agent hands off the frozen candidate.
294
+
272
295
  ### CLI reference
273
296
 
274
297
  Every flag below is what the command's parser actually reads (`src/cli/index.ts`,