From 08c0379206a3db7cb59030e2111e1fb4e07d89bd Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Wed, 28 Oct 2026 04:26:18 -0400 Subject: [PATCH] docs(harness-ops): record the lane-permissions probes on Claude Code 2.1.312 Refs: #8737 Co-Authored-By: Claude Opus 5.5 --- ...record-lane-permissions-probes-8737a1c2.md | 5 ++++ .../skills/behavior-probes/records.md | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 .changes/harness-ops/record-lane-permissions-probes-8737a1c2.md diff --git a/.changes/harness-ops/record-lane-permissions-probes-8737a1c2.md b/.changes/harness-ops/record-lane-permissions-probes-8737a1c2.md new file mode 100644 index 00000000000..ead12be139e --- /dev/null +++ b/.changes/harness-ops/record-lane-permissions-probes-8737a1c2.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +Docs only: behavior-probes `records.md` adds record 14, the first live run of the seven `lane-permissions` cases on Claude Code 2.1.312, all passing with no stream saved. No script or case changes. diff --git a/plugins/harness-ops/skills/behavior-probes/records.md b/plugins/harness-ops/skills/behavior-probes/records.md index c0c4a755053..71cac894bec 100644 --- a/plugins/harness-ops/skills/behavior-probes/records.md +++ b/plugins/harness-ops/skills/behavior-probes/records.md @@ -289,3 +289,31 @@ this case. | Case | Expected | Observed | Verdict | |---|---|---|---| | `subagent/preloaded-skill-placeholder-reflects-session-effort` | ran, `effort=medium` | `echo effort=medium` | pass | + +## Basis for record 14 + +A live run of the `lane-permissions` area, `probe.py run --live --area lane-permissions --retries 1` +(default ceilings), with the launch above plus `--permission-mode dontAsk` and the write lane's lists +from `cases/lib/lane-write-tools.json` as `--allowedTools` and `--disallowedTools`. Linux (WSL2), +Claude Code **2.1.312**, 2026-10-28: 7 runs, no retry needed. Every case is verdict-only: no stream +was saved, `raw/` stayed empty, and every result row's tool text was blank. The recheck trigger and +expiry above apply. + +## 14. The write lane's Read deny rules keep Grep, Glob and Read out of `/proc` and `.git` + +**Claim.** Under `dontAsk` with the write lane's tool lists, `Read(//proc/**)` denies Grep and Glob +calls that reach `/proc/*/environ`, and `Read(//.git/**)` denies a Grep of the checkout's +`.git` directory and a Read of its `.git/config`. Grep and Read of a file inside the checkout run. + +**Recheck trigger.** A release note naming Read rules on Grep or Glob, `--allowedTools`, +`--disallowedTools` or `dontAsk`, or a change to the lane's lists in `collect-base-activity`. + +| Case | Expected | Observed | Verdict | +|---|---|---|---| +| `lane-permissions/grep-proc-environ-denied` | deny (rule) | deny, rule | pass | +| `lane-permissions/grep-proc-self-glob-environ-denied` | deny (rule) | deny, rule | pass | +| `lane-permissions/glob-proc-environ-denied` | deny (rule) | deny, rule | pass | +| `lane-permissions/grep-git-dir-denied` | deny (rule) | deny, rule | pass | +| `lane-permissions/read-git-config-denied` | deny (rule) | deny; seen only in `result.permission_denials`, so `unknown` | pass | +| `lane-permissions/grep-in-checkout-runs` | ran | ran | pass | +| `lane-permissions/read-in-checkout-runs` | ran | ran | pass |