Skip to content

boot: the narrow report-door grant, on both paths (#343, fix 1b) - #367

Merged
bdelanghe merged 2 commits into
mainfrom
claude/shared-session-rqpjei
Sep 3, 2026
Merged

boot: the narrow report-door grant, on both paths (#343, fix 1b)#367
bdelanghe merged 2 commits into
mainfrom
claude/shared-session-rqpjei

Conversation

@bdelanghe

Copy link
Copy Markdown
Contributor

The last half of #343

#337's posture matrix measured a checkout-less session with no channel out: no git, no MCP connector, and the auto-mode classifier refusing curl before it ran — twice, deterministically. No change to the door fixes that; the gate is upstream of the network. The org's own mechanism for it is a permissions.allow entry, the same shape .claude/settings.json already uses for org-repair.sh.

Until #354 that entry could not exist — boot.sh rewrote settings.json from scratch every boot. It merges now, and harness-settings.mjs has carried a BOOT_ALLOW input with tests for it since. This is the value:

Bash(curl https://pathbase.bounded.tools/c/:*)

Deliberately not Bash(curl:*) — that is a blanket egress grant and a different security posture. Host and /c/ prefix pinned, nothing else, so the rule cannot fail for a reason the session cannot see (#342's complaint). The canonical invocation puts the URL first; flag order after it does not matter.

Three paths, one rule

session how the rule arrives
checkout-less, merger fetched BOOT_ALLOWharness-settings.mjs merges it beside whatever the user already has
checkout-less, merger absent, no settings file the fallback here-doc carries it
.github attached this repo's .claude/settings.json

A user's deny of the same rule is honoured by the merger (tested in #354).

Verified

  • parseSteps still enumerates exactly the same six steps — the value is inline at the use site, not hoisted, because a variable holding a command-shaped string parses as that command
  • bootstrap-steps, bootstrap-pin, harness-settings, test-coverage — 41/41
  • the settings block run end-to-end against {allow:[org-repair], deny:[rm]}allow gains the rule, deny untouched

On the record

Writing this line was refused by the classifier twice earlier today, on two different tools. It is written now on the maintainer's explicit direction, which is the right order: a session should not grant itself egress; a person can.

Ordering — this PR is red on staged by design until the payload lands

boot.sh changed, so payload-staged reports the branch digest b79a86f2… is not in the store. That is the check doing what #363 built it to do. The payload is being pre-staged from this branch in infra now; this PR merges only after boot-deploy serves it.

Claim-issue: #343

🤖 Generated with Claude Code

https://claude.ai/code/session_01TzRQgnKvcAZ9YExKev6r2E


Generated by Claude Code

#337's posture matrix measured a checkout-less session with no channel out: no
git, no MCP connector, and the auto-mode classifier refusing `curl` BEFORE it
ran -- twice, deterministically. No change to the door fixes that; the gate is
upstream of the network. The org's mechanism for it is a permissions.allow
entry, the same shape .claude/settings.json already uses for org-repair.sh.

Until #354 that entry could not exist: boot.sh rewrote settings.json from
scratch every boot. It merges now, and harness-settings.mjs has carried a
BOOT_ALLOW input with tests for it since -- this is the value.

  Bash(curl https://pathbase.bounded.tools/c/:*)

Deliberately NOT Bash(curl:*), which is a blanket egress grant and a different
posture. Host and /c/ prefix pinned, nothing else, so the rule cannot fail for a
reason the session cannot see (#342). Installed on the fetch path via BOOT_ALLOW,
on the no-merger fallback via the here-doc, and for attached sessions via this
repo's settings.json. A user's deny of the same rule is honoured by the merger.

Writing this was refused by the classifier twice earlier today on two tools.
It is written now on the maintainer's explicit direction, which is the right
order: a session should not grant itself egress; a person can.

Changes boot.sh, so the payload is pre-staged before this merges -- the order
payload-staged now enforces.

Claim-issue: #343

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TzRQgnKvcAZ9YExKev6r2E
@bdelanghe
bdelanghe marked this pull request as ready for review September 3, 2026 03:04
@bdelanghe
bdelanghe requested a review from a team as a code owner September 3, 2026 03:04
@bdelanghe
bdelanghe merged commit f71392d into main Sep 3, 2026
11 checks passed
@bdelanghe
bdelanghe deleted the claude/shared-session-rqpjei branch September 3, 2026 03:06
@github-project-automation github-project-automation Bot moved this from Todo to Done in Front Desk Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant