seisin 0.7.0 → 0.7.1

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.
package/README.md CHANGED
@@ -524,8 +524,8 @@ of them. **[Each one, and why not a container →](https://github.com/carlostapi
524
524
  ## Status
525
525
 
526
526
  CI runs the full suite on macOS and `ubuntu-latest`, Node 18/20/22/24, on every pull request and
527
- push to `main`. On 2026-11-04, on Node 24: macOS **1134 tests, 1125 passing, 9 skipped**;
528
- Linux **1133, 1104 passing, 29 skipped**. The skips are platform tests; the job fails if the 26
527
+ push to `main`. On 2026-11-04, on Node 24: macOS **1135 tests, 1126 passing, 9 skipped**;
528
+ Linux **1134, 1105 passing, 29 skipped**. The skips are platform tests; the job fails if the 26
529
529
  core boundary tests in `test/sandbox.test.js` skip. A release is published only from CI, after
530
530
  that passes, with npm provenance. [Which claim was measured where](https://github.com/carlostapiacl/seisin/blob/main/docs/what-it-has-been-put-through.md#where-each-claim-was-actually-run),
531
531
  and [what running agents behind it cost](https://github.com/carlostapiacl/seisin/blob/main/docs/field-notes.md).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "seisin",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "description": "A permission layer for AI coding agents: role-scoped folders and keys, enforced by the OS, and when it denies something it tells you whose file it was.",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -42,7 +42,7 @@
42
42
  "node": ">=18"
43
43
  },
44
44
  "dependencies": {
45
- "@carlostapiacl/tartaros": "0.1.0-alpha.23"
45
+ "@carlostapiacl/tartaros": "0.1.0-alpha.24"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@anthropic-ai/sandbox-runtime": "0.0.81"
@@ -32,6 +32,7 @@ import { EXPECTED } from "../kinds.js";
32
32
  import { toolchainBins } from "../territory.js";
33
33
  import { writePathsOf, realOrSelf, SOCKET_MAX } from "../grants.js";
34
34
  import { runCanary, CANARY_EXIT } from "../canary.js";
35
+ import { scratchWarnings } from "../inspect/machine.js";
35
36
  import { append, logPath } from "../log.js";
36
37
  import { flagsOf } from "../help.js";
37
38
  import { WILD } from "../paths.js";
@@ -317,6 +318,12 @@ export async function run(config, argv) {
317
318
  `env ${Object.keys(env).length} kept, ${dropped.length} dropped · read ${config.read}` +
318
319
  `${observe ? ` · ${C.yellow}OBSERVING — the repo is writable, the network is NOT${C.off}${C.dim}` : ""}${C.off}\n`
319
320
  );
321
+ // `check` says this, and a run is where it costs: the role writes another role's
322
+ // files and the banner above reads as if it could not.
323
+ if (!observe) {
324
+ const around = scratchWarnings(config).find((w) => w.kind === "scratch");
325
+ if (around) err(`${C.yellow}seisin: ${around.headline}. ${around.detail}${C.off}\n`);
326
+ }
320
327
 
321
328
  // Redaction needs the output to pass through this process, and piping breaks
322
329
  // anything that draws its own screen. So it turns itself off on a terminal