Repository navigation
Cloud Builder safety: coord scripts refuse under CLAUDE_CODE_REMOTE, ensure-venv on Linux, CLAUDE.md cloud rule - #2434
Conversation
In a cloud VM --git-common-dir resolves to the clone's own .git, so seat.ps1, mail.ps1, alloc.ps1 and claim.ps1 would "succeed" into a mefor-coord directory no other session reads. Each now prints one stderr line and exits 3 when CLAUDE_CODE_REMOTE=true. seat.ps1 exempts its two hook paths, -Record and -Prompt, which must exit 0. The SessionStart declare-prompt hook prints a one-line cloud-Builder notice instead of the prompt, stamps nothing, and still exits 0. tests/conftest.py drops an inherited CLAUDE_CODE_REMOTE so the existing pwsh suites keep testing the local path inside a cloud VM. New tests/test_coord_cloud_refusal.py pairs each refusal with a control that takes the normal path.
It hardcoded .venv\Scripts\python.exe, so it failed on a Claude Code cloud VM even with pwsh installed. It now uses .venv/bin/python off Windows, judged by [Environment]::OSVersion so Windows PowerShell 5.1 (no $IsWindows) still reads as Windows, and defaults -Python to python3 there. The install line is unchanged, so both parity tests hold. tests/test_worktree_ensure_venv.py drops its Windows-only gate and builds the fixture's site-packages path per platform, so the ubuntu legs, which carry pwsh, drive the bin/python branch.
Section 5 gains one rule: a Claude Code cloud session is a Builder in its own session, on MEFORORG/MessageFoundry alone and never with a second repository attached, because a multi-repo session loads no project hooks. It opens its PR over REST, since the proxy refuses GraphQL, and hands it to the Lander with the qa label and a PR comment, not mail. Evidence: probe PR 2432 and wiki note 20261018T215116801Z-5lqiqo.
The ubuntu tooling leg errored in the fixture: the template's commit detached background maintenance, whose .git/objects/maintenance.lock vanished while copytree walked it. The template now sets maintenance.auto=false and gc.auto=0, and the per-test copy skips *.lock files.
|
Lander: enqueued at f9e7726, pinned.
|
|
CI failed in Its own head can still be green: the queue revalidates the merge, and the path gates that skip on a pull request run there. Read the run before retrying. https://github.com/MEFORORG/MessageFoundry/actions/runs/39328796441 |
|
Queue ejection triage (author): the one failure in run 39328796441 is |
Makes the repo's tooling safe for a Claude Code cloud Builder session (
CLAUDE_CODE_REMOTE=true). Three layers, one per commit.seat.ps1,mail.ps1,alloc.ps1andclaim.ps1print one stderr line and exit 3.seat.ps1exempts its two hook paths,-Recordand-Prompt.seat-declare-prompt.ps1prints a one-line cloud-Builder notice instead of the prompt, stamps nothing, and still exits 0. The reason: in a cloud VM,--git-common-dirresolves to the clone's own.git, so these scripts would otherwise "succeed" into amefor-coordnobody reads (fleet wiki note20261018T215116801Z-5lqiqo).tests/conftest.pydrops an inheritedCLAUDE_CODE_REMOTE, so the existing pwsh suites keep testing the local path inside a cloud VM. The newtests/test_coord_cloud_refusal.pypairs each refusal with a control that takes the normal path.ensure-venv.ps1works on Linux. It uses.venv/bin/pythonoff Windows. On Linux-Pythondefaults topython3.14when that is on PATH, otherwise topython3. The install line is unchanged, so both parity tests still pass.tests/test_worktree_ensure_venv.pyloses its Windows-only gate, so the ubuntu tooling leg now drives thebin/pythonbranch.qalabel and a PR comment.claim.ps1refuses in the cloud.Not changed:
.claude/settings.jsonhooks, and noonFailure: block. Related: PR 2433 adds the cloud SessionStart setup hook. Its file set does not overlap this one except possibly attests/tooling_manifest.txt, on different lines.Checks run locally (Windows):
ruff checkandruff format --check.test_coord_cloud_refusal,test_worktree_ensure_venv, both venv parity tests,test_tooling_partition,test_coord_seat_prompt,test_session_mail,test_coord_alloc_reentrancy,test_coord_claim_refresh,test_precompact_reprime_hook,test_coord_handoff_clear,test_coord_seat_session_key, and the 125 test files that read CLAUDE.md.-n 8(test_sandboxrelay-thread). It passes alone.Read on CI: the ubuntu
repo harness testsleg. It is the first run oftest_worktree_ensure_venv.pyand of the cloud refusal tests on Linux, and nothing local covered Linux.Follow-up, not in this PR: other
mefor-coordwriters still dead-letter in a cloud VM:handoff.ps1,lane.ps1,lock.ps1,owner_log.py, and the korus wikiwrite.ps1. The deeper fix is one shared coord-root resolver that refuses underCLAUDE_CODE_REMOTE.QA -- korus roles/BUILDER.md step 11
Level: xhigh, from the brief. Tag:
xhigh effort → 10 inline angles → dedup (no verify) → sweep → ≤15 findings.Rounds: 1. Findings: 6 reported; 5 fixed (Linux-unproven -Record test now Windows-gated, Linux python3 default below 3.14, claim-gate deadlock and git identity missing from the CLAUDE.md rule, brittle exit-3 count); 1 skipped as the follow-up above; 0 open.