Skip to content

fix: prevent Codex and Pi folder-trust stalls in pooled worktrees - #6397

Closed
kesslerio wants to merge 22 commits into
kunchenguid:mainfrom
kesslerio:fm/fm-codex-prefirstmate-worktree-trust
Closed

kesslerio wants to merge 22 commits into
kunchenguid:mainfrom
kesslerio:fm/fm-codex-prefirstmate-worktree-trust

Conversation

@kesslerio

@kesslerio kesslerio commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Intent

End the recurring first-launch stall that has cost a human keystroke on every fresh worktree today (six occurrences across three projects and both runtimes: Codex folder trust on three projects; Pi project trust on firstmate worktrees). Every newly spawned worker on a fresh treehouse worktree sits at its runtime's trust prompt until a person answers it - overnight that means idle lanes burning concurrency slots. Make Firstmate's own spawn machinery handle this: the trust decision is operator-consented launch plumbing for worktrees Firstmate itself created under its own disposable pool, so the change pre-trusts the worktree (or the repository root it belongs to) at spawn time for both runtimes Codex and Pi, instead of waiting on a human.

Boundary that must be preserved (from the home's harness-adapters skill): the FORBIDDEN variant is manufacturing consent for Codex's HOOK trust (writing Codex's trust store to pre-accept the "Hooks need review" dialog) - that stays forbidden and unautomated; the crewmate launch template already disables Codex's hook layer outright. This task covers FOLDER/project trust only: Codex's "Trust this folder?" dialog and Pi's "Trust project folder?" prompt.

What Changed

  • Automatically approve folder trust for verified Treehouse pool worktrees: register Codex repository-root trust before launch and pass session-only --approve to Pi and pi-signed. Attended checkouts retain manual approval; Codex hook trust remains unautomated.
  • Preserve Codex configuration and existing trust decisions, coordinate concurrent registrations, and ensure registration and launch use the same store, including raw commands and filtered environments.
  • Add portable and live trust regressions, isolate test stores, cover safe Herdr recovery lock timeouts, and update runtime guidance and Python prerequisites.

Risk Assessment

✅ Low: Trust automation remains scoped to qualifying linked pool worktrees, preserves the hook-trust boundary, and introduces no substantiated material defects.

Testing

Real Codex and Pi trust controls, approved launches, seeded-home behavior, registration boundaries, and hook configuration passed. Focused portable suites also passed, including raw-launch and store-selection cases. Runtime checks replay captured launch flags; dispatch matrices use fixtures. Five terminal captures are provided as rendered HTML rather than screenshots. Initial fixture-path setup failures were resolved before rerunning.

  • Live validation: ✅ go - 7 of 7 scenarios driven live against the product
Scenario Result Live Evidence
Start Codex in a fresh linked worktree: the control prompts, then Firstmate registration reaches the composer without folder approval ✅ pass live folder-trust-live.log; terminal-captures.html
Trust only an ancestor above the repository: Codex still requires folder approval ✅ pass live folder-trust-live.log; fmft-codex-above.txt
Replay Firstmate Pi launch flags: the control prompts, while per-run approval reaches the editor without persisting trust ✅ pass live folder-trust-live.log; terminal-captures.html
Start Pi in a seeded secondmate-shaped home: approval clears the prompt without rewriting trust.json; an unseeded control still prompts ✅ pass live pi-seeded-live.log
Register a qualifying pool worktree twice: registration succeeds and the second call preserves the store byte-for-byte ✅ pass live registration-boundaries.log
Attempt registration for a primary checkout, a non-pool worktree, and an explicitly denied repository: each refuses without changing the store ✅ pass live registration-boundaries.log
Give real Codex the captured worker launch flags: its consumer reports the hook layer disabled ✅ pass live hook-layer-live.log
Evidence: Five captured live runtime terminal panes

Source: Five captured live runtime terminal panes

<!doctype html><meta charset="utf-8"><title>Live trust terminal captures</title><style>body{background:#111;color:#eee}pre{font:14px monospace;white-space:pre;overflow:auto;border:1px solid #555;padding:16px}</style><h2>fmft-codex-control</h2><pre>
  Folder access
  /tmp/fm spaces.43zbhfju/fm-folder-trust-live.g2QmqC/case/wt

  Note: You’re in a subdirectory of a Git project. Trusting will apply to the repository root:
  /tmp/fm spaces.43zbhfju/fm-folder-trust-live.g2QmqC/case/project

  Trust this folder? Codex can read, edit, and run files here, subject to your permission settings. Folder settings can run code automatically, even without a
  model request. Continue only if you trust these files. Your trust decision will be saved.

› 1. Trust and continue
  2. Quit

  enter continue · esc quit































</pre><h2>fmft-codex-registered</h2><pre>
  &gt;_ OpenAI Codex (v0.159.2)
     /tmp/fm spaces.43zbhfju/fm-folder-trust-live.g2QmqC/case/wt
  permissions: YOLO mode

  Ah, the terminal. A classic meeting spot.








                                                                           ⣀⣤⣤⣤⣀⣀
                                                                        ⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⣦⣤⣤⣤⣤⣤⣤⡀
                                                                      ⢀⣾⣿⣿⠿⠋⠉⠉⢉⣭⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣷⣄
                                                                     ⣀⣾⣿⣿⠃ ⣀⣴⣾⣿⣿⡿⠟⠋ ⣀⡀ ⠈⠙⢿⣿⣿⣧
                                                                  ⣀⣶⣿⣿⣿⣿⡇ ⢸⣿⣿⡿⠛⠉⢀⣠⣴⣿⣿⣿⣷⣦⣀⠈⢻⣿⣿⡇
                                                                 ⣰⣿⣿⡿⢿⣿⣿⡇ ⢸⣿⣿⢀⣤⣶⣿⣿⣿⠟⠛⠻⣿⣿⣿⣿⣮⣿⣿⡷
                                                                ⢰⣿⣿⡟⠁⢸⣿⣿⡇ ⢸⣿⣿⣿⣿⠿⠿⣿⣿⣿⣦⣄⡀⠈⠛⠿⣿⣿⣿⣧⡀
                                                                ⣾⣿⣿⠃ ⢸⣿⣿⡇ ⢸⣿⣿⠋⠁  ⠈⠙⢻⣿⣿⣿⣶⣤⡀ ⠹⢿⣿⣷⡄
                                                                ⢸⣿⣿⣇ ⠸⣿⣿⣷⣦⣼⣿⣿      ⢸⣿⣿⠻⢿⣿⣿⡇ ⠘⣿⣿⣿
                                                                ⠈⢿⣿⣿⣦⡀⠈⠛⠿⣿⣿⣿⣿⣄⡀  ⢀⣠⣼⣿⣿  ⣿⣿⡇  ⣿⣿⣿⠇
                                                                  ⢻⣿⣿⣿⣷⣦⣀⠈⠙⠻⣿⣿⣿⣶⣶⣿⣿⣿⣿⣿  ⣿⣿⡇ ⣠⣿⣿⣿
                                                                  ⢸⣿⣿⡿⢿⣿⣿⣿⣦⣠⣴⣿⣿⣿⡿⠟⠋⢸⣿⣿  ⣿⣿⣷⣴⣿⣿⣿⠃
                                                                  ⠘⣿⣿⣷ ⠈⠛⢿⣿⣿⣿⠿⠋⠉ ⣠⣴⣿⣿⣿  ⣿⣿⣿⣿⣿⠟⠁
                                                                   ⠻⣿⣿⣿⣤⣀ ⠈⠉ ⢀⣤⣶⣿⣿⣿⠿⠟⠁ ⣰⣿⣿⡟⠋⠁
                                                                    ⠈⠿⣿⣿⣿⣿⣶⣾⣿⣿⣿⣿⠟⠋⠁  ⣠⣼⣿⣿⡟
                                                                       ⠙⠛⠛⠛⠻⠛⢿⣿⣿⣿⣿⣷⣾⣿⣿⣿⡿⠏
                                                                              ⠈⠙⠛⠿⠿⠿⠿⠛⠉










› Ask Codex to do anything

  GPT-6.1-Sol default · /tmp/fm spaces.43zbhfju/fm-folder-trust-live.g2QmqC/case/wt
  ? for shortcuts                                                                                                                      ⚠ 1 warning · f2 to view
</pre><h2>fmft-codex-above</h2><pre>
  Folder access
  /tmp/fm spaces.43zbhfju/fm-folder-trust-live.g2QmqC/case/ancestor/worktrees/fresh

  Note: You’re in a subdirectory of a Git project. Trusting will apply to the repository root:
  /tmp/fm spaces.43zbhfju/fm-folder-trust-live.g2QmqC/case/ancestor/repository

  Trust this folder? Codex can read, edit, and run files here, subject to your permission settings. Folder settings can run code automatically, even without a
  model request. Continue only if you trust these files. Your trust decision will be saved.

› 1. Trust and continue
  2. Quit

  enter continue · esc quit































</pre><h2>fmft-pi-control</h2><pre>────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

 Trust project folder?
 /tmp/fm spaces.43zbhfju/fm-folder-trust-live.g2QmqC/case/pi-wt

 This allows pi to load .pi settings and resources, install missing project packages, and execute project extensions.

 → Trust
   Trust parent folder (/tmp/fm spaces.43zbhfju/fm-folder-trust-live.g2QmqC/case)
   Trust (this session only)
   Do not trust
   Do not trust (this session only)

 ↑↓ navigate  enter select  escape/ctrl+c cancel

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────





























</pre><h2>fmft-pi-approved</h2><pre>
 ▀▀█  v1.0.2
 █▀ █ escape interrupt · ctrl+c/ctrl+d clear/exit · / commands · ! bash · ctrl+o more
 Press ctrl+o to show full startup help and loaded resources.

 Pi can explain its own features and look up its docs. Ask it how to use or extend Pi.

[Skills]
  impeccable, kb, no-mistakes

[Extensions]
  pi-live.pi-ext.ts


 Warning: Anthropic subscription auth is active. Third-party harness usage draws from extra usage and is billed per token, not your Claude plan limits. Manage
 extra usage at https://claude.ai/settings/usage. Disable this warning in /settings.

 Warning: tmux extended-keys is off. Modified Enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.






















────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
/tmp/fm spaces.43zbhfju/fm-folder-trust-live.g2QmqC/case/pi-wt
$0.000 (sub) 0.0%/1.0M (auto)                                                                                               (anthropic) claude-opus-4-8 • medium
</pre>
Evidence: Live folder-trust controls and approved launches

Source: Live folder-trust controls and approved launches

ok - live: codex codex-cli 0.159.2 gates an unregistered fresh worktree on the folder-trust dialog
ok - live: codex codex-cli 0.159.2 launches into a pre-registered fresh worktree with no dialog
ok - live: codex codex-cli 0.159.2 keys folder trust on the repository root, not an ancestor
ok - live: pi 1.0.2 gates an untrusted fresh directory on the project-trust prompt
ok - live: pi 1.0.2 launches with --approve, shows no prompt, and persists nothing
Evidence: Registration refusals and preserved operator denial

Source: Registration refusals and preserved operator denial


$ fm-codex-trust.sh ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/wt ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project
trusted: ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project
exit=0

$ fm-codex-trust.sh ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/wt ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project
trusted: ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project
exit=0

$ fm-codex-trust.sh ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project
error: refusing to pre-register Codex folder trust: '~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project' is a primary checkout, not an isolated worktree; approve its folder trust during attended provisioning
exit=1

$ fm-codex-trust.sh ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/wt ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project
error: refusing to pre-register Codex folder trust: '~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/wt' is not a qualifying linked pool worktree; approve its folder trust during attended provisioning
exit=1

$ fm-codex-trust.sh ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/wt ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project
error: ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/store/config.toml already records trust_level = 'untrusted' for ~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project; refusing to overwrite that decision
error: refusing to pre-register Codex folder trust: could not record folder trust for '~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project' in '~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/store/config.toml'
exit=1

Persisted operator denial preserved:
[projects."~/.no-mistakes/worktrees/0d0ef57a8e94/01M3YYK7P4G7RPC6D0H6B5QFQS/.trust-manual/pool/case/project"]
trust_level = "untrusted"
Evidence: Seeded Pi home live controls

Source: Seeded Pi home live controls

# live pi version: 1.0.2
ok - fresh seeded Pi secondmate-shaped home stalls on Trust project folder? without --approve
ok - seeded home with --approve starts past the trust dialog without rewriting trust.json
ok - unseeded path without --approve still prompts on Trust project folder?
# all fm-pi-seeded-home-trust-live-e2e checks passed (3)
Evidence: Real Codex hook-layer configuration

Source: Real Codex hook-layer configuration

ok - codex codex-cli 0.159.2 still publishes the hook feature flag firstmate disables
ok - codex codex-cli 0.159.2 runs a firstmate crewmate launch with its hook layer disabled
# all fm-codex-hook-layer-live-e2e tests passed

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

✅ **Review** - passed

✅ No issues found.

✅ No issues found.

✅ **Test** - passed

✅ No issues found.

  • Live validation: ✅ go - 7 of 8 scenarios driven live against the product
Scenario Result Live Evidence
Launch Codex in a fresh linked worktree: registration removes the folder prompt and reaches the editor ✅ pass live folder-trust-live.log; runtime-panes.png
Trust an ancestor above the repository: Codex still requires folder approval ✅ pass live folder-trust-live.log
Attempt registration for a primary checkout or subdirectory: both are refused without changing the trust store ✅ pass live direct-registration.log
Launch Pi with scoped approval: the prompt disappears, the editor starts, and no trust decision is persisted ✅ pass live folder-trust-live.log; runtime-panes.png
Consume Firstmate worker flags with real Codex: the hook feature remains disabled ✅ pass live hook-layer-live.log
Run live trust checks with temporary paths containing spaces: both runtime replay commands start successfully ✅ pass live folder-trust-live.log
Select stores without runtime logins: the live guard exits successfully and records each skip reason ✅ pass live no-login.log
Launch the actual Pi-signed executable past project trust ⏸️ untested no pi-signed is absent from PATH and no repository-local executable is supplied. Plain Pi was exercised live, and portable tests exercised signed launch arguments and missing-executable refusal. Those ca…
  • bash tests/fm-folder-trust-live-e2e.test.sh with a disposable TMPDIR containing spaces
  • bash tests/fm-codex-trust.test.sh with an isolated evidence-directory TMPDIR
  • Eight focused Codex/Pi dispatch cases executed from tests/fm-spawn-dispatch-profile.test.sh
  • bash tests/fm-codex-hook-layer-live-e2e.test.sh
  • Live guard invoked with explicitly selected stores lacking authentication
  • Manual real Codex/Pi launches on a private tmux socket with a 140×40 grid; pane captures, denied registration calls, and unchanged-store assertions
  • Rendered captured panes with headless Chromium and inspected the screenshot
  • Initial worktree-local fixtures were re-driven after socket-length and secondmate-location setup failures; the broader dispatch run reached its time limit and was replaced by focused cases
  • Removed disposable fixtures and verified the worktree was clean and owned test processes had stopped

✅ No issues found.

  • Live validation: ✅ go - 7 of 7 scenarios driven live against the product
Scenario Result Live Evidence
Start Codex in a fresh linked worktree: the control prompts, then Firstmate registration reaches the composer without folder approval ✅ pass live folder-trust-live.log; terminal-captures.html
Trust only an ancestor above the repository: Codex still requires folder approval ✅ pass live folder-trust-live.log; fmft-codex-above.txt
Replay Firstmate Pi launch flags: the control prompts, while per-run approval reaches the editor without persisting trust ✅ pass live folder-trust-live.log; terminal-captures.html
Start Pi in a seeded secondmate-shaped home: approval clears the prompt without rewriting trust.json; an unseeded control still prompts ✅ pass live pi-seeded-live.log
Register a qualifying pool worktree twice: registration succeeds and the second call preserves the store byte-for-byte ✅ pass live registration-boundaries.log
Attempt registration for a primary checkout, a non-pool worktree, and an explicitly denied repository: each refuses without changing the store ✅ pass live registration-boundaries.log
Give real Codex the captured worker launch flags: its consumer reports the hook layer disabled ✅ pass live hook-layer-live.log
  • timeout -k 5s 240s bash tests/fm-codex-trust.test.sh
  • timeout -k 5s 240s bash tests/fm-spawn-dispatch-profile.test.sh
  • python3 ~/.no-mistakes/evidence/01M3YYK7P4G7RPC6D0H6B5QFQS/drive-live.py — runs the real folder-trust guard with TMPDIR containing spaces and captures private tmux panes
  • timeout -k 5s 90s bash tests/fm-codex-hook-layer-live-e2e.test.sh
  • timeout -k 5s 90s bash tests/fm-pi-seeded-home-trust-live-e2e.test.sh
  • Direct bin/fm-codex-trust.sh invocations against disposable Git repositories and stores, with exit-code and byte-preservation checks
  • Run tests/fm-folder-trust-live-e2e.test.sh with both credential stores explicitly pointing to an empty fixture; verified successful exit and recorded skip reasons
  • Initial workspace-local TMPDIR attempts exposed fixture placement and Unix socket-length constraints; reruns using normal short disposable test paths passed
  • Removed transient workspace fixtures and verified git status --short was clean
✅ **Document** - passed

✅ No issues found.

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

✅ No issues found.

@greptile-apps

greptile-apps Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[High risk] Adds automatic folder-trust registration for Codex and Pi spawns.

The PR appears safe to merge, with a non-blocking lint-coverage gap when source-aware analysis exhausts memory.

Reviews (7) · Last reviewed commit: "no-mistakes(document): Correct Python pr..."

Comment thread bin/fm-spawn.sh
Comment thread tests/fm-folder-trust-live-e2e.test.sh Outdated
Comment on lines +296 to +312
if [ -r "$CODEX_AUTH_FILE" ]; then
# Codex needs a login to reach its composer; an auth-less start cannot prove
# that folder trust was accepted. All replay writes stay in this test store.
mkdir -p "$CODEX_HOME_DIR"
ln -s "$CODEX_AUTH_FILE" "$CODEX_HOME_DIR/auth.json"
# Silence the update nag so the only modal is the one under test.
printf 'check_for_update_on_startup = false\n' > "$CODEX_HOME_DIR/config.toml"
CODEX_LAUNCH=$(capture_launch codex-live codex)
CODEX_FLAGS=$(global_flags codex "$CODEX_LAUNCH") || fail "refusing unsafe Codex replay flags"
test_codex_dialog_gates_an_unregistered_worktree
test_codex_trust_script_removes_the_dialog
test_codex_root_entry_is_the_narrow_key
else
printf 'skip: live: codex folder trust: no readable login at %s\n' "$CODEX_AUTH_FILE"
fi

if [ -r "$PI_AUTH_DIR/auth.json" ]; then

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Usable logins skip live checks

If Codex or Pi can authenticate through environment variables but has no readable auth.json, these checks skip that runtime even though it could reach the editor. A default-on test run can therefore pass without checking the folder-trust behavior it is meant to guard.

Comment thread docs/configuration.md
@@ -1236,12 +1236,15 @@ Every home requires:
- chrome-devtools-axi.
- Compatible tasks-axi, as specified in "Backlog backend" above.
- Compatible quota-axi.
- `python3` for the home's backlog tooling and raw launch-command parsing, including raw Pi and Claude launches.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Python requirement goes unchecked

This adds python3 to the universal requirements, but session-start tool detection does not check for it. On a home without Python, bootstrap can report the toolchain ready, only for a raw launch to fail during parsing instead of receiving the documented missing-tool diagnostic.

@kesslerio
kesslerio force-pushed the fm/fm-codex-prefirstmate-worktree-trust branch from d4a2978 to fbb6c77 Compare October 2, 2026 17:50
@kesslerio kesslerio changed the title fix: prevent folder trust stalls for pooled Codex and Pi workers fix: prevent Codex and Pi folder trust stalls in pooled worktrees Oct 2, 2026
@kesslerio kesslerio changed the title fix: prevent Codex and Pi folder trust stalls in pooled worktrees fix: prevent Codex and Pi trust stalls in pooled worktrees Oct 2, 2026
Firstmate and others added 22 commits October 4, 2026 03:24
Every fresh pool slot is a directory neither Codex nor Pi has seen, and both
stopped there waiting for a person to press Enter, so an otherwise unattended
spawn cost one human keystroke per worktree per runtime.

Codex persists folder trust for the repository root, and an answer given inside
a linked worktree writes that root entry, so bin/fm-codex-trust.sh registers
exactly the same entry ahead of a codex launch: one write per project rather
than one per slot, and never the hook-trust store, whose modal stays
unautomated and whose layer the crewmate launch still disables.

Pi keys project trust per directory and documents a per-run decision for
automated runs, so the pi launch now carries --approve instead of a store entry
this repo would have to hand-edit. It persists nothing, so trust.json keeps
holding only decisions a person actually made, and a worker account pin cannot
point a writer at the wrong store.

tests/fm-codex-trust.test.sh pins the store write, its preservation of the
operator's own config, and each structural refusal; the new
tests/fm-folder-trust-live-e2e.test.sh refreshes both vendor facts against the
installed binaries, including the control that an unregistered worktree really
does still render the dialog.
…ion and encoded the heredoc backtick that broke Bash 3.2 parsing. Pinned lint, both focused behavior suites, and all 455 script parse checks passed under Bash 5.3. Bash 3.2 is unavailable on PATH, so macOS verification remains pending
…orded reasons and documented the accepted python3 prerequisite and rationale. Regression reproduction, focused trust suite, pinned lint, and documentation checks passed. The installed-binary no-login run exited cleanly; authenticated live panes were not exercised. Required PR-description text is prepared in state/ci-pr-description.md for the outer executor
…fy safe lock refusal and wait for both workers before cleanup. Controlled contention failed before the fix and passed afterward. The full presentation suite, pinned ShellCheck, and syntax checks passed locally on Herdr 0.9.3; CI’s 0.7.4 remains unverified locally
… while preserving linked-pool-only trust. All 109 focused cases, pinned lint, documentation, and coverage checks passed. The unchanged relay CI failure remains unverified: NUL handling passed locally, but missing openssl blocked full reproduction
@kesslerio
kesslerio force-pushed the fm/fm-codex-prefirstmate-worktree-trust branch from 26428bd to ed25e1f Compare October 4, 2026 10:36
@kesslerio kesslerio changed the title fix: prevent Codex and Pi trust stalls in pooled worktrees fix: prevent Codex and Pi folder-trust stalls in pooled worktrees Oct 4, 2026
@kesslerio

Copy link
Copy Markdown
Contributor Author

Closing this one, since both halves already have issues with PRs attached: Pi folder trust is #6084 (#4684), and Codex directory trust is #6519, where triage asked to extend #5067 instead of opening a competing PR. This branch also conflicts with main now. I added what my live runs showed about repository-root trust to #6519, and the branch stays on my fork.

@kesslerio kesslerio closed this Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant